Entre en contacto con 10 estudiantes del curso de datos y 2 profesores o personal de soporte de LaConga, uno del curso de datos y otro de afuera, y consulte su nombre completo, su nombre de usuario en mattermost, edad, país de origen, ciudad donde residen, su especialidad científica, nombre del instituto en que estudian/laboran, y un hobbie o afición.
Después de recopilar la información, creé un csv con todos los datos llamado p_info.csv y lo importé usando numpy.
import numpy as np
data = np.loadtxt('p_info.csv', delimiter = ',', dtype='str', unpack=True)
La estrategia es crear una lista de keys que sean los usuarios de Mattermost y una lista de values que sean diccionarios con los otros datos.
users = data[0][1:] # lista de usuarios usando slicing
info = [{data[i][0]:data[i][j] for i in range(1,len(data[1:])+1)} for j in range(1,len(data[0][1:])+1)]
# lista de diccionarios usando un dic-comprehension dentro de una list-comprehension
Ahora, usando el constructor dic() y la función zip() se puede crear el diccionario deseado [1].
compas = dict(zip(users,info))
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 bycountry(dic,country):
# obtengo los usuarios de las personas nacidas en ese pais
compatriots = [user for user in compas.keys() if compas[user]['pais'] == country]
# voy a imprimir verticalmente porque no cabe de manera horizontal
for compatriot in compatriots:
print('usuario: ' + compatriot)
for header in compas[compatriot].keys():
print(' \u25ba ' + header + ' : ' + compas[compatriot][header])
bycountry(compas,'Colombia')
usuario: nicole ► nombre : Nicole ► apellido : Hernández ► pais : Colombia ► residencia : Bucaramanga ► edad : 23 ► especialidad : análisis de imagen médica ► institucion : Universidad Industrial de Santander ► hobbie : dibujar usuario: vargass ► nombre : Sasiri ► apellido : Vargas ► pais : Colombia ► residencia : Cali ► edad : 20 ► especialidad : sistemas de reacción difusión unidimensionales ► institucion : Universidad del Valle ► hobbie : bailar usuario: navasa ► nombre : Alfonso ► apellido : Navas ► pais : Colombia ► residencia : Bogotá ► edad : 24 ► especialidad : física de sistemas complejos ► institucion : Universidad Nacional de Colombia ► hobbie : crossfit usuario: bullam ► nombre : Miguel ► apellido : Bulla ► pais : Colombia ► residencia : Bogotá ► edad : 25 ► especialidad : física ► institucion : Universidad Nacional de Colombia ► hobbie : series usuario: ladinoj ► nombre : Jose ► apellido : Ladino ► pais : Colombia ► residencia : Bogotá ► edad : 24 ► especialidad : mecánica celeste relativista ► institucion : Universidad Nacional de Colombia ► hobbie : skate
bycountry(compas,'Venezuela')
usuario: ramosm ► nombre : María ► apellido : Ramos ► pais : Venezuela ► residencia : Mérida ► edad : 23 ► especialidad : física ► institucion : Universidad de los Andes ► hobbie : escribir usuario: arturos ► nombre : Arturo ► apellido : Sanchez ► pais : Venezuela ► residencia : Ginebra ► edad : 34 ► especialidad : física ► institucion : LAPP ► hobbie : montar bicicleta usuario: pierre_r_pujol ► nombre : Pierre ► apellido : Pujol ► pais : Venezuela ► residencia : Toulouse ► edad : 52 ► especialidad : física teórica ► institucion : Universidad de Toulouse 3 ► hobbie : fotografía
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).
def age_average(dic):
# recupero la edad de cada persona (convertida a un entero) usando una list-comprehension
ages = [int(value['edad']) for value in dic.values()]
# imprimo el promedio
return sum(ages)/len(ages)
age_average(compas)
27.727272727272727
def institutions(dic):
# recupero las instituciones usando una list-comprehension y elimino duplicados convirtiéndola a un conjunto
insts = set([value['institucion'] for value in dic.values()])
# imprimo en distintas filas por claridad
for inst in insts:
print(inst)
institutions(compas)
Universidad Nacional de Colombia LAPP Universidad Nacional Mayor de San Marcos Universidad Industrial de Santander Universidad de Toulouse 3 Universidad Nacional de Ingeniería Universidad de los Andes Universidad del Valle