Commit 4709cb83 authored by Jesus David Bermudez Sanchez's avatar Jesus David Bermudez Sanchez
Browse files

se termina el ejercicio 3 con todas las explicaciones correspondientes

parent c4af9142
%% Cell type:markdown id: tags:
# *Mi nombre es Jesus David Bermudez Sanchez, soy estudiante de la Maestria en Fisica de la Universidad Nacional de Colombia, Sede Bogotá*
# *Mi nombre es Jesus David Bermudez Sanchez y soy estudiante de la Maestria en Fisica de la Universidad Nacional de Colombia, Sede Bogotá*
---
%% Cell type:markdown id: tags:
# Amigos congueros
## El problema que se debe resolver presenta el siguiente 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
+ ## Parte 1
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”
+ ## Parte 2
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.
+ ## Parte 3
Busque una forma de calcular, a partir del diccionario, el promedio de edad de todas las personas en él.
+ ## Parte 4
Busque una forma de mostrar todas las instituciones (sin repetición)
%% Cell type:markdown id: tags:
---
En la siguiente celda creamos el diccionario `compas` con la informacion que recolectamos.
Debe haber una forma de poder cargar esta informacion desde un archivo `.txt`, pero aun no la reviso.
%% Cell type:code id: tags:
``` python
compas={
"juan-pineda":
{"nombres":"Juan Carlos","apellidos":"Basto Pineda","edad":30,"pais":"Colombia","residencia":"Santander","especialidad cientifica":"Astronomia","institucion":"Universidad Industrial de Santander","hobbie":"divulgacion cientifica"},
"camacho.reina":
{"nombres":"Reina","apellidos":"Camacho Toro","edad":35,"pais":"Venezuela","residencia":"Francia","especialidad cientifica":"Fisica Experimental","institucion":"CNRS","hobbie":"avistamiento de aves"},
"britod":
{"nombres":"Daniel Arturo","apellidos":"Brito Urbina","edad":26,"pais":"Venezuela","residencia":"Caracas","especialidad cientifica":"Teorias de Campos","institucion":"Universidad Central de Venezuela","hobbie":"Patinetas, Bicicletas y Video juegos"},
"carrilloj":
{"nombres":"Juan Guillermo","apellidos":"Carrillo Reyes","edad":25,"pais":"Colombia","residencia":"Bogota","especialidad cientifica":"Astronomia","institucion":"Universidad Nacional de Colombia","hobbie":"Basket y Videojuegos"},
"escalantee":
{"nombres":"Eduardo Enrique","apellidos":"Escalante Rondon","edad":45,"pais":"Venezuela","residencia":"Barquisimeto","especialidad cientifica":"Dianmica Molecula","institucion":"Universidad Centroccidental Lisandro Alvarado","hobbie":"Leer y Escuchar Musica"},
"gomezc":
{"nombres":"Carla Elena","apellidos":"Gomez Alvarado","edad":27,"pais":"Venezuela","residencia":"Caracas","especialidad cientifica":"Fisica Molecular","institucion":"Universidad Simon Bolivar","hobbie":"Andar en bicicleta, Electronica, Gastronomia"},
"leonl":
{"nombres":"Luis Alberto","apellidos":"Leon Andonayre","edad":22,"pais":"Perú","residencia":"Provincia Constituciona del Callao","especialidad cientifica":"Gravitacion","institucion":"Universidad Nacional Mayor de San Marcos","hobbie":"Escuchar musica y tocar la guitarra"},
"mamaniy"
:{"nombres":"Yhony","apellidos":"Mamamni Arce","edad":26,"pais":"Perú","residencia":"Lima","especialidad cientifica":"Fisica del Estado Solido","institucion":"Universidad Nacional Mayor de San Marcos","hobbie":"correr, natacion, leer"},
"navasa":
{"nombres":"Alfonso","apellidos":"Navas","edad":24,"pais":"Colombia","residencia":"Bogota","especialidad cientifica":"Fisica de Sistemas Complejos, Ecologia","institucion":"Universidad Nacional de Colombia","hobbie":"crossfit"},
"pinzonc":
{"nombres":"Carlos Andres","apellidos":"Pinzon Osorio","edad":30,"pais":"Colombia","residencia":"Bogotá","especialidad cientifica":"Altas Energias","institucion":"Universidad Antonio Nariño","hobbie":"Atletismo"},
"ramosm":
{"nombres":"Maria Jose","apellidos":"Ramos Sotillo","edad":23,"pais":"Venezuela","residencia":"Merida","especialidad cientifica":"Fisica","institucion":"Universidad de los Andes","hobbie":"escribir"},
"reyesf":
{"nombres":"Felipe","apellidos":"Reyes","edad":22,"pais":"Colombia","residencia":"Cali","especialidad cientifica":"Materia Condensada","institucion":"Universidad del Valle","hobbie":"gimnasio"},
"semprumg":
{"nombres":"Gerardo Jesus","apellidos":"Semprum Suarez","edad":24,"pais":"Venezuela","residencia":"Caracas","especialidad cientifica":"Geofísica","institucion":"Universidad Central de Venezuela","hobbie":"Artes Marciales"},
}
```
%% Cell type:markdown id: tags:
### Algunos ejemplos de como se imprime la informacion de las personas
%% Cell type:code id: tags:
``` python
compas["reyesf"]
```
%% Output
{'nombres': 'Felipe',
'apellidos': 'Reyes',
'edad': 22,
'pais': 'Colombia',
'residencia': 'Cali',
'especialidad cientifica': 'Materia Condensada',
'institucion': 'Universidad del Valle',
'hobbie': 'gimnasio'}
%% Cell type:code id: tags:
``` python
# Usando tab completa el nombre de la key. Curioso
compas["mamaniy"]
```
%% Output
{'nombres': 'Yhony',
'apellidos': 'Mamamni Arce',
'edad': 26,
'pais': 'Perú',
'residencia': 'Lima',
'especialidad cientifica': 'Fisica del Estado Solido',
'institucion': 'Universidad Nacional Mayor de San Marcos',
'hobbie': 'correr, natacion, leer'}
%% Cell type:markdown id: tags:
---
### Solucion a la parte 2
En la siguiente celda creamos una funcion que llamamos `info_por_paises`, la cual recibe tres argumentos. El primero es el diccionario compas que creamos anteriormente. El segundo es una variable de tipo _string_ donde escribimos el pais de origen de las personas. El tercer y ultimo argumento es una variable de tipo _bool_ cuyo valor por defecto es `False`; si el ususario ingresa `True`, entre la informacion que imprime la funcion, estará el usuario de mattermost.
En la siguiente celda creamos una funcion que llamamos `info_por_paises(dicc,pais,usuario)`, la cual recibe tres argumentos. El primero es el diccionario compas que creamos anteriormente. El segundo es una variable de tipo _string_ donde escribimos el pais de origen de las personas. El tercer y ultimo argumento es una variable de tipo _bool_ cuyo valor por defecto es `False`; si el ususario ingresa `True`, entre la informacion que imprime la funcion, estará el usuario de mattermost.
Lo primero que hace esta función es, hacer una copia del diccionario x usando el metodo `.copy()`.A esta copia la llame `copia_compas`.
Esto lo hice porque _creo_ que asi evito posibles problemas.
La siguiente linea ejecuta el metodo `.items` del diccionario `copia_compas`. Esto crea una lista cuyos elementos son las tuplas `(llave,valor)`. Con esta lista es con la que trabaja la funcion.
La siguiente linea ejecuta el metodo `.items` del diccionario `copia_compas`. Este metodo crea una lista cuyos elementos son las tuplas `(llave,valor)`. Con esta lista es con la que trabaja la funcion.
(_Basicamente, converti el diccionario compas en una lista_). A esta lista la llame `keys_and_values`.
Es importante entender que en las tuplas de la lista `keys_and_values`, el primer elemento es un _string_, y que el segundo elemento es un diccionario de Python.
Para añadir el usuario de mmattermost, comprobamos si la variable _bool_ z es `True`. En caso afirmativo, hacemos un loop por la lista `keys_and_values`, añadiendo a cada uno de los diccionarios (`values`) una nueva llave llamada `usuario mattermost`, cuyo valor será la correspondiente llave (`key`).
Para añadir el usuario de mattermost, comprobamos si la variable _bool_ ``z`` es `True`. En caso afirmativo, hacemos un loop por la lista `keys_and_values`, añadiendo a cada uno de los diccionarios (`values`) una nueva llave llamada `usuario mattermost`, cuyo valor será la correspondiente llave (`key`).
Para imprimir la informacion de las personas segun su pais de origen. Hacemos un ciclo for que "recorre" cada una de las tuplas en la lista `keys_and_values`.
En cada iteración se comprueba si el valor de la llave `"pais"` del diccionario coincide con el pais que introdujo el usuario. En caso afirmativo, se imprime "apropiadamente" el contenido del diccionario.
Para imprimir la informacion de las personas segun su pais de origen. Hacemos un ciclo `for` que "recorre" cada una de las tuplas en la lista `keys_and_values`.
En cada iteración se comprueba si el **valor** de la llave `"pais"` del diccionario coincide con el pais que introdujo el usuario. En caso afirmativo, se imprime "apropiadamente" el contenido del diccionario.
%% Cell type:code id: tags:
``` python
def info_por_paises(x,y,z=False):
"""
Esta funcion recibe el diccionario compas en el primer argumento,
una variable de tipo string con el pais de origen y una
variable Booleana si el usuario desea que en la información que
se imprime, aparezca ademas de todo, el usuario de Mattermost
Retorna la informacion de las personas originarias del pais ingresado en la variable y.
"""
# Hago una copia del diccionario compas
copia_compas=x.copy()
# Saco la lista de (key,values)
keys_and_values=copia_compas.items()
# Esta parte añade la key="usuario mattermost"
# a los diccionarios que contienen la informacion
# de los compas.
if z:
for a,b in keys_and_values:
b["usuario mattermost"]=a
# Miro en cada "subdiccionario" el pais de origen,
# si este coincide con el pais que se pidio, se imprime el subdiccionario
# de manera bonita.
for _,balores in keys_and_values:
if y==balores["pais"]:
print("----------------------------------------------------")
for llave,valor in balores.items():
print(llave,":",valor)
return ""
```
%% Cell type:markdown id: tags:
# Ejemplos
## Pais: *Venezuela*
%% Cell type:code id: tags:
``` python
print(info_por_paises(compas,"Venezuela"))
info_por_paises(compas,"Venezuela")
```
%% Output
----------------------------------------------------
nombres : Reina
apellidos : Camacho Toro
edad : 35
pais : Venezuela
residencia : Francia
especialidad cientifica : Fisica Experimental
institucion : CNRS
hobbie : avistamiento de aves
----------------------------------------------------
nombres : Daniel Arturo
apellidos : Brito Urbina
edad : 26
pais : Venezuela
residencia : Caracas
especialidad cientifica : Teorias de Campos
institucion : Universidad Central de Venezuela
hobbie : Patinetas, Bicicletas y Video juegos
----------------------------------------------------
nombres : Eduardo Enrique
apellidos : Escalante Rondon
edad : 45
pais : Venezuela
residencia : Barquisimeto
especialidad cientifica : Dianmica Molecula
institucion : Universidad Centroccidental Lisandro Alvarado
hobbie : Leer y Escuchar Musica
----------------------------------------------------
nombres : Carla Elena
apellidos : Gomez Alvarado
edad : 27
pais : Venezuela
residencia : Caracas
especialidad cientifica : Fisica Molecular
institucion : Universidad Simon Bolivar
hobbie : Andar en bicicleta, Electronica, Gastronomia
----------------------------------------------------
nombres : Maria Jose
apellidos : Ramos Sotillo
edad : 23
pais : Venezuela
residencia : Merida
especialidad cientifica : Fisica
institucion : Universidad de los Andes
hobbie : escribir
----------------------------------------------------
nombres : Gerardo Jesus
apellidos : Semprum Suarez
edad : 24
pais : Venezuela
residencia : Caracas
especialidad cientifica : Geofísica
institucion : Universidad Central de Venezuela
hobbie : Artes Marciales
''
%% Cell type:markdown id: tags:
# Ejemplo
## Pais: *Peru*, retornando ademas el usuario de mattermost
%% Cell type:code id: tags:
``` python
print(info_por_paises(compas,"Perú",True))
info_por_paises(compas,"Perú",True)
```
%% Output
----------------------------------------------------
nombres : Luis Alberto
apellidos : Leon Andonayre
edad : 22
pais : Perú
residencia : Provincia Constituciona del Callao
especialidad cientifica : Gravitacion
institucion : Universidad Nacional Mayor de San Marcos
hobbie : Escuchar musica y tocar la guitarra
usuario mattermost : leonl
----------------------------------------------------
nombres : Yhony
apellidos : Mamamni Arce
edad : 26
pais : Perú
residencia : Lima
especialidad cientifica : Fisica del Estado Solido
institucion : Universidad Nacional Mayor de San Marcos
hobbie : correr, natacion, leer
usuario mattermost : mamaniy
''
%% Cell type:markdown id: tags:
## Solucion a la parte 3
Para obtener el promedio de las edades de las personas, creamos una función llamada `promedio_edad_compas(dic)`, la cual toma como argumento el diccionario compas.
Luego, usando el metodo `.values()` del diccionario `dic`, creamos una lista que contiene todos los diccionarios con la informacion de las personas.
Usando _list_comprehension_ creamos una lista donde guardamos las edades de las personas.
Finalmente, usamos la funcion `sum()` incorporada en Python para sumar los elementos en la lista `edades`; y dividimos entre el numero de elementos de la lista usando la funcion `len()`.
%% Cell type:code id: tags:
``` python
def promedio_edad_compas(x):
"""
Esta funcion recibe como unico argumento el diccionario compas.
Retorna el promedio de las edades
"""
sub_diccionarios=x.values()
edades=[value["edad"] for value in sub_diccionarios]
return sum(edades)/len(edades)
```
%% Cell type:code id: tags:
``` python
print(promedio_edad_compas(compas))
print("El promedio de edad de las personas en el diccionario compas es",promedio_edad_compas(compas))
```
%% Output
27.615384615384617
El promedio de edad de las personas en el diccionario compas es 27.615384615384617
%% Cell type:markdown id: tags:
## Solucion a la parte 4
El procedimiento para obtener las instituciones donde estudian y/o trabajan los compas es muy similar al caso anterior.
Creamos una funcion llamada `instituciones_compas(dic)` la cual recibe como argumento el diccionario compas.
Guardamos en una lista los diccionarios que contienen la información de las personas usando el metodo `.values()`.
Usamos la función `set()` para quitar las instituciones repetidas de la lista anterior.
Imprimimos los elementos del conjunto `set_insti` de manera que se vea una institucion por linea.
%% Cell type:code id: tags:
``` python
def instituciones_compas(x):
"""
Esta funcion recibe como unico argumento el diccionario compas.
Retorna las instituciones de las personas sin repeticion
"""
dicc_personas=x.values()
# Hago una lista de las instituciones donde estudian y/0 trabajan los compas
# Hago una lista de las instituciones donde estudian y/o trabajan los compas
# Esta lista puede contener elementos repetidos
lista_insti=[dicc["institucion"] for dicc in dicc_personas]
set_insti=set(lista_insti)
for insti in set_insti:
print(insti)
return ""
```
%% Cell type:code id: tags:
``` python
print(instituciones_compas(compas))
instituciones_compas(compas)
```
%% Output
Universidad Nacional de Colombia
CNRS
Universidad Nacional Mayor de San Marcos
Universidad Central de Venezuela
Universidad del Valle
Universidad de los Andes
Universidad Centroccidental Lisandro Alvarado
Universidad Industrial de Santander
Universidad Nacional de Colombia
Universidad Simon Bolivar
Universidad del Valle
Universidad Central de Venezuela
Universidad Antonio Nariño
Universidad Industrial de Santander
Universidad Centroccidental Lisandro Alvarado
CNRS
Universidad Nacional Mayor de San Marcos
''
%% Cell type:markdown id: tags:
### Bibliografia
+ Imprimir bonito el contenido de un diccionario: https://thispointer.com/python-4-ways-to-print-items-of-a-dictionary-line-by-line/
%% Cell type:code id: tags:
``` python
def f_prueba(ss=False):
if ss:
print("Esto sale si el argumento es True")
else:
print("Esto sale si el argumento es False")
return ""
f_prueba(True)
```
%% Output
Esto sale si el argumento es True
''
%% Cell type:code id: tags:
``` python
```
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment