Tema a abordar¶
Sysarmy es una comunidad de sistemas que nuclea a profesionales del área para favorecer el contacto y el intercambio de conocimiento de manera informal. Desde el 2014 realizan una encuesta anónima para saber cómo se encuentran los sysadmins (y otros profesionales) en su ambiente laboral, a partir de la cual se desprenden distintos analisis de datos para brindar información sobre la industria IT en Argentina.
Carga e información general del Dataset¶
Para trabajar en el analisis voy a utilizar la biblioteca Pandas junto a otras vistas en clase. Pandas es una de las bibliotecas más utilizadas para analizar y manipular datos. Nos permite trabajar con una nueva estructura de datos, los Data Frame, que permite visualizar los datos en forma de tabla. Además proporciona una gran cantidad de funciones para manipular y transformar los Data Frame de forma sencilla, rápida y cómoda, proporcionando herramientas para poder leer datos y convertirlos en Data Frames de forma automática.
- Pandas >>> pandas.pydata.org
- Numpy >>> numpy.org
- MatPLotLib >>> matplotlib.org
- Seaborn >>> seaborn.pydata.org
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
pd.options.display.max_columns=None
sysarmy_data = pd.read_csv("2023_Sysarmy_Encuesta_remuneración_salarial.csv")
# Información general del dataset
datos = sysarmy_data.info()
print("Resumen general del dataset: \n\n", datos)
<class 'pandas.core.frame.DataFrame'> RangeIndex: 5805 entries, 0 to 5804 Data columns (total 43 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Estoy trabajando en 5805 non-null object 1 Dónde estás trabajando 5805 non-null object 2 Dedicación 5805 non-null object 3 Tipo de contrato 5805 non-null object 4 Último salario mensual o retiro BRUTO (en tu moneda local) 5805 non-null float64 5 Último salario mensual o retiro NETO (en tu moneda local) 5566 non-null float64 6 Pagos en dólares 1940 non-null object 7 Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron? 1193 non-null object 8 RecibÃs algún tipo de bono 5805 non-null object 9 A qué está atado el bono 5805 non-null object 10 ¿Tuviste actualizaciones de tus ingresos laborales durante 2023? 5805 non-null object 11 ¿De qué % fue el ajuste total acumulado? 5805 non-null float64 12 ¿En qué mes fue el último ajuste? 5805 non-null object 13 Cómo considerás que están tus ingresos laborales comparados con el semestre anterior 5805 non-null int64 14 ¿Contás con beneficios adicionales? 5805 non-null object 15 ¿Qué tan conforme estás con tus ingresos laborales? 5805 non-null int64 16 Trabajo de 5805 non-null object 17 Años de experiencia 5805 non-null float64 18 Antigüedad en la empresa actual 5805 non-null float64 19 Tiempo en el puesto actual 5805 non-null float64 20 ¿Cuántas personas a cargo tenés? 5805 non-null int64 21 Plataformas que utilizas en tu puesto actual 5803 non-null object 22 Lenguajes de programación o tecnologÃas que utilices en tu puesto actual 5803 non-null object 23 Frameworks, herramientas y librerÃas que utilices en tu puesto actual 5802 non-null object 24 Bases de datos 5802 non-null object 25 QA / Testing 5800 non-null object 26 Cantidad de personas en tu organización 5805 non-null object 27 Modalidad de trabajo 5805 non-null object 28 Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina? 5805 non-null int64 29 ¿La recomendás como un buen lugar para trabajar? 5805 non-null int64 30 ¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo? 5805 non-null int64 31 ¿Salir o seguir contestando? 5805 non-null object 32 Máximo nivel de estudios 2613 non-null object 33 Estado 2613 non-null object 34 Carrera 2521 non-null object 35 Institución educativa 2038 non-null object 36 ¿Salir o seguir contestando sobre las guardias? 2613 non-null object 37 ¿Tenés guardias? 1744 non-null object 38 Cuánto cobrás por guardia 1744 non-null float64 39 Aclará el número que ingresaste en el campo anterior 1744 non-null object 40 ¿Salir o seguir contestando sobre estudios? 1744 non-null object 41 Tengo (edad) 5805 non-null int64 42 Me identifico (género) 5805 non-null object dtypes: float64(7), int64(7), object(29) memory usage: 1.9+ MB Resumen general del dataset: None
Análisis exploratorio¶
Revisaremos y mostraremos:
- cuántas variables y registros tiene el dataset
- los primeros y últimos registros
- los tipos de datos y las caracterÃsticas general del dataset
Exploraremos las columnas para ver cómo están armadas:
- de tipo categóricas
- de tipo numéricas
# Tamaño del dataset
reg_tam = str(sysarmy_data.shape)
print("El dataset contiene:", reg_tam[1:5], "filas y", reg_tam[7:9],"columnas")
El dataset contiene: 5805 filas y 43 columnas
# Mostrar los primeros 10 registros del dataset
reg_head = sysarmy_data.head(10)
print("Los primeros registros son: \n\n", reg_head)
Los primeros registros son:
Estoy trabajando en Dónde estás trabajando Dedicación \
0 Argentina Catamarca Full-Time
1 Argentina Catamarca Full-Time
2 Argentina Catamarca Full-Time
3 Argentina Chaco Part-Time
4 Argentina Chaco Full-Time
5 Argentina Chaco Full-Time
6 Argentina Chaco Full-Time
7 Argentina Chaco Full-Time
8 Argentina Chaco Full-Time
9 Argentina Chaco Full-Time
Tipo de contrato \
0 Staff (planta permanente)
1 Staff (planta permanente)
2 Staff (planta permanente)
3 Staff (planta permanente)
4 Tercerizado (trabajo a través de consultora o ...
5 Staff (planta permanente)
6 Staff (planta permanente)
7 Staff (planta permanente)
8 Staff (planta permanente)
9 Staff (planta permanente)
Último salario mensual o retiro BRUTO (en tu moneda local) \
0 680000.0
1 650000.0
2 125000.0
3 190000.0
4 250000.0
5 276000.0
6 340000.0
7 364000.0
8 509000.0
9 426000.0
Último salario mensual o retiro NETO (en tu moneda local) \
0 520000.0
1 520000.0
2 104000.0
3 240000.0
4 207000.0
5 229000.0
6 250000.0
7 312000.0
8 360000.0
9 354000.0
Pagos en dólares \
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 Cobro todo el salario en dólares
9 NaN
Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron? \
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 NaN
6 NaN
7 NaN
8 NaN
9 NaN
RecibÃs algún tipo de bono A qué está atado el bono \
0 No No recibo bono
1 No No recibo bono
2 No No recibo bono
3 No No recibo bono
4 No No recibo bono
5 No No recibo bono
6 No No recibo bono
7 Un sueldo Performance de la compañÃa
8 Menos de un sueldo Performance grupal
9 No No recibo bono
¿Tuviste actualizaciones de tus ingresos laborales durante 2023? \
0 Uno
1 Dos
2 No
3 Dos
4 Dos
5 Uno
6 Uno
7 Dos
8 Uno
9 Uno
¿De qué % fue el ajuste total acumulado? ¿En qué mes fue el último ajuste? \
0 26.0 Abril
1 24.0 Mayo
2 0.0 No tuve
3 11.0 Mayo
4 60.0 Mayo
5 27.0 Marzo
6 70.0 Mayo
7 27.0 Abril
8 8.0 Enero
9 12.0 Abril
Cómo considerás que están tus ingresos laborales comparados con el semestre anterior \
0 2
1 2
2 3
3 1
4 1
5 3
6 1
7 3
8 2
9 3
¿Contás con beneficios adicionales? \
0 Abono de Internet, Clases de idiomas, Crédito ...
1 Ninguna de las anteriores
2 Abono de Internet, Capacitaciones y/o cursos,
3 Capacitaciones y/o cursos, Descuento en gimnas...
4 Ninguna de las anteriores
5 Capacitaciones y/o cursos, Horarios flexibles
6 Ninguna de las anteriores
7 Abono de Internet, Clases de idiomas, Horarios...
8 Abono de Internet, Capacitaciones y/o cursos, ...
9 Capacitaciones y/o cursos, Descuento en gimnas...
¿Qué tan conforme estás con tus ingresos laborales? Trabajo de \
0 2 Infosec
1 3 DevOps Engineer
2 3 Developer
3 2 Business Analyst
4 1 QA / Tester
5 2 Data Engineer
6 2 Developer
7 3 Business Analyst
8 2 Developer
9 3 Developer
Años de experiencia Antigüedad en la empresa actual \
0 10.0 1.0
1 23.0 2.0
2 0.0 0.0
3 2.0 2.0
4 3.0 0.0
5 1.0 1.0
6 2.0 2.0
7 11.0 2.0
8 4.0 3.0
9 20.0 0.0
Tiempo en el puesto actual ¿Cuántas personas a cargo tenés? \
0 1.0 0
1 2.0 4
2 0.0 0
3 0.0 0
4 0.0 1
5 1.0 0
6 1.0 0
7 8.0 0
8 3.0 0
9 0.0 0
Plataformas que utilizas en tu puesto actual \
0 Amazon Web Services, Linux
1 Docker, Kubernetes, Linux, VMWare, Windows Server
2 Ninguna de las anteriores
3 Azure, SAP, CRM
4 Docker, Linux
5 Amazon Web Services
6 Docker, Linux
7 Ninguna de las anteriores
8 Amazon Web Services, Docker, Kubernetes, Linux
9 Docker, Linux
Lenguajes de programación o tecnologÃas que utilices en tu puesto actual \
0 Bash/Shell, Python
1 Bash/Shell, CSS, HTML, Javascript, PHP, SQL, T...
2 SQL, Oracle APEX, PL-SQL, SQL Developer
3 ABAP
4 Java
5 Python, SQL
6 CSS, HTML, Javascript, TypeScript
7 SQL
8 Bash/Shell, HTML, Javascript, PHP
9 HTML, Javascript, PHP
Frameworks, herramientas y librerÃas que utilices en tu puesto actual \
0 Angular
1 Angular, Bootstrap, jQuery, Laravel, Node.js
2 Ninguno de los anteriores
3 Ninguno de los anteriores
4 Lippia
5 Ninguno de los anteriores
6 Next.js, Node.js, React.js
7 Ninguno de los anteriores
8 Angular, Flask, Laravel, Node.js
9 Framework propio de la empresa
Bases de datos \
0 Ninguna de las anteriores
1 MariaDB, Microsoft SQL Server, MongoDB, MySQL,...
2 Oracle
3 Microsoft Azure (Tables, CosmosDB, SQL, etc)
4 Ninguna de las anteriores
5 MariaDB, Microsoft SQL Server, MySQL, Oracle, ...
6 MongoDB, MySQL
7 Microsoft SQL Server, PostgreSQL
8 MySQL, PostgreSQL
9 MySQL
QA / Testing \
0 Ninguna de las anteriores
1 PHPUnit, Postman
2 Ninguna de las anteriores
3 Ninguna de las anteriores
4 Appium, Cucumber, Lippia, Selenium
5 Ninguna de las anteriores
6 Jest, Postman
7 Postman, SoapUI
8 Cucumber, Cypress, Jest, Postman, Puppeteer, S...
9 PHPUnit, Libreria Facker propia de la empresa
Cantidad de personas en tu organización Modalidad de trabajo \
0 De 201 a 500 personas 100% remoto
1 De 201 a 500 personas 100% presencial
2 De 11 a 50 personas 100% remoto
3 De 501 a 1000 personas HÃbrido (presencial y remoto)
4 De 51 a 100 personas 100% remoto
5 De 11 a 50 personas 100% remoto
6 De 2 a 10 personas 100% remoto
7 De 201 a 500 personas 100% remoto
8 De 201 a 500 personas 100% remoto
9 De 101 a 200 personas 100% remoto
Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina? \
0 0
1 0
2 0
3 1
4 0
5 0
6 0
7 0
8 0
9 0
¿La recomendás como un buen lugar para trabajar? \
0 5
1 4
2 10
3 7
4 7
5 3
6 7
7 7
8 7
9 8
¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo? \
0 0
1 1
2 3
3 3
4 2
5 3
6 2
7 1
8 1
9 0
¿Salir o seguir contestando? Máximo nivel de estudios Estado \
0 Terminar encuesta NaN NaN
1 Responder sobre mis estudios MaestrÃa Completo
2 Terminar encuesta NaN NaN
3 Terminar encuesta NaN NaN
4 Terminar encuesta NaN NaN
5 Responder sobre mis estudios Universitario Completo
6 Terminar encuesta NaN NaN
7 Responder sobre mis estudios MaestrÃa Completo
8 Terminar encuesta NaN NaN
9 Terminar encuesta NaN NaN
Carrera \
0 NaN
1 Licenciatura en Sistemas de Información
2 NaN
3 NaN
4 NaN
5 Analista Universitario de Sistemas
6 NaN
7 IngenierÃa en Sistemas de Información
8 NaN
9 NaN
Institución educativa \
0 NaN
1 Universidad Siglo 21
2 NaN
3 NaN
4 NaN
5 UTN - Universidad Tecnológica Nacional
6 NaN
7 UTN - Universidad Tecnológica Nacional
8 NaN
9 NaN
¿Salir o seguir contestando sobre las guardias? ¿Tenés guardias? \
0 NaN NaN
1 Terminar encuesta NaN
2 NaN NaN
3 NaN NaN
4 NaN NaN
5 Responder sobre guardias SÃ, pasiva
6 NaN NaN
7 Terminar encuesta NaN
8 NaN NaN
9 NaN NaN
Cuánto cobrás por guardia \
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 0.0
6 NaN
7 NaN
8 NaN
9 NaN
Aclará el número que ingresaste en el campo anterior \
0 NaN
1 NaN
2 NaN
3 NaN
4 NaN
5 Porcentaje de mi sueldo bruto
6 NaN
7 NaN
8 NaN
9 NaN
¿Salir o seguir contestando sobre estudios? Tengo (edad) \
0 NaN 36
1 NaN 45
2 NaN 29
3 NaN 23
4 NaN 32
5 Terminar encuesta 28
6 NaN 28
7 NaN 34
8 NaN 30
9 NaN 52
Me identifico (género)
0 Varón Cis
1 Varón Cis
2 Mujer Cis
3 Mujer Cis
4 Varón Cis
5 Varón Cis
6 Varón Cis
7 Varón Cis
8 Varón Cis
9 Varón Cis
# Mostrar los últimos 10 registros del dataset
reg_tail = sysarmy_data.tail(10)
print("Los ultimos registros son: \n\n", reg_tail)
Los ultimos registros son:
Estoy trabajando en Dónde estás trabajando Dedicación \
5795 Argentina Tucumán Full-Time
5796 Argentina Tucumán Full-Time
5797 Argentina Tucumán Full-Time
5798 Argentina Tucumán Full-Time
5799 Argentina Tucumán Full-Time
5800 Argentina Tucumán Full-Time
5801 Argentina Tucumán Full-Time
5802 Argentina Tucumán Full-Time
5803 Argentina Tucumán Full-Time
5804 Argentina Tucumán Part-Time
Tipo de contrato \
5795 Staff (planta permanente)
5796 Staff (planta permanente)
5797 Staff (planta permanente)
5798 Staff (planta permanente)
5799 Tercerizado (trabajo a través de consultora o ...
5800 Contractor
5801 Staff (planta permanente)
5802 Contractor
5803 Staff (planta permanente)
5804 Tercerizado (trabajo a través de consultora o ...
Último salario mensual o retiro BRUTO (en tu moneda local) \
5795 660000.0
5796 160000.0
5797 186000.0
5798 275000.0
5799 428692.0
5800 327000.0
5801 620000.0
5802 1500000.0
5803 690000.0
5804 160000.0
Último salario mensual o retiro NETO (en tu moneda local) \
5795 491000.0
5796 135000.0
5797 167000.0
5798 230000.0
5799 355814.0
5800 275000.0
5801 470000.0
5802 1150000.0
5803 525000.0
5804 160000.0
Pagos en dólares \
5795 Cobro parte del salario en dólares
5796 Mi sueldo está dolarizado (pero cobro en moned...
5797 NaN
5798 NaN
5799 Mi sueldo está dolarizado (pero cobro en moned...
5800 Cobro parte del salario en dólares
5801 NaN
5802 Cobro todo el salario en dólares
5803 Cobro parte del salario en dólares
5804 NaN
Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron? \
5795 2581
5796 NaN
5797 NaN
5798 NaN
5799 249,24
5800 260
5801 NaN
5802 500
5803 249
5804 NaN
RecibÃs algún tipo de bono A qué está atado el bono \
5795 No No recibo bono
5796 No No recibo bono
5797 No No recibo bono
5798 No No recibo bono
5799 No No recibo bono
5800 No No recibo bono
5801 De uno a tres sueldos Performance de la compañÃa
5802 No No recibo bono
5803 No No recibo bono
5804 Un sueldo No recibo bono
¿Tuviste actualizaciones de tus ingresos laborales durante 2023? \
5795 Más de tres
5796 Dos
5797 Dos
5798 Uno
5799 No
5800 No
5801 Dos
5802 No
5803 Más de tres
5804 Dos
¿De qué % fue el ajuste total acumulado? \
5795 60.0
5796 25.0
5797 11.0
5798 30.0
5799 0.0
5800 0.0
5801 40.0
5802 0.0
5803 30.0
5804 20.0
¿En qué mes fue el último ajuste? \
5795 Julio
5796 Mayo
5797 Junio
5798 Mayo
5799 No tuve
5800 Enero
5801 Julio
5802 No tuve
5803 Junio
5804 Junio
Cómo considerás que están tus ingresos laborales comparados con el semestre anterior \
5795 3
5796 2
5797 2
5798 4
5799 3
5800 2
5801 4
5802 3
5803 2
5804 3
¿Contás con beneficios adicionales? \
5795 Abono de Internet
5796 Ninguna de las anteriores
5797 Horarios flexibles
5798 Clases de idiomas, Comidas pagas / subvencionadas
5799 Abono de Internet, Capacitaciones y/o cursos, ...
5800 Abono de Internet, Capacitaciones y/o cursos, ...
5801 Capacitaciones y/o cursos, Descuento en gimnas...
5802 Capacitaciones y/o cursos, Clases de idiomas, ...
5803 Abono de Internet, Capacitaciones y/o cursos, ...
5804 Descuento en gimnasios / Clases de gimnasia on...
¿Qué tan conforme estás con tus ingresos laborales? \
5795 3
5796 1
5797 1
5798 4
5799 3
5800 2
5801 4
5802 2
5803 3
5804 2
Trabajo de Años de experiencia \
5795 QA / Tester 13.0
5796 QA / Tester 1.0
5797 QA / Tester 2.0
5798 HelpDesk 1.0
5799 Developer 1.5
5800 Developer 2.0
5801 Desarrollo web junior 1.0
5802 Developer 5.0
5803 Developer 7.0
5804 HelpDesk 0.0
Antigüedad en la empresa actual Tiempo en el puesto actual \
5795 8.0 1.0
5796 1.0 1.0
5797 1.0 1.0
5798 0.0 0.0
5799 1.5 0.0
5800 2.0 0.0
5801 0.0 0.0
5802 2.0 2.0
5803 5.0 5.0
5804 0.0 0.0
¿Cuántas personas a cargo tenés? \
5795 15
5796 0
5797 0
5798 1
5799 0
5800 0
5801 0
5802 0
5803 0
5804 0
Plataformas que utilizas en tu puesto actual \
5795 Azure, Jira, confluence
5796 Azure, Ninguna de las anteriores
5797 Windows Server,
5798 Docker, Google Cloud Platform, Linux
5799 Amazon Web Services, Docker
5800 Azure
5801 Google Cloud Platform, OpenStack, Windows Server
5802 Docker, Linux, VMWare
5803 Ninguna de las anteriores
5804 Windows Server
Lenguajes de programación o tecnologÃas que utilices en tu puesto actual \
5795 Ninguno de los anteriores
5796 Ninguno de los anteriores
5797 Javascript, SQL
5798 Bash/Shell, SQL
5799 Java
5800 .NET, C#, SQL
5801 HTML, Java, Javascript, PHP, Python, SQL, Type...
5802 Java, Javascript, SQL
5803 Java, SQL
5804 C#, SQL
Frameworks, herramientas y librerÃas que utilices en tu puesto actual \
5795 Ninguno de los anteriores
5796 Ninguno de los anteriores
5797 Ninguno de los anteriores
5798 Ninguno de los anteriores
5799 Ninguno de los anteriores
5800 .NET Core
5801 Angular
5802 Hibernate, React.js, Spring
5803 Hibernate, Spring
5804 .NET Core
Bases de datos \
5795 Ninguna de las anteriores
5796 ASE sql
5797 MySQL, ASEiSQL
5798 MySQL
5799 Amazon DynamoDB, ElasticSearch
5800 Microsoft SQL Server
5801 MySQL
5802 MariaDB, MySQL, Redis
5803 Microsoft SQL Server
5804 Microsoft SQL Server
QA / Testing \
5795 Postman, Selenium
5796 Postman, SoapUI
5797 Cucumber, Postman, Test Complete, JMeter
5798 Postman
5799 JUnit
5800 Xunit
5801 Jest
5802 Jest, JUnit
5803 JUnit, Postman
5804 Cypress
Cantidad de personas en tu organización Modalidad de trabajo \
5795 Más de 10000 personas 100% remoto
5796 De 101 a 200 personas 100% remoto
5797 De 201 a 500 personas 100% remoto
5798 De 51 a 100 personas HÃbrido (presencial y remoto)
5799 De 201 a 500 personas 100% remoto
5800 De 201 a 500 personas HÃbrido (presencial y remoto)
5801 De 51 a 100 personas 100% remoto
5802 De 501 a 1000 personas 100% remoto
5803 De 101 a 200 personas 100% remoto
5804 De 11 a 50 personas HÃbrido (presencial y remoto)
Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina? \
5795 0
5796 0
5797 0
5798 3
5799 0
5800 1
5801 0
5802 0
5803 0
5804 2
¿La recomendás como un buen lugar para trabajar? \
5795 3
5796 6
5797 5
5798 10
5799 8
5800 0
5801 10
5802 0
5803 7
5804 0
¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo? \
5795 0
5796 1
5797 3
5798 4
5799 3
5800 0
5801 0
5802 1
5803 0
5804 2
¿Salir o seguir contestando? Máximo nivel de estudios Estado \
5795 Responder sobre guardias Universitario Incompleto
5796 Terminar encuesta NaN NaN
5797 Terminar encuesta NaN NaN
5798 Terminar encuesta NaN NaN
5799 Responder sobre mis estudios Universitario En curso
5800 Responder sobre mis estudios Universitario En curso
5801 Terminar encuesta NaN NaN
5802 Terminar encuesta NaN NaN
5803 Responder sobre mis estudios Posgrado/Especialización En curso
5804 Responder sobre mis estudios Terciario En curso
Carrera \
5795 IngenierÃa en Sistemas de Información
5796 NaN
5797 NaN
5798 NaN
5799 IngenierÃa en Sistemas de Información
5800 Tecnicatura Superior en Programación
5801 NaN
5802 NaN
5803 IngenierÃa en Computación
5804 Tecnicatura en Programación
Institución educativa \
5795 UTN - Universidad Tecnológica Nacional
5796 NaN
5797 NaN
5798 NaN
5799 UTN - Universidad Tecnológica Nacional
5800 UTN - Universidad Tecnológica Nacional
5801 NaN
5802 NaN
5803 NaN
5804 UTN - Universidad Tecnológica Nacional
¿Salir o seguir contestando sobre las guardias? ¿Tenés guardias? \
5795 Terminar encuesta No
5796 NaN NaN
5797 NaN NaN
5798 NaN NaN
5799 Responder sobre guardias No
5800 Terminar encuesta NaN
5801 NaN NaN
5802 NaN NaN
5803 Terminar encuesta NaN
5804 Terminar encuesta No
Cuánto cobrás por guardia \
5795 0.0
5796 NaN
5797 NaN
5798 NaN
5799 0.0
5800 NaN
5801 NaN
5802 NaN
5803 NaN
5804 0.0
Aclará el número que ingresaste en el campo anterior \
5795 Neto
5796 NaN
5797 NaN
5798 NaN
5799 Porcentaje de mi sueldo bruto
5800 NaN
5801 NaN
5802 NaN
5803 NaN
5804 Porcentaje de mi sueldo bruto
¿Salir o seguir contestando sobre estudios? Tengo (edad) \
5795 Responder sobre mis estudios 40
5796 NaN 32
5797 NaN 27
5798 NaN 31
5799 Terminar encuesta 30
5800 NaN 29
5801 NaN 36
5802 NaN 30
5803 NaN 39
5804 Responder sobre mis estudios 28
Me identifico (género)
5795 Varón Cis
5796 Varón Cis
5797 Varón Cis
5798 Varón Cis
5799 Varón Cis
5800 Hombre
5801 Prefiero no decir
5802 Varón Cis
5803 Varón Cis
5804 Varón Cis
# Lista con nombres de las columnas
columnas = sysarmy_data.columns
print("Listado de columnas: \n\n", columnas)
Listado de columnas:
Index(['Estoy trabajando en', 'Dónde estás trabajando', 'Dedicación',
'Tipo de contrato',
'Último salario mensual o retiro BRUTO (en tu moneda local)',
'Último salario mensual o retiro NETO (en tu moneda local)',
'Pagos en dólares',
'Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron?',
'RecibÃs algún tipo de bono', 'A qué está atado el bono',
'¿Tuviste actualizaciones de tus ingresos laborales durante 2023?',
'¿De qué % fue el ajuste total acumulado?',
'¿En qué mes fue el último ajuste?',
'Cómo considerás que están tus ingresos laborales comparados con el semestre anterior',
'¿Contás con beneficios adicionales?',
'¿Qué tan conforme estás con tus ingresos laborales?', 'Trabajo de',
'Años de experiencia', 'Antigüedad en la empresa actual',
'Tiempo en el puesto actual', '¿Cuántas personas a cargo tenés?',
'Plataformas que utilizas en tu puesto actual',
'Lenguajes de programación o tecnologÃas que utilices en tu puesto actual',
'Frameworks, herramientas y librerÃas que utilices en tu puesto actual',
'Bases de datos', 'QA / Testing',
'Cantidad de personas en tu organización', 'Modalidad de trabajo',
'Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina?',
'¿La recomendás como un buen lugar para trabajar?',
'¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo?',
'¿Salir o seguir contestando?', 'Máximo nivel de estudios', 'Estado',
'Carrera', 'Institución educativa',
'¿Salir o seguir contestando sobre las guardias?', '¿Tenés guardias?',
'Cuánto cobrás por guardia',
'Aclará el número que ingresaste en el campo anterior',
'¿Salir o seguir contestando sobre estudios?', 'Tengo (edad)',
'Me identifico (género)'],
dtype='object')
# Tipos de datos
tipos = sysarmy_data.dtypes
print("Los tipos de datos que contiene el dataset son:\n\n", tipos)
Los tipos de datos que contiene el dataset son: Estoy trabajando en object Dónde estás trabajando object Dedicación object Tipo de contrato object Último salario mensual o retiro BRUTO (en tu moneda local) float64 Último salario mensual o retiro NETO (en tu moneda local) float64 Pagos en dólares object Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron? object RecibÃs algún tipo de bono object A qué está atado el bono object ¿Tuviste actualizaciones de tus ingresos laborales durante 2023? object ¿De qué % fue el ajuste total acumulado? float64 ¿En qué mes fue el último ajuste? object Cómo considerás que están tus ingresos laborales comparados con el semestre anterior int64 ¿Contás con beneficios adicionales? object ¿Qué tan conforme estás con tus ingresos laborales? int64 Trabajo de object Años de experiencia float64 Antigüedad en la empresa actual float64 Tiempo en el puesto actual float64 ¿Cuántas personas a cargo tenés? int64 Plataformas que utilizas en tu puesto actual object Lenguajes de programación o tecnologÃas que utilices en tu puesto actual object Frameworks, herramientas y librerÃas que utilices en tu puesto actual object Bases de datos object QA / Testing object Cantidad de personas en tu organización object Modalidad de trabajo object Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina? int64 ¿La recomendás como un buen lugar para trabajar? int64 ¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo? int64 ¿Salir o seguir contestando? object Máximo nivel de estudios object Estado object Carrera object Institución educativa object ¿Salir o seguir contestando sobre las guardias? object ¿Tenés guardias? object Cuánto cobrás por guardia float64 Aclará el número que ingresaste en el campo anterior object ¿Salir o seguir contestando sobre estudios? object Tengo (edad) int64 Me identifico (género) object dtype: object
Limpieza del dataset¶
En esta etapa voy a limpiar los datos según lo aprendido sobre calidad de los datos. Las columnas con las que trabajare son:
- Tengo (edad) int64
- Máximo nivel de estudios object
- Dónde estás trabajando object
- Trabajo de object
- Dedicación object
- Modalidad de trabajo object
- Lenguajes de programación o tecnologÃas que utilices en tu puesto actual object
- Último salario mensual o retiro BRUTO (en tu moneda local) float64
- Último salario mensual o retiro NETO (en tu moneda local) float64
- Pagos en dólares object
- ¿De qué % fue el ajuste total acumulado? float64
- ¿Qué tan conforme estás con tus ingresos laborales? int64
# Modificar el dataset, creando uno nuevo sin las columnas especificadas
columnas_drop = ['Estoy trabajando en', 'Tipo de contrato',
'Si tu sueldo está dolarizado ¿Cuál fue el último valor del dólar que tomaron?',
'RecibÃs algún tipo de bono', 'A qué está atado el bono',
'¿Tuviste actualizaciones de tus ingresos laborales durante 2023?',
'¿En qué mes fue el último ajuste?',
'Cómo considerás que están tus ingresos laborales comparados con el semestre anterior',
'¿Contás con beneficios adicionales?',
'Años de experiencia', 'Antigüedad en la empresa actual',
'Tiempo en el puesto actual', '¿Cuántas personas a cargo tenés?',
'Plataformas que utilizas en tu puesto actual',
'Frameworks, herramientas y librerÃas que utilices en tu puesto actual',
'Bases de datos', 'QA / Testing',
'Cantidad de personas en tu organización',
'Si trabajás bajo un esquema hÃbrido ¿Cuántos dÃas a la semana vas a la oficina?',
'¿La recomendás como un buen lugar para trabajar?',
'¿Qué tanto estás usando Copilot, ChatGPT u otras herramientas de IA para tu trabajo?',
'¿Salir o seguir contestando?', 'Estado',
'Carrera', 'Institución educativa',
'¿Salir o seguir contestando sobre las guardias?', '¿Tenés guardias?',
'Cuánto cobrás por guardia',
'Aclará el número que ingresaste en el campo anterior',
'¿Salir o seguir contestando sobre estudios?',
'Me identifico (género)']
datos_limpios = sysarmy_data.drop(columns=columnas_drop)
# Nuevo dataset
datos_limpios.rename(columns={"Último salario mensual o retiro BRUTO (en tu moneda local)" :
"Último salario mensual o retiro BRUTO (en tu moneda local)"}, inplace=True)
columnas_limpias = datos_limpios.columns
print("\n\nListado de columnas del nuevo dataset: \n\n", columnas_limpias)
Listado de columnas del nuevo dataset:
Index(['Dónde estás trabajando', 'Dedicación',
'Último salario mensual o retiro BRUTO (en tu moneda local)',
'Último salario mensual o retiro NETO (en tu moneda local)',
'Pagos en dólares', '¿De qué % fue el ajuste total acumulado?',
'¿Qué tan conforme estás con tus ingresos laborales?', 'Trabajo de',
'Lenguajes de programación o tecnologÃas que utilices en tu puesto actual',
'Modalidad de trabajo', 'Máximo nivel de estudios', 'Tengo (edad)'],
dtype='object')
# Datos nulos
nulos = datos_limpios.isnull()
print("Datos nulos en el dataset:\n\n")
nulos
Datos nulos en el dataset:
| Dónde estás trabajando | Dedicación | Último salario mensual o retiro BRUTO (en tu moneda local) | Último salario mensual o retiro NETO (en tu moneda local) | Pagos en dólares | ¿De qué % fue el ajuste total acumulado? | ¿Qué tan conforme estás con tus ingresos laborales? | Trabajo de | Lenguajes de programación o tecnologÃas que utilices en tu puesto actual | Modalidad de trabajo | Máximo nivel de estudios | Tengo (edad) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | False | False | False | False | True | False | False | False | False | False | True | False |
| 1 | False | False | False | False | True | False | False | False | False | False | False | False |
| 2 | False | False | False | False | True | False | False | False | False | False | True | False |
| 3 | False | False | False | False | True | False | False | False | False | False | True | False |
| 4 | False | False | False | False | True | False | False | False | False | False | True | False |
| ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
| 5800 | False | False | False | False | False | False | False | False | False | False | False | False |
| 5801 | False | False | False | False | True | False | False | False | False | False | True | False |
| 5802 | False | False | False | False | False | False | False | False | False | False | True | False |
| 5803 | False | False | False | False | False | False | False | False | False | False | False | False |
| 5804 | False | False | False | False | True | False | False | False | False | False | False | False |
5805 rows × 12 columns
# Cantidad de datos nulos en cada columna
total_nulos = nulos.sum()
print("Cantidad de datos nulos por columna:\n\n", total_nulos)
Cantidad de datos nulos por columna: Dónde estás trabajando 0 Dedicación 0 Último salario mensual o retiro BRUTO (en tu moneda local) 0 Último salario mensual o retiro NETO (en tu moneda local) 239 Pagos en dólares 3865 ¿De qué % fue el ajuste total acumulado? 0 ¿Qué tan conforme estás con tus ingresos laborales? 0 Trabajo de 0 Lenguajes de programación o tecnologÃas que utilices en tu puesto actual 2 Modalidad de trabajo 0 Máximo nivel de estudios 3192 Tengo (edad) 0 dtype: int64
# Tratamiento de los datos nulos en la columna "Lenguajes de..."
columna_lng = "Lenguajes de programación o tecnologÃas que utilices en tu puesto actual"
mask_lng = datos_limpios[columna_lng].isnull()
datos_limpios.loc[mask_lng]
| Dónde estás trabajando | Dedicación | Último salario mensual o retiro BRUTO (en tu moneda local) | Último salario mensual o retiro NETO (en tu moneda local) | Pagos en dólares | ¿De qué % fue el ajuste total acumulado? | ¿Qué tan conforme estás con tus ingresos laborales? | Trabajo de | Lenguajes de programación o tecnologÃas que utilices en tu puesto actual | Modalidad de trabajo | Máximo nivel de estudios | Tengo (edad) | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1918 | Ciudad Autónoma de Buenos Aires | Full-Time | 620000.0 | 500000.0 | NaN | 40.0 | 3 | Scrum Master | NaN | 100% remoto | NaN | 41 |
| 4681 | Provincia de Buenos Aires | Full-Time | 221960.0 | 216960.0 | Mi sueldo está dolarizado (pero cobro en moned... | 0.0 | 3 | Developer | NaN | 100% remoto | NaN | 27 |
# Reemplazo de datos nulos, primera posibilidad
datos_limpios.at[1918, columna_lng] = "No responde"
datos_limpios.at[4681, columna_lng] = "No responde"
datos_limpios.iloc[4681]
Dónde estás trabajando Provincia de Buenos Aires Dedicación Full-Time Último salario mensual o retiro BRUTO (en tu moneda local) 221960.0 Último salario mensual o retiro NETO (en tu moneda local) 216960.0 Pagos en dólares Mi sueldo está dolarizado (pero cobro en moned... ¿De qué % fue el ajuste total acumulado? 0.0 ¿Qué tan conforme estás con tus ingresos laborales? 3 Trabajo de Developer Lenguajes de programación o tecnologÃas que utilices en tu puesto actual No responde Modalidad de trabajo 100% remoto Máximo nivel de estudios NaN Tengo (edad) 27 Name: 4681, dtype: object
# Tratamiento de los datos nulos en el resto de las columnas, otra posibilidad
# https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.fillna.html
columna_est = "Máximo nivel de estudios"
columna_neto = "Último salario mensual o retiro NETO (en tu moneda local)"
columna_dolares = "Pagos en dólares"
datos_limpios[columna_est].fillna("No responde", inplace=True)
datos_limpios[columna_neto].fillna(0, inplace=True)
datos_limpios[columna_dolares].fillna("No responde", inplace=True)
# Cantidad de datos nulos al finalizar la limpieza
datos_limpios.isnull().sum()
Dónde estás trabajando 0 Dedicación 0 Último salario mensual o retiro BRUTO (en tu moneda local) 0 Último salario mensual o retiro NETO (en tu moneda local) 0 Pagos en dólares 0 ¿De qué % fue el ajuste total acumulado? 0 ¿Qué tan conforme estás con tus ingresos laborales? 0 Trabajo de 0 Lenguajes de programación o tecnologÃas que utilices en tu puesto actual 0 Modalidad de trabajo 0 Máximo nivel de estudios 0 Tengo (edad) 0 dtype: int64
# Para evitar analisis erroneos, convertiremos los números a enteros
columna1 = "Último salario mensual o retiro BRUTO (en tu moneda local)"
columna2 = "Último salario mensual o retiro NETO (en tu moneda local)"
datos_limpios[columna1] = datos_limpios[columna1].astype('int64')
datos_limpios[columna2] = datos_limpios[columna2].astype('int64')
# Luego se descartaran registros por debajo de 9000
datos_limpios[columna1] = datos_limpios[columna1].apply(lambda x: 0 if x < 9000 else x)
datos_limpios[columna2] = datos_limpios[columna2].apply(lambda x: 0 if x < 9000 else x)
# Descartar valores de cero
datos_limpios["Brutos"] = datos_limpios[columna1].replace(0, np.nan)
datos_limpios["Netos"] = datos_limpios[columna2].replace(0, np.nan)
Visualizaciones¶
Para presentar los datos visualmente utilizaré distintos tipos de gráficos:
- Bar Charts: muestra la distribución de una variable categórica.
- Pie Charts: muestra la proporción de cada categorÃa.
- Histogramas: muestra la distribución de una variable numérica.
- Scatter Plots: muestra la relación entre dos variables numéricas.
- Box Plot: muestra la distribución y permite detectar valores atÃpicos.
- Heatmaps: muestra la correlación entre variables.
# gráfico de barras que permite visualizar la cantidad de registros por determinada columna.
# https://seaborn.pydata.org/generated/seaborn.countplot.html#seaborn.countplotde
columna = "Dónde estás trabajando"
graf = datos_limpios[columna].value_counts().sort_values(ascending=False)
sns.countplot(y=datos_limpios[columna], palette="flare")
plt.title("Dónde estás trabajando")
plt.xlabel("Cantidad de personas")
plt.ylabel("Provincia")
Text(0, 0.5, 'Provincia')
# Crear un gráfico de torta con Matplotlib
# https://matplotlib.org/stable/gallery/pie_and_polar_charts/pie_features.html
full_part = datos_limpios["Dedicación"].value_counts()
plt.pie(full_part, labels=full_part.index, autopct='%1.1f%%')
plt.title("Dedicación")
Text(0.5, 1.0, 'Dedicación')
# Boxplot, edad por provincia
sns.boxplot(data=datos_limpios, x="Tengo (edad)", y="Dónde estás trabajando")
<AxesSubplot: xlabel='Tengo (edad)', ylabel='Dónde estás trabajando'>
# Salarios por Nivel Educativo
columna1 = "Netos"
columna2 = "Máximo nivel de estudios"
columna3 = "Categorias Sueldos Netos"
# Definir categorÃas más representativas para los sueldos
catesueldos = pd.cut(datos_limpios[columna1], bins=[40000, 200000, 500000, 1000000, 2000000] ,
labels=["Bajo", "Medio", "Alto", "Muy Altos"])
datos_limpios[columna3] = catesueldos
sns.countplot(y=datos_limpios[columna3], hue=datos_limpios[columna2], palette="deep")
plt.title("Sueldos de Bolsillo vs. Nivel de Estudios")
plt.xlabel("Máximo Nivel de Estudios")
plt.ylabel("Sueldos Netos")
Text(0, 0.5, 'Sueldos Netos')
# Algunos cálculos con los salarios mensuales netos
columna = "Netos"
sueldos_media = int(datos_limpios[columna].mean())
sueldos_moda = int(datos_limpios[columna].mode())
sueldos_max = int(datos_limpios[columna].max())
sueldos_min = int(datos_limpios[columna].min())
print("El salario neto promedio es:", sueldos_media)
print("El salario que más se repite es:", sueldos_moda)
print("El salario minimo es:", sueldos_min)
print("El salario maximo es:", sueldos_max)
El salario neto promedio es: 600567 El salario que más se repite es: 500000 El salario minimo es: 10000 El salario maximo es: 45000000
sns.barplot(x=["Máximo", "MÃnimo", "Media", "Moda"],
y=[sueldos_max, sueldos_min, sueldos_media, sueldos_moda], palette="dark")
plt.title("EstadÃsticas Sueldos Netos")
plt.ylabel("Pesos Argentinos")
plt.xlabel("EstadÃsticas")
Text(0.5, 0, 'EstadÃsticas')
# Histogramas: muestra la distribución de una variable numérica.
columna = "Netos"
sns.histplot(datos_limpios[columna], kde=False, color="red")
plt.title("Salarios Netos")
plt.xlabel('Sueldos')
plt.ylabel('Frecuencia')
Text(0, 0.5, 'Frecuencia')
# Relación entre dos variables numéricas
columna1 = "Tengo (edad)"
columna2 = "¿Qué tan conforme estás con tus ingresos laborales?"
sns.scatterplot(data=datos_limpios, x=columna1, y=columna2)
plt.title("Relación entre Edad y Conformidad Salarial")
plt.xlabel("Edad")
plt.ylabel("Conformidad Salarial")
plt.grid(True)
# Heatmaps: muestra la correlación entre variables.
plt.figure(figsize=(10, 7))
sns.heatmap(datos_limpios.corr(numeric_only=True), annot=True)
<AxesSubplot: >