Seite 1 von 1
Namensstatistik
Verfasst: Montag 24. Oktober 2022, 16:39
von I3lackt4r
Hallöchen, ich würde gerne eine Namens-statistik ploten... Kann mir vielleicht jemand helfen?
https://ibb.co/n3BFQhr
https://ibb.co/DV7bJgT
Re: Namensstatistik
Verfasst: Montag 24. Oktober 2022, 17:42
von __blackjack__
@I3lackt4r: Bitte den Quelltext und die Fehlermeldung als Text im Beitrag (in Code-Tags) und nicht als Bilder bei einem externen Hoster.
Für CSV-Dateien gibt es das `csv`-Modul in der Standardbibliothek.
Textdateien sollte man immer explizit mit der Angabe der Kodierung öffnen. Gerade bei Namen würde ich Sonderzeichen erwarten.
Zum Fehler: Mindestens eine Zeile in der Datei entspricht nicht dem was Du erwartest. Eventuell sogar alle nicht. Lass Dir `line_splitted` doch einfach mal ausgeben.
Re: Namensstatistik
Verfasst: Montag 24. Oktober 2022, 17:59
von I3lackt4r
@I3lackt4r: Bitte den Quelltext und die Fehlermeldung als Text im Beitrag (in Code-Tags) und nicht als Bilder bei einem externen Hoster. hab ich vrstanden
Für CSV-Dateien gibt es das `csv`-Modul in der Standardbibliothek. wo ?
Textdateien sollte man immer explizit mit der Angabe der Kodierung öffnen. Gerade bei Namen würde ich Sonderzeichen erwarten. versteh ich auch nicht
Zum Fehler: Mindestens eine Zeile in der Datei entspricht nicht dem was Du erwartest. Eventuell sogar alle nicht. Lass Dir `line_splitted` doch einfach mal ausgeben. einfach mit print (line_splitted) oder wie?
Code: Alles auswählen
xs = []
ys = []
name = "anna"
with open(r"./names.csv", "r") as file:
# Datensatz: Id,Name,Year,Gender,State,Count
counter = 0
for line in file:
counter += 1
line_splitted = line.strip().split(";")
if line_splitted[1] == name:
ys.append(line_splitted[6])
xs.append(line_splitted[2])
ys = [float(line) for line in ys]
import matplotlib.pyplot as plt
fig = plt.figure()
plt.suptitle("Anna-Statistik 1900-200x")
plt.plot(xs,ys)
plt.show()
Code: Alles auswählen
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/home/carlo/Kursmaterialien/data/Namenspiel.ipynb Zelle 1 in <cell line: 5>()
9 counter += 1
10 line_splitted = line.strip().split(";")
---> 11 if line_splitted[1] == name:
12 ys.append(line_splitted[6])
13 xs.append(line_splitted[2])
IndexError: list index out of range
Re: Namensstatistik
Verfasst: Montag 24. Oktober 2022, 18:53
von /me
I3lackt4r hat geschrieben: Montag 24. Oktober 2022, 17:59
Für CSV-Dateien gibt es das `csv`-Modul in der Standardbibliothek. wo ?
Da wo alles aus der Standardbibliothek ist. Wenn du mit Modulen nicht vertraut bist, dann solltest du dringend das
Python Tutorial durcharbeiten. Ich kann mir allerdings nicht vorstellen, dass du bisher in deinen Programmen noch nie etwas importiert hast. Vermutlich ist dir nur der Begriff der
"Standardbibliothek" unklar. Die enthält bei Python alle als Default mitgelieferten Module.
Die
Dokumentation zum csv-Modul ist natürlich auch Teil der offiziellen Doku.
Re: Namensstatistik
Verfasst: Montag 24. Oktober 2022, 18:56
von __blackjack__
@I3lackt4r: Die Standardbibliothek sind die Module die bei Python direkt dabei sind ohne das man sie extra installieren muss. Und die sind auch in der Python-Dokumentation beschrieben. Da sollte man sich einen Überblick verschaffen was es da schon so alles gibt, was man sich nicht selbst programmieren muss.
Die `open()`-Funktion hat ein `encoding`-Argument. Wenn man da nicht selber angibt wie die (Text)Datei kodiert ist, dann wird da ein systemabhängiger Wert ”geraten”, der stimmen kann, aber eben nicht stimmen muss. Man kann Glück haben und die Kodierung passt zu den Daten, man kann aber auch auf zwei Arten Pech haben, falls die Kodierung nicht zu den Daten passt: Entweder die Zeichen werden falsch dekodiert, oder es kommt zu einer Ausnahme falls Zeichen nicht (de)kodiert werden können.
Statt nachzufragen hättest Du das mit `print()` einfach mal ausprobieren können — wäre schneller gewesen.

Ein paar strategisch platzierte `print()`-Aufrufe um zu schauen ob Werte so aussehen wie man das erwartet, sind ein einfaches, grundlegendes Mittel zur Fehlersuche. Die `type()`-Funktion kann in dem Zusammenhang auch manchmal hilfreich sein, um zu schauen ob Werte vom erwarteten Typ sind.