Observar que los datos los puedo extraer directamente de GSS Stata data en esta dirección
https://gss.norc.org/get-the-data/stata
1.- Los datos los hemos bajado a un directorio
2.- Los vamos a leer
3.- Los vamos a convertir en binarios para que sea más facil trabajarlos
# Importamos los paquetes
import pandas as pd
import numpy as np
Path al archivo
filename = r"C:\daniel\clases\data\2022_stata\2022\GSS2022.dta"
gss = pd.read_stata(filename, convert_categoricals=False)
type(gss)
gss.tail()
#gss.info(verbose=True)
gss.shape
gss["id"]
# Elimino el fichero, si existe
from os.path import basename, exists
filename = r"C:\daniel\clases\data\2022_stata\2022\GSS2022.hdf"
if exists(filename):
os.remove(r"C:\daniel\clases\data\2022_stata\2022\GSS2022.hdf")
# Guardo el fichero como binario
gss.to_stata(r"C:\daniel\clases\data\2022_stata\2022\GSS2022_S.dta")
gss.to_hdf(r"C:\daniel\clases\data\2022_stata\2022\GSS2022.hdf", 'gss', complevel=7)
url = "https://gss.norc.org/Documents/stata/2022_stata.zip"
from os.path import basename, exists
def download(url):
filename = basename(url)
if not exists(filename):
from urllib.request import urlretrieve
local, _ = urlretrieve(url, filename)
print("Downloaded " + local)
download(url)
# Leemos las encuestas directamente del INE y nos quedamos exclusivamente con los ficheros csv y xlsx
# que son los que no interesan
import requests, zipfile, io, os
import pandas as pd
anos = ["2010", "2014","2018" ]
for i in anos:
url = f"https://www.ine.es/ftp/microdatos/salarial/datos_" + i + ".zip"
r = requests.get(url)
z = zipfile.ZipFile(io.BytesIO(r.content))
for fileName in z.namelist():
# Vamos a extraer solo si terminan en csv
if fileName.endswith('.csv'):
# extraemos solo el fichero que nos interesa
z.extract(fileName)
# Extraemos solo el fichero de registro
if fileName.endswith('.xlsx'):
z.extract(fileName)
pwd
# El paquete glob me permite trabajar con todos aquellos ficheros que comparten caracteristicas
# Importante: mirar el directorio que se ha creado con el
import glob
files = glob.glob('./CSV/*.csv', recursive = True)
files_xl = glob.glob('*.xlsx', recursive = True)
files
# Variables de trabajo
variables_salario = ["salbase", "comsal", "extraorm", "phextra"]
variables_horas = ["jsp1", "jsp2", "hextra"]
variables_demograficas = ["sexo", "estu", "cno1", "cnace", "estrato2"]
variables_brecha = variables_salario + variables_horas + variables_demograficas
import re
# https://pythex.org/
# Vamos a leer los ficheros y crear una variable año para cada fichero leido
# Aqui extraemos todas las variables y concatenamos los data frames
brecha_df = pd.DataFrame()
for f in range(0,len(files)):
data = pd.read_csv(files[f], sep = "\t")
data.columns = data.columns.str.lower()
#Me quedo con las variables que me interesan
data = data.loc[:,variables_brecha]
#Creo una variable "year" que recoge el año de la encuesta a partir de la información del fichero
data["year"] = (re.findall("(\d{4})", files[f])[0])
brecha_df = pd.concat([brecha_df,data], ignore_index = True)
brecha_df.head()
brecha_df["year"].value_counts()