Sei sulla pagina 1di 6

## PROYECTO DE MIDRACIONES

import numpy as np

listaMeses_existentes=[] ## Lista de los meses existentes en el archivo


listaProvincias_existentes=[] ## Lista de las provincias existentes en el archivo
archivo=open("migraciones.csv") ## Abrimos el archivo en modo escritura
for linea in archivo:
listaLinea=linea.strip(" ").split(";")
if listaLinea[6] not in listaMeses_existentes: ## en esta linea agregamos los meses sin repetir a la lista meses con la ayuda del for
listaMeses_existentes+=[listaLinea[6]]
if listaLinea[3] not in listaProvincias_existentes: ## en esta linea agregamos las provincias sin repetir a la lista provincias con la ayuda del for
listaProvincias_existentes+=[listaLinea[3]]
archivo.close()

## MIGRACIONES(LISTAS)
print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n",
"1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

opcion=0
while opcion!="3": ## como nuestro menu solo tiene dos opciones utilizaremos un while que funcionara mientras la opcion ingresas sea distinta de 2
opcion = input("Ingrese la opcion para continuar: ")

if opcion=="1" or opcion=="Migraciones(Listas)" or opcion=="1.-Migraciones(Listas)": ## validamos la opcion 1 donde el usuario puede ingresar la opcion 1 de distintas formas
print("""
------------------------- SUB MENU MIGRACIONES(LISTAS) ----------------------
1.- Estadísticas de migraciones por meses
2.- Migraciones por mes
3.- Estadísticas de migraciones por provincia
4.- Migraciones por provincia
5.- Regresar
""")
subOpcion=input("Escoja la opcion que desee ver: ") ## esta variable se utilizara para referirnos a las opciones que podremos visualizar
listaSubopcion=["1","2","3","4","5"]
while not (subOpcion.isdigit()) or subOpcion not in listaSubopcion:
subOpcion=input("Escoja la opcion que desee ver: ")

## -------------------------------------------------- OPCION #1 --------------------------------------------------

if subOpcion=="1" :
archivo = open("migraciones.csv") ## para este caso volveremos abrir el archivo ya que vamos a utilizarlo
lista_Migra_Entrada = [0] * len(listaMeses_existentes) ## estas dos lista sera en donde se guardaran el total de entradas y salidas que tengan cada
mes
lista_Migra_Salida = [0] * len(listaMeses_existentes)
for linea in archivo:
listaLinea=linea.strip(" ").split(";")
mes=listaLinea[6] ## nos indica el mes en la interacion presente del for
migracion=listaLinea[0] ## nos indica el tipo de migracion en la interacion presente del for
indiceMes=listaMeses_existentes.index(mes) ## con este indice ubicaremos el mes que se necesite sumar en cada posicion
if migracion=="Entrada":
lista_Migra_Entrada[indiceMes]+=1 ## por cada coincidencia a medida que el for avanza se ira sumando 1 en la posicion del mes que aparesca
elif migracion=="Salida":
lista_Migra_Salida[indiceMes]+=1
archivo.close() ## vista formateada de las estadisticas de los meses
print("\n","El mes con mayor ingresos es: ", listaMeses_existentes[lista_Migra_Entrada.index(max(lista_Migra_Entrada))]," ","Con",max(lista_Migra_Entrada),"INGRESOS")
print(" El mes con mayor salidas es: ", listaMeses_existentes[lista_Migra_Salida.index(max(lista_Migra_Salida))]," ","Con",max(lista_Migra_Salida),"SALIDAS")
print(" El mes con menor ingresos es: ", listaMeses_existentes[lista_Migra_Entrada.index(min(lista_Migra_Entrada))],"Con",min(lista_Migra_Entrada)," INGRESOS")
print(" El mes con menor salidas es: ", listaMeses_existentes[lista_Migra_Salida.index(min(lista_Migra_Salida))],"Con",min(lista_Migra_Salida)," ","SALIDAS","\n")
print("\n", "-------------------------- MENU PRINCIPAL -----------------------","\n","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

## -------------------------------------------------- OPCION #2 --------------------------------------------------

elif subOpcion=="2":
archivo = open("migraciones.csv")
lista_Migra_Entrada = [0] * len(listaMeses_existentes) ## estas dos lista sera en donde se guardaran el total de entradas y salidas que tengan cada mes
lista_Migra_Salida = [0] * len(listaMeses_existentes)
for linea in archivo: ## esta parte del codigo es el mismo utilizado arriba para llenar las listas de entrada y salida
listaLinea = linea.strip(" ").split(";")
mes = listaLinea[6]
migracion = listaLinea[0]
indiceMes = listaMeses_existentes.index(mes)
if migracion == "Entrada": ##por cada coincidencia se ira sumando 1 al mes en dicha posicion de la lista
lista_Migra_Entrada[indiceMes] += 1
elif migracion == "Salida":
lista_Migra_Salida[indiceMes] += 1
archivo.close()
print("\n","Los meses existentes son:","|",("-").join(listaMeses_existentes),"|","Elija uno de ellos","\n") ## presentamos todos los meses presentes en el
archivo y de cuales se pueden consultar
mesConsulta=input("INGERESE MES A CONSULTAR: ").capitalize()
while mesConsulta not in listaMeses_existentes: ## mientras no se ingrese el mes correcto el while
lo seguira pidiendo hasta escribir el correcto
mesConsulta = input("INGERESE MES A CONSULTAR: ").capitalize()
if mesConsulta in listaMeses_existentes:
print("\n", "El numero de Ingresos del mes, ", mesConsulta, " es de: ",lista_Migra_Entrada[listaMeses_existentes.index(mesConsulta)]) ## respuesta del literal
2 donde el mes solicitado mostrara las entradas y salidas totates
print(" El numero de Salidas del mes, ", mesConsulta, " es de: ",lista_Migra_Salida[listaMeses_existentes.index(mesConsulta)], "\n")
print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

## -------------------------------------------------- OPCION #3 --------------------------------------------------

elif subOpcion=="3":
archivo = open("migraciones.csv")
lista_Migra_Entrada_Provincias=[0]*len(listaProvincias_existentes) ## ahora se repite todo lo anterior pero con las provincias y no con los meses
lista_Migra_Salida_Provincias=[0]*len(listaProvincias_existentes)
for linea in archivo:
listaLinea=linea.strip(" ").split(";")
provincia=listaLinea[3] ## nos indica la provincia en la interacion presente del for
migracion=listaLinea[0] ## nos indica el tipo de migracion en la interacion presente del for
indiceProvincia=listaProvincias_existentes.index(provincia) ## con este indice ubicaremos las provincias que se necesite sumar en cada posicion
if migracion=="Entrada":
lista_Migra_Entrada_Provincias[indiceProvincia]+=1 ## por cada coincidencia a medida que el for avanza se ira sumando 1 en la posicion de la provincia que aparesca
elif migracion=="Salida":
lista_Migra_Salida_Provincias[indiceProvincia]+=1
archivo.close() ## salida formateada de lo pedido en el literal 3 las estadisticas por provincia
print("\n","La provincia con mayor ingresos es: ", listaProvincias_existentes[lista_Migra_Entrada_Provincias.index(max(lista_Migra_Entrada_Provincias))],"
","Con",max(lista_Migra_Entrada_Provincias),"INGRESOS")
print(" La provincia con mayor salidas es: ", listaProvincias_existentes[lista_Migra_Salida_Provincias.index(max(lista_Migra_Salida_Provincias))],"
","Con",max(lista_Migra_Salida_Provincias),"SALIDAS")
print(" La provincia con menor ingresos es: ",
listaProvincias_existentes[lista_Migra_Entrada_Provincias.index(min(lista_Migra_Entrada_Provincias))],"Con",min(lista_Migra_Entrada_Provincias)," ","INGRESOS")
print(" La provincia con menor salidas es: ",
listaProvincias_existentes[lista_Migra_Salida_Provincias.index(min(lista_Migra_Salida_Provincias))],"Con",min(lista_Migra_Salida_Provincias)," ","SALIDAS","\n")
print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

## -------------------------------------------------- OPCION #4 --------------------------------------------------

elif subOpcion=="4":
archivo=open("migraciones.csv")
lista_Migra_Entrada_Provincias=[0]*len(listaProvincias_existentes) ## estas dos lista sera en donde se guardaran el total de entradas y salidas que tengan
cada provincia
lista_Migra_Salida_Provincias=[0]*len(listaProvincias_existentes)
for linea in archivo: ## esta parte del codigo es el mismo utilizado arriba para llenar las listas de entrada
y salida
listaLinea=linea.strip(" ").split(";")
provincia=listaLinea[3]
migracion=listaLinea[0]
indiceProvincia=listaProvincias_existentes.index(provincia)
if migracion=="Entrada": ##por cada coincidencia se ira sumando 1 a la provincia en dicha posicion de la lista
lista_Migra_Entrada_Provincias[indiceProvincia] += 1
elif migracion=="Salida":
lista_Migra_Salida_Provincias[indiceProvincia] += 1
archivo.close()
print("\n","Las provincias existentes son:","|",("-").join(listaProvincias_existentes),"|","Elija una de ellas","\n") ## se muestra las provincias disponibles que se
pueden consultar
provinciaConsulta=input("INGERESE PROVINCIA A CONSULTAR: ").capitalize()
while provinciaConsulta not in listaProvincias_existentes: ##"mientras provinciaConsulta se distinto a una provincia el while seguira
preguntandopor un nombre valido"
provinciaConsulta=input("INGERESE PROVINCIA A CONSULTAR: ").capitalize()
if provinciaConsulta in listaProvincias_existentes: ## "Salida formateada de lo pedido en el literal 4"
print("\n", "El numero de Ingresos de la provincia, ", provinciaConsulta, " es de:
",lista_Migra_Entrada_Provincias[listaProvincias_existentes.index(provinciaConsulta)])
print(" El numero de Salidas de la provincia, ", provinciaConsulta, " es de: ",lista_Migra_Salida_Provincias[listaProvincias_existentes.index(provinciaConsulta)],
"\n")
print("\n", "-------------------------- MENU PRINCIPAL -----------------------","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

## -------------------------------------------------- OPCION #5 --------------------------------------------------


elif subOpcion == "5": # cuando la subOpcion sera igual a 5 se retornara al menu principal
print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

## ----------------------------------------------- SEGUNDA PARTE DEL PROYECTO ----------------------------------------------------------------

if opcion=="2" or opcion=="Migraciones(Numpy)" or opcion=="1.-Migraciones(Numpy)": ## validamos la opcion 1 donde el usuario puede ingresar la opcion 2 de distintas formas

costa=["ESMERALDAS","MANABÍ","GUAYAS","SANTA ELENA","LOS RIOS","SANTO DOMINGO DE LOS TSACHILAS","EL ORO"]


sierra=["CARCHI","IMBABURA","PICHINCHA","COTOPAXI","CHIMBORAZO","TUNGURAHUA","BOLIVAR","CAÑAR","AZUAY","LOJA"]
oriente=["SUCUMBIOS","ORELLANA","NAPO","PASTAZA","MORONA SANTIAGO","ZAMORA CHINCHIPE"]
insular=["GALÁPAGOS"]
costaExistentes=[]
sierraExistentes=[]
orienteExistentes=[]
insularExistente=[]

## creacion de las litas provincias y ocupaciones existentes


listaOcupaciones_existentes=[]
listaProvincias_existentes=[]
archivo=open("migraciones.csv")
for linea in archivo:
linea=linea.upper()
listaLinea=linea.strip(" ").split(";")
if listaLinea[10] not in listaOcupaciones_existentes:
listaOcupaciones_existentes+=[listaLinea[10]]
if listaLinea[3] not in listaProvincias_existentes:
listaProvincias_existentes+=[listaLinea[3]]
archivo.close()

## lista de provincias por regien existentes en el archivo


for provi in listaProvincias_existentes:
if provi in costa and provi not in costaExistentes:
costaExistentes+=[provi]
if provi in sierra and provi not in sierraExistentes:
sierraExistentes+=[provi]
if provi in oriente and provi not in orienteExistentes:
orienteExistentes+=[provi]
if provi in insular and provi not in insularExistente:
insularExistente+=[provi]

## lista total de provincias presente en el archivo


listaProvinciasPorRegionesExistentes=costaExistentes+sierraExistentes+orienteExistentes+insularExistente

## creacion de matrices de numero filas=ocupaciones y columnas=provincias

## matriz entrada y matriz salidas

matrizEntrada=np.zeros((len(listaOcupaciones_existentes),len(listaProvinciasPorRegionesExistentes)),dtype=int)
matrizSalida=np.zeros((len(listaOcupaciones_existentes),len(listaProvinciasPorRegionesExistentes)),dtype=int)

## lenado de las matrices


archivo=open("migraciones.csv")
for linea in archivo:
linea=linea.upper()
listaLinea=linea.strip(" ").split(";")

indiceFila=listaOcupaciones_existentes.index(listaLinea[10])

## para la matriz entrada


if listaLinea[0]=="ENTRADA":
if listaLinea[3] in costaExistentes:
indiceColumna=costaExistentes.index(listaLinea[3])
matrizEntrada[indiceFila,indiceColumna]+=1
if listaLinea[3] in sierraExistentes:
indiceColumna=sierraExistentes.index(listaLinea[3])+len(costaExistentes)
matrizEntrada[indiceFila,indiceColumna]+=1
if listaLinea[3] in orienteExistentes:
indiceColumna=orienteExistentes.index(listaLinea[3])+len(costaExistentes)+len(sierraExistentes)
matrizEntrada[indiceFila,indiceColumna]+=1
if listaLinea[3] in insularExistente:
indiceColumna=insularExistente.index(listaLinea[3])+len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes)
matrizEntrada[indiceFila,indiceColumna]+=1

## para la matriz salida


if listaLinea[0]=="SALIDA":
if listaLinea[3] in costaExistentes:
indiceColumna=costaExistentes.index(listaLinea[3])
matrizSalida[indiceFila,indiceColumna]+=1
if listaLinea[3] in sierraExistentes:
indiceColumna=sierraExistentes.index(listaLinea[3])+len(costaExistentes)
matrizSalida[indiceFila,indiceColumna]+=1
if listaLinea[3] in orienteExistentes:
indiceColumna=orienteExistentes.index(listaLinea[3])+len(costaExistentes)+len(sierraExistentes)
matrizSalida[indiceFila,indiceColumna]+=1
if listaLinea[3] in insularExistente:
indiceColumna=insularExistente.index(listaLinea[3])+len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes)
matrizSalida[indiceFila,indiceColumna]+=1
archivo.close()

print("""
------------------------- SUB MENU MIGRACIONES(Numpy) ----------------------
1.- Estadísticas de migraciones por provincia
2.- Estadísticas de migraciones por ocupaciones
3.- Regresar
""")
subOpcion=input("Escoja la opcion que desee ver: ") ## esta variable se utilizara para referirnos a las opciones que podremos visualizar
listaSubopcion=["1","2","3"]
while not (subOpcion.isdigit()) or subOpcion not in listaSubopcion:
subOpcion=input("Escoja la opcion que desee ver: ")

## -------------------------------------------------- OPCION #1 --------------------------------------------------


if subOpcion=="1":
## arreglo total entradas para todas las provincias
arregloTotalEntradas=matrizEntrada.sum(axis=0)
arregloTotalSalidas=matrizSalida.sum(axis=0)

##------------------------------------------ entradas ---------------------------------------------------------------------------------


print("------------------------------------------ ENTRADAS ---------------------------------------------------------------------------------")
## para las provincias de la costa
arregloCosta=arregloTotalEntradas[:len(costaExistentes)]
print("\nPARA LA COSTA")
print("La provincia de la costa que ha obtenido mayor cantidad de entradas es: ",costaExistentes[arregloCosta.argmax()],"Con un total de: ",arregloCosta.max())
print("La provincia de la costa que ha obtenido menor cantidad de entradas es: ",costaExistentes[arregloCosta.argmin()],"Con un total de: ",arregloCosta.min())

## para las provincias de la sierra


print("\nPARA LA SIERRA")
arregloSierra=arregloTotalEntradas[len(costaExistentes):len(costaExistentes)+len(sierraExistentes)]
print("La provincia de la seirra que ha obtenido mayor cantidad de entradas es: ",sierraExistentes[arregloSierra.argmax()],"Con un total de: ",arregloSierra.max())
print("La provincia de la sierra que ha obtenido menor cantidad de entradas es: ",sierraExistentes[arregloSierra.argmin()],"Con un total de: ",arregloSierra.min())

## para las provincias del oriente


print("\nPARA LA ORIENTE")
arregloOriente=arregloTotalEntradas[len(costaExistentes)+len(sierraExistentes):len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes)]
print("La provincia del Oriente que ha obtenido mayor cantidad de entradas es: ",orienteExistentes[arregloOriente.argmax()],"Con un total de: ",arregloOriente.max())
print("La provincia del Oriente que ha obtenido menor cantidad de entradas es: ",orienteExistentes[arregloOriente.argmin()],"Con un total de: ",arregloOriente.min())
## para las provincias insular
print("\nPARA INSULAR")
arregloInsular=arregloTotalEntradas[len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes):]
print("La provincia Insular que ha obtenido mayor cantidad de entradas es: ",insularExistente[arregloInsular.argmax()],"Con un total de: ",arregloInsular.max())
print("La provincia Insular que ha obtenido menor cantidad de entradas es: ",insularExistente[arregloInsular.argmin()],"Con un total de: ",arregloInsular.min(),"\n")

contador=0
listaProviEntradas=[]
for cantidad in arregloTotalEntradas:
if 1000<cantidad<100000:
contador+=1
listaProviEntradas+=[listaProvinciasPorRegionesExistentes[list(arregloTotalEntradas).index(cantidad)]]

print("El numero de provincias que registran entre 1000 y 100000 entradas son: ",contador)
print("I las provincias son: ",listaProviEntradas,"\n")
##------------------------------------------ salidas ---------------------------------------------------------------------------------
print("------------------------------------------ SALIDAS ---------------------------------------------------------------------------------")
## para las provincias de la costa
arregloCosta=arregloTotalSalidas[:len(costaExistentes)]
print("\nPARA LA COSTA")
print("La provincia de la costa que ha obtenido mayor cantidad de salidas es: ",costaExistentes[arregloCosta.argmax()],"Con un total de: ",arregloCosta.max())
print("La provincia de la costa que ha obtenido menor cantidad de salidas es: ",costaExistentes[arregloCosta.argmin()],"Con un total de: ",arregloCosta.min())

## para las provincias de la sierra


print("\nPARA LA SIERRA")
arregloSierra=arregloTotalSalidas[len(costaExistentes):len(costaExistentes)+len(sierraExistentes)]
print("La provincia de la seirra que ha obtenido mayor cantidad de salidas es: ",sierraExistentes[arregloSierra.argmax()],"Con un total de: ",arregloSierra.max())
print("La provincia de la sierra que ha obtenido menor cantidad de salidas es: ",sierraExistentes[arregloSierra.argmin()],"Con un total de: ",arregloSierra.min())

## para las provincias del oriente


print("\nPARA LA ORIENTE")
arregloOriente=arregloTotalSalidas[len(costaExistentes)+len(sierraExistentes):len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes)]
print("La provincia del Oriente que ha obtenido mayor cantidad de salidas es: ",orienteExistentes[arregloOriente.argmax()],"Con un total de: ",arregloOriente.max())
print("La provincia del Oriente que ha obtenido menor cantidad de salidas es: ",orienteExistentes[arregloOriente.argmin()],"Con un total de: ",arregloOriente.min())

## para las provincias insular


print("\nPARA INSULAR")
arregloInsular=arregloTotalSalidas[len(costaExistentes)+len(sierraExistentes)+len(orienteExistentes):]
print("La provincia Insular que ha obtenido mayor cantidad de salidas es: ",insularExistente[arregloInsular.argmax()],"Con un total de: ",arregloInsular.max())
print("La provincia Insular que ha obtenido menor cantidad de salidas es: ",insularExistente[arregloInsular.argmin()],"Con un total de: ",arregloInsular.min(),"\n")

contador=0
listaProviSalidas=[]
for cantidad in arregloTotalSalidas:
if 1000<cantidad<100000:
contador+=1
listaProviSalidas+=[listaProvinciasPorRegionesExistentes[list(arregloTotalSalidas).index(cantidad)]]

print("El numero de provincias que registran entre 1000 y 100000 salidas son: ",contador)
print("I las provincias son: ",listaProviSalidas,"\n")

print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n",


"1.-Migraciones(Listas)", "\n", "2.-Migraciones (Numpy)", "\n", "3.-Salir", "\n")

## -------------------------------------------------- OPCION #2 --------------------------------------------------


if subOpcion=="2":
## arreglo total entradas para todas las provincias
arregloOcupacionesEntradas = matrizEntrada.sum(axis=1)
arregloocupacionesSalidas = matrizSalida.sum(axis=1)

print("La ocupacion que han registrado la mayor cantidad de entradas es:


",listaOcupaciones_existentes[arregloOcupacionesEntradas.argmax()],"con",arregloOcupacionesEntradas.max())
print("La ocupacion que han registrado la mayor cantidad de salidas es:
",listaOcupaciones_existentes[arregloocupacionesSalidas.argmax()],"con",arregloocupacionesSalidas.max(),"\n")
##------------------------ para las ocupaciones que han pasado la media ------------------------------------------------
mediaOcupacionesEntrada=int(arregloOcupacionesEntradas.mean())
mediaOcupacionesSalida=int(arregloocupacionesSalidas.mean())
contOcuEntrada=0
contOcuSalida=0
listaOcuMayorEntrada=[]
listaOcuMayorSalida=[]

for valorEntrada in arregloOcupacionesEntradas:


if valorEntrada> mediaOcupacionesEntrada:
contOcuEntrada+=1
listaOcuMayorEntrada+=[listaOcupaciones_existentes[list(arregloOcupacionesEntradas).index(valorEntrada)]]
for valorSalida in arregloocupacionesSalidas:
if valorSalida> mediaOcupacionesSalida:
contOcuSalida+=1
listaOcuMayorSalida+=[listaOcupaciones_existentes[list(arregloocupacionesSalidas).index(valorSalida)]]

## ------------------------------ ENTRADAS ---------------------------------


print("El numero de ocupaciones que superan el promedio de entradas por ocupaciones es: ",contOcuEntrada)
print("I las ocupaciones son: ","\n\n",listaOcuMayorEntrada,"\n")
## ------------------------------ SALIDAS ---------------------------------
print("El numero de ocupaciones que superan el promedio de salidas por ocupaciones es: ", contOcuSalida)
print("I las ocupaciones son: ","\n\n", listaOcuMayorSalida,"\n")

print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n",


"1.-Migraciones(Listas)", "\n", "2.-Migraciones (Numpy)", "\n", "3.-Salir", "\n")

elif subOpcion == "3": # cuando la subOpcion sera igual a 5 se retornara al menu principal
print("\n", "-------------------------- MENU PRINCIPAL -----------------------", "\n","1.-Migraciones(Listas)","\n","2.-Migraciones (Numpy)","\n","3.-Salir","\n")

print(" ------------------------ SALIO DEL PROGRAMA ------------------------ ")

Potrebbero piacerti anche