2012-06-13 25 views

risposta

46

Questo non è un file CSV; questo è solo un file separato dallo spazio. Se non ci sono valori mancanti, si può facilmente caricare questo in una matrice Numpy chiamato data con

import numpy as np 

f = open("filename.txt") 
f.readline() # skip the header 
data = np.loadtxt(f) 

Se il prezzo del titolo è quello che si desidera prevedere (il valore del y, in scikit-learn termini), allora si dovrebbe dividere data utilizzando

X = data[:, 1:] # select columns 1 through end 
y = data[:, 0] # select column 0, the stock price 

in alternativa, si potrebbe essere in grado di massaggiare il standard Python csv module nella gestione di questo tipo di file.

+0

C'è un modo per mantenere i nomi delle funzionalità usando questo metodo? – AlexFZ

+1

@AlexFZ: non direttamente. Invece di solo 'f.readline()', puoi fare 'feature_names = f.readline(). Split()' o alcune varianti di esso (la riga dell'intestazione dell'OP non è separata da spazi). [Pandas] (http://pandas.pydata.org) ha una funzionalità migliore per questo. –

+4

Sebbene l'interrogante abbia fornito un file separato da spazi, la domanda è posta in relazione a un file di dati CSV. –

17

È possibile cercare la funzione loadtxt in numpy.

Per ottenere gli input opzionali nel metodo loadtxt.

Un semplice cambiamento di CSV è

data = np.loadtxt(fname = f, delimiter = ',') 
47

Una buona alternativa al numpy loadtxt è read_csv from Pandas. I dati vengono caricati in un dataframe di Pandas con il grande vantaggio di poter gestire tipi di dati misti come alcune colonne contengono testo e altre colonne contengono numeri. È quindi possibile selezionare facilmente solo le colonne numeriche e convertirle in un array numpy con as_matrix. Panda anche read/write excel files and a bunch of other formats.

Se abbiamo un file CSV denominato "mydata.csv":

point_latitude,point_longitude,line,construction,point_granularity 
30.102261, -81.711777, Residential, Masonry, 1 
30.063936, -81.707664, Residential, Masonry, 3 
30.089579, -81.700455, Residential, Wood , 1 
30.063236, -81.707703, Residential, Wood , 3 
30.060614, -81.702675, Residential, Wood , 1 

Questo leggerà in csv e convertire le colonne numeriche in un array NumPy per scikit_learn, quindi modificare l'ordine delle colonne e scrivere fuori un foglio Excel:

import numpy as np 
import pandas as pd 

input_file = "mydata.csv" 


# comma delimited is the default 
df = pd.read_csv(input_file, header = 0) 

# for space delimited use: 
# df = pd.read_csv(input_file, header = 0, delimiter = " ") 

# for tab delimited use: 
# df = pd.read_csv(input_file, header = 0, delimiter = "\t") 

# put the original column names in a python list 
original_headers = list(df.columns.values) 

# remove the non-numeric columns 
df = df._get_numeric_data() 

# put the numeric column names in a python list 
numeric_headers = list(df.columns.values) 

# create a numpy array with the numeric values for input into scikit-learn 
numpy_array = df.as_matrix() 

# reverse the order of the columns 
numeric_headers.reverse() 
reverse_df = df[numeric_headers] 

# write the reverse_df to an excel spreadsheet 
reverse_df.to_excel('path_to_file.xls') 
+0

Ok ma come creare uno scikit per apprendere il set di dati da quella matrice? –

+1

Scikit learn può prendere i dati dei panda come input quindi è quasi pronto. Supponendo che "point_granularity" sia la variabile target che potresti fare y = df ['point_granularity'] e X = df [['point_latitude' ', point_longitude', 'line, construction']] – denson

+1

Poiché alcune delle caratteristiche sono categoriche tu sarebbe necessario codificarli a caldo per la maggior parte dei modelli di scikit-learn: https://stackoverflow.com/a/43038709/1810559 – denson

0

uso NumPy per caricare csvfile

import numpy as np dataset = np.loadtxt('./example.csv', delimiter=",")

Problemi correlati