Estudiante: Angie Nicole Hernández Durán -UIS
Entre en contacto con 10 estudiantes del curso de datos y 2 profesores o personal de soportede LaConga, uno del curso de datos y otro de afuera, y consulte su nombre completo, sunombre de usuario en mattermost, edad, pais de origen, ciudad donde residen, su especialidad científica, nombre del instituto en que estudian/laboran, y un hobbie o afición.
Guardé la información recopilada en un archivo csv que guardé en esta misma carpeta
Cree un diccionario llamado “compas”, donde la llave sea el nombre de usuario en mattermost, y si depliego el valor almacenado, por ejemplo en compas[“juan-pineda”], lo que obtengo esa la vez otro diccionario, con las llaves “nombre”, “apellido”, “país”, “residencia”, “edad”,“institución”, “hobbie”.
Para esto usaré Pandas porque son lo mejor.
from pandas_ods_reader import read_ods #Para leer mi archivo .ods
import pandas as pd #Por la gran ayuda que brindan para tratar datos
compas_data = read_ods("compas.ods", 1) #leo lo que tengo en el archivo
compas = compas_data.set_index("usuario").to_dict(orient="index")
#Aquí, primero tomo mi dataframe y hago que 'usuario' indexe el resto de datos, con 'set_index'. Luego, 'to_dict'
#hace un diccionario donde las llaves son los índices, pero como el resto de mis datos están así mismo
#sub-indexados por los nombres de las columnas, resulta también haciendo los diccionarios dentro del diccionario.
#De esta manera obtengo lo que se pide en esta primera parte.
compas['ortegaj']
#Aquí vemos que dentro de la llave 'ortegaj' hay un diccionario con las llaves 'nombre',
#'apellido', 'edad', etcétera
{'nombre': 'Jennifer', 'apellido': 'Ortega', 'edad': 25.0, 'país': 'Ecuador', 'residencia': 'Quito', 'especialidad': 'imagen médica', 'institución': 'Escuela Politécnica Nacional', 'hobbie': 'dibujar'}
#Ahora accedemos a algunos de los valores de los sub-diccionarios de algunos compas
compas['ramosd']['edad'], compas['britod']['residencia'], compas['vivasm']['hobbie']
(24.0, 'Caracas', 'ballet, cantar')
Cree una función que reciba como entrada el diccionario y un país de origen, y retorne las informaciones completas de todas las personas de ese país, tabuladas en una forma fácil de entender.
def paisanos(diccionario,país):
dicc = diccionario
obj = país
#Encontré que se puede hacer "dictionary comprehension", y de esta manera obtengo sólo las llaves de los compas
#que están en el mismo país. Me pareción una manera genial de acceder a los valores de "nested dictionaries".
llaves = [k for k, v in dicc.items() if obj in v.values()]
#Hago un diccionario donde pongo toda la información de los paisanos cuyas llaves encontré anteriormente
paisanos_dict = {key : value for key, value in compas.items() if key in llaves}
#Vuelvo el diccionario un dataframe para que sea fácil de entender.
#Para esto, primero hago de los diccionarios dentro del diccionario, dataframes con pd.DataFrame.from_dict()
#Luego hago un dataframe con las parejas de las llaves que encontré anteriormente, y todos los datos que hice
#datasets previamente.
#Honestamente me confundí un poco con el eje, y solo dejé 1 e 'index' porque se ve mejor que las alternativas.
paisanos_data = pd.concat({k : pd.DataFrame.from_dict(v, 'index') for k, v in paisanos_dict.items()}, axis=1)
#Devuelve el dataframe con la información completa de los paisanos
return paisanos_data
paisanos(compas,'Colombia') #Ahora una prueba para ver quienes son mis paisanos
nicole | ramosd | juan-pineda | perezy | |
---|---|---|---|---|
0 | 0 | 0 | 0 | |
nombre | Nicole | David | Juan | Yineth |
apellido | Hernández | Ramos | Basto | Pérez |
edad | 23.0 | 24.0 | 37.0 | 29.0 |
país | Colombia | Colombia | Colombia | Colombia |
residencia | Bucaramanga | Piedecuesta | Bucaramanga | Bogotá |
especialidad | imagen médica | sistemas complejos | astronomía | nanoestructuras orgnometálicas |
institución | UIS | UIS | UIS | Universidad Nacional de Colombia |
hobbie | dibujar | música | dibujar, caminatas | voleibol, leer |
Busque una forma de calcular, a partir del diccionario, el promedio de edad de todas las personas en él, y una forma de mostrar todas las instituciones (sin repetición).
## PROMEDIO DE EDADES
type(compas['ramosd']['edad']) #Reviso que tipo de datos tengo aquí a ver si necesito modificarlo a numérico
float
import numpy as np
promedio_edades = sum(np.array([compas[indices]['edad'] for indices in compas.keys()]))/len(compas.keys())
#Usando dictionary comprehension saco las edades de todas las keys y las pongo e un arreglo de numpy,
#el cual puedo sumar facilmente con sum(), finalmente divido por el número de datos, len().
promedio_edades
31.46153846153846
##MOSTRAR INSTITUCIONES SIN REPETICIÓN
#Primero extraigo las instituciones en una lista utilizando dictionary comprehension
# La función set() hace precisamente lo que se pide aquí, toma los elementos de la lista pero no repite
instituciones = set([compas[indices]['institución'] for indices in compas.keys()])
instituciones
{'Escuela Politécnica Nacional', 'UIS', 'Universidad Central de Venezuela', 'Universidad Centrooccidental Lisandro Alvarado', 'Universidad Nacional de Colombia', 'Universidad Nacional de Ingeniería', 'Universidad de Toulouse'}