-
Notifications
You must be signed in to change notification settings - Fork 4
Los archivos en src
En esta parte del wiki se describirán los archivos encontrados en Replase/CMBTN/src
1. El primer archivo es: CMBTN.jl
Incluye las líneas de código fundamentales para que el Pkg funcione:
include("help.jl")
include("data.jl")
include("info.jl")
include("extracDatosNatyMor.jl")
include("migración.jl")
include("pobreza y extrema.jl")
include("idh.jl")
También va a devolver la información ya dividida según el valor que se desee obtener:
value=deleteat!(value,1)
pob=value[1:32]
edad=value[33:64]
fecun=value[65:96]
naci=value[97:128]
defun=value[129:160]
dens=value[161:192]
homb=value[225:256]
muje=value[257:288]
indi=value[193:224]Este código hace una gran parte del trabajo que se realiza en el Pkg entero.
Lo siguiente pone los datos en un DataFrame, luego crea un archivo con el nombre "estados" junto con la fecha y hora en que se creó este archivo.
function Estado_data()
V=apis
ids=Vector()
info=Vector()
for x in V
k=estadoid(x)
v=downA(x)
awa=inegi(v)
push!(info,awa)
push!(ids,k)
end
nine=Vector(undef,9)
for n in 1:9
data=Vector(undef,1)
for x in info
push!(data,x[n])
end
nine[n]=deleteat!(data,1)
end
data=DataFrame(id=ids,Estado=Estados,Poblacion_total=nine[1],Media_edad=nine[2],Fecundidad=nine[3],Nacimientos=nine[4],Defunciones=nine[5],Densidad_pob=nine[6],Hombres=nine[8],Mujeres=nine[9],indigena=nine[7])
filecsv(data,"Estados")
endLo siguiente necesita el PATH del Pkg para poder usarse.
Una manera de conseguir este PATH es con lo siguiente:
"C:\\Users\\ASUS\\.julia\\packages\\CMBTN"
Esta es la parte del código que tarda más tiempo. Esto se debe a que la INEGI bloquea las consultas tan continuas, por lo que el mismo código fue escrito para evitar esto, y en lugar de detener por completo el proceso, toma más tiempo.
function Municipio_Estado(path::String)
#Tiene que insertar el path del package CMBTN
m="\\src\\municipio.txt"
p=path*m
f=open(p)
s=readlines(f)
close(f)
ide=Vector()
idm=Vector()
info=Vector()
for (i,x) in enumerate(s)
ids=municid(x)
Dic=downA(x)
awa=inegi(Dic)
push!(info,awa)
push!(ide,ids[1])
push!(idm,ids[2])
if i==500
sleep(120)
println("Seguimos haciendo las consultas...\n")
end
if i==1000
sleep(120)
println("Seguimos haciendo las consultas...\n")
end
if i==1500
sleep(120)
println("Seguimos haciendo las consultas...\n")
end
if i==2000
sleep(120)
println("Seguimos haciendo las consultas...\n")
end
end
nine=Vector(undef,9)
for n in 1:9
data=Vector(undef,1)
for x in info
try
push!(data,x[n])
catch err
push!(data,999)
end
end
nine[n]=deleteat!(data,1)
end
data=DataFrame(id_Estado=ide,id_municipio=idm,Poblacion_total=nine[1],Media_edad=nine[2],Fecundidad=nine[3],Nacimientos=nine[4],Defunciones=nine[5],Densidad_pob=nine[6],Hombres=nine[8],Mujeres=nine[9],indigena=nine[7])
filecsv(data,"MUNICIPIOS")
println("Listo")
endLa última función de este código envía la ubicación del archivo de municipios o estados creados por estado_datay municipio_estado.
Descarga los archivos referentes al covid, los carga y los une con los datos del archivo, luego crea un archivo llamado COVID19ESTADOS o COVID19MUNICIPIOS.
2. El segundo archivo es: apis.jl
En este archivo encontraremos las APIs a través de las cuales se extrae la información directamente del INEGI.
Nacimientos =
[HTTP.get("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000026,1002000027,1002000028/es/0700/false/BISE/2.0/5568de47-3c5d-eb22-1c3c-9d4294ee5b77?type=json"),
<...>
HTTP.get("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000026,1002000027,1002000028/es/07000032/false/BISE/2.0/5568de47-3c5d-eb22-1c3c-9d4294ee5b77?type=json")]
Muertes =
[HTTP.get("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000030,1002000031,1002000032/es/0700/false/BISE/2.0/5568de47-3c5d-eb22-1c3c-9d4294ee5b77?type=json"),
<...>
HTTP.get("https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000030,1002000031,1002000032/es/07000032/false/BISE/2.0/5568de47-3c5d-eb22-1c3c-9d4294ee5b77?type=json"),]3. El tercer archivo es: data.jl
Esta función sirve para retornar un vector con los datos pedidos.
function inegi(dic::Dict)::Vector
a=get(dic,"Series",3)
vector=Vector{Dict{String,Any}}(undef,1)
for x in a
obs=get(x,"OBSERVATIONS",3)
data=get(obs[1],"OBS_VALUE",3)
ind=get(x,"INDICADOR",3)
dic2=Dict("INDICADOR"=>ind,"OBS_VALUE"=>data)
push!(vector,dic2)
endEsta función parsea un URL y regresa f la cual es un identificador para el estado con el cual se quiera trabajar.
function estadoid(url::String)::Int64
a=url[182:189]
f=parse(Int64,a)
f=f-7000000
return f
endObtiene un ID de un estado y su municipio según el API que se mande. Se inserta un vector y luego retorna ese vector.
function municid(url::String)::Vector
a=url[187:189]
g=parse(Int64,a)
f=url[190:193]
f=parse(Int64,f)
vec=Vector()
push!(vec,g)
push!(vec,f)
return vec
endEsta función verifica si se desea trabajar con un indicador o con un valor.
function dataind(vect::Vector,g::Bool)::Vector
vec=Vector(undef,1)
if g ### true indicadores
for x in vect
push!(vec,get(x,"INDICADOR",0))
end
else ##false valores
for x in vect
push!(vec,get(x,"OBS_VALUE",0))
end
end
deleteat!(vec,1)
return vec
end4. El cuarto archivo es: extracDatosNatyMor.jl
Esta función se encarga de acceder a la información de natalidad o mortalidad según se pida, para después ingresar el año con el que se desea trabajar (en un rango de 1994-2019). Luego se convierte a JSON, se pasa a un string, el cual se parsea y regresa un diccionario.
Se llama la función, y se ingresa el año que se desea (1994-2019).
Se convierte a JSON, se pasa a un string, se parsea, regresa un diccionario.
indice es el verificador para determinar si se encuentra o no el año solicitado.
function Cantidad_total_de(categoria::String,anio::String)::Int
if lowercase(categoria) == "natalidad"
a = Nacimientos[1]
elseif lowercase(categoria) == "mortalidad"
a = Muertes[1]
end
b = convertir_a_json(a)
indice = 0
if convert_string_to_int(anio) >=1994 && convert_string_to_int(anio) <=2019
for i in 1:length(b.vals[14][1]["OBSERVATIONS"])
if anio == b.vals[14][1]["OBSERVATIONS"][i]["TIME_PERIOD"]
indice = i
end
end
if indice != 0
dato = b.vals[14][1]["OBSERVATIONS"][indice]["OBS_VALUE"]
dato = convert_string_to_int(dato)
return dato
end
println("Año no encontrado")
return 0
end
println("No se tiene registro de natalidad en éste año")
return 0
endUn ejemplo:
#Ejemplos de uso
a = Cantidad_total_de("natalidad", "1996")
b = Cantidad_total_de("mortalidad", "2019")
c = Cantidad_total_de("natalidad", "campeche", "2019", "total")
d = Cantidad_total_de("natalidad", "campeche", "2001", "hombre")
e = Cantidad_total_de("mortalidad", "veracruz", "2019", "mujer")
f = vector_x_anio_de_nacimientos()
g = vector_x_anio_de_muertes()
df = df_nacimientos_x_anio()
dfm = df_muertes_x_anio()5. El quinto archivo es: help.jl
Esta función, entre otras cosas, se encarga de descomprimir un archivo .zip para después guardarlo en la dirección actual donde se esté trabajando (se puede utilizar pwd() para ver la dirección actual).
function decompress(zipp::String,dir::String) #Descomprime un .zip dando su direccion y donde cae
InfoZIP.unzip(zipp,dir)
end
function decompress(zipp::String) #descomprime un .zip y lo guarda el la direccion actual
InfoZIP.unzip(zipp,pwd())
endDFCSV
Para pasar de un CSV a un DataFrames, si es true es CSV con punto y coma, si es false entonces es CSV con comas.
function DFCSV(csvv::String,g::Bool)::DataFrame
if g
f=DataFrame(load(csvv,delim=';')) #Lee un archivo csv si manda true esta divido por ; si no es ,
else
f=DataFrame(load(csvv))
end
return f
endfilecsv
Envía un Dataframe y guarda en un CSV en donde estás trabajando
function filecsv(file::DataFrame)
a=save("file.csv",file) #crea un arhchivo csv en el directorio base
enddownl
Envía un string de un URL de un archivo y su dirección donde quieres que se guarde, va a devolver el string donde está guardado.
Si no le mandas dirección se guarda donde estás trabajando.
a=HTTP
Descarga un archivo y lo guarda en la dirección que lo mandaste.
function downl(url::String,dir::String)::String
a=HTTP.download(url,dir) #Descarga un archivo y si es un zip lo descomprime
#b=sizeof(a)
#c=b-2
#tipo=a[c]*a[c+1]*a[c+2]
tipo=a[end-2:end]
if tipo == "zip"
decompress(a,dir)
return ""
end
return a
end
function downl(url::String)::String
a=HTTP.download(url,pwd())
#b=sizeof(a)
#c=b-2
#tipo=a[c]*a[c+1]*a[c+2]
tipo=a[end-2:end]
if tipo == "zip"
decompress(a,pwd())
return pwd()
end
return a
enddownA
Envías API y devuelve un diccionario, pasa la API a un string
function downA(API::String)::Dict
a=HTTP.request("GET",API)
f=String(a.body)
Dic=Dict()
Dic=JSON.parse(f)
return Dic
endUnos ejemplos de su uso:
InfoZIP.unzip("Test.zip","D:\\IngenieriaDeSoftware\\Atom-Julia")
f = DataFrame(load("Test.csv",delim=';'))
first = save("Test.csv",file)
6. El sexto archivo es: idh.csv
Contiene una tabla con los valores referentes al Índice de Desarrollo Humano.
| Entidad | IDH 2010 | IDH 2000 |
|---|---|---|
| Aguascalientes | 0.7521 | 0.82 |
| ... | ... | ... |
| Zacatecas | 0.7057 | 0.75 |
| Nacional | 0.739 | 0.79 |
7. El séptimo archivo es idh.jl
Es un archivo corto que usa un String de parámetro y retorna un DataFrame.
Incluye el archivo \\src\\idh.csv para utilizarse después en el código como un DataFrame.
using CSVFiles, DataFrames
function df_IDH(path::String)::DataFrame
archi = "\\src\\idh.csv"
archi = path * archi
df = DataFrame(load(archi))
return df
enda = df_migracion()8. El octavo archivo es: indimigra.csv
Es la tabla con los datos referentes al índice migratorio.
| Entidad | % Residen_en_la_entidad | %Residen_en_otra_enti | %Residentes_en_otro_pais |
|---|---|---|---|
| Tabasco | 97.4 | 2.5 | 0.1 |
| ... | ... | ... | ... |
| Zacatecas | 97.1 | 2 | 1 |
| Baja California | 92.8 | 6 | 1.2 |
9. El noveno archivo es: info.jl
Contiene la información referente a los APIs con los cuáles se trabajarán.
apis=Vector()
push!(apis,"https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000001,1002000010,3105001001,6207020032,6207020033,1002000013,1002000026,1002000030,6207019034/es/07000001/true/BISE/2.0/5ca25658-cc51-c4fd-62cd-75148bd43e3a?type=json")
<...>
push!(apis,"https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000001,1002000010,3105001001,6207020032,6207020033,1002000013,1002000026,1002000030,6207019034/es/07000032/true/BISE/2.0/5ca25658-cc51-c4fd-62cd-75148bd43e3a?type=json")
Estados=Vector()
push!(Estados,"AGUACALIENTES")
<...>
push!(Estados,"ZACATECAS")10. El décimo archivo es: migración.jl
Este archivo utiliza un String como parámetro y retorna un DataFrame que incluye información sobre el índice de migración.
using CSVFiles, DataFrames
#a = df_migracion()
function df_migracion(path::String)::DataFrame
archi = "\\src\\indimigra.csv"
archi = path * archi
df = DataFrame(load(archi))
return df
end11. El onceavo archivo es: municipio.txt
Este archivo incluye las APIs necesarias para acceder a los datos sobre los municipios.
https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000001,1002000010,3105001001,6207020032,6207020033,1002000013,1002000026,1002000030,6207019034/es/070000010001/true/BISE/2.0/5ca25658-cc51-c4fd-62cd-75148bd43e3a?type=json
<...>
https://www.inegi.org.mx/app/api/indicadores/desarrolladores/jsonxml/INDICATOR/1002000001,1002000010,3105001001,6207020032,6207020033,1002000013,1002000026,1002000030,6207019034/es/070000320058/true/BISE/2.0/5ca25658-cc51-c4fd-62cd-75148bd43e3a?type=json
12. El doceavo archivo es: pobreza y extrema.jl
Este archivo utiliza dos funciones: df_pobreza y df_pobreza_extrema ambas usan String como parámetros y retornan un DataFrame con los datos de pobreza y pobreza extrema, respectivamente.
using CSVFiles, DataFrames
function df_pobreza(path::String)::DataFrame
archi = "\\src\\porcentaje de pobreza.csv"
archi = path * archi
df = DataFrame(load(archi))
return df
end
function df_pobreza_extrema(path::String)::DataFrame
archi = "\\src\\porcentaje de pobreza extrema.csv"
archi = path * archi
df = DataFrame(load(archi))
return df
endUn ejemplo de cómo usar la función:
p = df_pobreza()
ex = df_pobreza_extrema()13. El treceavo archivo es: porcentaje de pobreza extrema.csv
Este archivo contiene la información referente al porcentaje de pobreza extrema en formato .csv
| Entidad | 2008 | 2010 | 2012 | 2014 | 2016 | 2018 |
|---|---|---|---|---|---|---|
| Aguascalientes | 4.2 | 3.8 | 3.4 | 2.1 | 2.3 | 1.2 |
| ... | ... | ... | ... | ... | ... | ... |
| Zacatecas | 9.5 | 10.8 | 7.5 | 5.7 | 3.5 | 3.4 |
| Estados Unidos Mexicanos | 11.0 | 11.3 | 9.8 | 9.5 | 7.6 | 7.4 |
14. El catorceavo archivo es: porcenataje de pobreza.csv
Este archivo contiene la información referente al porcentaje de pobreza en formato .csv
| Entidad | 2008 | 2010 | 2012 | 2014 | 2016 | 2018 |
|---|---|---|---|---|---|---|
| Aguascalientes | 37.6 | 38.1 | 37.8 | 34.8 | 28.2 | 26.2 |
| ... | ... | ... | ... | ... | ... | ... |
| Zacatecas | 50.1 | 60.2 | 54.2 | 52.3 | 49.0 | 46.8 |
| Estados Unidos Mexicanos | 44.4 | 46.1 | 45.5 | 46.2 | 43.6 | 41.9 |