Skip to content
Snippets Groups Projects
Commit 305965e1 authored by Sebastian Ordoñez's avatar Sebastian Ordoñez
Browse files

Notebook with the third exercise added.

parent e5b3c577
No related branches found
No related tags found
No related merge requests found
%% Cell type:markdown id: tags:
# Ejercicio No. 3 - Amigos Congueros
**Enunciado:**
- 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, pais de origen, ciudad donde residen, su especialidad
científica, nombre del instituto en que estudian/laboran, y un hobbie o afición.
- 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 es
a la vez otro diccionario, con las llaves “nombre”, “apellido”, “país”, “residencia”, “edad”,
“institución”, “hobbie”.
- 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. -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)
**Solución:** Hola! Mi nombre es Sebastian Ordoñez (ordonezs). Para tratar este problema opté por apuntar directamente los datos recolectados en un diccionario y trabajar tres funciones independientes de acuerdo a lo solicitado en el enunciado.
%% Cell type:markdown id: tags:
## Primera parte (Encontrar a los amigos congueros)
A continuación se encuentra una lista con los participantes y sus respectivos datos:
1. hernandezj
- Juan
- Hernandez
- 24
- Colombia
- Bogota
- Electrodinámica Cuántica
- Universidad Nacional de Colombia
- Leer
2. acerot
- Tatiana
- Acero
- 23
- Colombia
- Bogota
- Mecánica Celeste Relativista
- Universidad Nacional de Colombia
- Anime
3. ladinoj
- Jose
- Ladino
- 24
- Colombia
- Bogota
- Mecanica Celeste Relativista
- Universidad Nacional de Colombia
- Skate
4. navasa
- Alfonso
- Navas
- 24
- Colombia
- Bogota
- Física de Sistemas Complejos
- Universidad Nacional de Colombia
- Crossfit
5. ramosd
- David
- Ramos
- 23
- Colombia
- Bucaramanga
- Física Estadística
- Universidad Industrial de Santander
- Tocar música rock
6. grisalesj
- Jennifer
- Grisales
- 24
- Colombia
- Cúcuta
- Astropartículas
- Universidad Industrial de Santander
- Divulgación científica
7. juan-pineda
- Juan
- Pineda
- 30
- Colombia
- Bucaramanga
- Astronomía Extragaláctica
- Universidad Industrial de Santander
- Divulgación científica
8. jalil
- Jalil
- Valera
- 23
- Colombia
- Cali
- Teoría cuántica de campos
- Universidad del Valle
- Leer
9. camacho.reina
- Reina
- Camacho
- 33
- Venezuela
- Paris
- Física experimental de partículas
- French National Center for Scientific Research
- Divulgación Científica
10. ortegaj
- Jennifer
- Ortega
- 24
- Ecuador
- Quito
- Ciencia computacional
- Escuela Politécnica Nacional en Ecuador
- Hiking
11. vargass
- Sasiri
- Vargas
- 24
- Colombia
- Cali
- Simulación
- Universidad del Valle
- Bailar
12. aldo
- Aldo
- Arriola
- 24
- Perú
- Lima
- Magnetismo
- Universidad Nacional de Ingeniería
- Caminatas
%% Cell type:markdown id: tags:
## Segunda parte (Organizar los datos)
En el diccionario `compas` se organiza la información de los participantes listados anteriormente.
%% Cell type:code id: tags:
``` python
compas = {"hernandezj":{"nombre": "Juan", "apellido": "Hernandez", "edad": 24, "país": "Colombia","residencia":"Bogotá","especialidad": "Electrodinámica cuántica", "institución":"Universidad Nacional de Colombia", "hobbie": "Leer"},
"acerot":{"nombre": "Tatiana", "apellido": "Acero", "edad": 23, "país": "Colombia","residencia":"Bogotá","especialidad":"Mecánica celeste relativista", "institución": "Universidad Nacional de Colombia", "hobbie":"Anime"},
"ladinoj":{"nombre": "José", "apellido": "Ladino", "edad": 24, "país": "Colombia","residencia": "Bogotá","especialidad":"Mecánica celeste relativista", "institución": "Universidad Nacional de Colombia", "hobbie": "Skate"},
"navasa":{"nombre": "Alfonso", "apellido":"Navas", "edad":24, "país":"Colombia","residencia":"Bogotá","especialidad":"Física de sistemas complejos", "institución":"Universidad Nacional de Colombia", "hobbie":"Crossfit"},
"ramosd":{"nombre":"David", "apellido":"Ramos", "edad":23, "país":"Colombia","residencia":"Bucaramanga","especialidad":"Física estadística", "institución":"Universidad Industrial de Santander", "hobbie":"Tocar rock"},
"grisalesj":{"nombre":"Jennifer", "apellido":"Grisales", "edad":24, "país":"Colombia","residencia":"Cúcuta","especialidad":"Astropartículas", "institución":"Universidad Industrial de Santander", "hobbie":"Divulgación científica"},
"juan-pineda":{"nombre":"Juan", "apellido":"Pineda", "edad":30, "país":"Colombia","residencia":"Bucaramanga","especialidad":"Astronomía extragaláctica", "institución":"Universidad Industrial de Santander", "hobbie":"Divulgación Científica"},
"jalil":{"nombre":"Jalil", "apellido":"Valera", "edad":23, "país":"Colombia","residencia":"Cali","especialidad":"Teoría cuántica de campos", "institución":"Universidad del Valle", "hobbie":"Leer"},
"camacho.reina":{"nombre":"Reina", "apellido":"Camacho", "edad":33, "país":"Venezuela","residencia":"Paris","especialidad":"Física experimental de partículas", "institución":"French National Center for Scientific Research", "hobbie":"Divulgación científica"},
"ortegaj":{"nombre":"Jennifer", "apellido":"Ortega", "edad":24, "país":"Ecuador","residencia":"Quito","especialidad":"Ciencia computacional", "institución":"Escuela Politécnica Nacional de Ecuador", "hobbie":"Hiking"},
"vargass":{"nombre":"Sasiri", "apellido":"Vargas", "edad":24, "país":"Colombia","residencia":"Cali","especialidad":"Simulación", "institución":"Universidad del Valle", "hobbie":"Bailar"},
"aldo":{"nombre":"Aldo", "apellido":"Arriola", "edad":24, "país":"Perú","residencia":"Lima","especialidad":"Magnetismo", "institución":"Universidad Nacional de Ingeniería", "hobbie":"Caminatas"}}
```
%% Cell type:markdown id: tags:
## Tercera parte (Jugar con los datos)
Como parte final del ejercicio se solicitan tres funciones independientes, las cuales hacen uso del diccionario `compas` o en general de un diccionario con esa estructura. La primera de estas funciones es `peopleByCountry`la cual se expone a continuación.
%% Cell type:code id: tags:
``` python
def peopleByCountry(people:dict, country:str)->list:
"""
Esta función recibe un diccionario con diccionarios, arquitectura de "compas", y una cadena con e nombre de un
país; retornando todas las personas en el diccionario originarias de dicho país.
Input
------
people (dict): diccionario que contiene diccionarios con la estructura de "compas".
country (str): cadena correspondiente al nombre de un país.
Output
------
sameCountry (list): lista que contiene diccionarios con los datos de las personas que vienen del mismo país.
"""
sameCountry = []
for person in people:
if people[person]["país"]==country:
sameCountry.append(people[person])
return sameCountry
```
%% Cell type:markdown id: tags:
Aunque se puede mejorar el output para que sea más legible, por el momento la función anterior funciona para compas tal que:
%% Cell type:code id: tags:
``` python
peopleByCountry(compas, "Colombia")
```
%% Output
[{'nombre': 'Juan',
'apellido': 'Hernandez',
'edad': 24,
'país': 'Colombia',
'residencia': 'Bogotá',
'especialidad': 'Electrodinámica cuántica',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'Leer'},
{'nombre': 'Tatiana',
'apellido': 'Acero',
'edad': 23,
'país': 'Colombia',
'residencia': 'Bogotá',
'especialidad': 'Mecánica celeste relativista',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'Anime'},
{'nombre': 'José',
'apellido': 'Ladino',
'edad': 24,
'país': 'Colombia',
'residencia': 'Bogotá',
'especialidad': 'Mecánica celeste relativista',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'Skate'},
{'nombre': 'Alfonso',
'apellido': 'Navas',
'edad': 24,
'país': 'Colombia',
'residencia': 'Bogotá',
'especialidad': 'Física de sistemas complejos',
'institución': 'Universidad Nacional de Colombia',
'hobbie': 'Crossfit'},
{'nombre': 'David',
'apellido': 'Ramos',
'edad': 23,
'país': 'Colombia',
'residencia': 'Bucaramanga',
'especialidad': 'Física estadística',
'institución': 'Universidad Industrial de Santander',
'hobbie': 'Tocar rock'},
{'nombre': 'Jennifer',
'apellido': 'Grisales',
'edad': 24,
'país': 'Colombia',
'residencia': 'Cúcuta',
'especialidad': 'Astropartículas',
'institución': 'Universidad Industrial de Santander',
'hobbie': 'Divulgación científica'},
{'nombre': 'Juan',
'apellido': 'Pineda',
'edad': 30,
'país': 'Colombia',
'residencia': 'Bucaramanga',
'especialidad': 'Astronomía extragaláctica',
'institución': 'Universidad Industrial de Santander',
'hobbie': 'Divulgación Científica'},
{'nombre': 'Jalil',
'apellido': 'Valera',
'edad': 23,
'país': 'Colombia',
'residencia': 'Cali',
'especialidad': 'Teoría cuántica de campos',
'institución': 'Universidad del Valle',
'hobbie': 'Leer'},
{'nombre': 'Sasiri',
'apellido': 'Vargas',
'edad': 24,
'país': 'Colombia',
'residencia': 'Cali',
'especialidad': 'Simulación',
'institución': 'Universidad del Valle',
'hobbie': 'Bailar'}]
%% Cell type:markdown id: tags:
La siguiente función, `averageAge`, permite calcular la edad promedio de las personas que hacen parte de un diccionarión que contiene una llave llamada edad, la cual almacena un entero.
%% Cell type:code id: tags:
``` python
def averageAge(people:dict)->str:
"""
Esta función calcula la edad promedio de los individuos cuyos datos se encuentran almacenados con llave (su
nombre) en un diccionario, que a su vez contiene la llave edad, con su respectiva edad.
Input
------
people (dict): diccionario que contiene los datos de las personas en forma de diccionarios.
Output
------
ave (str): cadena que contiene la edad promedio de las personas en el diccionario people.
"""
age = 0
for person in people:
age += people[person]["edad"]
average = age/len(people)
ave = "The average age of your people is "+str(int(average))+" years"
return ave
```
%% Cell type:markdown id: tags:
Ahora se puede aplicarf la función anterior al caso del diccionario `compas`, tal que
%% Cell type:code id: tags:
``` python
averageAge(compas)
```
%% Output
'The average age of your people is 25 years'
%% Cell type:markdown id: tags:
Finalmente, la próxima función, `institutions`, permite conocer las instituciones a las cuales pertenecen las personas del diccionrio principal.
%% Cell type:code id: tags:
``` python
def institutions(people:dict)->list:
"""
Esta función recibe un diccionario que contiene diccionarios, siguiendo la estructura de "compas", y retorna
una lista con las instituciones a las cuales pertenecesn.
Input
------
people (dict): diccionario con la estructura de "compas", el cual contiene la información de los individuos
incluyendo la institución a la que está asociado.
Output
------
universities (list): lista con las instituciones a las cuales pertenecen las personas en people.
"""
universities = []
for person in people:
universities.append(people[person]["institución"])
universities = list(dict.fromkeys(universities))
return universities
```
%% Cell type:markdown id: tags:
Como se hizo anteriormente, se procese a testear la función `institutions` con el diccionario `compas`.
%% Cell type:code id: tags:
``` python
institutions(compas)
```
%% Output
['Universidad Nacional de Colombia',
'Universidad Industrial de Santander',
'Universidad del Valle',
'French National Center for Scientific Research',
'Escuela Politécnica Nacional de Ecuador',
'Universidad Nacional de Ingeniería']
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment