Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Trabajo_grupal/WG6/Solución/solucion_py.py
2835 views
1
# -*- coding: utf-8 -*-
2
"""
3
@author: Roberto
4
"""
5
6
import pandas as pd
7
import numpy as np
8
import os
9
10
user = os.getlogin() # Username
11
12
13
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2") # Set directorio
14
15
16
#%% Load datasets
17
18
enaho_19_01 = pd.read_stata(r"../../datos/2019/687-Modulo01/687-Modulo01/enaho01-2019-100.dta",
19
convert_categoricals=False)
20
21
22
enaho_19_34 = pd.read_stata(r"../../datos/2019/687-Modulo34/687-Modulo34/sumaria-2019.dta",
23
convert_categoricals=False)
24
25
deflactor = pd.read_stata(
26
r"../../datos/2020/737-Modulo34/737-Modulo34/ConstVarGasto-Metodologia actualizada/Gasto2020/Bases/deflactores_base2020_new.dta",
27
convert_categoricals=False)
28
29
30
###### Año 2019 ######
31
32
enaho_19_01.rename(columns={'aÑo':'year'}, inplace=True)
33
34
# seleccionamos variables del módulo 1
35
36
enaho_19_01 = enaho_19_01[['year','conglome','vivienda','hogar','ubigeo']]
37
38
39
# seleccionamos variables del módulo sumaria
40
41
42
enaho_19_34 = enaho_19_34[['conglome','vivienda','hogar','mieperho','inghog1d','gashog2d','ld']]
43
44
45
# Merge ambas bases
46
47
enaho_merge_19 = pd.merge(enaho_19_01, enaho_19_34,
48
on = ["conglome", "vivienda", "hogar"],
49
how = "left")
50
51
###### Año 2020 ######
52
53
enaho_20_01 = pd.read_stata(r"../../datos/2020/737-Modulo01/737-Modulo01/enaho01-2020-100.dta",
54
convert_categoricals=False)
55
56
57
enaho_20_34 = pd.read_stata(r"../../datos/2020/737-Modulo34/737-Modulo34/sumaria-2020.dta",
58
convert_categoricals=False)
59
60
enaho_20_01.rename(columns={'aÑo':'year'}, inplace=True)
61
62
# seleccionamos variables del módulo 1
63
64
enaho_20_01 = enaho_20_01[['year','conglome','vivienda','hogar','ubigeo']]
65
66
67
# seleccionamos variables del módulo sumaria
68
69
70
enaho_20_34 = enaho_20_34[['conglome','vivienda','hogar','mieperho','inghog1d','gashog2d','ld']]
71
72
73
# Merge ambas bases
74
75
enaho_merge_20 = pd.merge(enaho_20_01, enaho_20_34,
76
on = ["conglome", "vivienda", "hogar"],
77
how = "left")
78
79
80
##### Append #####
81
82
enaho_append = enaho_merge_19.append(enaho_merge_20, ignore_index = True)
83
84
85
## merge con la abse de deflactores
86
87
88
# seleccionamos dos primeros digitos y lo comvertimos a numero pues la variable ubigeo es string (texto)
89
90
enaho_append['ubigeo_dep'] = enaho_append['ubigeo'].str[:2].astype(int)
91
92
enaho_append['year'] # es un string
93
94
# para hacer el merge, la variables deben comaprtir el mismo formato
95
# la variable departamento de la base deflactor debe ser numero entero
96
# mientras la variable year debe ser un string
97
98
99
deflactor['dpto'] = deflactor['dpto'].astype(int)
100
101
deflactor['aniorec'] = deflactor['aniorec'].astype(int).astype(str)
102
# notese que aniorec es float, luego se onvierte a entero y finalmente a string para eliminar decimal (.0)
103
104
105
deflactor.info() # verifica los formatos de las variables
106
107
108
enaho_append = pd.merge(enaho_append,deflactor, left_on =['year','ubigeo_dep'] ,
109
right_on =['aniorec','dpto'] , how = "left", validate = "m:1")
110
111
112
# Creación de variables
113
114
115
enaho_append['ing_pc_real'] = enaho_append['inghog1d']/(12*enaho_append['ld']*enaho_append['i00']*enaho_append['mieperho'])
116
117
118
enaho_append['gast_pc_real'] = enaho_append['gashog2d']/(12*enaho_append['ld']*enaho_append['i00']*enaho_append['mieperho'])
119
120
121
#%% Salario por hora (pregunta 2)
122
123
124
enaho_20_05 = pd.read_stata(r"../../datos/2020/737-Modulo05/737-Modulo05/enaho01a-2020-500.dta",
125
convert_categoricals=False)
126
127
128
129
# sum() permite sumar columnas ignorando los missings
130
131
enaho_20_05['suma_ingreso'] = enaho_20_05[["i524e1", "i538e1"]].sum(axis=1)
132
133
# axis 1: suma horizontal o por fila
134
135
enaho_20_05['total_horas'] = enaho_20_05[["i513t", "i518"]].sum(axis=1)
136
137
138
enaho_20_05['hour_wage'] = enaho_20_05['suma_ingreso']/(enaho_20_05['total_horas']*52)
139
140
# Si alguno salario por hora es cero, se reemplaza por missing
141
142
enaho_20_05['hour_wage'].replace(0, np.nan, inplace = True)
143
144
145
#%% Group-by
146
147
enaho_20_02 = pd.read_stata(r"../../datos/2020/737-Modulo02/737-Modulo02/enaho01-2020-200.dta",
148
convert_categoricals=False)
149
150
enaho_20_34 = pd.read_stata(r"../../datos/2020/737-Modulo34/737-Modulo34/sumaria-2020.dta",
151
convert_categoricals=False)
152
153
# nanmax ignora missings.
154
155
df1 = enaho_20_02.groupby( [ "conglome", "vivienda", "hogar" ],
156
as_index = False ).agg( edad_max = ( 'p208a', np.nanmax))
157
158
159
160
df2 = enaho_20_02.groupby( [ "conglome", "vivienda", "hogar" ],
161
as_index = False ).agg( edad_max = ( 'p208a', np.max ))
162
163
164
# Los resultados son iguales pues la columna edad no presenta missings
165
166
# Si queremos que la edad maxima del hogar sea dato de cada miembro del hogar
167
168
enaho_20_02["edad_maxima_hogar"] = enaho_20_02.groupby(
169
[ "conglome", "vivienda", "hogar"])['p208a'].transform(np.nanmax)
170
171
# Merge Sumaria (modulo 34)
172
173
174
enaho_pension = pd.merge(df2,enaho_20_34, on =["conglome", "vivienda", "hogar"],
175
how = "left", validate = "1:1")
176
177
# Usamos numpy where con la condición de maxima edad mayor a 65 y hogar pobre (1: pobre extremo, 2 :pobre)
178
179
enaho_pension['hogar_benf_pen'] = np.where(
180
(enaho_pension['edad_max'] >=65) & (enaho_pension['pobreza'].isin([1,2]))
181
, 1,0)
182
183
# Reemplazamos missing si edad_max o pobreza tiene missings
184
185
# enaho_pension[['edad_max','pobreza']].isnull().any(axis=1) si alguna variable es missing
186
# entonces reemplaza missing np.nan en la observación correspondiente
187
188
enaho_pension['hogar_benf_pen'].mask(
189
enaho_pension[['edad_max','pobreza']].isnull().any(axis=1), np.nan, inplace=True)
190
191
# Observamos el total de hogarares a focalizar por el programa Pension 65
192
193
enaho_pension['hogar_benf_pen'].value_counts()
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226