2012-06-13 69 views

Respuesta

46

Esto no es un archivo CSV; esto es solo un archivo separado por espacios. Asumiendo que no hay valores que faltan, puede cargar fácilmente esta en una matriz de Numpy llamada data con

import numpy as np 

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

Si el precio de las acciones es lo que quiere para predecir (su valor y, en scikit-learn términos), entonces debe dividir data usando

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

Alternativamente, es posible que pueda dar masajes a la standard Python csv module en el manejo de este tipo de archivo.

+0

¿Hay alguna manera de mantener los nombres de las funciones con este método? – AlexFZ

+1

@AlexFZ: no directamente. En lugar de simplemente 'f.readline()', puede hacer 'feature_names = f.readline(). Split()' o alguna variante de la misma (la línea del encabezado del OP no está bien separada del espacio). [Pandas] (http://pandas.pydata.org) tiene una funcionalidad más agradable para esto. –

+4

Aunque el interlocutor proporcionó un archivo separado por espacios, la pregunta se plantea con respecto a un archivo de datos csv. –

17

Puede buscar la función loadtxt en numpy.

Para obtener las entradas opcionales en el método loadtxt.

Un simple cambio de CSV es

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

Una muy buena alternativa a numpy loadtxt es read_csv from Pandas. Los datos se cargan en un marco de datos de Pandas con la gran ventaja de que puede manejar tipos de datos mixtos, como algunas columnas contienen texto y otras columnas contienen números. A continuación, puede seleccionar fácilmente solo las columnas numéricas y convertir a una matriz numpy con as_matrix. Pandas también será read/write excel files and a bunch of other formats.

Si tenemos un archivo CSV denominado "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 

Esto permitirá la lectura en el csv y convertir las columnas numéricas en una matriz de numpy scikit_learn, a continuación, modificar el orden de las columnas y escribir hacia fuera a una hoja de cálculo 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

Bien, pero ¿cómo crear un juego de datos scikit learn a partir de esa matriz? –

+1

Scikit learn puede tomar los dataframes de pandas como entradas para que esté casi listo. Suponiendo que "point_granularity" es la variable objetivo, puede hacer y = df ['point_granularity'] y X = df [['point_latitude' ', point_longitude', 'line, construction']] – denson

+1

Dado que algunas de las características son categóricas necesitaría una codificación en caliente para la mayoría de los modelos de scikit-learn: https://stackoverflow.com/a/43038709/1810559 – denson

0

uso numpy para cargar csvfile

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

Cuestiones relacionadas