Manejo de datos básico con Python datatable

8 Oct

Nueva entrada dedicada al data management con Python, esta vez con datatable. No voy a justificar el uso de datatable antes que pandas, en un vistazo rápido por la web encontráis numerosas ocasiones en las que datatable es más eficiente que pandas en el manejo de datos con Python. En cuanto a la complejidad en el uso de uno u otro mi opinión no es objetiva porque  me cuesta mucho trabajar con Pandas.

Asumo que habéis instalado datatable en vuestro entorno de Python (siempre por encima de la versión 3.5) y una vez está instalado os propongo obtener un conjunto de datos del repositorio de analisisydecision. Por supuesto la carga de este csv de ejemplo la realizamos con datatable y la función fread:

import datatable as dt
path = 'https://raw.githubusercontent.com/analisisydecision/intro_python_data_science/master/'
dt_df = dt.fread(path + 'index.csv')
dt_df.head()

dt_df.shape

Hemos creado un data frame con datatable, podremos pasarlo a lista o a data frame en pandas con .to_pandas(). En la línea de siempre las tareas que vamos a revisar con datatable en Python son:

  • Seleccionar columnas
  • Eliminar columnas
  • Seleccionar registros
  • Crear nuevas variables
  • Sumarizar datos
  • Renombrar variables
  • Ordenar datos

Seleccionar columnas

df2 = dt_df[:,['Occupation','No of dependents']]
df2.head(5)

Siempre sugiero usar listas:

seleccionadas =['Occupation','No of dependents']
df2 = dt_df[:, seleccionadas]
df2.head(5)

Eliminar columnas

elimina = ['Creditability','Account Balance']
del dt_df[:, elimina]
dt_df.head()

Seleccionar registros

Primer ejemplo en el que usamos la variable de datatable f que nos permite referenciar elementos del data frame, veamos algunos ejemplos:

df4 = dt_df[dt.f['Duration of Credit (month)'] == 12, :]
df4.view()
df4 = dt_df[dt.f['Duration of Credit (month)'] != 12, :]
df4.head(5)

Empleamos paréntesis para condiciones más complejas:

df5 = dt_df[(dt.f['Duration of Credit (month)'] == 12) & (dt.f['Credit Amount']<=1500), :]
df5.head(5)

Podemos referenciar variables con la notación punto:

df5 = dt_df[(dt.f['Duration of Credit (month)'] != 12) & (dt.f.Occupation == 3), :]
df5.head(5)
df6 = dt_df[(dt.f.Purpose != 0) | (dt.f.Occupation == 3), :]
df6.head(5)

Creación de nuevas variables

media = dt_df['Credit Amount'].mean()
dt_df['dist_media'] = dt_df[:,  dt.f['Credit Amount']/media]
dt_df.head(5)

En datatable disponemos de la función ifelse para crear variables en base a condiciones:

media = dt.mean(dt_df['Credit Amount'])
dt_df['Mayor que la media'] = dt.ifelse( dt_df['Credit Amount'] > media , 
                                        "Por encima de la media", "Por debajo de la media")

Sumarizar datos

dt_df[:, dt.count(dt.f.Occupation), dt.by(dt.f['Mayor que la media'])]

Sumarizamos múltiples columnas:

resumen = dt_df[:, dt.mean(dt.f['Credit Amount']), dt.by(dt.f.Purpose,dt.f['Mayor que la media'])]
resumen.head(5)

Renombrar una columna

resumen.names = ['Media' if x == 'Credit Amount' else x for x in resumen.names]
resumen.head(5)

Ordenar datos

Orden ascendente:

orden = dt_df.sort('Credit Amount')
orden.head(5)

Orden descendente:

orden = dt_df[::-1,:, dt.sort(dt.f['Credit Amount'])]
orden.head(5)

En pocas líneas resumidas las principales tareas con datos con Python datatable. Saludos.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *