Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
robertopucp
GitHub Repository: robertopucp/1eco35_2022_2
Path: blob/main/Lab8/script_reshape_py.py
2714 views
1
# -*- coding: utf-8 -*-
2
"""
3
4
@author: Roberto
5
"""
6
7
import pandas as pd
8
import numpy as np
9
import chardet # to get string character format
10
import re # for regular expression
11
import os # for usernanme y set direcotrio
12
13
# help para revisar la documentación de una libreria
14
15
help(re)
16
17
18
#%% Load dataset
19
20
21
user = os.getlogin() # Username
22
23
os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab8") # Set directorio
24
25
panel = pd.read_stata("../../../datos/panel/743-Modulo1478/sumaria-2016-2020-panelf.dta",
26
convert_categoricals=False)
27
28
29
# Filter dummy hpanel1620 == 1: hogares entrevistados en el periodo 2016-2020
30
31
panel = panel[panel.hpanel1620 == 1]
32
33
34
# nombre de las variables en minuscula
35
36
panel.columns = map(str.lower, panel.columns)
37
38
39
print( panel.columns)
40
41
# Se filtra variables selecionadas
42
43
index_columns = np.where( panel.columns.str.contains(
44
'(año)|(^conglome)|(vivienda)|(hogar)|(estrato_)|(mieperho)|(gashog2d)|(pobreza_)|(factor07)',
45
regex=True))[0]
46
47
48
49
# index_columns: se guarda las posiciones de columnas de aquellas variables que satisface
50
# con algunos de los casos del regex
51
52
panel = panel.iloc[:,index_columns]
53
54
55
# Rename las variables de año
56
57
panel.rename(columns = {'año_16':'year_16', 'año_17':'year_17', 'año_18':'year_18', 'año_19':'year_19',
58
'año_20':'year_20', 'conglome':'cong', 'vivienda':'viv'}, inplace = True)
59
60
61
# Se crea un identificados del hogar
62
63
panel['hog'] = np.arange(1, panel.shape[0] + 1)
64
65
# reordenando las columnas
66
67
cols = panel.columns.tolist() # nombre de varaible a lista
68
new_cols_orders = cols[ 0:2 ] + [cols[ -1 ]] + cols[ 2:-1 ]
69
70
# cols[ 0:2 ] dos primeras columnas (conglome, vivienda)
71
# [cols[ -1 ]] ultima columna (hog)
72
# cols[ 2:-1 ] desde la tercera hasta la penultima
73
74
panel = panel.loc[:, new_cols_orders]
75
76
77
## Reshape Wide to long
78
79
# reshape_panel = pd.wide_to_long(panel, stubnames = new_list,
80
# i = ['cong', 'viv', 'hog'] , j = 'period' , sep = '_').reset_index()
81
82
83
# new_list: debe contener las variables en comun en todos los años (sin _año)
84
85
panel.columns[3::]
86
87
88
filter_list = list( map( lambda x: re.sub('.{3}$',"", x) , list(panel.columns)[3::] ) )
89
90
#se reemplaza los tres ultimos caracteres
91
#(como se usa el carcater especial .), se toma cualquier tipo de caracter ya sea espacio, numero, letras, #!", etc
92
93
# Se puede ibservar que filter list tiene duplicados
94
95
# Se procede a elimitar los duplicados en la lista
96
97
new_list = list(dict.fromkeys(filter_list))
98
99
100
## Reshape Wide to long
101
102
103
reshape_panel = pd.wide_to_long(panel, stubnames = new_list, i = ['cong', 'viv', 'hog'] ,
104
j = 'period' , sep = '_')
105
106
107
reshape_panel = pd.wide_to_long(panel, stubnames = new_list, i = ['cong', 'viv', 'hog'] ,
108
j = 'period' , sep = '_').reset_index()
109
110
111
# drop a las siguientes variables
112
113
del reshape_panel['cong']
114
del reshape_panel['viv']
115
del reshape_panel['hog']
116
del reshape_panel['period']
117
118
119
120
121
122
123
124
125
126
127
128