Dateiverarbeitung, Listen + plotten

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Maik13
User
Beiträge: 3
Registriert: Mittwoch 16. Dezember 2020, 15:02

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:
Maik13
User
Beiträge: 3
Registriert: Mittwoch 16. Dezember 2020, 15:02

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
Sirius3
User
Beiträge: 18274
Registriert: Sonntag 21. Oktober 2012, 17:20

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.
Maik13
User
Beiträge: 3
Registriert: Mittwoch 16. Dezember 2020, 15:02

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
Antworten