From 305965e118d33b863d4ad775f7f85b70c51fadff Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20Ordo=C3=B1ez?= <ordonezs@jupyterMiLAB>
Date: Tue, 9 Feb 2021 01:56:14 -0500
Subject: [PATCH] Notebook with the third exercise added.

---
 Ejercicio3.ipynb | 458 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 458 insertions(+)
 create mode 100644 Ejercicio3.ipynb

diff --git a/Ejercicio3.ipynb b/Ejercicio3.ipynb
new file mode 100644
index 0000000..e3dcf95
--- /dev/null
+++ b/Ejercicio3.ipynb
@@ -0,0 +1,458 @@
+{
+ "cells": [
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "# Ejercicio No. 3 - Amigos Congueros\n",
+    "**Enunciado:** \n",
+    "- Entre en contacto con 10 estudiantes del curso de datos y 2 profesores o personal de soporte\n",
+    "de LaConga, uno del curso de datos y otro de afuera, y consulte su nombre completo, su\n",
+    "nombre de usuario en mattermost, edad, pais de origen, ciudad donde residen, su especialidad\n",
+    "científica, nombre del instituto en que estudian/laboran, y un hobbie o afición.\n",
+    "- Cree un diccionario llamado “compas”, donde la llave sea el nombre de usuario en mattermost,\n",
+    "y si depliego el valor almacenado, por ejemplo en compas[“juan-pineda”], lo que obtengo es\n",
+    "a la vez otro diccionario, con las llaves “nombre”, “apellido”, “país”, “residencia”, “edad”,\n",
+    "“institución”, “hobbie”.\n",
+    "- Cree una función que reciba como entrada el diccionario y un país de origen, y retorne las\n",
+    "informaciones completas de todas las personas de ese país, tabuladas en una forma fácil de\n",
+    "entender. -Busque una forma de calcular, a partir del diccionario, el promedio de edad de\n",
+    "todas las personas en él, y una forma de mostrar todas las instituciones (sin repetición)\n",
+    "\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",
+   "metadata": {},
+   "source": [
+    "## Primera parte (Encontrar a los amigos congueros)\n",
+    "\n",
+    "A continuación se encuentra una lista con los participantes y sus respectivos datos:\n",
+    "\n",
+    "1. hernandezj \n",
+    "    - Juan \n",
+    "    - Hernandez\n",
+    "    - 24\n",
+    "    - Colombia\n",
+    "    - Bogota\n",
+    "    - Electrodinámica Cuántica\n",
+    "    - Universidad Nacional de Colombia\n",
+    "    - Leer\n",
+    "2. acerot\n",
+    "    - Tatiana\n",
+    "    - Acero\n",
+    "    - 23\n",
+    "    - Colombia\n",
+    "    - Bogota\n",
+    "    - Mecánica Celeste Relativista\n",
+    "    - Universidad Nacional de Colombia\n",
+    "    - Anime\n",
+    "3. ladinoj\n",
+    "    - Jose\n",
+    "    - Ladino\n",
+    "    - 24\n",
+    "    - Colombia\n",
+    "    - Bogota\n",
+    "    - Mecanica Celeste Relativista\n",
+    "    - Universidad Nacional de Colombia\n",
+    "    - Skate\n",
+    "4. navasa\n",
+    "    - Alfonso\n",
+    "    - Navas\n",
+    "    - 24\n",
+    "    - Colombia\n",
+    "    - Bogota\n",
+    "    - Física de Sistemas Complejos\n",
+    "    - Universidad Nacional de Colombia\n",
+    "    - Crossfit\n",
+    "5. ramosd\n",
+    "    - David\n",
+    "    - Ramos\n",
+    "    - 23\n",
+    "    - Colombia\n",
+    "    - Bucaramanga\n",
+    "    - Física Estadística\n",
+    "    - Universidad Industrial de Santander\n",
+    "    - Tocar música rock\n",
+    "6. grisalesj\n",
+    "    - Jennifer\n",
+    "    - Grisales\n",
+    "    - 24\n",
+    "    - Colombia\n",
+    "    - Cúcuta\n",
+    "    - Astropartículas\n",
+    "    - Universidad Industrial de Santander\n",
+    "    - Divulgación científica\n",
+    "7. juan-pineda\n",
+    "    - Juan\n",
+    "    - Pineda\n",
+    "    - 30\n",
+    "    - Colombia\n",
+    "    - Bucaramanga\n",
+    "    - Astronomía Extragaláctica\n",
+    "    - Universidad Industrial de Santander\n",
+    "    - Divulgación científica\n",
+    "8. jalil\n",
+    "    - Jalil\n",
+    "    - Valera\n",
+    "    - 23\n",
+    "    - Colombia\n",
+    "    - Cali\n",
+    "    - Teoría cuántica de campos\n",
+    "    - Universidad del Valle\n",
+    "    - Leer\n",
+    "9. camacho.reina\n",
+    "    - Reina\n",
+    "    - Camacho\n",
+    "    - 33\n",
+    "    - Venezuela\n",
+    "    - Paris\n",
+    "    - Física experimental de partículas\n",
+    "    - French National Center for Scientific Research\n",
+    "    - Divulgación Científica\n",
+    "10. ortegaj\n",
+    "    - Jennifer\n",
+    "    - Ortega\n",
+    "    - 24\n",
+    "    - Ecuador\n",
+    "    - Quito\n",
+    "    - Ciencia computacional\n",
+    "    - Escuela Politécnica Nacional en Ecuador\n",
+    "    - Hiking\n",
+    "11. vargass\n",
+    "    - Sasiri\n",
+    "    - Vargas\n",
+    "    - 24\n",
+    "    - Colombia\n",
+    "    - Cali\n",
+    "    - Simulación\n",
+    "    - Universidad del Valle\n",
+    "    - Bailar\n",
+    "12. aldo\n",
+    "    - Aldo\n",
+    "    - Arriola\n",
+    "    - 24\n",
+    "    - Perú\n",
+    "    - Lima\n",
+    "    - Magnetismo\n",
+    "    - Universidad Nacional de Ingeniería\n",
+    "    - Caminatas\n",
+    "    "
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "## Segunda parte (Organizar los datos)\n",
+    "\n",
+    "En el diccionario `compas` se organiza la información de los participantes listados anteriormente."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 1,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "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\"}, \n",
+    "          \"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\"}, \n",
+    "          \"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\"},\n",
+    "        \"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\"},\n",
+    "        \"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\"},\n",
+    "         \"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\"},\n",
+    "         \"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\"},\n",
+    "         \"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\"},\n",
+    "         \"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\"},\n",
+    "         \"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\"},\n",
+    "         \"vargass\":{\"nombre\":\"Sasiri\", \"apellido\":\"Vargas\", \"edad\":24, \"país\":\"Colombia\",\"residencia\":\"Cali\",\"especialidad\":\"Simulación\", \"institución\":\"Universidad del Valle\", \"hobbie\":\"Bailar\"},\n",
+    "         \"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",
+   "metadata": {},
+   "source": [
+    "## Tercera parte (Jugar con los datos)\n",
+    "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.\n"
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 2,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def peopleByCountry(people:dict, country:str)->list:\n",
+    "    \"\"\"\n",
+    "    Esta función recibe un diccionario con diccionarios, arquitectura de \"compas\", y una cadena con e nombre de un\n",
+    "    país; retornando todas las personas en el diccionario originarias de dicho país.\n",
+    "    \n",
+    "    Input\n",
+    "    ------\n",
+    "    people (dict): diccionario que contiene  diccionarios con la estructura de \"compas\".\n",
+    "    country (str): cadena correspondiente al nombre de un país.\n",
+    "    \n",
+    "    Output\n",
+    "    ------\n",
+    "    sameCountry (list): lista que contiene diccionarios con los datos de las personas que vienen del mismo país.    \n",
+    "    \"\"\"\n",
+    "    sameCountry = []\n",
+    "    for person in people:\n",
+    "        if people[person][\"país\"]==country:\n",
+    "            sameCountry.append(people[person])\n",
+    "    \n",
+    "    return sameCountry"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "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",
+   "execution_count": 3,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "[{'nombre': 'Juan',\n",
+       "  'apellido': 'Hernandez',\n",
+       "  'edad': 24,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bogotá',\n",
+       "  'especialidad': 'Electrodinámica cuántica',\n",
+       "  'institución': 'Universidad Nacional de Colombia',\n",
+       "  'hobbie': 'Leer'},\n",
+       " {'nombre': 'Tatiana',\n",
+       "  'apellido': 'Acero',\n",
+       "  'edad': 23,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bogotá',\n",
+       "  'especialidad': 'Mecánica celeste relativista',\n",
+       "  'institución': 'Universidad Nacional de Colombia',\n",
+       "  'hobbie': 'Anime'},\n",
+       " {'nombre': 'José',\n",
+       "  'apellido': 'Ladino',\n",
+       "  'edad': 24,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bogotá',\n",
+       "  'especialidad': 'Mecánica celeste relativista',\n",
+       "  'institución': 'Universidad Nacional de Colombia',\n",
+       "  'hobbie': 'Skate'},\n",
+       " {'nombre': 'Alfonso',\n",
+       "  'apellido': 'Navas',\n",
+       "  'edad': 24,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bogotá',\n",
+       "  'especialidad': 'Física de sistemas complejos',\n",
+       "  'institución': 'Universidad Nacional de Colombia',\n",
+       "  'hobbie': 'Crossfit'},\n",
+       " {'nombre': 'David',\n",
+       "  'apellido': 'Ramos',\n",
+       "  'edad': 23,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bucaramanga',\n",
+       "  'especialidad': 'Física estadística',\n",
+       "  'institución': 'Universidad Industrial de Santander',\n",
+       "  'hobbie': 'Tocar rock'},\n",
+       " {'nombre': 'Jennifer',\n",
+       "  'apellido': 'Grisales',\n",
+       "  'edad': 24,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Cúcuta',\n",
+       "  'especialidad': 'Astropartículas',\n",
+       "  'institución': 'Universidad Industrial de Santander',\n",
+       "  'hobbie': 'Divulgación científica'},\n",
+       " {'nombre': 'Juan',\n",
+       "  'apellido': 'Pineda',\n",
+       "  'edad': 30,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Bucaramanga',\n",
+       "  'especialidad': 'Astronomía extragaláctica',\n",
+       "  'institución': 'Universidad Industrial de Santander',\n",
+       "  'hobbie': 'Divulgación Científica'},\n",
+       " {'nombre': 'Jalil',\n",
+       "  'apellido': 'Valera',\n",
+       "  'edad': 23,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Cali',\n",
+       "  'especialidad': 'Teoría cuántica de campos',\n",
+       "  'institución': 'Universidad del Valle',\n",
+       "  'hobbie': 'Leer'},\n",
+       " {'nombre': 'Sasiri',\n",
+       "  'apellido': 'Vargas',\n",
+       "  'edad': 24,\n",
+       "  'país': 'Colombia',\n",
+       "  'residencia': 'Cali',\n",
+       "  'especialidad': 'Simulación',\n",
+       "  'institución': 'Universidad del Valle',\n",
+       "  'hobbie': 'Bailar'}]"
+      ]
+     },
+     "execution_count": 3,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "peopleByCountry(compas, \"Colombia\")"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "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",
+   "execution_count": 4,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def averageAge(people:dict)->str:\n",
+    "    \"\"\"\n",
+    "    Esta función calcula la edad promedio de los individuos cuyos datos se encuentran almacenados con llave (su\n",
+    "    nombre) en un diccionario, que a su vez contiene la llave edad, con su respectiva edad.\n",
+    "    \n",
+    "    Input \n",
+    "    ------\n",
+    "    people (dict): diccionario que contiene los datos de las personas en forma de diccionarios.\n",
+    "    \n",
+    "    Output\n",
+    "    ------\n",
+    "    ave (str): cadena que contiene la edad promedio de las personas en el diccionario people.\n",
+    "    \"\"\"\n",
+    "    age = 0\n",
+    "    for person in people:\n",
+    "        age += people[person][\"edad\"]\n",
+    "    \n",
+    "    average = age/len(people)\n",
+    "    ave = \"The average age of your people is \"+str(int(average))+\" years\"\n",
+    "    return ave\n"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Ahora se puede aplicarf la función anterior al caso del diccionario `compas`, tal que "
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 5,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "'The average age of your people is 25 years'"
+      ]
+     },
+     "execution_count": 5,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "averageAge(compas)"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Finalmente, la próxima función, `institutions`, permite conocer las instituciones a las cuales pertenecen las personas del diccionrio principal."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 6,
+   "metadata": {},
+   "outputs": [],
+   "source": [
+    "def institutions(people:dict)->list:\n",
+    "    \"\"\"\n",
+    "    Esta función recibe un diccionario que contiene diccionarios, siguiendo la estructura de \"compas\", y retorna \n",
+    "    una lista con las instituciones a las cuales pertenecesn.\n",
+    "    \n",
+    "    Input\n",
+    "    ------\n",
+    "    people (dict): diccionario con la estructura de \"compas\", el cual contiene la información de los individuos \n",
+    "                   incluyendo la institución a la que está asociado.\n",
+    "    \n",
+    "    Output\n",
+    "    ------\n",
+    "    universities (list): lista con las instituciones a las cuales pertenecen las personas en people.\n",
+    "    \"\"\"\n",
+    "    universities = []\n",
+    "    for person in people:\n",
+    "        universities.append(people[person][\"institución\"])\n",
+    "    universities = list(dict.fromkeys(universities))\n",
+    "    \n",
+    "    return universities"
+   ]
+  },
+  {
+   "cell_type": "markdown",
+   "metadata": {},
+   "source": [
+    "Como se hizo anteriormente, se procese a testear la función `institutions` con el diccionario `compas`."
+   ]
+  },
+  {
+   "cell_type": "code",
+   "execution_count": 7,
+   "metadata": {},
+   "outputs": [
+    {
+     "data": {
+      "text/plain": [
+       "['Universidad Nacional de Colombia',\n",
+       " 'Universidad Industrial de Santander',\n",
+       " 'Universidad del Valle',\n",
+       " 'French National Center for Scientific Research',\n",
+       " 'Escuela Politécnica Nacional de Ecuador',\n",
+       " 'Universidad Nacional de Ingeniería']"
+      ]
+     },
+     "execution_count": 7,
+     "metadata": {},
+     "output_type": "execute_result"
+    }
+   ],
+   "source": [
+    "institutions(compas)"
+   ]
+  }
+ ],
+ "metadata": {
+  "kernelspec": {
+   "display_name": "Python 3",
+   "language": "python",
+   "name": "python3"
+  },
+  "language_info": {
+   "codemirror_mode": {
+    "name": "ipython",
+    "version": 3
+   },
+   "file_extension": ".py",
+   "mimetype": "text/x-python",
+   "name": "python",
+   "nbconvert_exporter": "python",
+   "pygments_lexer": "ipython3",
+   "version": "3.7.3"
+  }
+ },
+ "nbformat": 4,
+ "nbformat_minor": 4
+}
-- 
GitLab