hallo,
ich habe eine datei (txt) mit mehreren tausend punkten die wie folgt aufgebaut
ist:
x y z
22323,83 443453,25 7,93
23356,21 342173,25 8,12
usw..
(die abstände sind tabs in dem file - keine leerzeichen)
so diese datei möchte ich so effizient wie möglich einlesen. da sie sehr gross
ist dauert es leider mit dem streamreader was ich kenn sehr lange 🙁
da kommen wir auch schon zu meiner ersten frage:
können ? (100000 zeilen und mehr)
dabei ist mir vorallem die letzte Spalte (z) wichtig, denn eigentlich brauch ich
zum auswerten nur diese. wo wir auch schon bei meiner 2. frage wären:
im endeffekt sollen nämlich die werte in ein neues file geschrieben werden,
jedoch befreit von ausreißern aber wieder in der x y z form (die x und y werte
werden und sollen auch nicht berührt werden).
meine dritte und letzte frage lautet ob jemand eine idee hat wie ich am besten
die ausreißer eleminiere und woran ich das festmach. ich dachte da so als erstes
an mitelwert, standartabweichung und median (wobei ich auch noch nicht weiss wie
man diesen programmiertechnisch bestimmt 🙁 )
evtl mit min max arbeiten, aber wie setze ich da am besten die grenzen ?
die ausgabe datei sollte im endeffekt die gleichen konventionen besitzen (also tabulator und kommata, txt usw)
zusammengefasst:
vielleicht hat jemand von euch einen rat, snippet oder pseudocode parat der eines
oder am besten alle probleme lösen kann.
das wäre super. danke im vorraus! 🙂
zu 3.:
ausreißer eleminieren nach einem bestimmten algorithmus
den ausreißertest hab ich als projektarbeit in meiner abschlussprüfung abgearbeitet.
leider sind die sourcen in c++ und beziehen sich auf andere bibliotheken (dll's).
es gibt aber zwei algorythmen
zum einen der test nach grubs
http://de.wikipedia.org/wiki/Ausrei%C3%9Fertest_nach_Grubbs
und die stichprobenwölbung
http://www.qmbalance.com/pages/pdf/PROCONT4.PDF
(mal schnell gegoogled)
auf jedenfall benötigst du
hab damals (2002) 'ne glatte 1 für die implementierung und doku bekommen.
schau dir mal die links an.
könnte gegebenenfalls die c++-sourcen posten.
Spricht etwas dagegen mit Datenbanken zu arbeiten? Die können alles das was du brauchst und ich könnte mir vorstellen, dass dein Vorhaben damit sehr viel leichter und unkomplizierter zu lösen sein müsste!
Hallo acid0000,
- effiziente möglichkeit zum einlesen großer dateien
- direkt eine gewisse spalte auswerten
- ausreißer eleminieren nach einem bestimmten algorithmus
beachte für zukünftige Fragen bitte [Hinweis] Wie poste ich richtig? Punkt 1.2.
herbivore
@skinny danke für die tipps, wenn du die source als unterstützung posten könntest wäre klassen. (vielleicht auch mit der doku zum nachvollziehen)
ich hatte eine zeitlang mit dem RANSAC Algorithmus geliebäugelt aber ich glaub das haut bei meinem Problem nicht so hin.
@Seyyedi
das mit der Datenbank klingt gut, vorallem würde es mir so das einlesen vereinfachen und ich könnte so direkt über abfragen arbeiten. ansich bietet es sich ja an da ich die datei aus einem shapefile ja exportiere also da ja eh eine tabelle habe. mal sehen wie sich das bewerkstelligen ließe. jedoch soll das programm nicht nur dieses eine "file" verarbeiten und die ausreißer bestimmen sondern auch funktionieren wenn ich eine neue datei mit xyz werten habe.
bzw wenn es nicht über die db geht, wie kann ich dann genau die spalte z ansprechen? ich dachte da vielleicht an auf tabulator testen mit ( \t ) ?? obwohl ich auch noch nicht weiss wie.
Bitte beachte außerdem Wie poste ich richtig? Punkt 2
Zum Einlesen und Verarbeiten der Datei siehe meine Hinweise unter Entwickler-Forum
Jürgen
hab die c++-source gefunden. musst nur die funktionen für minimal- und maximalwert, arithmetischen Mittelwert und Standardabweichung der Stichprobe hinzufügen.
ich hoffe das hilft dir weiter.
(steckt etwas viel zeigerarithmetik drin aber ich denke das sollte sich trotzdem leicht nach C# bringen lassen - ist ja ansich nichts weiter als mathe)
mfg
skinny
danke @skinny ich werd mir das mal anschauen. aber rein zum verständnis, will es ja allein hinbekommen.
was ich bis jetzt endlich hinbekommen habe, ist die z spalte entsprechend zu selektieren wobei aber leider das einlesen ewig dauert 🙁
eine andere möglichkeit die ich geschafft hab ist über einen von mir selbst geschriebenen editor, jedoch weiss ich da nun nicht wie ich den z wert dort allein ermitteln kann.
bei der 1. variante habe ich einfach in ein array eingelesen wo dann mein array[0] der x wert, array[1] der y wert und array[2] der z wert ist. das ließe sich dann leicht weiter verarbeiten.
bei der 2. variante habe ich halt alles in der textbox ausgeben lassen, wo das einlesen auch recht schnell geht (jedoch nur bis files unter 100mb, danach ist der speicher überlaufen 🙁 )
jetzt weiss ich nur nicht ob ich das auch bei der textbox so gestalten kann das ich entsprechend nur die z spalte weiter verarbeiten kann.
der editor is simpel aufgebaut:
Geschlossen wegen Crosspost. Siehe [Hinweis] Wie poste ich richtig? Punkt 2 und Crossposts oder [Hinweis] Wie poste ich richtig? Punkt 2.