2016-04-01 30 views
3

Ich versuche, lineare Regression mit Python zu implementieren.Lineare Regression mit Python (Pandas und Numpy)

Ich habe die folgenden Schritte:

import pandas as p 
import numpy as n 
data = p.read_csv("...path\Housing.csv", usecols=[1]) # I want the first col 
data1 = p.read_csv("...path\Housing.csv", usecols=[3]) # I want the 3rd col 
x = data 
y = data1 

Dann versuche ich, die Koeffizienten zu erhalten, und verwenden Sie die folgenden Schritte aus:

regression_coeff = n.polyfit(x,y,1) 

Und dann bekomme ich folgende Fehlermeldung:

raise TypeError("expected 1D vector for x") 
TypeError: expected 1D vector for x 

Ich bin nicht in der Lage, meinen Kopf herum, wie wenn ich x unddrucken, kann ich sehr deutlich sehen, dass sie beide 1D-Vektoren sind.

Kann mir bitte jemand helfen?

Datensatz finden Sie hier: DataSets

Der ursprüngliche Code ist:

import pandas as p 
import numpy as n 

data = pd.read_csv('...\housing.csv', usecols = [1]) 
data1 = pd.read_csv('...\housing.csv', usecols = [3]) 

x = data 
y = data1 
regression = n.polyfit(x, y, 1) 
+2

Es gibt keine * ist und verwenden Sie die folgende: *: –

+0

ich Sie nicht bekommen. –

+2

Sie haben wahrscheinlich vergessen, Ihren Code einzufügen. –

Antwort

4

Dies sollte funktionieren:

np.polyfit(data.values.flatten(), data1.values.flatten(), 1) 

data ist ein Datenrahmen und seine Werte sind 2D:

>>> data.values.shape 
(546, 1) 

flatten() verwandelt es in 1D-Array:

>> data.values.flatten().shape 
(546,) 

die für polyfit() benötigt wird.

Einfachere Alternative:

df = pd.read_csv("Housing.csv") 
np.polyfit(df['price'], df['bedrooms'], 1) 
+0

Vielen Dank Mike :) Es hat perfekt funktioniert. Kannst du bitte sagen, warum es funktioniert hat, als du die flatten() hinzugefügt hast, was hat es eigentlich gemacht? –

+0

Eine Erklärung hinzugefügt. –

2

Python sagen Ihnen, dass die Daten im richtigen Format nicht, insbesondere x muss ein 1D-Array sein, in Ihrem Fall ist es ein 2D-ish Panda-Array. Sie können Ihre Daten in ein numpliges Array transformieren und komprimieren, um Ihr Problem zu beheben.

import pandas as pd 
import numpy as np 

data = pd.read_csv('../Housing.csv', usecols = [1]) 
data1 = pd.read_csv('../Housing.csv', usecols = [3]) 
data = np.squeeze(np.array(data)) 
data1 = np.squeeze(np.array(data1)) 

x = data 
y = data1 
regression = np.polyfit(x, y, 1) 
+0

Wie ist es ein 2D-Array. Es ist deutlich zu sehen, dass ich nur eine Spalte nehme. Bitte führe mich zu einem besseren Verständnis. –

2

pandas.read_csv() liefert ein DataFrame, das zwei Dimensionen hat, während ein np.polyfit1D vector will sowohl x und y für einen einzigen Sitz. Sie können einfach die Ausgabe von read_csv() zu einem pd.Series wandeln die np.polyfit() Eingabeformat .squeeze() mit zum Spiel:

data = pd.read_csv('../Housing.csv', usecols = [1]).squeeze() 
data1 = p.read_csv("...path\Housing.csv", usecols=[3]).squeeze() 
+0

Arbeitete perfekt. Kannst du mir bitte einen grundlegenden Hintergrund geben oder zumindest einen Link für einen Ort zum Nachschlagen und Lernen bereitstellen? –

+0

Links zu relevanten Dokumenten hinzugefügt. – Stefan

Verwandte Themen