Seite 1 von 1

Dateiverarbeitung, Listen + plotten

Verfasst: Donnerstag 17. Dezember 2020, 08:35
von Maik13
Hallo,

ich versuche mich ein wenig ins Programmieren, mit Python, einzuarbeiten.
Aktuell will ich ein paar Grafiken zu Covid19, Ländervergleich ... zu erstellen.
Dazu verwende ich eine Datei von hier: https://covid.ourworldindata.org/data/o ... d-data.csv
Es funktioniert soweit wie gedacht, auch wenn ich verschiedene Länder einzeln auswähle. Sobald ich aber die if Abfrage für zwei Länder verwenden will bekomme ich beim Plotten folgende Fehlermeldung:

File "/usr/lib/python3/dist-packages/matplotlib/axes/_axes.py", line 1743, in plot
lines = [*self._get_lines(*args, data=data, **kwargs)]
File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 273, in __call__
yield from self._plot_args(this, kwargs)
File "/usr/lib/python3/dist-packages/matplotlib/axes/_base.py", line 399, in _plot_args
raise ValueError(f"x and y must have same first dimension, but "
ValueError: x and y must have same first dimension, but have shapes (324,) and (319,)

Ich habe mir die Listen auch schon mal in Datei schreiben lassen und sie beginnen alle mit 0.
Das Problem wird sich sicher mit OO umgehen/lösen aber ich möchte gerne verstehen wo mein Fehler hier liegt, wie ich ihn finde.

Code: Alles auswählen

with open('alles.csv') as file:
	
	for line in file:
		line_splitted = line.strip().split(",") #strip = Leerzeichen am Anfang und Ende weg
		
		if line_splitted[2] == 'Germany':

			dat.append(str(line_splitted[3]))
			
			if line_splitted[4] == '':
				deuf.append(0)
			else:
				deuf.append(float(line_splitted[4]))
				
...weiter if/else für Zellen in der Zeile

Code: Alles auswählen

	
		if line_splitted[2] == 'Sweden':
			swf.append(float(line_splitted[4]))
			
damit kommt es beim Plotten dann zu Fehlern, auch wenn ich das Ersetzen leerer Zellen wie im ersten Fall (Germany) verwende.

Code: Alles auswählen

	
fig, alle = plt.subplots(1, 4)
fig.subplots_adjust(left=None, bottom=None, right=None, top=None, wspace=0.3, hspace=0.3)
alle[0].set_title('Fälle')
alle[0].plot(dat, deuf, color = 'green')
alle[0].plot(dat, swf, color = 'blue')
Danke Maik

PS: mein erster Post ist nach Vorschau+Absenden irgendwie im Datennirwana verschwunden. :shock:

Re: Dateiverarbeitung, Listen + plotten

Verfasst: Donnerstag 17. Dezember 2020, 09:29
von Maik13
Maik13 hat geschrieben: Donnerstag 17. Dezember 2020, 08:35
PS: mein erster Post ist nach Vorschau+Absenden irgendwie im Datennirwana verschwunden. :shock:
... habe erst beim erneuten Erstellen die Meldung das erst von einem Moderator freigegeben wird gelesen :o

Re: Dateiverarbeitung, Listen + plotten

Verfasst: Donnerstag 17. Dezember 2020, 09:39
von Sirius3
Eingerückt wird in Python immer mit 4 Leerzeichen pro Ebene, keine Tabs.
Benutze aussagekräftige Variablennamen, keine Abkürzungen. Was soll denn Deuf sein?
Das Datum zu den Zeilen mit deutschen Zahlen scheinen nicht die gleichen zu sein wie für Schweden, da sind es 5 Einträge weniger.
Du brauchst also eine getrennte Datumsliste oder Du mußt irgendwie eine Vereinigungsmenge bilden und fehlende Zahlen ergänzen.

Zum Lesen von csv-Dateien gibt es das csv-Modul, oder, wenn man es komfortabler will, benutzt man pandas.

Re: Dateiverarbeitung, Listen + plotten

Verfasst: Dienstag 5. Januar 2021, 14:56
von Maik13
Erstmal Entschuldigung für die späte Antwort, aber im aktuellen Chaos ist das "untergegangen".
Danke für die Erklärungen, ich werde das demnächst genau ansehen und austesten. (einzeln funktioniert es ja)
Die Einrückung hat bei mir bisher funktioniert und wurde in geany gut erkennbar angezeigt.
csv-Modul + pandas folgt dann noch

Gruß Maik