De los datos proporcionados por SCHP, se eligen algunas columnas para trabajar la información y se exploran las relaciones entre los montos registrados por mes, año, mes-año y año-sector. La intención es responder las siguientes preguntas sencillas:
Fuente: SHCP
In [2]:
#%%librerias
import matplotlib
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import pandas as pd
%matplotlib inline
In [3]:
#%% tipo de grafico
plt.rcParams['figure.figsize']=(20,7)
In [6]:
#%% cargar datos
data = pd.read_csv('../../data/ingresos.csv')
In [7]:
#%% checar la informacion
data.head()
Out[7]:
In [8]:
#%% numero de filas y columnas
data.shape
Out[8]:
In [9]:
#%% descripcion general de las variables
data.info()
In [10]:
#%% tipo de dato
data.dtypes
Out[10]:
In [11]:
#%% nombre de las columnas
data.columns
Out[11]:
In [12]:
#%% seleccionamos las columnas mas importantes
dataP = data[['CICLO','MES','NOMBRE','TEMA','SECTOR','MONTO']]
In [13]:
#%% desplegar dataP
dataP.head()
Out[13]:
In [14]:
#%% cual es el anio con mayor monto registrado
group1 = dataP.groupby('CICLO')
In [15]:
#%% cantidad de registros para cada anio
group1.size()
Out[15]:
In [16]:
#%% sumatoria de registros para cada anio
group1.sum()
Out[16]:
In [17]:
#%% cantidad de registros en cada mes
group2 = dataP.groupby('MES')
In [18]:
#%% cantidad de registros para cada mes
group2.size()
Out[18]:
In [19]:
#%% media
group2.mean()
Out[19]:
La variable ciclo se despliega como una variable númerica para desplegar la media solo del monto
In [20]:
group2.mean()['MONTO']
Out[20]:
Si se desea saber cual es el mes con la media de montos mayor, basta elegi el máximo de los valores de las medias al ordenarlas. En este caso corresponde al mes de Diciembre
In [21]:
group2['MONTO'].mean().sort_values()[-1:]
Out[21]:
In [22]:
#%% agrupamos la informacion por anio y mes para conocer como se comportan los montos
group3 = dataP.groupby(['CICLO', 'MES'])
In [23]:
#%% vemos el valor de la suma de los montos
group3.sum()
Out[23]:
In [24]:
#%% para elegir los 5 registros con los montos mas altos, hacemos la siguiente seleccion al group3
group3.sum().sort_values(by='MONTO')[-5:]
Out[24]:
Se puede revisar como se comporta por CICLO y SECTOR, elegimos los 15 registros con valor mas alto en la suma de su MONTO
In [25]:
group4 = dataP.groupby(['CICLO', 'SECTOR']).sum().sort_values(by='MONTO')[-15:].plot(kind='bar')
In [26]:
#%% mostrar cantidad, sumatoria, max y min en valores
group1['MONTO'].agg([np.size, sum, max, min])
Out[26]:
In [27]:
#%% comparativo entre maximo y minimo
group1['MONTO'].agg([max, min]).plot(kind='bar')
Out[27]:
In [28]:
#%% se explora como se comporta la agrupacion por mes, mediante una grafica de barras
group2['MONTO'].agg([max, min, np.mean])
Out[28]:
Los datos originales permiten explorar graficamente como se relacionan los valores de los montos con respecto a los meses
In [29]:
sns.barplot(data=dataP, x='MES', y='MONTO', palette='PRGn')
Out[29]:
In [30]:
#%% explorar los datos agrupados por anio-mes
group3['MONTO'].agg([max, min, np.mean]).plot(title='Comportamiento de la suma de los montos')
Out[30]: