Statistik Dateiauswertung war: .txt-datei einlesen/ausgeben

joez

Grünschnabel
hallo!
ich muss in java eine zeitreihe implementieren, und zwar müsste ich zunächst eine .txt - datei nach folgendem schema einlesen:
jahr monat aktienkurs
1998 06 8952.00
1998 07 8883.30
1998 08 7539.10
1998 09 7842.60
diese soll dann ausgegeben werden und es soll auch der mittelwert, die varianz und der median berechnet werden.
kann mir hier jemand helfen bzw. einen tipp geben wie ich mein problem am besten lösen kann?
vielen dank im voraus für eure hilfe!
 
Re: .txt-datei einlesen/ausgeben

joez hat gesagt.:
hallo!
ich muss in java eine zeitreihe implementieren, und zwar müsste ich zunächst eine .txt - datei nach folgendem schema einlesen:
jahr monat aktienkurs
1998 06 8952.00
1998 07 8883.30
1998 08 7539.10
1998 09 7842.60
diese soll dann ausgegeben werden und es soll auch der mittelwert, die varianz und der median berechnet werden.
kann mir hier jemand helfen bzw. einen tipp geben wie ich mein problem am besten lösen kann?
vielen dank im voraus für eure hilfe!

Wo genau hängst du denn?
 
Re: .txt-datei einlesen/ausgeben

hallo!
danke für die schnelle antwort!
also, ich hab mich hier im forum schon etwas umgesehen und hab in einem thread untenstehenden code gefunden. nur kommt immer eine fehlermeldung wenn ich versuche kommazahlen einzulesen, hab schon versucht int durch float zu ersetzen, hat aber nichts gebracht.
weiters würde mich interessieren wie ich mittelwert, varianz und median der kurse, also nur einer spalte des arrays, auslesen kann.
vielen dank im voraus für eure antworten!

auszug aus thread http://www.tutorials.de/forum/showthread.php?t=173447
Code:
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import java.util.StringTokenizer;

public class FileCruncher {

public static void main(String[] args) {
try {
BufferedReader br =
new BufferedReader(new FileReader("c:/Numbers.txt"));

List list = new ArrayList();

String line = null;

while ((line = br.readLine()) != null) {
StringTokenizer tokenizer = new StringTokenizer(line, " ");
int[] iA = new int[tokenizer.countTokens()];
int cnt = 0;
while (tokenizer.hasMoreElements()) {
iA[cnt++] =
Integer.parseInt((String) tokenizer.nextElement());
}
list.add(iA);
}

for(Iterator iter = list.iterator();iter.hasNext();){
int[] iA = (int[])iter.next();
for (int i = 0; i < iA.length; i++) {
System.out.print(iA[i] + " ");
}
System.out.println();
}

br.close();

} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}



Code:
Numbers.txt

1880 1881 1860 2332
1882 1882 1861 2321
1882 1882 1861 2321 1882 1882 1861 2321
1882 1882 1861 2321
1882 1882 1861 2321 1882 1882 1861 2321 1882 1882 1861 2321
1882 1882 1861 2321
1882 1882 1861 2321
1882 1882 1861 2321 1882 1882 1861 2321
82 18 181 231
 
Re: .txt-datei einlesen/ausgeben

Code:
Integer.parseInt((String) tokenizer.nextElement());

einen Integer aus einer komma zahl zu parsen ist auch kein guter Rat.

Ich bitte dich dennoch um 2 Dinge:

a) Bitte selber programmieren, und wenn es Probleme gibt diese hier posten, wo es genau harkt. Wir sind nicht dafür da dir deine Aufgabe komplett abzunehmen.

b) Bitte les dir den Punkt 12 unter http://www.tutorials.de/netiquette.html durch.
 
Re: .txt-datei einlesen/ausgeben

...hast du ein Glück, dass ich langeweile habe:

Code:
package de.tutorials;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class TimeSeriesAnalyzer {

	private List list;

	private int rowCnt;

	private double average;

	private double variance;

	private double median;

	public static void main(String[] args) {
		new TimeSeriesAnalyzer().analyze(new File("c:/Reihe.txt"));
	}

	private void analyze(File file) {
		try {
			BufferedReader br = new BufferedReader(new FileReader(file));
			list = new ArrayList();

			String line;

			while ((line = br.readLine()) != null) {
				System.out.println(line);
				list.add(line.split(" "));
				rowCnt++;
			}

			calcAverage(list);
			calcVariance(list);
			calcMedian(list);

			br.close();

		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private void calcMedian(List list2) {
		// Median bei geraden n
		// Mittelwert der beiden "mittleren" Werte
		// (data[n/2] + data[n/2+1]) / 2
		if (rowCnt % 2 == 0) {
			median = (Double.parseDouble(((String[]) list.get((rowCnt-1) / 2))[2]) + Double
					.parseDouble(((String[]) list.get((rowCnt-1) / 2 + 1))[2])) / 2;
		} else {
		// Median bei ungeradem n
	    // data[(n+1)/2]
			median = Double
					.parseDouble(((String[]) list.get((rowCnt) / 2))[2]);
		}
		System.out.println("Median: " + median);
	}

	private void calcVariance(List list2) {
		/*                  _n
		 *  v^2 = 1/(n-1) * \    (data[i] - average)^2
		 *                  /_i=1
		 * 
		 */
		for (int i = 0; i < rowCnt; i++) {
			variance += Math.pow(Double
					.parseDouble(((String[]) list.get(i))[2])
					- average, 2);
		}
		variance *= 1.0 / (rowCnt - 1.0);
		System.out.println("Variance: " + variance);
	}

	private void calcAverage(List list2) {
		/*           
		 *           _n
		 * a = 1/n * \      data[i]
		 *           /_i = 0
		 * 
		 */
		for (int i = 0; i < rowCnt; i++) {
			average += Double.parseDouble(((String[]) list.get(i))[2]);
		}
		average /= rowCnt;
		System.out.println("Average: " + average);

	}
}

Ergibt für:
Reihe.txt:
1998 06 8952.00
1998 07 8883.30
1998 08 7539.10
1998 09 7842.60

Die Ausgabe:
Code:
1998 06 8952.00

1998 07 8883.30

1998 08 7539.10

1998 09 7842.60

Average: 8304.25

Variance: 517818.0699999994

Median: 8211.2

HTH
Gruß Tom
 
Zurück