2017-09-07 3 views
0

Ich habe eine CSV-Datei mit vier Spalten. Jede Zeile in der ersten Spalte enthält einen Tweet und die zweite Spalte enthält das entsprechende Label (das ist einer der Buchstaben - A/N/Q/S -, die jeweils Actionable/Non-Actionable/Query/Suggestion darstellen). Die zweite Spalte enthält also grundsätzlich die Zielklasse.Pandas read_csv lädt Daten in die falschen Spalten

Die dritte und vierte Spalte sind noch nicht relevant.

Ich implementiere den Decision Tree Classifier.

Das Problem ist, dass der Klassifikator auch einige der Tweets als Etiketten behandelt. In der vorhergesagten Ausgabe, während ich eigentlich nur A, N, Q oder S hätte bekommen sollen, bekomme ich auch Tweets mit diesen Labels.

Nach dem Klassifikator-Code ist: dtree_csv.py

from sklearn.tree import DecisionTreeClassifier 
from sklearn.datasets import load_iris 
from sklearn.cross_validation import train_test_split 
from sklearn.metrics import accuracy_score 
from sklearn.decomposition import PCA 
import numpy as np 
import pandas as pd 
from sklearn.feature_extraction.text import TfidfVectorizer 

try: 
    df = pd.read_csv('tweet-class1.csv', header=None, sep=',',names=['tweets', 'class', 'dept', 'reply'],encoding='UTF-7',skipinitialspace=True) # columns names if no header 

    vect = TfidfVectorizer() 
    x = vect.fit_transform(df['tweets'].values.astype('U')) 
    y = df['class'] 

    SIZE=50 
    STEP=.02 

    train,test,train_lab,test_lab=train_test_split(x,y,test_size=.15,random_state=100) 

    clf=DecisionTreeClassifier() 
    clf.fit(train,train_lab) 

    output = clf.predict(test) 
    for row in output: 
     print row 
    print accuracy_score(test_lab,output) 

except UnicodeDecodeError as e: 
    print 'unicode error' 

Am laufenden dtree_csv.py, ist dies die Ausgabe-I auf dem Terminal sehen.

Screenshot of the output

Ich habe eine Menge Dinge ausprobiert:

  • verschiedene Kombinationen von Separatoren und Trennzeichen
  • TSV anstelle von CSV
  • Re-Import der ursprünglichen .xls-Datei in CSV
  • Umschalten der Codierung zwischen UTF-7 und UTF-8
  • Manuelles Scannen der CSV-Datei nach fehlerhaften Tweets

Nichts scheint zu funktionieren. Bitte lassen Sie mich wissen, was ich vermisse.

Antwort

0

Ich werde eine Vermutung wagen und sagen, dass einige Ihrer Tweets Kommas enthalten, und pandas diese Einträge falsch in die falschen Spalten segmentiert.

ein paar Dinge könnten Sie

  1. Entfernen Sie alle diese Spalten einen Filter und df.isin

    df = df[df['class'].isin(['A', 'N', 'Q', 'S'])] 
    
  2. entfernen Fremd NaN Reihen mit

mit

Die Alternative wäre, die Trennzeichen in Ihrer CSV manuell zu ändern oder die fraglichen Tweets zu bereinigen. Wenn Sie es sich leisten können, Daten zu verlieren, sollten Sie sie wahrscheinlich einfach fallen lassen.

Verwandte Themen