Ciencia de datos, parte 1.
Un proyecto de ciencia de datos tiene varias fases:
- Entender el contexto y tener claro el objetivo.
- Entender las fuentes y datos.
- Transformar los datos. (algoritmos, transformaciones, visualizaciones)
- Evaluar los resultados, ¿vamos cumpliendo el objetivo?
- Implementar la solución.
Mi intención es crear una guía paso a paso para que cualquiera pueda trabajar en un proyecto de ciencia de datos y lo saque adelante de forma exitosa.
En esta sección voy a hacerle doble click al punto 2, entender las fuentes y datos. Para ello diseñé el siguiente código en python
def madunique(df):
names=list(df.columns)
unique=[]
for var_i in names:
unique.append(len(df[var_i].unique()))
df_unique=pd.DataFrame(unique,index=list(df.columns))
df_unique.columns=['unique']
return df_uniquedef madprofiling(df):
profiling=pd.DataFrame(df.dtypes)
profiling.columns=['type']
profiling.loc[profiling.type=='object', 'categorical'] = 1
profiling.loc[profiling.type!='object', 'categorical'] = 0
profiling['total']=(len(df))
profiling=pd.concat([profiling,madunique(df)],axis=1,sort=False)
profiling['null']=pd.DataFrame(df.isnull().sum())
profiling['na']=pd.DataFrame(df.isna().sum())
profiling['null_pcnt']=round(profiling.null/profiling.total,1)
profiling['na_pcnt']=round(profiling.na/profiling.total,1)
profiling=profiling.sort_values(by='null_pcnt')
return profiling
Que recibe un pandas dataframe y hace un perfilamiento de los datos, veamos un ejemplo.
Importamos los datos y cargamos en un pandas dataframe.
iris = pd.read_csv('https://raw.githubusercontent.com/mwaskom/seaborn-data/master/iris.csv')
Usamos la función.
madprofiling(iris)
Tenemos una vista 360° del data set. Sabemos el formato de cada campo (‘type’), sabemos si el campo es categorico o no (‘categorical’), sabemos el total de registros de cada campo (‘total’), el número de registros únicos por campo (‘unique’), el número de registros nulos por campo (‘null’), el número de registros tipo ‘na’ por campo y finalmente el porcentaje de registros tipo null y tipo na por campo.