man sitting on chair infront of table while looking at laptop

Una guía paso a paso para crear en Python el gráfico actualizado de desigualdad e ingreso de Colombia

TUTORIALES

6 min read

En esta entrada vamos a replicar el gráfico 1 del “World Inequality Report 2022” para el caso de Colombia. Lo primero que hay que hacer es descargar el archivo que queremos, y subirlo a nuestro github. Para ello, vamos al perfil de Colombia en WID y damos a descargar base de datos completa

Jhonnathan Zambrano · 3/03/2024

Aquí obtendremos un archivo .zip, de donde extraeremos “WID_data_CO.csv”

Lo puedes subir a tu propio repositorio en github, o utilizar el que acabo de crear: Ahora, nos vamos a Google Colab para trabajar. El cuaderno de Google Colab que seguiré lo puedes consultar aquí :

Debemos importar el archivo. Por lo cual, importamos primero la librería pandas, definimos el objeto url; y, lo leemos para crear el data-frame, con la salvedad que los separadores son ";"

Finalmente, comprobamos con “df.head()” que todo se importó adecuadamente

Nota: el código del notebook (sin anotaciones) se puede encontrar en:

Lo siguiente que debemos hacer es encontrar la variable codificada que contiene la información requerida. Para ello, observamos el documento técnico de los datos       el cual menciona: 

pd.options.display.max_rows= None

pd.value_counts (df['year'])

Una vez que conocemos la organización de la información, hacemos el plan para filtrar los datos que necesitamos:

  1. Para obtener la distribución del ingreso del 50% más pobre: hay que obtener la variable “sptinc992j”, el percentil “p0p50”, y el año “2021”

  2. Para obtener la distribución del ingreso del 40% intermedio: hay que obtener la variable “sptinc992j”; sumar los percentiles “p30p40” + “p40p50”+ “p50p60” +” p60p70”; y el año “2021”

  3. Para obtener la distribución del ingreso para el 10% más rico: hay que obtener la variable “sptinc992j”, el percentil “p90p100”, y el año “2021”

  4. Para obtener la distribución del ingreso para el 1% más rico: hay que obtener la variable “sptinc992j”, el percentil “p99.1p100”, y el año “2021”

El proceso se repite de igual manera para la variable “shwealj992”. Para mayor información acerca de la utilidad de cada una de las se dejará la explicación de las diferentes funciones en el notebook de Google colab por medio del carácter #. 

El código para el caso de los ingresos sería:

a. Porcentaje del ingreso para el 50% más pobre

analisis="sptinc992j"

porcentaje=df[(df['variable']==analisis) & (df['percentile']=="p0p50") & (df['year']==2021)]

y1s=porcentaje['value'].values

y1=y1s[0]

b. cálculo del 40% intermedio

porcentaje=df[(df['variable']==analisis) & (df['percentile'].isin(["p40p50", "p50p60","p60p70","p70p80"])) & (df['year']==2021)]

y2s=porcentaje['value'].values

y2=y2s.sum()

c. calculos del 10%más ricos

porcentaje=df[(df['variable']==analisis) & (df['percentile']=="p90p100") & (df['year']==2021)]

y3s=porcentaje['value'].values

y3=y3s[0]

El código para el caso de la riqueza (con el mismo procedimiento) es:

analisis="shweal992j"

#50% más pobre

porcentaje=df[(df['variable']==analisis) & (df['percentile']=="p0p50") & (df['year']==2021)]

w1s=porcentaje['value'].values

w1=w1s[0]

#40% intermedio

porcentaje=df[(df['variable']==analisis) & (df['percentile'].isin(["p40p50", "p50p60","p60p70","p70p80"])) & (df['year']==2021)]

w2s=porcentaje['value'].values

w2=w2s.sum()

#10% más rico

porcentaje=df[(df['variable']==analisis) & (df['percentile']=="p90p100") & (df['year']==2021)]

w3s=porcentaje['value'].values

w3=w3s[0]

#1%más rico

porcentaje=df[(df['variable']==analisis) & (df['percentile']=="p99.1p100") & (df['year']==2021)]

w4s=porcentaje['value'].values

w4=w4s[0]

Los datos que obtenemos son:

Esta tabla se logró por medio de la organización de datos en un dataframe:

mydict={'percentiles':['50% pobre', 'intermedio',

'10% rico', '1% rico'],

'ingreso':[y1, y2, y3, y4],

'riqueza':[w1, w2, w3, w4]}

df1 = pd.DataFrame(mydict).set_index('percentiles')

df1.head()

Una vez que tenemos los datos ya depurados, podemos realizar la gráfica respectiva. En este caso, utilizamos las características que nos permite matplotlib.pyplot y matplotlib.patches, para escribir lo siguiente:

#variables y datos

percentiles=["50% pobre", "intermedio", "10% rico", "1% rico"]

ingreso=[y1, y2, y3, y4]

riqueza=[w1, w2, w3, w4]

colores=["b", "lightgreen", "r", "c"]

#eje x (co), ancho (an)

co=np.arange(len(percentiles))

an=0.7

#espacio (fig), definición de eje y (ingreso, riqueza)

fig, ax=plt.subplots()

ax.bar (co, ingreso, an, color= colores)

ax.bar (co+5.9, riqueza, an, color=colores)

#valores sobre las barras

for i, j in zip(co, ingreso):

ax.annotate(j, xy=(i-0.5, j+0.05))

for i, j in zip(co, riqueza):

ax.annotate(j, xy=(i+5.5, j+0.005))

#letreros: títulos y labels

ax.set_title('Desigualdad de ingresos y riqueza en Colombia 2021')

ax.set_ylabel('Porcentaje de ingreso y riqueza total')

#leyendas que no están en los ejes

pobre=mpatches.Patch(color='b', label='50% más pobre')

medio=mpatches.Patch(color='lightgreen', label='40% intermedio')

diezrico=mpatches.Patch(color='r', label='10% más rico')

unorico=mpatches.Patch(color='c', label='1% más rico')

plt.legend(handles=[pobre, medio, diezrico, unorico], loc=(1.05,0.4), fancybox=True) #localización, y borde redondeado

plt.show()

#letreros eje x

plt.xticks([1.5,7.8], ["Ingreso", "Riqueza"])

El resultado final es una gráfica de desigualdad de ingreso y desigualdad de riqueza, tal que:

Una vez terminado el gráfico ya podemos iniciar el análisis económico

Entrada de análisis

Gráfica 1. Desigualdad mundial de ingreso y de riqueza, 2021

Gráfica 2. Desigualdad nacional de ingreso y de riqueza, 2021

La inequidad del ingreso es medida usando la distribución del ingreso nacional antes de impuestos entre los adultos (serie dividida en partes iguales). La renta nacional antes de impuestos es la suma de todos los flujos de renta personal antes de impuestos que se acumulan para los propietarios de los factores de producción, el trabajo y el capital, incluidas las prestaciones de seguridad social, pero excluyendo otras formas de redistribución (impuesto sobre la renta, beneficios de asistencia social, etc.)

La inequidad de la riqueza es medida usando la distribución de la riqueza neta de los hogares entre los adultos (serie divida en partes iguales). El patrimonio neto de los hogares es la suma de los activos financieros (p.e. acciones o bonos) y los activos no financieros (p.e. viviendas o terrenos) de propiedad de las personas, netas de sus deudas

La desigualdad en nuestro país sigue el dibujo mundial: un 10% de la población tiene más ingresos que el 50% de los más pobres y el 40% de los percentiles intermedios

Adicional a ello, este 10% de ricos (barra roja) tiene una mayor participación en los cálculos de la riqueza, y menos en los de los ingresos. Lo cual implica que los percentiles bajos (barra azul) y medios (barra verde) retroceden en su participación (al pasar del análisis de ingresos al de la riqueza).

Ahora bien, tomando esta información, las variables que corresponden a dicha descripción en el documento “WID_meatadata_CO.csv” son:

  • Inequidad del ingreso medido como una proporción (share): sptinc992j,

  • Inequidad de la riqueza de los hogares como proporción (share): shwealj992

Analizamos cuáles son los atributos que poseemos en las columnas “percentile”, “year” y “age”, con lo cual, en el código configuramos, primero, que el Google Colab nos muestre una consulta completa (sin puntos suspensivos); y luego, para ver los atributos, contamos los valores de las columnas solicitadas (“percenile”, “year”, “age”).

Déjanos tu opinión en el foro de Discord