Analizar extractos bancarios con pandas & pyplot
La mayoría de aplicaciones bancarias te ofrecen una visualización de los datos bancarios, sin embargo es limitada y genérica para todos los usuarios, con nuestro propio notebook seremos libres de adaptarlo a nuestro estilo de vida, prepárate!
1. Estado Actual
Esta es la única parte que ha de ser editada por el usuario, se actualizan los datos y se visualiza dónde se tienen los ahorros y el progreso mensual de los mismos.
data = [['Banco', 3000],
['Inversiones', 2000],
['PayPal', 400],
['Préstamo', 1000]]
# creamos un dataframe
df_economia = pd.DataFrame(data, columns = ['Activo', 'Cantidad'])fig = px.pie(values=list(df_economia['Cantidad']), names=list(df_economia['Activo']), title='Distribución actual')
fig.update_traces(textposition='inside', textinfo='percent+label')
fig.show()
Después de un primer vistazo sobre el estado actual pasamos a procesar los datos para automatizar el análisis del extracto bancario
2. Procesamiento de datos
Leemos el extracto, por lo general los distintos bancos presentan un formato similar:
Comenzamos a tocar el dataframe, eliminamos columnas irrelevantes, renombramos, añadimos columna “Tipo” y eliminamos registros que no queramos evaluar, como por ejemplo traspasos internos (funcionamiento del banco).
df.drop([‘Fecha valor’, ‘Moneda’, ‘Moneda.1’, ‘Concepto ampliado’, ‘Saldo’], axis=1, inplace=True)df.rename(columns={“Fecha ctble” : “Fecha”, “Concepto” : “Desc”},inplace=True)
df[‘Fecha’] = pd.to_datetime(df[‘Fecha’])df[‘Tipo’]=df[‘Importe’].apply(lambda x: “ingreso” if x>0 else “gasto”)df.drop(df[df[‘Desc’].str.contains(“TRASPASO AUTOMATICO”)].index, inplace=True)
Ya hemos simplificado los registros del dataframe. A continuación, basándonos en las descripciones de los registros procedemos a la creación de las categorías, si contiene determinadas palabras o secuencia de caracteres será catalogado con una categoría en concreto. Para que se clasifique con la categoría supermercado se necesita que la descripción del registro contenga la secuencia de caracteres de los elementos de la lista supermercado.
#VERSION SIMPLIFICADA
supermercado = ['alimerka', 'toogoodtog', 'mercadona', 'masymas']
servicios = ['farmacia', 'brico', 'ferreteria', 'serv.']
transporte = ['station', 'gasoil', 'alsa', 'blabla']def agrupador(desc):
desc = desc.lower()if any(x in desc for x in supermercado):
categoria = 'supermercado'
elif any(x in desc for x in servicios):
categoria = 'servicios'
elif any(x in desc for x in deportes):
categoria = 'deportes'
else:
categoria = 'OTROS'
return categoria # aplicamos la funcion agrupador
df['Categoria'] = df['Desc'].apply(agrupador)
Se realizan las últimas modificaciones sobre el dataset, se crean dataframes de los distintos meses (más info en github) y listos para visualizar:
3. Análisis económico
Comenzamos viendo los ingresos y gastos de los últimos 4 meses, automatizado gracias a la librería datetime. El código es sencillo pero extenso, así pues lo evitamos y vemos directamente la visualización:
fig = px.bar(df_act[df_act['Tipo']=='gasto'].groupby(['Categoria'], as_index = False).sum(),
x='Categoria', y='Importe', title='Último mes de estudio', color='Categoria', text='Importe')fig.update_layout(xaxis={'categoryarray' : ['alquiler', 'servicios', 'supermercado', 'deportes']})
fig.update_traces(texttemplate='%{text:.2f}')fig.show()
Analizamos los gastos en función de las categorías del mes de estudio. En cada mes se ha de mejorar el agrupador de categorías para evitar la columna “otros” que representa los no categorizados.
Realizamos el mismo plot, en este caso tomando como datos el último cuatrimestre. Del mismo modo se puede hacer para todo el año, o semestre, etc.
Este análisis nos da una idea de cuanto estamos gastando e ingresando y en que sectores, permitiéndonos un mayor entendimiento y control de los gastos. ¿Qué aspecto echas en falta para mejorar el analisis?