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