Hallo,
ich bin blutiger Anfänger und muss fürs Studium eine Datei statistisch auswerten.
Ich will eine Hypothese bestätigen bzw. widerlegen und dafür einen bestimmten Wert (hier "15") aus einer Spalte auslesen und über "i" anzeigen lassen wie oft dieser Wert vorkommt.
Das prozedere muss ich dann noch bei ein paar anderen Werten wiederholen, aber wenn man da prinzip verstanden hat klappt es ja.
Mein bisheriger Code sieht so aus, jedoch kommt beim print befehl nichts raus.
import csv
with open('Datensatz1.2.csv', 'r') as csvfile:
readCSV = csv.reader(csvfile, delimiter=";")
i = 0 # Linke
j = 0 # AfD
k = 0 # Sorgen Linke
l = 0 # Sorgen Afd
for row in readCSV:
if (row[1])== 15:
i +=1
print(i)
Wie kann ich die Werte auslesen und mir über print(i) anzeigen lassen wie oft sie vorkommen?
if Befehl
- __blackjack__
- User
- Beiträge: 13928
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@Acid700: Beim öffnen der Datei fehlt das `newline`-Argument. Siehe Dokumentation vom `csv`-Modul.
Gewöhn Dir so schlechte Namen am besten gar nicht erst an. Wenn die nicht so nichtsagend wären, bräuchtest Du keine Kommentare um dem Leser zu vermitteln was sie bedeuten. Bei `i`, `j`, und `k` vermutet man Werte die als Index verwendet werden. Und `l` ist ein besonders schlechter Name, weil `l` in vielen Schriftarten `1` und `I` *sehr* ähnlich sieht.
`readCSV` ist kein guter Name für einen passiven Wert, denn Tätigkeiten als Namen bedeuten in der Regel das man eine Funktion vor sich hat.
Die Elemente von `row` sind Zeichenketten. Und eine Zeichenkette ist niemals gleich einer ganzen Zahl:
Wenn Du das Ergebnis von ``row[1]`` in eine ganze Zahl umwandelst, dann sind die runden Klammern dort auch nicht so überflüssig wenn Du sie für den `int()`-Aufruf verwendest.
Einrückung ist in Python wichtig. Die ist ja nicht mal im Quelltext von Deinem Beitrag erhalten geblieben, so dass die Code-Tags des Forums nicht mal etwas genutzt hätten. Bitte Quelltext mit Einrückung und in Code-Tags in den Beitrag schreiben.
Gewöhn Dir so schlechte Namen am besten gar nicht erst an. Wenn die nicht so nichtsagend wären, bräuchtest Du keine Kommentare um dem Leser zu vermitteln was sie bedeuten. Bei `i`, `j`, und `k` vermutet man Werte die als Index verwendet werden. Und `l` ist ein besonders schlechter Name, weil `l` in vielen Schriftarten `1` und `I` *sehr* ähnlich sieht.
`readCSV` ist kein guter Name für einen passiven Wert, denn Tätigkeiten als Namen bedeuten in der Regel das man eine Funktion vor sich hat.
Die Elemente von `row` sind Zeichenketten. Und eine Zeichenkette ist niemals gleich einer ganzen Zahl:
Code: Alles auswählen
In [311]: "15" == 15
Out[311]: False
Einrückung ist in Python wichtig. Die ist ja nicht mal im Quelltext von Deinem Beitrag erhalten geblieben, so dass die Code-Tags des Forums nicht mal etwas genutzt hätten. Bitte Quelltext mit Einrückung und in Code-Tags in den Beitrag schreiben.
Code: Alles auswählen
#!/usr/bin/env python3
import csv
def main():
with open("Datensatz1.2.csv", "r", encoding="utf-8", newline="") as file:
anzahl_linke = sum(
int(row[1]) == 15 for row in csv.reader(file, delimiter=";")
)
print(anzahl_linke)
if __name__ == "__main__":
main()
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware
das ist die überarbeitete Version soweit ich dien Tipps verstanden habe. Wie gesagt hab wirklich kaum ahnung und weiß teilweise nicht was gemient ist.
Ich habe den code nach bestem wissen erweitert, jedoch habe ich nicht ganz verstanden, wie ich mir das Ergebnis von row[] als ganze zahl anzeigen lassen kann.
Code: Alles auswählen
print("Deine Hypothsen lauten:")
print("1. Personen, welche als Parteipräferenz die Linke gewählt haben machen sich weniger Sorgen über die Zuwanderung von Flüchtlingen, als Personen die die AfD gewählt haben")
print("2. Männer machen sich mehr Sorgen über die Zuwanderung von Flüchtlingen als Frauen")
print("3. Männer verdienen mehr Geld als Frauen")
import csv
with open('Datensatz1.2.1.csv', 'r') as csvfile:
daten = csv.reader(csvfile, delimiter=";")
Linke = 0 # Linke
Afd = 0 # Rechte
SorgenLinke = 0 # Sorgen Linke
SorgenAfD = 0 # Sorgen Rechte
Männer = 0 # Männer
Frauen = 0 # Frauen
SorgenMänner = 0 # Sorgen Männer
SorgenFrauen = 0 # Sorgen Frauen
VerdienstMänner = 0 # Verdienst Männer
VerdienstFrauen = 0 # Verdienst Frauen
# Linke machen sich mehr Sorgen als Rechte
for row in daten:
if (row[1]) == '15':
Linke = Linke + 1
SorgenLinke = SorgenLinke + (row[2])
if (row[1]) == '25':
AfD = AfD + 1
SorgenAfD = SorgenAfD + (row[2])
if SorgenLinke >= SorgenAfD:
print("Hypothese 1 widerlegt!")
else:
print("Hypothese 1 trifft zu!")
#Männer machen sich mehr Sorgen als Frauen & Männer verdienen mehr Geld als Frauen
for line in daten:
if (row[0]) == '1':
Männer = Männer + 1
SorgenMänner = SorgenMänner + line[2]
VerdienstMänner = VerdienstMänner + line[3]
if (row[0]) == '2':
Frauen = Frauen + 1
SorgenFrauen = SorgenFrauen + line[2]
VerdienstFrauen = VerdienstFrauen + line[3]
if SorgenMänner >= SorgenFrauen:
print("Hypothese 2 trifft zu!")
else:
print("Hypothese 2 widerlegt!")
if VerdienstMänner >= VerdienstFrauen:
print("Hypothese 3 trifft zu!")
else:
print("Hypothese3 widerlegt!")
Warum steht in der ersten for-Schleife `for row in daten` und in der zweiten `for line in daten` und nutzt trotzdem row?
Wenn in der ersten Spalte ein String steht, warum denkst Du Du könntest in der zweiten und dritten Spalte so tun, als hättest Du Zahlen?
Warum verwendest Du nicht pandas?
Wenn in der ersten Spalte ein String steht, warum denkst Du Du könntest in der zweiten und dritten Spalte so tun, als hättest Du Zahlen?
Warum verwendest Du nicht pandas?
- __blackjack__
- User
- Beiträge: 13928
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich würde auch auf Pandas setzten.
Und die Summen zu vergleichen ist komisch bis unsinnig. Da will man wohl eher das artithmetische Mittel oder den Median zum Vergleich heranziehen.
Und die Summen zu vergleichen ist komisch bis unsinnig. Da will man wohl eher das artithmetische Mittel oder den Median zum Vergleich heranziehen.
“Java is a DSL to transform big Xml documents into long exception stack traces.”
— Scott Bellware
— Scott Bellware