Entwickler-Ecke

Freeware Projekte - Veranschaulichung des Benfordschen Gesetzes


GTA-Place - Mi 20.12.06 20:18
Titel: Veranschaulichung des Benfordschen Gesetzes
Kurze Vorgeschichte:
Wir haben in Mathe, Klasse 10, gerade Wachstum (Linear, ...) und da darf zwischendrin auch nicht das "Benfordsche Gesetz [http://de.wikipedia.org/wiki/Benfordsches_Gesetz]" fehlen, vor allem dann nicht, wenn Wahrscheinlichkeitsrechnung und Logarithmus auf dem Lehrplan der 10. Klasse steht. Also bekamen wir eine Hausaufgabe: Analysiert irgendeinen Text und schreibt die Anfangsziffern raus. Nun, hab ich natürlich keine Lust drauf, warum auch? Ich bin doch Programmierer - fix ist ein Programm dafür geschrieben, dass die Wikipedia analysiert (natürlich ohne Schnick-Schnack). Und ich Depp, muss dass natürlich meinem Lehrer erzählen. Tja, jetzt fand er das so toll, dass ich das Programm morgen vorstellen "darf". Gut, konnte das Prog ja nicht so lassen, sieht man ja nix. Also hingesetzt, Programm "richtig" geschrieben und nun ist es fertig und kann auch hier in der EE vorgestellt werden.

Benfordsches Gesetz
Wikipedia hat folgendes geschrieben:
[...] Für die Anfangsziffern in Zahlen des Zehnersystems gilt zum Beispiel: Zahlen mit der Anfangsziffer '1' sind etwa 6,5-mal häufiger als solche mit der Anfangsziffer '9'".


Beschreibung:
Das Programm analysiert eine x-beliebige Anzahl von zufälligen Wikipedia-Artikeln. Angezeigt wird:

- Der Fortschritt, Restzeit und aktueller Artikel in der Caption
- Der Artikel im Feld oben
- Die gefundenen Zahlen im Feld unten links
- Die Verteilung der Ziffern 1 - 9 im Feld mitte links
- Als Diagramm im Feld rechts
- Benfordsche Kurve eingezeichnet

Änderungen:
Version 1.1:
- Kein TWebBrowser mehr
- Größe des Fensters fest
- Kein Memo mehr
- Sofortige Analyse
- (teilweise) Legende
- Kleineres Programm

Version 1.2:
- Thread eingebaut
- Bissl verschnellert
- Sicherheit erhöht, bzgl. Thread

Mein Wunsch:
Guckt euch das Programm an, falls das jemand noch bis morgen früh schafft und sucht Fehler oder auch Verbesserungsvorschläge.

Grüße
GTA-Place

Moderiert von user profile iconChristian S.: url-Tag korrigiert


uall@ogc - Mi 20.12.06 20:49

Funzt nicht: Immer unbekannte Seite und bei Stop -> ungültige Zeigeroperation


BenBE - Mi 20.12.06 20:49

Das Klicken vom TWebBrowser ist recht nervig ... Ferner solltest Du mal schauen, ob Du das nicht auch direkt über TClientSocket oder TIdHTTPClient hinbekommst.

Nach dem Abbrechen erhalte ich noch einige Scriptfehler vom TWebbrowser ... (Objekt unterstützt diese Eigenschaft nicht). Jeweils von den Wiki-Pages

Du solltest ggf. auch die Benfordsche Kurve mit eintragen ...

Ferner wäre eine "progressive Statusanzeige" wünschenswert ... Also immer während der Anzeige nach und nach deine Messergebnisse schon vorauswerten.

Multi-Threading wäre eine Option ... Das Programm "hängt" ;-) immer ein wenig ^^


Christian S. - Mi 20.12.06 20:56

Hallo!

Nettes Programm und eine gute Idee, schnell an Texte zu kommen :zustimm:

Ein paar Sachen sind mir aufgefallen:
[*]Das Memo ist ein bisschen unübersichtlich
[*]Im Diagramm fehlen die Achsen-Beschriftungen
[*]In der Tabelle würde ich noch eine Spalte vorne dran machen, wo ich die Zeilen beschrifte.[/list]

Grüße
Christian


GTA-Place - Mi 20.12.06 21:19

user profile iconuall@ogc hat folgendes geschrieben:
Funzt nicht: Immer unbekannte Seite und bei Stop -> ungültige Zeigeroperation

Mh... das ist merkwürdig, schon weil beim Stop-Button nur die Anzahl der bearbeiteten Seiten auf die Anzahl der gewünschten Seiten setzt*. Die aufgerufene Seite ist übrigens http://de.wikipedia.org/wiki/Spezial:Random - Proxy?

*jetzt nicht mehr.

user profile iconChristian S. hat folgendes geschrieben:
Nettes Programm und eine gute Idee, schnell an Texte zu kommen :zustimm:

Danke :).

Behoben / Eingebaut (bzw. teilweise):
user profile iconBenBE hat folgendes geschrieben:
Das Klicken vom TWebBrowser ist recht nervig ... Ferner solltest Du mal schauen, ob Du das nicht auch direkt über TClientSocket oder TIdHTTPClient hinbekommst.

user profile iconBenBE hat folgendes geschrieben:
Nach dem Abbrechen erhalte ich noch einige Scriptfehler vom TWebbrowser ... (Objekt unterstützt diese Eigenschaft nicht). Jeweils von den Wiki-Pages

user profile iconChristian S. hat folgendes geschrieben:
Das Programm erscheint mir ziemlich langsam. Kann es sein, dass der sogar wartet, bis alle Bilder im Browser geladen sind :gruebel:

user profile iconChristian S. hat folgendes geschrieben:
Die Form sollte nicht resizable sein.

user profile iconBenBE hat folgendes geschrieben:
Du solltest ggf. auch die Benfordsche Kurve mit eintragen ...

user profile iconBenBE hat folgendes geschrieben:
Ferner wäre eine "progressive Statusanzeige" wünschenswert ... Also immer während der Anzeige nach und nach deine Messergebnisse schon vorauswerten.

user profile iconChristian S. hat folgendes geschrieben:
Das Memo ist ein bisschen unübersichtlich

user profile iconChristian S. hat folgendes geschrieben:
Im Diagramm fehlen die Achsen-Beschriftungen

user profile iconChristian S. hat folgendes geschrieben:
In der Tabelle würde ich noch eine Spalte vorne dran machen, wo ich die Zeilen beschrifte.

user profile iconBenBE hat folgendes geschrieben:
Multi-Threading wäre eine Option ... Das Programm "hängt" ;-) immer ein wenig ^^

user profile iconChristian S. hat folgendes geschrieben:
Manchmal reagiert der "Stop"-Button nicht. Vielleicht solltest Du über Threads nachdenken.


Version 1.2 geuppt:
Version 1.1
- Kein TWebBrowser mehr
- Größe des Fensters fest
- Kein Memo mehr
- Sofortige Analyse
- (teilweise) Legende
- Kleineres Programm

Version 1.2:
- Thread eingebaut
- Bissl verschnellert

Thx @ll.


Delete - Do 21.12.06 00:34

@GTA-Place: sorry, aber ich frag mich was das "Benfordsche Gesetz" eigentlich soll?
dass z.b. hier:


die zahl 1 öfters vorkommt als die zahl neun ist doch jeden klar, wer fängt schon mit der versionsnummer 9 an zu zählen?

kennt jemand den sinn dieses quatsches? falls ja, wäre ich froh, wenn er mich aufklären könnt...


Christian S. - Do 21.12.06 00:45

Auch wenn man das als eingefleischter Programmierer kaum glauben mag, so werden Zahlen tatsächlich noch an anderer Stelle verwendet und nicht nur als Versionnummern :zwinker:

Ein Beispiel aus der Nicht-EDV-Welt:
Es gab mal eine sehr interessante "Quarks & Co."-Sendung, bei der gezeigt wurde, wie Wirtschaftsprüfer mittels dieses Gesetzes Manipulationen aufdecken konnten. So neigt der Mensch dazu, bei fingierten Beträgen eine Gleichverteilung der Ziffern zu erstellen, was beim Vergleich mit dem Benford-Gesetz sofort auffällt.


Delete - Do 21.12.06 00:56

@Christian S.: ist ungefähr so wie im journalismus, da kommt das wichtigste auch immer zuerst.. und daher ist das wichtigste auch meist in den ersten 10 oder 100 zeilen ;-)

oder bei den lehrbüchern, da kommt auch das wichtiste zu erst... und zum schluss immer der anhang... oder was nicht so dringend erscheint, damit lassen sich auch die fingerabdrücke erklären.

aber ich frag mich dennoch, was soll das ganze? gibts denn da was vernünftiges womit man was anfangen kann? mir scheint das ganze doch 'n ganz grosser humbug zu sein.. und ungefähr auf der selben gesetzmässigkeit zu beruhen wie das berümte 80/20 gesetz ... welches auch nur spasseshalber existiert...


Christian S. - Do 21.12.06 01:01

user profile iconGrenzgaenger hat folgendes geschrieben:
aber ich frag mich dennoch, was soll das ganze? gibts denn da was vernünftiges womit man was anfangen kann?
Hast Du mein Posting nicht gelesen?


GTA-Place - Do 21.12.06 07:53

user profile iconChristian S. hat folgendes geschrieben:
Ein Beispiel aus der Nicht-EDV-Welt:
Es gab mal eine sehr interessante "Quarks & Co."-Sendung, bei der gezeigt wurde, wie Wirtschaftsprüfer mittels dieses Gesetzes Manipulationen aufdecken konnten. So neigt der Mensch dazu, bei fingierten Beträgen eine Gleichverteilung der Ziffern zu erstellen, was beim Vergleich mit dem Benford-Gesetz sofort auffällt.

Das ist der Beitrag in PDF-Form: http://www.quarks.de/pdf/Quarks_Zufall_cwdr2002.pdf (Seite 11 ff). Es reicht zum Beispiel 3 von 12.000 Rechnungen zu ändern, um diesen Betrug zu merken.


JayEff - Do 21.12.06 09:28

Auf dem Schulrechner passiert schlicht garnix... Drücke Start: nix. Drücke Stop: Noch weniger: Der Startbutton wird nicht mehr enabled ... naja, vermutlich hat der schulrechner ne komische Firewall (und ein Proxy sowieso ... *seufz*)


Danny W. - Do 21.12.06 10:15

Hier in der Arbeit sitze ich auch hinter nem Proxy, aber es läuft einwandfrei ^^ Nice Work!


Horst_H - Do 21.12.06 11:59

Hallo,

die Ergebnisse der WIKI Seiten weichen aber extrem von Bendford ab.Die 1 war bei mir in der Nähe von 60%.
Vielleicht sind Aktienkurse und Umsätze besser zu gebrauchen.
Bitte die Uhrzeit nicht verarbeiten ;-) die ist meist nach 10:00 also am Anfang 1.
Siehe :
http://sinvnet.teledata.de/sis/detail/timesandsales.html?tag=1166572800&vonUhrzeit=09%3A00&bisUhrzeit=20%3A10&INST_ID=1234567&sym=WDI.ETR&ts=H


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
program InCSV;

uses
  sysutils,classes;

const
  //>Historische< Tagesumätze auf Xetra(.ETR) sekundengenau
  SinvTagesKurse ='http://sinvnet.teledata.de/sis/detail/timesandsales.html?vonUhrzeit=09:00&bisUhrzeit=18:00&INST_ID=1234567&ts=H&tag=';

var
  tdDatum : TDateTime;
  i : integer;

  AktienKuerzel : TStringlist;
  UnixTag,
  HttpAdr,
  HttpAdresse: string;

begin
  AktienKuerzel := TStringlist.create;
  AktienKuerzel.Loadfromfile('AktienKuerzel.txt');
  AktienKuerzel.sort;
  tdDatum := date-1.0;//maximal -21.0;
  while tddatum<=date do
    begin
    if DayOfWeek(tdDatum)in [2..6then //Sonntag ist 1
      begin
      //UnixZeit
      Unixtag := FloattoStr((int(tdDatum)-25569.00)*86400); //25569.00 = 1.1.1970 00:00
      HttpAdr := SinvTagesKurse+Unixtag+'&sym=';
      i := 0;
      while i <1{ AktienKuerzel.Count} do
        begin
        HttpAdresse := HttpAdr+AktienKuerzel[i]+'.ETR';
        //Abrufen,Verarbeiten..
        writeln(HttpAdresse);
        inc(i);
        end;
      end;
    tdDatum := tdDatum+1.0;
    end;
  AktienKuerzel.free;
  readln;
end.


Die KurzelListe ist etwas alt, sodaß manche nicht mehr existieren TUI wurde TUI1 etc.

Gruß Horst


GTA-Place - Do 21.12.06 13:59

user profile iconJayEff hat folgendes geschrieben:
Auf dem Schulrechner passiert schlicht garnix... Drücke Start: nix. Drücke Stop: Noch weniger: Der Startbutton wird nicht mehr enabled ... naja, vermutlich hat der schulrechner ne komische Firewall (und ein Proxy sowieso ... *seufz*)

Proxy oder Firewall, eins der beiden. Wobei Proxy ja bei Mantis geht.
user profile iconMantis1987 hat folgendes geschrieben:
Hier in der Arbeit sitze ich auch hinter nem Proxy, aber es läuft einwandfrei ^^ Nice Work!

Danke :)
user profile iconHorst_H hat folgendes geschrieben:
Hallo,

die Ergebnisse der WIKI Seiten weichen aber extrem von Bendford ab.Die 1 war bei mir in der Nähe von 60%.

Richtig, wobei man sagen muss, dass alle anderen Zahlen Benford entsprechen (vom Kurvenverlauf), lediglich die 1 - und das liegt an den Jahreszahlen (1000 - 1999) - ist doppelt so hoch.
user profile iconHorst_H hat folgendes geschrieben:
Vielleicht sind Aktienkurse und Umsätze besser zu gebrauchen.
Bitte die Uhrzeit nicht verarbeiten ;-) die ist meist nach 10:00 also am Anfang 1.
Siehe :
http://sinvnet.teledata.de/sis/detail/timesandsales.html?tag=1166572800&vonUhrzeit=09%3A00&bisUhrzeit=20%3A10&INST_ID=1234567&sym=WDI.ETR&ts=H

Ich bekomme die Meldung: "Der Referer "http://www.delphi-forum.de/posting.php?mode=topicreview&t=67838&p=407850" ist für Institut "1234567" nicht freigeschaltet."


Horst_H - Do 21.12.06 14:26

Hallo,

ich habe das übermitteln des Referer's abgeschaltet (F12 bei Opera) und dann keine Probleme.
Oder vorher diese Seite aufrufen:
"http://sinvnet.teledata.de/sis/markt.html?INST_ID=1234567&markt=1" und dann
"http://sinvnet.teledata.de/sis/detail/timesandsales.html?tag=1166572800&vonUhrzeit=09%3A00&bisUhrzeit=20%3A10&INST_ID=1234567&sym=WDI.ETR&ts=H"

Gruss Horst