# -*- coding: utf-8 -*-1"""23@author: Roberto4"""56import pandas as pd7import numpy as np8import chardet # to get string character format9import re # for regular expression10import os # for usernanme y set direcotrio1112# help para revisar la documentación de una libreria1314help(re)151617#%% Load dataset181920user = os.getlogin() # Username2122os.chdir(f"C:/Users/{user}/Documents/GitHub/1ECO35_2022_2/Lab8") # Set directorio2324panel = pd.read_stata("../../../datos/panel/743-Modulo1478/sumaria-2016-2020-panelf.dta",25convert_categoricals=False)262728# Filter dummy hpanel1620 == 1: hogares entrevistados en el periodo 2016-20202930panel = panel[panel.hpanel1620 == 1]313233# nombre de las variables en minuscula3435panel.columns = map(str.lower, panel.columns)363738print( panel.columns)3940# Se filtra variables selecionadas4142index_columns = np.where( panel.columns.str.contains(43'(año)|(^conglome)|(vivienda)|(hogar)|(estrato_)|(mieperho)|(gashog2d)|(pobreza_)|(factor07)',44regex=True))[0]45464748# index_columns: se guarda las posiciones de columnas de aquellas variables que satisface49# con algunos de los casos del regex5051panel = panel.iloc[:,index_columns]525354# Rename las variables de año5556panel.rename(columns = {'año_16':'year_16', 'año_17':'year_17', 'año_18':'year_18', 'año_19':'year_19',57'año_20':'year_20', 'conglome':'cong', 'vivienda':'viv'}, inplace = True)585960# Se crea un identificados del hogar6162panel['hog'] = np.arange(1, panel.shape[0] + 1)6364# reordenando las columnas6566cols = panel.columns.tolist() # nombre de varaible a lista67new_cols_orders = cols[ 0:2 ] + [cols[ -1 ]] + cols[ 2:-1 ]6869# cols[ 0:2 ] dos primeras columnas (conglome, vivienda)70# [cols[ -1 ]] ultima columna (hog)71# cols[ 2:-1 ] desde la tercera hasta la penultima7273panel = panel.loc[:, new_cols_orders]747576## Reshape Wide to long7778# reshape_panel = pd.wide_to_long(panel, stubnames = new_list,79# i = ['cong', 'viv', 'hog'] , j = 'period' , sep = '_').reset_index()808182# new_list: debe contener las variables en comun en todos los años (sin _año)8384panel.columns[3::]858687filter_list = list( map( lambda x: re.sub('.{3}$',"", x) , list(panel.columns)[3::] ) )8889#se reemplaza los tres ultimos caracteres90#(como se usa el carcater especial .), se toma cualquier tipo de caracter ya sea espacio, numero, letras, #!", etc9192# Se puede ibservar que filter list tiene duplicados9394# Se procede a elimitar los duplicados en la lista9596new_list = list(dict.fromkeys(filter_list))979899## Reshape Wide to long100101102reshape_panel = pd.wide_to_long(panel, stubnames = new_list, i = ['cong', 'viv', 'hog'] ,103j = 'period' , sep = '_')104105106reshape_panel = pd.wide_to_long(panel, stubnames = new_list, i = ['cong', 'viv', 'hog'] ,107j = 'period' , sep = '_').reset_index()108109110# drop a las siguientes variables111112del reshape_panel['cong']113del reshape_panel['viv']114del reshape_panel['hog']115del reshape_panel['period']116117118119120121122123124125126127128