Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dojo Estructuras de Datos Avanzados #4

Open
wants to merge 9 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -158,3 +158,5 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/
.DS_Store
Reportes/.DS_Store
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
# pre-commit run --all-files
repos:
- repo: https://github.com/pre-commit/mirrors-autopep8
rev: '' # Use the sha / tag you want to point at
hooks:
- id: autopep8
- repo: https://github.com/pycqa/flake8
rev: '' # pick a git hash / tag to point to
hooks:
- id: flake8
54 changes: 27 additions & 27 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,27 @@
# Dojo Estructuras de datos

## Ejercicio Práctico

El objetivo de este ejercicio es practicar diferentes conceptos y técnicas de programación relacionadas con la manipulación de datos CSV utilizando list comprehension, dict comprehension, set comprehension, iterators, iterables, generators y corrutinas.

El archivo CSV proporcionado contiene información de estudiantes, incluyendo su nombre, apellido, ciudad, país, edad y carrera universitaria. Se deben realizar las siguientes tareas:

1. Leer el archivo CSV y cargar los datos en una estructura adecuada.

2. Crea un menú donde permita al usuario consultar la siguiente información generando un reporte en un archivo nuevo:
- Obtener todos los estudiantes que pertenezcan a una ciudad dada.
- Obtener todos los estudiantes que vivan en un país dado.
- Obtener todos los estudiantes que estén dentro del rango de edades dado.
- Obtener todas las ciudades de residencia de los estudiantes.
- Identificar la edad promedio por carrera.
- Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.
- Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).
- Identifica la ciudad que tienen la mayor variedad de carreras universitarias entre los estudiantes.

Nota: Puedes agrega cualquier dato adicional que quieras al reporte.

Es importante utilizar las herramientas adecuadas de Python, como la biblioteca `csv`, para leer y manipular los datos del archivo CSV. Además, se deben aplicar las técnicas y conceptos mencionados para practicar y demostrar comprensión de los mismos.

El ejercicio tiene como objetivo reforzar el uso y la combinación de estas técnicas para manipular y analizar datos de manera eficiente y elegante.

¡Diviértete practicando y explorando las diferentes técnicas y conceptos de programación relacionados con la manipulación de datos y diferentes estructuras de datos!
# Dojo Estructuras de datos
## Ejercicio Práctico
El objetivo de este ejercicio es practicar diferentes conceptos y técnicas de programación relacionadas con la manipulación de datos CSV utilizando list comprehension, dict comprehension, set comprehension, iterators, iterables, generators y corrutinas.
El archivo CSV proporcionado contiene información de estudiantes, incluyendo su nombre, apellido, ciudad, país, edad y carrera universitaria. Se deben realizar las siguientes tareas:
1. Leer el archivo CSV y cargar los datos en una estructura adecuada.
2. Crea un menú donde permita al usuario consultar la siguiente información generando un reporte en un archivo nuevo:
- Obtener todos los estudiantes que pertenezcan a una ciudad dada.
- Obtener todos los estudiantes que vivan en un país dado.
- Obtener todos los estudiantes que estén dentro del rango de edades dado.
- Obtener todas las ciudades de residencia de los estudiantes.
- Identificar la edad promedio por carrera.
- Indicar por carrera si el estudiante está por encima o por debajo del promedio de edad.
- Agrupa los estudiantes en diferentes rangos de edad (18-25, 26-35, mayores de 35).
- Identifica la ciudad que tienen la mayor variedad de carreras universitarias entre los estudiantes.
Nota: Puedes agregar cualquier dato adicional que quieras al reporte.
Es importante utilizar las herramientas adecuadas de Python, como la biblioteca `csv`, para leer y manipular los datos del archivo CSV. Además, se deben aplicar las técnicas y conceptos mencionados para practicar y demostrar comprensión de los mismos.
El ejercicio tiene como objetivo reforzar el uso y la combinación de estas técnicas para manipular y analizar datos de manera eficiente y elegante.
¡Diviértete practicando y explorando las diferentes técnicas y conceptos de programación relacionados con la manipulación de datos y diferentes estructuras de datos!
6 changes: 6 additions & 0 deletions Reportes/Ciudad(es)_con_mayor_variedad_de_carreras.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
ciudad,num_carreras
Ciudad de México,4
Barcelona,4
New York,4
Lima,4
Medellín,4
8 changes: 8 additions & 0 deletions Reportes/Ciudades_de_residencia.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
ciudad
Buenos Aires
Ciudad de México
New York
Lima
Barcelona
Medellín
Bogotá
6 changes: 6 additions & 0 deletions Reportes/Edad_promedio_por_carrera.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
carrera,edad_promedio
Computer Engineering,25
Psychology,25
Medicine,30
Art History,26
Education,29
2 changes: 2 additions & 0 deletions Reportes/Estadisticas_de_edades_global.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
carrera,media_edad,mediana_edad,moda_edad,min_edad,max_edad,desviacion_estandar_muestral,desviacion_estandar_poblacional
Todas,27,26.0,23,19,50,6.686716644750208,6.602603653105342
6 changes: 6 additions & 0 deletions Reportes/Estadisticas_de_edades_por_carrera.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
carrera,media_edad,mediana_edad,moda_edad,min_edad,max_edad,desviacion_estandar_muestral,desviacion_estandar_poblacional
Computer Engineering,25,23.0,22,19,39,6.2891630149465385,5.8829733128750465
Psychology,25,25.5,25,19,31,3.882193783343198,3.6314597615834874
Medicine,30,29.5,24,23,50,8.664376986917672,8.104782538723663
Art History,26,25.5,27,20,38,5.656854249492381,5.291502622129181
Education,29,26.5,23,22,42,7.814821083775915,7.310095758606723
41 changes: 41 additions & 0 deletions Reportes/Estudiantes_arriba_debajo_edad_promedio.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
carrera,nombre,apellido,arriba_debajo_promedio
Computer Engineering,John,Smith,Debajo
Computer Engineering,Emma,Davis,Arriba
Computer Engineering,Liam,Taylor,Debajo
Computer Engineering,Sophia,White,Arriba
Computer Engineering,Max,Young,Debajo
Computer Engineering,Sophia,Hernandez,Arriba
Computer Engineering,Mateo,Jackson,Debajo
Computer Engineering,Isabella,Anderson,Debajo
Psychology,Emily,Johnson,Promedio
Psychology,Benjamin,Miller,Arriba
Psychology,Ava,Thomas,Debajo
Psychology,Alexander,Martin,Arriba
Psychology,Emma,Scott,Promedio
Psychology,Logan,Lewis,Arriba
Psychology,Sofia,Clark,Arriba
Psychology,James,Lee,Debajo
Medicine,David,Williams,Promedio
Medicine,Olivia,Moore,Debajo
Medicine,James,Clark,Arriba
Medicine,Natalie,Lopez,Arriba
Medicine,Jacob,Walker,Debajo
Medicine,Isabella,Hill,Debajo
Medicine,Liam,Taylor,Debajo
Medicine,Mia,Hall,Promedio
Art History,Sophie,Jones,Arriba
Art History,Noah,Wilson,Arriba
Art History,Mia,Hall,Debajo
Art History,Lucas,Harris,Debajo
Art History,Ava,Hall,Debajo
Art History,Elijah,Green,Arriba
Art History,Olivia,Moore,Debajo
Art History,Ethan,Miller,Arriba
Education,Daniel,Brown,Debajo
Education,Isabella,Anderson,Arriba
Education,Ethan,Lee,Debajo
Education,Chloe,Allen,Debajo
Education,Daniel,Rodriguez,Arriba
Education,Emily,Turner,Arriba
Education,Noah,Wilson,Debajo
Education,Sophia,Clark,Debajo
7 changes: 7 additions & 0 deletions Reportes/Estudiantes_por_ciudad_(Bogotá).csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
nombre,apellido,ciudad,pais,edad,carrera
Sophie,Jones,Bogotá,Colombia,28,Art History
Ava,Thomas,Bogotá,Colombia,19,Psychology
Lucas,Harris,Bogotá,Colombia,24,Art History
Logan,Lewis,Bogotá,Colombia,26,Psychology
Liam,Taylor,Bogotá,Colombia,29,Medicine
Ethan,Miller,Bogotá,Colombia,38,Art History
7 changes: 7 additions & 0 deletions Reportes/Estudiantes_por_ciudad_(Ciudad de México).csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
nombre,apellido,ciudad,pais,edad,carrera
John,Smith,Ciudad de México,México,22,Computer Engineering
Olivia,Moore,Ciudad de México,México,24,Medicine
Sophia,White,Ciudad de México,México,26,Computer Engineering
Jacob,Walker,Ciudad de México,México,23,Medicine
Elijah,Green,Ciudad de México,México,27,Art History
Noah,Wilson,Ciudad de México,México,26,Education
7 changes: 7 additions & 0 deletions Reportes/Estudiantes_por_país_(México).csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
nombre,apellido,ciudad,pais,edad,carrera
John,Smith,Ciudad de México,México,22,Computer Engineering
Olivia,Moore,Ciudad de México,México,24,Medicine
Sophia,White,Ciudad de México,México,26,Computer Engineering
Jacob,Walker,Ciudad de México,México,23,Medicine
Elijah,Green,Ciudad de México,México,27,Art History
Noah,Wilson,Ciudad de México,México,26,Education
16 changes: 16 additions & 0 deletions Reportes/Estudiantes_por_rango_de_edad(27-40).csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
nombre,apellido,ciudad,pais,edad,carrera
David,Williams,Medellín,Colombia,30,Medicine
Sophie,Jones,Bogotá,Colombia,28,Art History
Emma,Davis,Buenos Aires,Argentina,39,Computer Engineering
Noah,Wilson,New York,United States,27,Art History
Isabella,Anderson,Medellín,Colombia,31,Education
Alexander,Martin,New York,United States,29,Psychology
Natalie,Lopez,Medellín,Colombia,32,Medicine
Chloe,Allen,Lima,Peru,27,Education
Daniel,Rodriguez,Medellín,Colombia,40,Education
Sophia,Hernandez,Lima,Peru,28,Computer Engineering
Elijah,Green,Ciudad de México,México,27,Art History
Sofia,Clark,Lima,Peru,31,Psychology
Liam,Taylor,Bogotá,Colombia,29,Medicine
Mia,Hall,Lima,Peru,30,Medicine
Ethan,Miller,Bogotá,Colombia,38,Art History
41 changes: 41 additions & 0 deletions Reportes/Estudiantes_por_rango_de_edad.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
rango_edad,nombre,apellido,ciudad,pais,edad
18-25,John,Smith,Ciudad de México,México,22
18-25,Emily,Johnson,New York,United States,25
18-25,Daniel,Brown,Lima,Peru,23
18-25,Olivia,Moore,Ciudad de México,México,24
18-25,Liam,Taylor,Lima,Peru,21
18-25,Ava,Thomas,Bogotá,Colombia,19
18-25,Mia,Hall,New York,United States,20
18-25,Ethan,Lee,Lima,Peru,23
18-25,Lucas,Harris,Bogotá,Colombia,24
18-25,Max,Young,Buenos Aires,Argentina,22
18-25,Emma,Scott,Barcelona,Spain,25
18-25,Jacob,Walker,Ciudad de México,México,23
18-25,Ava,Hall,New York,United States,21
18-25,Isabella,Hill,Barcelona,Spain,24
18-25,Mateo,Jackson,Medellín,Colombia,19
18-25,Olivia,Moore,Barcelona,Spain,23
18-25,Isabella,Anderson,New York,United States,24
18-25,James,Lee,Medellín,Colombia,21
18-25,Sophia,Clark,Barcelona,Spain,22
26-35,David,Williams,Medellín,Colombia,30
26-35,Sophie,Jones,Bogotá,Colombia,28
26-35,Benjamin,Miller,Barcelona,Spain,26
26-35,Noah,Wilson,New York,United States,27
26-35,Isabella,Anderson,Medellín,Colombia,31
26-35,Sophia,White,Ciudad de México,México,26
26-35,Alexander,Martin,New York,United States,29
26-35,Natalie,Lopez,Medellín,Colombia,32
26-35,Chloe,Allen,Lima,Peru,27
26-35,Sophia,Hernandez,Lima,Peru,28
26-35,Logan,Lewis,Bogotá,Colombia,26
26-35,Elijah,Green,Ciudad de México,México,27
26-35,Sofia,Clark,Lima,Peru,31
26-35,Liam,Taylor,Bogotá,Colombia,29
26-35,Noah,Wilson,Ciudad de México,México,26
26-35,Mia,Hall,Lima,Peru,30
>35,Emma,Davis,Buenos Aires,Argentina,39
>35,James,Clark,Barcelona,Spain,50
>35,Daniel,Rodriguez,Medellín,Colombia,40
>35,Emily,Turner,New York,United States,42
>35,Ethan,Miller,Bogotá,Colombia,38
97 changes: 97 additions & 0 deletions async_iterador_estadisticas_edades.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
""" Iterador asíncrono que regresa la media, mediana, moda, max, min,
desviación estándar muestral y poblacional de las edades por carrera
leyendo un diccionario con el nombre de cada carrera como llave
y una lista con las edades por carrera como valor """

import asyncio


class AsyncIteradorEstadisticasEdades:
"""Definición de la clase Async Iterador Estadisticas Edades"""

def __init__(self, diccionario):
self._dic = diccionario
self._indice = 0

def __aiter__(self):
return self

def media(self, iterable):
acumulador = 0
for lista in iterable:
for edad in lista:
acumulador += int(edad)
return round(acumulador/len(lista))

def mediana(self, iterable):
for lista in iterable:
lista.sort()
mitad = len(lista) // 2
mediana = (lista[mitad] + lista[~mitad]) / 2
return mediana

def moda(self, iterable):
for lista in iterable:
return max(set(lista), key=lista.count)

def min(self, iterable):
for lista in iterable:
return min(lista)

def max(self, iterable):
for lista in iterable:
return max(lista)

def desviacion_estandar_muestral(self, iterable):
for lista in iterable:
return (sum((x-(sum(lista) / len(lista)))**2 for x in lista) /
(len(lista)-1))**0.5

def desviacion_estandar_poblacional(self, iterable):
for lista in iterable:
return (sum((x-(sum(lista) / len(lista)))**2 for x in lista) /
(len(lista)))**0.5

async def __anext__(self):
if self._indice < len(self._dic):
await asyncio.sleep(0, media := self.media(self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, mediana := self.mediana(self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, moda := self.moda(self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, min_edad := self.min(self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, max_edad := self.max(self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, desviacion_estandar_muestral :=
self.desviacion_estandar_muestral(
self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
await asyncio.sleep(0, desviacion_estandar_poblacional :=
self.desviacion_estandar_poblacional(
self._dic[valor]
for indice, valor
in enumerate(self._dic)
if indice == self._indice))
for indice, valor in enumerate(self._dic.keys()):
if indice == self._indice:
carrera = valor
self._indice += 1
return (carrera, media, mediana, moda, min_edad, max_edad,
desviacion_estandar_muestral,
desviacion_estandar_poblacional)
else:
raise StopAsyncIteration
12 changes: 6 additions & 6 deletions data.csv
Original file line number Diff line number Diff line change
@@ -1,39 +1,39 @@
nombre,apellido,ciudad,pais,edad,carrera
John,Smith,Ciudad de Mexico,Mexico,22,Computer Engineering
John,Smith,Ciudad de México,México,22,Computer Engineering
Emily,Johnson,New York,United States,25,Psychology
David,Williams,Medellín,Colombia,30,Medicine
Sophie,Jones,Bogotá,Colombia,28,Art History
Daniel,Brown,Lima,Peru,23,Education
Emma,Davis,Buenos Aires,Argentina,39,Computer Engineering
Benjamin,Miller,Barcelona,Spain,26,Psychology
Olivia,Moore,Ciudad de Mexico,Mexico,24,Medicine
Olivia,Moore,Ciudad de México,México,24,Medicine
Noah,Wilson,New York,United States,27,Art History
Isabella,Anderson,Medellín,Colombia,31,Education
Liam,Taylor,Lima,Peru,21,Computer Engineering
Ava,Thomas,Bogotá,Colombia,19,Psychology
James,Clark,Barcelona,Spain,50,Medicine
Mia,Hall,New York,United States,20,Art History
Ethan,Lee,Lima,Peru,23,Education
Sophia,White,Ciudad de Mexico,Mexico,26,Computer Engineering
Sophia,White,Ciudad de México,México,26,Computer Engineering
Alexander,Martin,New York,United States,29,Psychology
Natalie,Lopez,Medellín,Colombia,32,Medicine
Lucas,Harris,Bogotá,Colombia,24,Art History
Chloe,Allen,Lima,Peru,27,Education
Max,Young,Buenos Aires,Argentina,22,Computer Engineering
Emma,Scott,Barcelona,Spain,25,Psychology
Jacob,Walker,Ciudad de Mexico,Mexico,23,Medicine
Jacob,Walker,Ciudad de México,México,23,Medicine
Ava,Hall,New York,United States,21,Art History
Daniel,Rodriguez,Medellín,Colombia,40,Education
Sophia,Hernandez,Lima,Peru,28,Computer Engineering
Logan,Lewis,Bogotá,Colombia,26,Psychology
Isabella,Hill,Barcelona,Spain,24,Medicine
Elijah,Green,Ciudad de Mexico,Mexico,27,Art History
Elijah,Green,Ciudad de México,México,27,Art History
Emily,Turner,New York,United States,42,Education
Mateo,Jackson,Medellín,Colombia,19,Computer Engineering
Sofia,Clark,Lima,Peru,31,Psychology
Liam,Taylor,Bogotá,Colombia,29,Medicine
Olivia,Moore,Barcelona,Spain,23,Art History
Noah,Wilson,Ciudad de Mexico,Mexico,26,Education
Noah,Wilson,Ciudad de México,México,26,Education
Isabella,Anderson,New York,United States,24,Computer Engineering
James,Lee,Medellín,Colombia,21,Psychology
Mia,Hall,Lima,Peru,30,Medicine
Expand Down
Loading