ganancias e ingresos, tendemos a atribuir el éxito al trabajo duro y la inteligencia. Otras veces, simplemente asumimos que ciertas personas tuvieron suerte y, a pesar de sus niveles educativos deficientes o su falta de experiencia, pudieron tener éxito en su profesión y ganar cómodamente. La verdad, sin embargo, se encuentra en cierto modo entre estos dos extremos. Sí, algunas personas tienen suerte y se convierten en millonarias a una edad temprana, pero también vemos personas que trabajan duro para ascender en su carrera y se esfuerzan donde sea necesario para impulsarse profesionalmente y, por lo tanto, aumentar sus ingresos.
En este artículo, usaremos Python para explorar la relación de los ingresos con diferentes factores, a saber, edad, género, profesión, nivel de educación, etc. Aunque en la era actual, trazar gráficos y derivar conocimientos, es muy importante que sepamos cómo extraer conocimientos de los datos sin procesar combinando el análisis humano con la potencia informática. eso requiere ciertos conocimientos previos de los fundamentos de Python. Al utilizar Python y sus poderosas bibliotecas de procesamiento de datos, identificaremos algunos patrones predecibles que nos ayudarán a obtener información sobre los factores que influyen en los ingresos en general, ¡de acuerdo con el conjunto de datos que usaremos!
El proyecto
En este proyecto, nos sumergiremos en un conjunto de datos censales con la ayuda de Python y utilizaremos algunas de sus potentes bibliotecas de análisis de datos, como pandas, matplotlib y seaborn, para descubrir patrones de ingresos. Con la ayuda de herramientas de limpieza de datos, visualización de datos y análisis exploratorio, convertiremos estos datos sin procesar en información valiosa sobre qué factores influyen en los ingresos y en qué medida. Este es un proyecto de programación Python de nivel principiante a intermedio que espera que usted conozca los fundamentos básicos de Python, especialmente cómo importar y usar funciones de diferentes bibliotecas para la exploración y el análisis de datos.
El conjunto de datos
En este proyecto, utilizaremos el conjunto de datos de ingresos del censo de adultos, que es un conjunto de datos del mundo real derivado de los datos del censo de EE. UU. Aunque este conjunto de datos se remonta a la década de 1990, podemos usarlo para derivar patrones de ingresos con el margen de que las cosas han cambiado en 30 años, especialmente en términos de la brecha de género que antes era muy dominante. Este conjunto de datos contiene información demográfica y relacionada con el empleo, incluida la edad de la persona, ocupación, nivel de educación, estado civil, género, horas de trabajo, etc., la mayoría de los cuales son valiosos para el propósito de nuestro proyecto. Este conjunto de datos está disponible públicamente y se utiliza comúnmente para proyectos educativos y de investigación.
Conjunto de datos: Conjunto de datos sobre ingresos del censo de adultos
Fuente: Repositorio de aprendizaje automático de la UCI (CC BY 4.0)
Datos originales derivados de la base de datos de la Oficina del Censo de EE. UU.
Ahora, ¡comencemos!
Inicializando el entorno de codificación
Antes de comenzar, asegurémonos de tener nuestro entorno de codificación configurado correctamente. Para ello, asegúrese de que Python esté instalado en su sistema y abra un IDE de programación de su elección. Usaré PyCharm por su naturaleza amigable para principiantes y accesibilidad de paquetes.
Primero, creemos un nuevo proyecto llamado "Análisis de patrones de ingresos de adultos" y creemos un archivo Python main.py. Aquí es donde haremos nuestra codificación.
Instalación e importación de bibliotecas relevantes
A continuación, instalemos las bibliotecas/paquetes de Python relevantes. Usaremos las siguientes bibliotecas para la exploración y el análisis de datos:
Pandas: esta es una de las bibliotecas más populares que ayuda a trabajar con datos tabulares como archivos CSV. Matplotlib: esta biblioteca de Python permite crear gráficos, cuadros y otras visualizaciones de datos. Seaborn: esta es una biblioteca construida en matplotlib, que extiende la visualización de datos en gran medida, haciendo que los cuadros y gráficos sean más fáciles de hacer y más bonitos.
Instalaremos las bibliotecas anteriores usando la opción de terminal en PyCharm (busque cómo instalarlas para su IDE particular).
pip instalar pandas matplotlib seaborn
Una vez que se complete la instalación, continuaremos e importaremos estas bibliotecas a nuestro archivo main.py.
importar pandas como pd importar matplotlib.pyplot como plt importar seaborn como sns
Cargando el conjunto de datos y el análisis básico
Ahora, cargaremos el conjunto de datos como un marco de datos en una variable llamada df. Esta es la forma estándar de la biblioteca de Pandas de cargar el conjunto de datos en un marco de datos para usarlo en el futuro:
df = pd.read_csv("https://huggingface.co/api/resolve-cache/datasets/scikit-learn/adult-census- Income/fbeef6ec0e6fd88a5028b94683144000a6b380d5/ad " imprimir(df.head())
Como puede ver, primero cargamos el conjunto de datos desde la URL compartida anteriormente y luego usamos la función df.head() para imprimir las primeras 5 filas del conjunto de datos para tener una idea de cómo se ve. Podemos ver algunos nombres de columnas: edad, clase laboral, peso corporal, horas por semana, país de origen e ingresos. Aquí vemos las líneas de puntos entre fnlweight y hours.per.week, lo que sugiere que también existen otras columnas que no se pudieron mostrar correctamente debido al espacio limitado en la pantalla de salida. Esto se puede resolver usando algunas líneas de código (lo veremos más adelante).
Ahora, veamos cuántas filas y columnas tiene nuestro conjunto de datos. Haremos esto usando el comando df.shape que generará el número de filas y columnas, para que tengamos una idea de qué tan grande es el conjunto de datos con el que estamos tratando.
imprimir (df.forma)
Por último, obtengamos la versión detallada de la columna, incluido el tipo de datos que almacenan:
imprimir(df.info())
Como se puede ver en los resultados anteriores, nuestro conjunto de datos es una combinación de características categóricas y numéricas con los siguientes nombres de columnas:
Privado → Empleado de empresa privada
Self-emp-not-inc → Autónomo (no incorporado)
Gobierno → Empleado del gobierno
Sin salario → Trabajador no remuneradofnlwgtPeso muestral final asignado por la Oficina del CensoEducaciónNivel educativo más alto completado:
Licenciaturas
Graduado HS
Maestros
Doctorateeducation.num Representación numérica del nivel educativo:
Escuela Secundaria → 9
Licenciaturas → 13
Maestría → 14estado.maritalEstado civil de la personaocupaciónTipo de trabajo/profesiónrelaciónEstado civil dentro del hogar:
Marido
Esposa
propio hijo
Raza no familiarCategoría racialsexoGéneroganancia.de.capitalBeneficio obtenido de inversiones/activospérdida.de.capitalPérdida incurrida por inversiones/activoshoras.por.semanaPromedio de horas de trabajo por semanapaís.nativoPaís de origeningresosCategoría de ingresos (variable objetivo)
Generalmente: <=50K o >50K
Ahora, mostremos las primeras 5 filas con sus columnas completas. Ejecute el siguiente código para obtener las primeras 5 columnas sin truncamiento:
imprimir(df.head().to_string())
Limpieza de datos
Ahora que hemos realizado nuestra descripción general genérica de cómo se ven los datos, podemos pasar a la parte de análisis. Pero antes de eso, es muy importante que nuestros datos estén limpios y sean valiosos para obtener información valiosa; en otras palabras, no queremos que nuestros datos sean inexactos o que les falten valores, lo que podría sesgar las métricas del análisis. Por este motivo, limpiaremos los datos eliminando filas con valores faltantes.
Usaremos la función pandas replace() para reemplazar los signos de interrogación con NA y eliminaremos las filas que contienen valores faltantes de nuestro marco de datos usando la función dropna(). Por lo tanto, cualquier fila a la que le falte una ocupación, información educativa o algo similar se eliminará del marco de datos. También podemos ver que varias filas se eliminan del marco de datos con el siguiente código:
print("Antes de limpiar:", len(df)) df = df.replace("?", pd.NA).dropna() print("Después de limpiar:", len(df))
Como puede verse, ahora que se ha limpiado nuestro conjunto de datos, nos quedan solo 30.162 filas de las 32.561 filas iniciales.
Análisis General de Ingresos
¡Comencemos nuestro análisis de datos desde aquí! Sabemos que el criterio de ingresos se almacena en la columna ingresos, que es mayor que 50k o menor que 50k. También tenga en cuenta que estos son los datos del censo de 1994, ¡así que no se sorprenda con las cifras!
Visualicemos los datos sobre los ingresos:
#Gráfico de ingresos sns.countplot(x="ingresos", data=df) plt.show()
Hemos utilizado la biblioteca seaborn de Python para crear un gráfico de recuento de los ingresos.
Como se puede ver en el gráfico anterior, la mayoría de las personas ganaban menos de 50.000, mientras que un porcentaje menor ganaba más de 50.000. El gráfico no sólo destaca una distribución desequilibrada del ingreso, sino que también proporciona una instantánea de la estructura económica de los EE. UU. a principios de la década de 1990, donde 50.000 dólares se consideraban un salario anual relativamente alto.
Ingresos en relación al Análisis de Educación
Ahora, veamos cómo el nivel educativo afecta los ingresos. Esto parece ser de particular interés porque en general se considera que las personas con educación superior tienden a ganar mucho más que las personas con educación mínima o menor. Comprobemos si los datos verifican esto:
#Educación y relación de ingresos resultado = df.groupby("educación")["ingresos"].value_counts() print(resultado)
#Relación de educación e ingresos resultado = df.groupby("educación")["ingresos"].value_counts().unstack() # Trazar result.plot(kind="bar", figsize=(12,6)) # Etiquetas y título plt.title("Educación vs ingresos") plt.xlabel("Nivel de educación") plt.ylabel("Count") plt.xticks(rotation=45) # Mostrar gráfico plt.mostrar()
Los resultados anteriores apuntan a cómo la educación superior es un factor que conduce a mayores ingresos en general. Aunque esto no se puede visualizar a partir del resultado de pandas groupby(), hemos utilizado el gráfico de recuento de nacidos en el mar para darnos una idea de cómo los diferentes niveles educativos influyen en el rango de ingresos de los individuos.
Se ve así que:
Hay una población insignificante de personas con un nivel educativo inferior al de “alguna universidad” que gana más de 50.000 dólares. La educación superior se correlaciona fuertemente con mayores ingresos, ya que la mayoría de las más de 50.000 personas tienen una educación de licenciatura, maestría, título universitario, etc. La educación secundaria domina el grupo de menores ingresos, lo que se puede ver con la barra azul más alta. Los títulos profesionales y doctorados tienen una barra naranja más alta que una barra azul, lo que implica que tienen un mayor porcentaje de personas que ganan más de 50 mil, lo que tiene sentido ya que las personas son altamente recompensadas por su especialidad técnica. Curiosamente, en la población altamente educada, no todos ganan más de 50 mil, lo que significa que hay otros factores vitales que influyen en los ingresos además del nivel educativo. ¡Hagamos un análisis más profundo con las otras columnas!
Análisis de Ingresos en relación a Horas Semanales
Veamos ahora si el trabajo duro se recompensa tal como está, es decir, ¿las personas que trabajan más horas tienden a obtener mayores ingresos? Las siguientes líneas de código utilizan un diagrama de caja para analizar si existe una relación particular entre los ingresos y las horas semanales:
# Mostrar gráfico sns.boxplot(x="ingresos", y="horas.por.semana", data=df) plt.show()
Como se puede ver en el diagrama de caja anterior, la población que gana más de 50 mil tiene una mediana más alta, una distribución más amplia y más personas que trabajan muchas horas. Esto concuerda con nuestra suposición de que sí, las personas que trabajan más horas a la semana generalmente tienden a tener ingresos más altos que otras. Pero, por otro lado, tenemos otra observación interesante con respecto a los valores atípicos del cuadro de la izquierda, lo que implica que hay ciertas personas que trabajan más de 70 horas y aún así ganan menos de 50.000. Esto significa que, aunque las personas con ingresos más altos suelen trabajar más horas a la semana, las largas jornadas de trabajo por sí solas no garantizan un salario alto. Hay más factores además del nivel educativo y las horas semanales, ¡así que pasemos al siguiente parámetro!
Ingresos en relación al Análisis de Género
Sabemos que se ha hablado mucho sobre la brecha de género y la discriminación salarial entre empleados masculinos y femeninos que desempeñan la misma descripción de trabajo, pero ¿fue así en la década de 1990 y, de ser así, en qué medida?
Visualicemos esto con la ayuda de un gráfico de barras:
resultado = df.groupby("sex")["ingresos"].value_counts().unstack() # Trazar con colores personalizados ax = result.plot( kind="bar", figsize=(10,6), color=["skyblue", "blue"] ) # Agregar etiquetas en las barras para el contenedor en ax.containers: ax.bar_label(container) # Títulos y etiquetas plt.title("Distribución de ingresos por género") plt.xlabel("Género") plt.ylabel("Conteo") plt.xticks(rotation=0) # Mostrar gráfico plt.show()
Como se puede ver en el gráfico anterior sobre la distribución del ingreso por género, podemos decir fácilmente que había significativamente más hombres que ganaban más de 50 mil que mujeres. Además, la mayoría de la población femenina del conjunto de datos se encuentra en la categoría de ingresos de menos de 50.000 personas. simplemente podemos concluir que el porcentaje de hombres que ganan altos ingresos es mayor que el porcentaje de mujeres.
Ingresos en relación con el análisis de la clase laboral
Ahora, avancemos y veamos cómo varían los ingresos entre las diferentes clases laborales. Para ello, veamos primero las diferentes clases de trabajo y luego creemos un gráfico de barras para el análisis visual.
print(df["workclass"].unique()) # Seleccionar clases de trabajo top_workclasses = df["workclass"].value_counts().head(7).index filtered_df = df[df["workclass"].isin(top_workclasses)] # Crear gráfico plt.figure(figsize=(10,6)) sns.countplot( data=filtered_df, x="workclass", hue="ingresos" ) # Títulos y etiquetas plt.title("Distribución de ingresos entre categorías de clases laborales") plt.xlabel("Clase laboral") plt.ylabel("Número de individuos") plt.xticks(rotation=15) plt.show()
El gráfico de barras anterior muestra que la mayoría de las personas en nuestro conjunto de datos trabajaban en el sector privado, lo que lo convierte en la categoría de empleo dominante. En casi todas las clases laborales, el número de personas que ganan menos de 50.000 es significativamente mayor que el de aquellos que ganan más de 50.000. Los trabajadores autónomos incorporados (Self-emp-inc) parecen tener una proporción de ingresos altos relativamente más fuerte en comparación con algunos sectores gubernamentales.
Ingresos en relación al Análisis de Ocupación
Ahora, veamos cómo la ocupación afectó los ingresos a través de una simple declaración impresa.
resultado = df[df["ingresos"] == ">50K"]["ocupación"].value_counts().head(10) print(resultado)
En el código anterior, hemos accedido a las 10 ocupaciones principales en las que las personas ganaban más de 50.000. Como se puede ver en el resultado anterior, la ocupación más alta fue la de “gerencia ejecutiva”, luego la de “especialidad profesional”, etc. Esto significa que los roles ejecutivos, las profesiones técnicas y el trabajo calificado especializado tienen un mayor potencial de ingresos que otros.
Ingresos en relación al análisis de edad
A continuación, veamos cómo la edad afectaba los ingresos.
# Crear figura plt.figure(figsize=(10,6)) # Diagrama de caja sns.boxplot( x="ingresos", y="edad", data=df ) # Títulos y etiquetas plt.title("Edad vs patrón de ingresos") plt.xlabel("Categoría de ingresos") plt.ylabel("Edad") # Mostrar gráfico plt.show()
Como se puede ver en la imagen de arriba, hemos creado un gráfico simple que muestra 2 cuadros, uno que define la categoría de ingresos de menos de 50 mil y el otro que muestra más de 50 mil. Podemos ver en el gráfico que la gente más joven se encontraba en su mayoría en la categoría de menos de 50 mil, con algunos valores atípicos de edad avanzada en esta categoría. También podemos ver que la edad media de las personas con ingresos altos es notablemente más alta, lo que sugiere que los ingresos tienden a aumentar con la edad y la experiencia. Esto refleja cómo el crecimiento profesional, la experiencia y la antigüedad a menudo conducen a salarios más altos con el tiempo.
Hallazgos clave y conclusión
En este artículo, hemos analizado exhaustivamente el conjunto de datos del censo de EE. UU. de 1994 para descubrir tendencias en los ingresos con respecto a diferentes factores, a saber: edad, género, ocupación, clase laboral, horas semanales, etc. Los siguientes fueron los hallazgos clave:
La mayoría de la población pertenece a la categoría de ingresos más bajos. La educación generalmente aumenta la probabilidad de obtener ingresos más altos. Las horas de trabajo sí importan, pero sólo ligeramente; ¡No hay garantía de mayores ingresos por todas las horas semanales adicionales! La ocupación es uno de los factores más importantes en las personas de mayores ingresos; ¡Ciertos puestos de trabajo son suficientes para tener mayores ingresos! Los ingresos generalmente aumentan con la edad.
Hemos utilizado pandas, matplotlib y seaborn de Python no solo para limpiar datos, sino también para analizarlos con la ayuda de gráficos y gráficos. Prácticamente podemos concluir de este análisis que el ingreso no está determinado por un solo factor; más bien, ¡es una combinación de educación, ocupación, experiencia y oportunidad!