Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG8/Grupo_3_py_Ejercicio 1 al 3.py
2714 views
1
#!/usr/bin/env python
2
# coding: utf-8
3
4
# In[92]:
5
6
7
# En primera instancia, vamos a importar todas las librerías que usaremos:
8
9
10
# In[93]:
11
12
13
import pandas as pd
14
15
import pyreadr
16
17
import math
18
19
import matplotlib.pyplot as plt
20
21
import numpy as np
22
23
import seaborn as sns
24
25
26
# ### Pregunta 1: En un gráfico muestre el histograma de frecuencias absolutas del salario y , en otro gráfico, el histograma del logaritmo del salario. Comente las diferencias y por qué.
27
28
# In[94]:
29
30
31
# De esta manera abrimos una base de datos que esta en formato R en Python:
32
33
# Desde ya mencionar, que nuestra base de datos recibirá el nombre de "result"
34
35
result = pyreadr.read_r("/Users/diegoyeliseo/Desktop/Archivo R Tarea 8/wage2015_subsample_inference.Rdata")
36
37
38
print(result.keys())
39
40
data = result["data"]
41
42
print(data)
43
44
45
# In[95]:
46
47
48
data.head() #ver variables (nos interesan wage & lwage)
49
50
51
# In[96]:
52
53
54
get_ipython().run_line_magic('matplotlib', 'inline')
55
params = {'legend.fontsize': 'x-large',
56
'figure.figsize': (10, 7.5),
57
'axes.labelsize': 'x-large',
58
'axes.titlesize':'x-large',
59
'xtick.labelsize':'x-large',
60
'ytick.labelsize':'x-large'}
61
plt.rcParams.update(params)
62
63
64
# In[97]:
65
66
67
# realizamos el primer histograma del salario por hora
68
69
(counts, bins, patches) = plt.hist(data['wage'], bins = 100, color ='orange', rwidth=0.75)
70
plt.xlabel('Salario por Hora')
71
plt.ylabel('Frecuencia')
72
plt.title('Histograma #1 - Frecuencia absoluta')
73
plt.show() #mostramos el histograma del salario
74
75
76
# In[98]:
77
78
79
# realizamos el segundo histograma del salario por hora en logaritmos
80
81
(counts, bins, patches) = plt.hist(data['lwage'], bins = 100, color ='green', rwidth=0.75)
82
plt.xlabel('Salario por Hora en Logaritmos')
83
plt.ylabel('Frecuencia')
84
plt.title('Histograma #2 - Frecuencia absoluta')
85
plt.show() #mostramos el histograma del salario en logaritmo
86
87
# La diferencia entre ambos histogramas se debe a la conversión de la variable 'wage' a logaritmos --> 'lwage', puesto que al transformar una variable cuantitativa a logaritmos se tiene una distribución de datos más simétrica. Esta transformación monótona permite realizar una mejor regresión lineal entre variables de interés, pues se acota el rango de la variable (wage) a uno más pequeño, esto reduce la sensibilidad de la estimación ante observaciones atípicas.
88
89
90
# ### Pregunta 2: En una sola imagen, el gráfico de densidad del logaritmo del salario por hora de las mujeres que terminaron la universidad y el caso de los hombres.
91
92
# In[99]:
93
94
95
fig = plt.subplots(figsize=(8,5)) # Para el tamaño del gráfico
96
97
98
sns.kdeplot(data = data[data.clg == 1],
99
x = 'lwage',
100
hue = 'sex',
101
alpha = 0.6,
102
edgecolor="0.1",
103
linewidth=1,
104
fill=True
105
)
106
107
108
plt.legend(labels=['mujeres','hombres'], title = "", frameon=True, bbox_to_anchor=(1.0, 0.98))
109
110
plt.title('Log salario por hora', size=11)
111
112
plt.ylabel('Kernel Density')
113
114
plt.xlabel('')
115
116
# Comentario del gráfico: En el gráfico de densidad, se observa la diferencia de salario por hora de hombres y mujeres representado en azul y naranja. En este, se tiene que las mujeres llegan a un pico de 0,4, mientras el de los hombres es menor hasta 0.35 aproximadamente.
117
118
119
# ### Pregunta 3: En un gráfico Pie, muestre el porcentaje de personas según nivel educativo.
120
121
# In[100]:
122
123
Datos:
124
125
# shs: Si la persona tiene secundaria incompleta (Some high school)
126
# hsg: secundaria completa (High schoool graduate)
127
# scl: Universitaria incompleta (Some college)
128
# clg: Universitaria completa (College gratuate)
129
# ad: Grado educativo avanzado (Advanced degree - master or Phd)
130
131
132
# In[101]:
133
134
# Estamos diciendo que result1 va a ser igual a nuestra base de datos inicial
135
136
result1 = result['data']
137
138
# Estamos asignándole un número a cada elemento:
139
140
result1.loc[result1["hsg"] == 1, "hsg"] = 2
141
result1.loc[result1["scl"] == 1, "scl"] = 3
142
result1.loc[result1["clg"] == 1, "clg"] = 4
143
result1.loc[result1["ad"] == 1, "ad"] = 5
144
145
# Estamos diciéndole a Python de que el nivel educativo va a ser igual a la suma de esas 5 variables:
146
147
result1['nivel_educativo'] = result1['shs'] + result1["hsg"] + result1["scl"] + result1["clg"] + result1["ad"]
148
149
# Estamos agrupando cada tipo de ocupación:
150
151
base = result1.groupby('nivel_educativo')['nivel_educativo'].size()
152
153
# Le ponemos un nombre a los elementos del gráfico:
154
155
labels=['Some high school','High schoool graduate' , 'Some college', 'College gratuate', 'Advanced degree - master or Phd' ]
156
157
fig, ax = plt.subplots( figsize=(10,10) ) # El tamaño de la caja
158
159
base.plot(kind='pie', labels=labels, autopct='%.1f %%')
160
161
plt.title("Porcentaje de personas según nivel educativo") # Para ponerle título al gráfico
162
163
plt.ylabel("")
164
165
plt.show() # Para mostrar el gráfico
166
167
# Podemos ver que hay un mayor grupo de personas con universitaria completa, siendo un total de 31.8% del total. En segundo lugar, hay un total de 27.8% de personas que cuentan con universitaria incompleta. Esta brecha como vemos no es muy amplia. En última instancia se encuentran personas que tienen secundaria incompleta, siendo este porcentaje del 2.3% del total. Estos porcentajes guardan sentido lógico ya que Estados Unidos al ser un país primermundista, contribuye de manera significativa en la educación de su población, razón por la cual, se espera que un mayor porcentaje tenga universitaria completa.
168