Neues Thema schreiben   Antworten     zurück Suche   Druckansicht  
Thema: Automatisierung des Abgleiches von Fehllisten und Dublettenlisten
robste1987 Am: 29.03.2023 10:48:24 Gelesen: 662# 1 @  
Wenn ich tausche ist es oft eher mühsam Fehllisten mit meinen Dubletten abzugleichen. Es dauert lange, weil man sich in das Layout und Konzept oft eindenken muss, dann muss man noch genau aufschreiben welche Briefmarken man gefunden hat. Und nach spätestens einer Stunde braucht man oft eine Pause, weil man sonst wegen mangelnder Konzentration Fehler macht. Es gibt eigentlich genug Grundlagen und das mit einem Computer zu automatisieren, hier ein ganz schnell gebasteltes Beispiel mit zur Veranschaulichung

Python 3.11.2 (main, Feb 8 2023, 00:00:00) [GCC 12.2.1 20221121 (Red Hat 12.2.1-4)]
Type 'copyright', 'credits' or 'license' for more information
IPython 8.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: dubletten_deutschland_anton = {112, 363, 1119, 1421, 2402,2403,2404,2405, 2406,3727, "Block 3", "Block 17"}

In [2]: fehlliste_deutschland_adrea = {120, 1119, 3727, 2403,2405, 3730, "Block 2", "Block 17"}

In [3]: anton_an_andrea = fehlliste_deutschland_adrea.intersection(dubletten_deutschland_anton)

In [4]: print (anton_an_andrea)
{2403, 2405, 'Block 17', 3727, 1119}
 


Hier sind es nur sehr kurze Dubletten und Gesuchte, das ginge aber mit beliebig vielen. Das das Ergebnis nicht sortiert ist, lässt sich beheben.

Für die mathematisch interessierten: Der Computer betrachtet die Katalognummern als Elemente von Mengen. Aus diesen Mengen wird dann die Schnittmenge (englisch: intersection) gebildet.
Mengen sind in der Mathematik nicht sortiert, aber man kann ihre Elemente leicht separat sortieren.
Damit eine solche Automatisierung Sinn macht:

* müssten möglichst viele eine Sammler auch eine Liste ihrer Dubletten haben
* müssten sich beide an ein recht striktes Datenformat ohne Schnickschnack halten
* müssen sich beide von Excel & Co. und Listen auf Papier verabschieden und eine spezielle Software nutzen

Wenn der bisher zeitraubende Abgleich von solchen Listen extrem schnell geht, macht das Tauschen sicherlich mehr Spaß und es gibt mehr Tauschgelegenheiten. Wenn es wenig Tauschgelegenheiten gibt, macht es aber wenig Sinn so ein Programm zu entwickeln und alle seine Dubletten trotz geringem Katalogwert zu katalogisieren. Damit wäre man dann bei einem klassischen Henne-Ei-Problem.

Was meint Ihr?
 

Henry Am: 30.03.2023 18:43:03 Gelesen: 611# 2 @  
Ich finde es toll, wenn sich jemand um die Lösung solcher Probleme kümmert. Deine Idee halte ich aber nicht für sehr tragfähig, was aber an meinem Alter liegen mag. Ich gehöre zu den Jahrgängen, die langsam an die Auflösung der Sammlung denken. Und da liegt der Hase im Pfeffer:

1.) Die Umfänge der Dubletten erfordern einen großen Zeitaufwand für die Erfassung. Und nach jedem Tausch muss sowohl Bestands- wie auch Fehlliste wieder überarbeitet werden, damit der Abgleich funktionieren kann.

2.) Für Tauschkontakte ist es sicher nicht besonders zielführend, besonders lange Listen zu bearbeiten. Es werden da ja auch eher kleinere Mengen auf den Postweg gegeben. Folglich kann man auch mit kürzeren Listen und mehreren Sendungen zurechtkommen, was die Kontaktkontinuität fördert.

3.) Das Verfahren ist ja nur anwendbar, wenn es von zu Hause aus betrieben wird. Für Tauschtage oder zur Mitführung auf Messen kann ich es mir nicht vorstellen.

Fazit: Ich persönlich könnte mich mit solch einem Programm nicht richtig anfreunden, weil es eigentlich die Arbeit mit den Marken nur auf den Bildschirm verlagert. Und das "Bildschirm-Sammeln" ist halt nicht so mein Ding.

Ich hoffe, es ist verständlich, was ich sagen will und bitte nicht böse sein wegen dieser Meinung.

Mit philatelistischem Gruß
Henry
 
robste1987 Am: 30.03.2023 23:26:13 Gelesen: 591# 3 @  
@ Henry [#2]

Hallo Henry,

ich bin dir überhaupt nicht böse. Es gibt keinen Grund böse zu sein, wenn man eine ehrliche Rückmeldung und konstruktive Kritik bekommt. Es bringt ja auch nichts, wenn man viel Zeit und Nerven in die Entwicklung von etwas steckt was dann niemand nutzt.

Das Aktualisieren der Listen (Punkt 1) könnte gleich mit erledigt werden, indem die zu Tauschenden Marken aus den Listen nach Nachfrage entfernt werden können. Wenn man das Programm auch auf einem Smartphone nutzen und idealerweise die Listen auch per Bluetooth oder WLAN übertragen könnte, wäre auch ein Einsatz auf einem Tauschtag denkbar (Punkt 3). Da ist aber zusätzlicher Entwicklungsaufwand. Da ich viel mit Sammlern aus Osteuropa und Taiwan/USA tausche, hatte ich klassische Tauschtage eher weniger im Kopf.

Die Punkte

* Sammlungsauflösung
* Zeitaufwand für Erfassung
* ungeliebte Bildschirmarbeit
* Kontakte halten durch mehrere Kleine Tausche statt einen großen Tausch
Sind alle sehr verständlich und für sie gibt es meines Erachtens keine technische Lösung.

Wahrscheinlich werde ich so ein Programm nur für mich selbst schreiben. Dann muss es nicht so schick sein und ich spare Zeit wenn ich mal per e-Mail wieder eine Monsterfehlliste von mehreren DinA4 Seiten erhalte. Vielleicht ist es für die Zukunft auch irgendwann möglich, dass auf dem Server der Philaseiten die hochgeladenen Fehllisten und Dublettenlisten abgeglichen werden können.
 
robste1987 Am: 01.04.2023 11:11:52 Gelesen: 561# 4 @  
Ich habe noch einmal darüber nachgedacht.

Ich werde bald in meiner Freizeit beginnen das Programm zu schreiben. Ich kann es für mich selbst gebrauchen und möchte mal was eigenes Programmieren.

Wer Interesse hat sich an der Programmierung zu beteiligen oder das Programm schon ausprobieren möchte während es sich noch in der Entwicklung befindet, kann mir gerne eine e-mail senden (ist hinterlegt).

Wenn das Programm was wird, kann Richard es ja immer noch in die Philaseiten übernehmen wenn er möchte.
 
drmoeller_neuss Am: 01.04.2023 21:25:18 Gelesen: 535# 5 @  
@ robste1987 [#4]

Das Problem ist eine Programmieraufgabe aus den ersten Grundvorlesungen in Informatik.

Die Lösung passt für die meisten Programmiersprachen:

Die Katalognummern der Dubletten- und Fehlliste in jeweils getrennte Arrays einlesen, dann das erste Array mit einer For-Each-Schleife durchlaufen und das jeweilige Element mit einer For-Each-Schleife im zweiten Array suchen. Dann abbrechen, wenn das Element in der zweiten Liste gefunden wurde. Dann das Element in das Zielarray schreiben.

Informatiker philosophieren an dieser Stelle über Möglichkeiten, den Suchalgorithmus zu optimieren. Allerdings haben die Fehl- und Doublettenlisten von Briefmarkensammlern nicht Millionen von Einträgen so dass die primitive Suche für Philatelisten vollkommen ausreichend ist.

Im übrigen geht das auch mit Microsoft Excel (und anderen Tabellenkalkulationen) mit Bordmitteln. Einfach Dubletten- und Fehllisten als Spalte einlesen, am besten in getrennte Blätter, und die Funktion VLOOKUP verwenden. Wie man die VLOOKUP-Funktion anwendet, ist im Internet einschlägig beschrieben, z.B. auf den Hilfeseiten von Microsoft. [1]

Die meisten Datenbanken ermöglichen einen Export nach Excel oder zumindest nach csv.

[1] https://support.microsoft.com/en-us/office/vlookup-function-0bbc8083-26fe-4963-8ab8-93a18ad188a1
 
Ben 11 Am: 02.04.2023 09:23:12 Gelesen: 504# 6 @  
@ drmoeller_neuss [#5]

Die Katalognummern der Dubletten- und Fehlliste in jeweils getrennte Arrays einlesen, dann das erste Array mit einer For-Each-Schleife durchlaufen und das jeweilige Element mit einer For-Each-Schleife im zweiten Array suchen. Dann abbrechen, wenn das Element in der zweiten Liste gefunden wurde. Dann das Element in das Zielarray schreiben.

... viel zu kompliziert, sorry.

Das Bestimmen der gemeinsamen Schnittmenge zweier Listen (Mengen) hat robste1987 mit seinem Befehl "intersection" geschickter gemacht.

Die Herausforderung in dieser Aufgabe besteht auch nicht im Ermitteln der Schnittmenge zweier Listen, sondern in der konzeptionellen Vorarbeit. Die Sammler sollten keine Dubletten-, Tausch- oder Fehllisten in beliebigen Tabellenkalkulationen erstellen müssen, denn das ist in der Tat reines Abschreiben des Kataloges.

Einen schönen Sonntag wünscht
Ben.
 
robste1987 Am: 02.04.2023 10:44:52 Gelesen: 491# 7 @  
@ drmoeller_neuss [#5]

* Ich empfehle zur weiteren Lektüre einen Grundlagenartikel der Informatik über Laufzeitkomplexität und Parallelisierbarkeit. Wenn ich jedes Element in einer Liste einzeln auf Vorhandensein in einer anderen Liste suche dauert das bei zwei sehr langen Listen sehr lange und ist nur eingeschränkt parallelisierbar. Wenn dann auf einem Server viele verschiedene Listen abgeglichen werden sollen, erzeugt das schnell zu viel Last auf dem Prozessor von dem Server. Daher die Idee mit Mengen und Intersections.

* Sicher gibt es Leistungsfähige Datenbanken. Die sind aber oft kostenpflichtig und für einen einfachen Abgleich eher übertrieben.

* In der Tat ist es naheliegend Dubletten- und Fehllisten mit Computer automatsiert zu vergleichen, egal ob mit Arrays, Mengen oder Datenbaken. Um so überraschender, dass das keine Selbstverständlichkeit geworden ist das so zu machen.

* Manche andere Portale gleichen Fehllisten automatisch mit Angeboten von Verkäufern ab, aber machen keine Tauschvorschläge und können nicht oder nur eingeschränkt optimieren, dass man von möglichst wenigen Verkäufern kauft um Porto zu sparen. Warum wohl?
 
drmoeller_neuss Am: 02.04.2023 16:47:07 Gelesen: 468# 8 @  
@ robste1987 [#7]

* Ich empfehle zur weiteren Lektüre einen Grundlagenartikel der Informatik über Laufzeitkomplexität und Parallelisierbarkeit. Wenn ich jedes Element in einer Liste einzeln auf Vorhandensein in einer anderen Liste suche dauert das bei zwei sehr langen Listen sehr lange und ist nur eingeschränkt parallelisierbar. Wenn dann auf einem Server viele verschiedene Listen abgeglichen werden sollen, erzeugt das schnell zu viel Last auf dem Prozessor von dem Server. Daher die Idee mit Mengen und Intersections.

Ich verweise auf meine frühere Antwort: Informatiker philosophieren an dieser Stelle über Möglichkeiten, den Suchalgorithmus zu optimieren. Allerdings haben die Fehl- und Dublettenlisten von Briefmarkensammlern nicht Millionen von Einträgen so dass die primitive Suche für Philatelisten vollkommen ausreichend ist.

Einmal ehrlich, wenn ich mich eine ganze Woche mich mit meiner Bundsammlung beschäftigt habe, um die mir fehlenden Marken aufzulisten, dann kommt es doch auf ein oder zwei Sekunden Laufzeitoptimierung beim Suchalgorithmus nicht mehr darauf an. Im Klartext: Das Sammelgebiet Bund umfasst etwa 3000 Marken, und mir fehlen vielleicht 200 Marken. Das ist ein überschaubarer Datensatz. Soviele Sammler gibt es auch nicht auf der Welt und sie werden nicht alle gleichzeitig ihre Fehllisten abgleichen, um den Server in die Knie zu zwingen.

Du kannst natürlich an einer Optimierung des Problemes arbeiten: wenn mir der Sammler Bert 16 Marken von meiner Fehlliste liefern kann, und Anton nur 15 Marken, sollte ich mit Bert tauschen. Das spart 6 Cent Porto pro Tausch.

Ein ähnliches Optimierungsproblem ist der Kauf der Backwaren für das Frühstück. Letzte Woche hatte Netto vier Kaiser-Brötchen für einen Euro im Angebot, und ALDI die Laugenbrezel für 25 Cent. Dazu muss ich die unterschiedliche Entfernung zu den Supermärkten rechnen. Fahrradreifenabrieb ca. 1.5 Cent pro Kilometer. Ich war dem Optimum schon sehr nahe, dann höre ich nur noch diese verdammte künstliche Frauenstimme am Backautomaten: "Ihr gewünschtes Produkt ist heute leider nicht mehr verfügbar". :(

Im übrigen arbeitet set.intersection() in Python auch mit Schleifen [1]. Als Informatiker sollte man den Algorithmus verstanden haben, bevor man blind eine Funktion anwendet.

Das ist wie in der Fahrschule: Man lernt auf einem Schaltgetriebe-Wagen, um dann später bequem einen Automatikwagen fahren zu können.

@ Ben 11 [#6]

Die Herausforderung in dieser Aufgabe besteht auch nicht im Ermitteln der Schnittmenge zweier Listen, sondern in der konzeptionellen Vorarbeit. Die Sammler sollten keine Dubletten-, Tausch- oder Fehllisten in beliebigen Tabellenkalkulationen erstellen müssen, denn das ist in der Tat reines Abschreiben des Kataloges.

Wie soll man denn Fehllisten anders erstellen? Du musst nun einmal die fehlenden Marken heraussuchen und auflisten. Du kannst die Nummern in Tontäfelchen ritzen oder in eine Excel-Tabelle tippen. Keine noch so künstliche Intelligenz kann herausfinden, welche Marken Dir in Deiner Sammlung noch fehlen.

[1] https://stackoverflow.com/questions/20100003/whats-the-algorithm-of-set-intersection-in-python
 
22028 Am: 02.04.2023 17:26:22 Gelesen: 456# 9 @  
Ich wiederhole was ich schon seit Jahren mal schrieb als noch einige, auch ich, Datenbanken für ihre Briefmarkensammlung schrieben. Ich tat das damals in Access.

Auch möchte ich niemandem die Freude an der Sache nehmen, aber eine Datenbank ist nur so gut wie die Pflege derselben. Anfangs ist das Engagement groß, mit der Zeit lässt es nach was zu Inkonsistenzen in der Datenbank führt, dann wird es ganz eingestellt.
 
robste1987 Am: 02.04.2023 19:39:00 Gelesen: 440# 10 @  
@ drmoeller_neuss [#8]

Technischer Teil

Das Laufzeitproblem entsteht nicht, weil eine Bundsammlung einige Tausend statt einiger Dutzend Einträge hat. Eine längere Liste wirkt sich in etwa Proportional auf die Laufzeit aus. Wenn ich das Programm auf meinen PC ausführe um meine Listen mit denen von fünf Sammlerfreunden abzugleichen, ist die Abgleichsmethode wirklich egal.

Das Problem entsteht, wenn ich von vielen Sammlern die Listen mit den Listen von vielen anderen Sammlern auf einem Server abgleichen will. Wenn 500 Fehllisten sollen mit 500 Dublettenlisten in jeder Kombination abgeglichen werden. Dann sind dann 500*500= 250000 Abgleiche. Wenn ich da bei jedem Abgleich etwas CPU-Zeit spare, spielt das doch eine Rolle. Erst recht wenn der Server noch etwas anderes tun soll oder das Programm in der Cloud läuft und ich für CPU Zeit zahlen muss.

Es mag sein, dass CPython zu dem Zeitpunkt der Antwort auf stackoverflow (fast zehn Jahre her) intern so gearbeitet und vielleicht heute noch so arbeitet. Denkbar ist es, dass die Listen zuerst sortiert werden und dann abgeglichen wird. Dann braucht man nicht mehr unbedingt alle Elemente jedes mal abklappern. Oder das man mit einer Kopie des Datensatzes arbeitet und alle Elemente die schon als Schnittmmenge bekant sind aus der Kopie löscht damit man sie nicht erneut durch interiert.

Der Sinn von Hochsprachen ist gerade, dass man sich weniger mit low-level code auseinandersetzt und eine Optimierung so gleich viel Code beschleunigt, ohne das er umgeschrieben werden muss.

Der Vergleich mit dem Frühstück ist ungenau. In jedem Supermarkt kann ich die Zutaten für ein übliches Frühstück bekommen. Es ist aber unrealistisch von Hobbysammlern zu erwarten, dass Sie genau die Briefmarken als Dublette haben die mir noch fehlt. Ich habe es durchaus schon erlebt, dass ich von fünf Händlern kaufen sollte um 6 Briefmarken zu erhalten. Stückpreis pro Marke immer unter 0,10€, Versandkosten aber 1€ pro Sendung, aus dem Ausland. Oder das potentielle Tauschpartner aus dem Ausland erst Tauschen wollten wenn 100 Michel-Euro Tauschvolumen zusammen kommen, weil sonst das (Einschreibe-)porto als zu hoch empfunden wurde. Es ist frustrierend lange manuell Tauschlisten zu bearbeiten und dann festzustellen, das man nur auf 80 Michel Euro kommt.

Nicht-technischer Teil

Ich möchte es positiv statt negativ ausdrücken:

* Ich freue mich in diesem Thema über Kommentare von Henry, Ben11 oder den von 22028 sehr gefreut, weil ich diese als freundlich und konstruktiv empfinde. Auch und gerade wenn sie mir abraten oder den Nutzen meiner Idee anzweifeln!

* Mein Studium und einen Nebenjob als Softwareentwickler machen mir genug Arbeit und Herausforderungen.

* Mir ist es am wichtigsten Menschen unter 25 für das Sammeln von Briefmarken zu begeistern

* Gerne engagiere ich mich in einem Umfeld wo ich für konstruktive Kritik erhalte und Mitstreiter finde

Fazit:

In den letzten Tagen habe ich etwa zwei-drei Stunden am Quelltext geschrieben und mich mit konstruktiver Kritik beschäftigt. Das hat wirklich Spaß gemacht. Dem stehen fast sechs Stunden mit Knatsch aller Art verbrachte Zeit gegenüber, die wirklich keinen Spaß gemacht hat.

Das
 
  Antworten    zurück Suche    Druckansicht  
 
Wir benutzen Cookies um die Nutzerfreundlichkeit der Webseite zu verbessen. Durch Deinen Besuch stimmst Du dem zu.