Snippets utiles en Python

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8872
Registrado: 09 May 2012 01:38

Snippets utiles en Python

Mensajepor Dalamar » 06 Nov 2017 15:31

Comprobar el uso de memoria de dataframes en Pandas:

Código: Seleccionar todo

#check memory use for the two biggest files - train and test
mem_train = train.memory_usage(index=True).sum()
mem_test=test.memory_usage(index=True).sum()
print("train dataset uses ",mem_train/ 1024**2," MB")
print("test dataset uses ",mem_test/ 1024**2," MB")
# checking contents in train
test.head()
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8872
Registrado: 09 May 2012 01:38

Re: Snippets utiles en Python

Mensajepor Dalamar » 06 Nov 2017 15:32

Ver el numero de lineas de cada archivo, desde Linux:

Código: Seleccionar todo

files=check_output(["ls", "../input"]).decode("utf8")
#Check the number of row of each file
for file in files.split("\n"):
    path='../input/'+file
    popenobj=subprocess.Popen(['wc', '-l', path], stdout=subprocess.PIPE,
                                              stderr=subprocess.PIPE)
    result,error= popenobj.communicate()
    print("The file :",file,"has :",result.strip().split()[0],"rows")
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8872
Registrado: 09 May 2012 01:38

Re: Snippets utiles en Python

Mensajepor Dalamar » 06 Nov 2017 15:33

Parece que puede ser una buena idea dividir la fecha en 3 columnas:

Split date column into three columns:
There are two reasons to do this
    In pandas any operation on column of type "datetime" is not vectorized.Hence any operations on it will take more time
    Splitting it into three columns will provide better memory utilization. Eg: in the test dataset date col uses approx. 25 mb while storenbr(uint8) uses approx. 3 mb
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!

Avatar de Usuario
Dalamar
Site Admin
Mensajes: 8872
Registrado: 09 May 2012 01:38

Re: Snippets utiles en Python

Mensajepor Dalamar » 12 Nov 2017 09:45

Ver las columnas:

Código: Seleccionar todo

import pandas as pd
df = pd.read_csv('file.csv')
col_names = hr.columns.tolist()
print("Column names:")
print(col_names)


Ver tipos de datos:

Código: Seleccionar todo

df.dtypes


Ver si hay nulls y en que columnas:

Código: Seleccionar todo

df.isnull().any()


Ver numero de columnas y numero de rows:

Código: Seleccionar todo

df.shape


Para columnas categoricas:

Código: Seleccionar todo

df['columna'].unique()


Para la columna que predecimos, ver si hay imbalance:

Código: Seleccionar todo

df['predicted'].value_counts()



Para ver la distribucion basandose en el campo a predecir.

Código: Seleccionar todo

df.groupby('predicted').mean()


Para ver una graficas de barras dependiendo de una "feature" y el campo a predecir:

Código: Seleccionar todo

%matplotlib inline
import matplotlib.pyplot as plt
pd.crosstab(df.feature1,df.predicted).plot(kind='bar')
plt.title('Predicted Frequency for Feature1')
plt.xlabel('Feaute1')
plt.ylabel('Frequency of Predicted')
plt.savefig('feature1_bar_chart')


Para ver una grafica de barras en porcentajes, basado en el campo a predecir y un feature:

Código: Seleccionar todo

table=pd.crosstab(df.feature2, df.predicted)
table.div(table.sum(1).astype(float), axis=0).plot(kind='bar', stacked=True)
plt.title('Stacked Bar Chart of Feature2 vs Predicted')
plt.xlabel('Feature 2 Level')
plt.ylabel('Proportion of Predicted')
plt.savefig('feature2_bar_chart')


Histograma de todas las variables numericas:

Código: Seleccionar todo

num_bins = 10

df.hist(bins=num_bins, figsize=(20,15))
plt.savefig("df_histogram_plots")
plt.show()


Crear Dummy Variables para las variables categoricas: (Donde 8 y 9 son las posiciones de las var categoricas en el dataframe)

Código: Seleccionar todo

cat_vars=['categ1','categ2']
for var in cat_vars:
    cat_list='var'+'_'+var
    cat_list = pd.get_dummies(df[var], prefix=var)
    df11=df.join(cat_list)
    df=df1
df.drop(df.columns[[8, 9]], axis=1, inplace=True)


Separar las variables y la prediccion:

Código: Seleccionar todo

df_vars=df.columns.values.tolist()
y=['left']
X=[i for i in df_vars if i not in y]


Usar Recursive Feature Elimination (RFE) para analizar que variables/features con las mas que mas contribuyen:

Código: Seleccionar todo

from sklearn.feature_selection import RFE
from sklearn.linear_model import LogisticRegression

model = LogisticRegression()

rfe = RFE(model, 10)
rfe = rfe.fit(df[X], df[y])
print(rfe.support_)
print(rfe.ranking_)


Regresion ligistica simple basada en lo anterior:

Código: Seleccionar todo


cols=['selected_rfe_feature1', 'selected_rfe_feature2', 'selected_rfe_feature3', 'selected_rfe_feature4']

X=df[cols]
y=df['predicted']

from sklearn.cross_validation import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)

from sklearn.linear_model import LogisticRegression
from sklearn import metrics
logreg = LogisticRegression()
logreg.fit(X_train, y_train)

from sklearn.metrics import accuracy_score
print('Logistic regression accuracy: {:.3f}'.format(accuracy_score(y_test, logreg.predict(X_test))))
¿Te ha gustado este hilo? Compartelo en las redes sociales para que se sume mas gente a la conversacion!


Volver a “Competiciones de Kaggle”

Ingresar