Seite 1 von 1

CSV Datei auswerten

Verfasst: Montag 27. April 2020, 18:04
von Python-Neuling
Hallo,
ich beschäftige mich erst seit kurzem mit Python und stehe ein wenig auf dem Schlauch.
Und zwar würde ich gerne eine csv Datei auswerten, und gerne folgenden Output pro Zelle bekommen : aus wie vielen Wörtern die einzelnen Kommentare bestehen und wie viele positive und negative Wörter in den einzelnen Kommentaren vorkommen. Bei dem ersten Kommentar zb. Wörter=4, positive Wörter: 1 und negative Wörter=0.
Ich habe schon versucht das ganze mit openpyxl oder pandas zu lösen, aber weiß nicht was der richtige Ansatz ist...

Person II Kommentar
A II Der Baum ist schön
B II Die Frau ist nett und freundlich
C II Die Spinne ist hässlich
D II Die Frau ist hübsch aber unfreundlich

Re: CSV Datei auswerten

Verfasst: Montag 27. April 2020, 19:08
von __blackjack__
@Python-Neuling: In der Standardbibliothek gibt es das `csv`-Modul. Mit `pandas` könnte man die Datei auch einlesen, aber ich denke das Modul ist letztlich komplizierter als es für diese Aufgabe nötig ist.

`openpyxl` ist für Excel-Dateien, nicht für CSV-Dateien.

Re: CSV Datei auswerten

Verfasst: Montag 27. April 2020, 21:40
von Python-Neuling
Vielen Dank für den Hinweis.
Ich verstehe halt nicht ganz wie ich auf die einzelnen Kommentare zugreife und diese auswerte.. Daher hatte ich es erst als xlsx datei und openpyxl probiert um auf die einzelnen Zellen zugreifen zu können.
Wie ich die Häufigkeit eines Wortes im gesamten Dokument bestimme oder die Textlänge eines Textes weiß ich, nur nicht wie ich auf die einzelnen Zellen zugreife :(

Re: CSV Datei auswerten

Verfasst: Dienstag 28. April 2020, 05:33
von Sirius3
Das csv-Modul liefert Listen, eine pro Zeile, und auf Listen kann man per Index zugreifen.

Re: CSV Datei auswerten

Verfasst: Dienstag 28. April 2020, 16:37
von Python-Neuling
Vielen Dank, da habe ich wohl zu kompliziert gedacht. :roll:

Habt ihr einen Tipp wie ich es schaffe das ich als Ergebnis die Anzahl der einzelnen Wörter der Liste pro Kommentar erhalte? :)


import csv

liste=["schön","nett"]

with open ("desktop/test.csv","r") as file:
for line in file:
data=line.strip().split(";")

if data[0]=="Person":
continue

Kommentar=data[1]

print(Kommentar.count(liste))

Re: CSV Datei auswerten

Verfasst: Dienstag 28. April 2020, 17:08
von __blackjack__
@Python-Neuling: Warum verwendest Du denn das `csv`-Modul nicht? Das Format ist ein bisschen komplizierter als einfach nur an ";" teilen. Das funktioniert nur solange Du Daten hast die eine Untermenge von CSV-Dateien sind. Zellen können beispielsweise mehr als eine Zeile enthalten und/oder das Trennzeichen.

Beim öffnen von Textdateien sollte man immer die Kodierung angeben.

Wenn Du die erste Zeile überspringen willst, dann mach das vor der Schleife und nicht durch testen von *jedem* Datensatz ob die erste Zelle "Person" ist. Von ``continue`` würde ich auch die Finger lassen. Das macht den Programmfluss komplizierter und kann in der Regel sehr leicht anders ausgedrückt werden.

Namen schreibt man in Python klein_mit_unterstrichen. Ausnahmen sind Konstanten (KOMPLETT_GROSS) und Klassen (MixedCase).

`liste` ist kein guter Name. Grunddatentypen haben in Namen nichts zu suchen und man will auch nicht wissen welchen Typ man da hat, sondern was der Wert im Kontext des Programms bedeutet.

Die letzte Zeile führt zu einem `TypeError` der auch verrät was für ein Datentyp bei `count()` als Argument übergeben werden müsste:

Code: Alles auswählen

In [149]: "test".count(["a", "b"])                                              
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-149-ac9cb3a9b97c> in <module>
----> 1 "test".count(["a", "b"])

TypeError: must be str, not list
Du wirst das zählen von jedem Wort in der Liste programmieren müssen. Und vielleicht auch so, dass "nett" nicht gefunden wird, wenn da "nettobereinigt" im Text steht, aber doch wenn da einfach nur "Nett!" als Satz steht.

Programmieren funktioniert oft so das man Probleme in kleinere Teilprobleme zerlegt. Und die dann wieder in kleinere Teilprobleme. Solange bis man die einzelnen Teilprobleme mit einer Funktion mit wenigen Zeilen Code lösen kann. So eine Teillösung testet man dann, und schreibt dann die nächste Teillösung. Solange bis am Ende das Gesamtproblem gelöst ist.

Eventuell können hier reguläre Ausdrücke und das `re`-Modul hilfreich sein.