Skip to content
Snippets Groups Projects
Commit f5fedd0c authored by sirias's avatar sirias
Browse files

commiting ejercicios tarea 2

parent 405d62cc
No related branches found
No related tags found
No related merge requests found
This diff is collapsed.
%% Cell type:markdown id: tags:
# Ejercicios-clase-02-datos
%% Cell type:markdown id: tags:
***Siria Sadeddin***
%% Cell type:markdown id: tags:
## Ejercicio No. 1 - Lista de palabras
Escriba un programa en python que acepte una lista de palabras separadas por guiones, e
imprima de vuelta las mismas palabras, sin repetición y nuevamente separadas por guiones,
después de ordenarlas alfabéticamente.
Ejemplo de entrada: naranja-avión-melodía-tupla-avión
Salida esperada: avión-melodía-naranja-tupla
%% Cell type:code id: tags:
``` python
def string_sort(l):
"""sort words is string joined by '-'
Args:
l: string text
Returns:
string: string with sorted words joined by '-'
"""
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
if isinstance(l,str):
l=l.split('-')
l = set(l)
l = list(l)
l.sort()
l='-'.join(l)
return l
else:
print(f"{bcolors.FAIL}FALLO: El valor de entrada debe ser un texto{bcolors.ENDC}")
l="naranja-avión-melodía-tupla-avión"
string_sort(l)
```
%% Output
'avión-melodía-naranja-tupla'
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
%% Cell type:markdown id: tags:
# Ejercicios-clase-02-datos
%% Cell type:markdown id: tags:
***Siria Sadeddin***
%% Cell type:markdown id: tags:
# Ejercicio No. 2 - Triángulo de Pascal
Escriba una rutina en python que reciba como entrada un número entero, n, e imprima los
números en la n-ésima fila del triángulo de Pascal. El programa debe verificar si el número
n es entero, o arrojar un mensaje informando que ha habido un error del usuario en caso
contrario.
* Respuesta: Se usara la siguiente fórmula para calcular el valor del triangulo de pascal en la m-ésima fila y n-ésimo valor en dicha columna
$C_n^m=\frac{m!}{n!(m-n)}$
%% Cell type:code id: tags:
``` python
# valor del elemto n,m del triangulo de pascal
def pascal_nm(m,n):
"""value of the pascal triangle for row m and position n
Args:
m (int): pascal triangle row
n (int): row position
Returns:
int: pascal triangle value
"""
import math
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
#utiliza formula para calcular el valor nm
if all([isinstance(m,int),isinstance(n,int)]) and (n<m+1):
return int(math.factorial(m)/(math.factorial(n)*math.factorial(m-n)))
else:
if not all([isinstance(m,int),isinstance(n,int)]):
print(f"{bcolors.FAIL}FALLO: Esta funcion recibe 2 entradas de numeros enteros{bcolors.ENDC}")
elif not (n<m+1):
print(f"{bcolors.FAIL}FALLO: el numero de items en la fila n es n+1{bcolors.ENDC}")
#n-esima fila del triangulo de pascal
def pascal_n(n):
"""create a list containing the values of the pascal triangle fon row n
Args:
n: integer
Returns:
list: pascal triangle list
"""
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
if isinstance(n, int):
return [pascal_nm(n,i) for i in range(n+1)]
else:
print(f"{bcolors.FAIL}FALLO: Esta funcion recibe un numero entero como argumento de entrada{bcolors.ENDC}")
```
%% Cell type:code id: tags:
``` python
pascal_nm(3,2)
```
%% Output
3
%% Cell type:code id: tags:
``` python
pascal_n(4)
```
%% Output
[1, 4, 6, 4, 1]
%% Cell type:markdown id: tags:
Modifique la rutina anterior para que reciba un número variable de argumentos: n1, n2, n3,…
y retorne una lista cuyo primer elemento es una lista conteniendo los números en la fila n1
del triángulo de Pascal, el segundo elemento una lista con los números en la fila n2, y así
sucesivamente.
%% Cell type:code id: tags:
``` python
# lista con todos los valores del triangulo de pascal para las filas solicitadas
def pascal_triangle(*arg):
"""create a list containing the values of the pascal triangle rows n0, n1, n2,…
Args:
arg: n1, n2, n3,… integers
Returns:
list: pascal triangle list
"""
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
if all([isinstance(x,int) for x in arg]):
return [pascal_n(n) for n in arg]
else:
print(f"{bcolors.FAIL}FALLO: Esta funcion recibe n numeros enteros como argumentos de entrada{bcolors.ENDC}")
## ejemplo
pascal_triangle(0,1,2,3,4,5,6,7)
```
%% Output
[[1],
[1, 1],
[1, 2, 1],
[1, 3, 3, 1],
[1, 4, 6, 4, 1],
[1, 5, 10, 10, 5, 1],
[1, 6, 15, 20, 15, 6, 1],
[1, 7, 21, 35, 35, 21, 7, 1]]
%% Cell type:code id: tags:
``` python
```
This diff is collapsed.
%% Cell type:markdown id: tags:
# Ejercicios-clase-02-datos
%% Cell type:markdown id: tags:
***Siria Sadeddin***
%% Cell type:markdown id: tags:
# Ejercicio No. 3 - Amigos congueros
* 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”.
%% Cell type:code id: tags:
``` python
#UNCOMENT TO INSTALL UNIDECODE
#!pip install unidecode
## HE CREADO UNA FUNCION QUE TOMA UN DICCIONARIO DE VALORES Y LO AGREGA AL DICIONARIO "COMPAS" DE ACUERDO A UNA LLAVE "USUARIO"
## PARA ASEGURAR QUE LOS DATOS SEAN CONSISTENTES SE HA HECHO UNA NORMALIZACION DE TEXTOS DE ENTRADA, USANDO LA LIBRERIA UNIDECODE,
## ESTO ELIMINA LAS MAYUSCULAS Y LOS ACENTOS EN EL TEXTO DE ENTRADA, ASEGURANDO QUE SE PUEDA HACER UN ANALISIS DE DATOS POSTERIOR
## FUNCION QUE AGREGA MAS DATOS AL DICCIONARIO "COMPAS", ESTA FUNCION VERIFICA QUE TODOS LOS CAMPOS REQUERIDOS ESTEN EN LA LISTA DE ENTRADA Y QUE SEAN VALIDOS
def add_values_in_dict(compas, key, values):
"""adds new item to compas dictionary
Args:
arg[0]: compas old dictionary
arg[1]: new item (single)
arg[2]: new item's information
Returns:
dictionary: new dictionary of compas
"""
import unidecode
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
valid_items=['nombres', 'apellidos', 'edad', 'pais','residencia', 'especialidad cientifica', 'institucion', 'hobbie']
values=dict((k.lower(), v.lower()) for k,v in values.items())
values=dict((unidecode.unidecode(k), unidecode.unidecode(v)) for k,v in values.items())
if all([k in valid_items for k in values.keys()]) and all([k in values.keys() for k in valid_items]):
if key not in compas:
compas[key]=dict()
compas[key]=dict(values)
return compas
else:
print(f"{bcolors.FAIL}FALLO: el usuario {key} ya fue registrado{bcolors.ENDC}")
else:
if not all([k in values.keys() for k in valid_items]):
if len([k for k in valid_items if k not in values.keys()])==1:
print(f"{bcolors.FAIL}FALLO: el valor {[k for k in valid_items if k not in values.keys()]} es requerido{bcolors.ENDC}")
else:
print(f"{bcolors.FAIL}FALLO: los valores {[k for k in valid_items if k not in values.keys()]} son requeridos{bcolors.ENDC}")
if not all([k in valid_items for k in values.keys()]):
if len([ k for k,v in values.items() if k not in valid_items])==1:
print(f"{bcolors.FAIL}FALLO: el valor {[ k for k,v in values.items() if k not in valid_items]} no es valido{bcolors.ENDC}")
else:
print(f"{bcolors.FAIL}FALLO: los valores {[ k for k,v in values.items() if k not in valid_items]} no son validos{bcolors.ENDC}")
compas=dict({'@sadeddins':
dict({'nombres':'siria',
'apellidos':'Saddedin',
'edad':'30',
'pais':'Venezuela',
'residencia':'Colombia',
'especialidad cientifica':'data science',
'institucion':'Universidad Simon Bolivar',
'hobbie':'Ciencia de datos'
})
})
```
%% Cell type:code id: tags:
``` python
## crearemos una funcion que acepte tanto la inclusion de usuarios individuales como de archivos de datos
def compas_add(*arg):
"""adds new compas to compas dictionary
Args:
arg: 2 or 3 arguments
2 arguments:
arg[0]: compas old dictionary
arg[1]: csv file with new items to add
3 arguments:
arg[0]: compas old dictionary
arg[1]: new item (single)
arg[2]: new item's information
Returns:
dictionary: new dictionary of compas
"""
import os
import pandas as pd
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
if (len(arg)==3) and all([isinstance(x,str) for x in arg],str):
return add_values_in_dict(arg[0],arg[1],arg[2])
elif (len(arg)==2) and (os.path.isfile(arg[1])) and (arg[1].endswith('.csv')):
users=pd.read_csv(arg[1])
data=[]
compas=arg[0]
for i in range(len(users)):
datai=[users.loc[i,'Usuario de Mattermost'],[{str(k):str(v) for k,v in zip(users.columns[1:],users.iloc[i,1:])}][0]]
data.append(datai)
for user in data:
compas=add_values_in_dict(compas,user[0],user[1])
if compas==None:
break
return compas
else:
print(f"{bcolors.FAIL}FALLO: los valores de entrada no son validos, revise documentacion{bcolors.ENDC}")
```
%% Cell type:code id: tags:
``` python
info='C:/Users/ECF0124A/Downloads/info.csv'
compas_add(compas,info)
```
%% Output
{'@sadeddins': {'nombres': 'siria',
'apellidos': 'Saddedin',
'edad': '30',
'pais': 'Venezuela',
'residencia': 'Colombia',
'especialidad cientifica': 'data science',
'institucion': 'Universidad Simon Bolivar',
'hobbie': 'Ciencia de datos'},
'@malamboj': {'nombres': 'jorge enrique',
'apellidos': 'malambo martinez',
'edad': '39',
'pais': 'colombia',
'residencia': 'bogota dc',
'especialidad cientifica': 'modelaje y simulacion de materiales',
'institucion': 'universidad nacional de colombia',
'hobbie': 'talla en madera y ecoturismo'},
'@bermudezj': {'nombres': 'jesus david',
'apellidos': ' bermudez sanchez',
'edad': '25',
'pais': 'colombia',
'residencia': ' bogota dc',
'especialidad cientifica': 'nan',
'institucion': 'universidad nacional de colombia',
'hobbie': 'senderismo y bicicleta'},
'@andreatugores': {'nombres': 'andrea carolina',
'apellidos': 'tugores hernandez',
'edad': '24',
'pais': 'venezuela',
'residencia': 'caracas',
'especialidad cientifica': 'nan',
'institucion': 'universidad central de venezuela',
'hobbie': 'tennis'},
'@fernadezn': {'nombres': 'nicolas',
'apellidos': ' fernandez cinquepalmi',
'edad': '24',
'pais': 'argentina',
'residencia': 'peru',
'especialidad cientifica': 'ciencia de materiales',
'institucion': 'universidad nacional mayor de san marcos',
'hobbie': 'tocar el piano'},
'@grisalej': {'nombres': 'jennifer',
'apellidos': 'grisales casadiegos',
'edad': '27',
'pais': 'colombia',
'residencia': 'bucaramanga',
'especialidad cientifica': 'astroparticulas',
'institucion': 'universidad insdustrial de santander',
'hobbie': 'rugby y yoga'},
'@mamaniy': {'nombres': 'yhony',
'apellidos': 'mamani arce',
'edad': '26',
'pais': 'peru',
'residencia': 'lima',
'especialidad cientifica': 'fisica del estado solido',
'institucion': 'universidad nacional mayor de san marcos',
'hobbie': 'correr'},
'@acerot': {'nombres': 'tatiana',
'apellidos': 'acero cuellar',
'edad': '23',
'pais': 'colombia',
'residencia': 'bogota dc',
'especialidad cientifica': 'mecanica celeste',
'institucion': 'universidad nacional de colombia',
'hobbie': 'ver anime, cocinar y senderismo'},
'@cristian.velandia': {'nombres': 'cristian',
'apellidos': 'velandia',
'edad': '27',
'pais': 'colombia',
'residencia': 'nan',
'especialidad cientifica': 'optica',
'institucion': 'universidad nacional de colombia',
'hobbie': 'ver anime y los videojuegos'},
'@carrilloj': {'nombres': 'juan guillermo',
'apellidos': 'carrillo reyes',
'edad': '25',
'pais': 'colombia',
'residencia': 'bogota dc',
'especialidad cientifica': 'astronomia',
'institucion': 'universidad nacional de colombia',
'hobbie': 'basket y videojuegos'},
'@teofilo': {'nombres': 'teofilo',
'apellidos': 'vargas auccalla',
'edad': '54',
'pais': 'peru',
'residencia': 'lima',
'especialidad cientifica': 'cosmologia',
'institucion': 'universidad nacional mayor de san marcos',
'hobbie': 'wing chun kuen'},
'@juan-pineda': {'nombres': 'juan carlos',
'apellidos': 'basto pineda',
'edad': '37',
'pais': 'colombia',
'residencia': 'bucaramanga',
'especialidad cientifica': 'astronomia',
'institucion': 'universidad insdustrial de santander',
'hobbie': 'dibujar y caminatas'}}
%% Cell type:markdown id: tags:
* 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)
%% Cell type:code id: tags:
``` python
## CALCULA LA EDAD PROMEDIO DE LOS COMPAS FILTRADO POR PAIS
def ages(dic,pais):
""" mean ages of compas given a country
Args:
dic (dictionary): compas dictionary
pais (string): country of interest
Returns:
float: mean age of compas for pais
"""
class bcolors:
FAIL = '\033[91m'
ENDC = '\033[0m'
if isinstance(dic,dict) and isinstance(pais,str):
import pandas as pd
import numpy as np
import unidecode
pais=unidecode.unidecode(pais.lower())
df=pd.DataFrame(compas).transpose()
return np.mean(np.array(df[df.pais==pais].edad,dtype=int))
else:
print(f"{bcolors.FAIL}FALLO:valores de entrada invalidos{bcolors.ENDC}")
ages(compas,"Colombia")
```
%% Output
29.0
%% Cell type:code id: tags:
``` python
```
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