Namensstatistik

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
I3lackt4r
User
Beiträge: 17
Registriert: Freitag 16. September 2022, 20:25

Hallöchen, ich würde gerne eine Namens-statistik ploten... Kann mir vielleicht jemand helfen?
https://ibb.co/n3BFQhr
https://ibb.co/DV7bJgT
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
I3lackt4r
User
Beiträge: 17
Registriert: Freitag 16. September 2022, 20:25

@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
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

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.
Benutzeravatar
__blackjack__
User
Beiträge: 13123
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@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.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Antworten