Clase 9-10: Funciones, diccionarios y condicionales¶
#Importar librería
import numpy as np
En esta classe vamos a ejercitar respondiendo las siguientes preguntas
Utilice las funciones de numpy
linspace()
yarange()
para crear dos vectores entre 0-100. El primer vector tiene 1000 elementos entre el rango 0-100 y el segundo se encuentra separado por 1.5 (ejm: 0, 1.5, 3, …).
#Crear vector entre 0-100 con 1000 elementos
vector1 = np.linspace(0, 100, 1000)
print("len(vector1):", len(vector1))
#Crear vector entre 0-100 separados por 1.5
vector2 = np.arange(0, 100, 1.5)
print("len(vector2):", len(vector2))
#Vectores
print("vector1:", vector1[0:10])
print("vector2:", vector2[0:10])
len(vector1): 1000
len(vector2): 67
vector1: [0. 0.1001001 0.2002002 0.3003003 0.4004004 0.5005005 0.6006006
0.7007007 0.8008008 0.9009009]
vector2: [ 0. 1.5 3. 4.5 6. 7.5 9. 10.5 12. 13.5]
Utilizando los vectores de 1. crear un
loop anidado
para calcular la multiplicación entre cada elemento de los vectores. Guarde los resultados en una lista.
#Lista vacía
lista = []
#Loop
for i in vector1:
for j in vector2:
lista.append(i*j)
print("len(lista):", len(lista))
print("len(vector1)*len(vector2):", len(vector1)*len(vector2))
len(lista): 67000
len(vector1)*len(vector2): 67000
Mediante un print() muestre la suma, el promedio, la mediana y la desviación estándar de la lista guardada en 2.
#Suma
print("suma:", np.sum(lista))
#Promedio
print("promedio:", np.mean(lista))
#Mediana
print("mediana:", np.median(lista))
#Desviación estandar
print("Std:", np.std(lista))
suma: 165825000.0
promedio: 2475.0
mediana: 1839.3393393393394
Std: 2202.8088300489767
Utilice la función input() para solicitar la cantidad de mascotas.
#Solicitar input
input("¿Cuántas mascotas tiene?")
---------------------------------------------------------------------------
StdinNotImplementedError Traceback (most recent call last)
<ipython-input-5-1e0ab58c6baf> in <module>
1 #Solicitar input
----> 2 input("¿Cuántas mascotas tiene?")
~/miniconda3/lib/python3.9/site-packages/ipykernel/kernelbase.py in raw_input(self, prompt)
843 """
844 if not self._allow_stdin:
--> 845 raise StdinNotImplementedError(
846 "raw_input was called, but this frontend does not support input requests."
847 )
StdinNotImplementedError: raw_input was called, but this frontend does not support input requests.
Crear una rutina que permita las siguientes operaciones:
Solicitar el número de mascotas (con input()), guardar en una variable.
Si el número de mascotas es cero: imprimir “No tiene mascotas.”
Si el número es entre 1-3: imprimir “Tiene entre 1-3 mascotas.”
Si el número es entre 4-6: imprimir “Tiene entre 4-6 mascotas.”
Si el número es mayor que 6: imprimir “Tiene más de 6 mascotas”.
Si el número es negativo: imprimir “No corresponde”.
*Probar que su rutina cumple bien todas las condiciones. *
mascotas = int(input("¿Cuántas mascotas tiene?"))
if mascotas == 0:
print("No tiene mascotas")
elif mascotas >0 and mascotas <=3 :
print("Tiene entre 1-3 mascotas")
elif mascotas>3 and mascotas <=6:
print("Tiene entre 4-6 mascotas")
elif mascotas>6:
print("Tiene mas de 6 mascotas")
elif mascotas<0:
print("No corresponde")
else:
print("otro caso")
¿Cuántas mascotas tiene? 0
No tiene mascotas
Crear dos listas, una con estilo musical (blues, rock, rap, trap, pop) y otra con grupos (Nina Simone, Led Zeppelin, Makiza, Pablo Chill-e, Dua Lipa). Luego crear una función que tenga como input “estilo” y output “recomendacion”. La función debe permitir:
Leer el input estilo y compararlo con la lista de estilo musical.
Utilizar if/elif/else para crear condiciones que recomiende música. Por ejemplo, si estilo es igual a Blues, recomendar Nina Simone.
Si el estilo no está en la lista de estilo musical, debe mostrar “No tenemos recomendación para su estilo musical”.
El output debe ser la recomendación.
Evaluar si la función se ejecuta correctamente para cada estilo musical
Opción 1
def recomendacion(estilo):
if estilo == "blues":
print("Nina Simone")
elif estilo == "rock":
print("Led Zeppelin")
elif estilo == "rap":
print("Makiza")
elif estilo == "trap":
print("Pablo Chill-e")
elif estilo == "pop":
print("Dua Lipa")
else:
print("No tenemos recomendación para su estilo musical.")
recomendacion('rap')
Makiza
Opción 2
def recomendacion(estilo):
if estilo == "blues":
recomend = "Nina Simone"
elif estilo == "rock":
recomend = "Led Zeppelin"
elif estilo == "rap":
recomend = "Makiza"
elif estilo == "trap":
recomend = "Pablo Chill-e"
elif estilo == "pop":
recomend = "Dua Lipa"
else:
recomend = "No tenemos recomendación para su estilo musical."
return recomend
#Podemos guardar la recomendación en una variable
recomendacion('blues')
'Nina Simone'
Opción 3
estilos = ["blues", "rock", "rap", "trap", "pop"]
grupos = ["Nina Simone", "Led Zeppelin", "Makiza", "Pablo Chill-e", "Dua Lipa"]
def recomendacion(estilo):
for i in range(0, len(estilos)):
if estilo == estilos[i]:
recomend = grupos[i]
break
else:
recomend = "No tenemos recomendación"
return recomend
recomendacion("rock")
'Led Zeppelin'
Crear una función que permita evaluar hasta tres estilos musicales y entregue una lista con las recomendaciones. Por ejemplo, si le entrego una lista con [rock, rap, pop] me debe retornar [Led Zeppelin, Makiza, Dua Lipa]. Adicionalmente:
Si le entrego una lista con 1 o 2 estilos musicales debe entregar 1 o 2 recomendaciones respectivamente.
Si le entrego una lista del tipo [trap, musica clasica] debe retornar la recomendación para trap [Pablo Chill-e].
Si le entrego una lista del tipo [musica clasica] debe retornar un mensaje “no tenemos recomendación para su estilo musical”.
Pasos de la iteración
“blues”: igual a la pregunta 6
[“blues”]:
si el lago del input == 1
iteramos sobre el total de estilos
si input (estilo) en la posición cero (primer elemento) es igual al valor de los estilos (sobre lo que estamos iterando)
entonces guardar el output como el grupo en la posición “i”.
cierre
[“blues”, “rock”]:
si el largo del input es igual a 2
creamos lista vacía para guardar las recomendaciones
iteramos sobre el total de elementos de estilos
Comparamos el primer elemento del input con los estilos ejm: si input[“blues”, rock”], comparamos “blues” con cada elemento de estilos.
Si son iguales, guardamos la recomendación (grupos[i]) en la lista, en caso contrario no hacemos nada.
Repetimos para el segundo elemento del input (“rock”).
[“rock”, “blues”, “pop”]
La lógica es la misma que en 3., sólo que ahora agregamos un tercer elemento y con ello una tercera condición.
estilos = ["blues", "rock", "rap", "trap", "pop"]
grupos = ["Nina Simone", "Led Zeppelin", "Makiza", "Pablo Chill-e", "Dua Lipa"]
def recomendacion(estilo):
#Entrada como texto: ejm "rock"
if type(estilo) == str:
for i in range(0, len(estilos)):
if estilo == estilos[i]:
recomend = grupos[i]
break
else:
recomend = "No tenemos recomendación"
#Entrada como lista ej ["rock"] o ["rock", "blues"]
else:
#1 estilo musical
if len(estilo) == 1:
for i in range(0, len(estilos)):
if estilo[0] == estilos[i]:
recomend = grupos[i]
break
else:
recomend = "No tenemos recomendación"
#2 estilos musicales
elif len(estilo) == 2:
recomend = []
for i in range(0, len(estilos)):
if estilo[0] == estilos[i]:
recomend.append(grupos[i])
elif estilo[1] == estilos[i]:
recomend.append(grupos[i])
#3 estilos musicales:
elif len(estilo) == 3:
recomend = []
for i in range(0, len(estilos)):
if estilo[0] == estilos[i]:
recomend.append(grupos[i])
elif estilo[1] == estilos[i]:
recomend.append(grupos[i])
elif estilo[2] == estilos[i]:
recomend.append(grupos[i])
return recomend
gustos = ["rap", "rock", "blues"]
recomendacion(gustos)
['Nina Simone', 'Led Zeppelin', 'Makiza']
Crear una diccionario a partir de las dos listas donde la llave sea el estilo musical y el valor sea el grupo, ej: {‘rap’:’makiza’…}.
musica_dic = {'blues':'Nina Simone', 'rock':'Led Zeppelin', 'rap':'Makiza', 'trap':'Pablo Chill-e', 'pop':'Dua Lipa' }
print("diccionario:", musica_dic)
print("llaves:", musica_dic.keys())
print("valores:", musica_dic.values())
print("items:", musica_dic.items())
diccionario: {'blues': 'Nina Simone', 'rock': 'Led Zeppelin', 'rap': 'Makiza', 'trap': 'Pablo Chill-e', 'pop': 'Dua Lipa'}
llaves: dict_keys(['blues', 'rock', 'rap', 'trap', 'pop'])
valores: dict_values(['Nina Simone', 'Led Zeppelin', 'Makiza', 'Pablo Chill-e', 'Dua Lipa'])
items: dict_items([('blues', 'Nina Simone'), ('rock', 'Led Zeppelin'), ('rap', 'Makiza'), ('trap', 'Pablo Chill-e'), ('pop', 'Dua Lipa')])
Replicar la función 6. pero ahora utilizando diccionarios donde la función haga lo siguiente:
Evaluar si el input (estilo) está en las
llaves
del diccionario.Si el input está en llave del diccionario recomendar el grupo musical respectivo.
Si no está en la llave del diccionario retornar “No tenemos recomendación para su estilo musical”.
Opción 1
musica_dic = {'blues':'Nina Simone', 'rock':'Led Zeppelin', 'rap':'Makiza', 'trap':'Pablo Chill-e', 'pop':'Dua Lipa' }
def recomendacion(estilo):
for k in musica_dic.keys():
if estilo == k:
recomend = musica_dic[k]
break
else:
recomend = "No tenemos recomendación"
return recomend
recomendacion("pop")
'Dua Lipa'
Opción 2
def recomendacion(estilo):
for k,v in musica_dic.items():
if estilo == k:
recomend = v
break
else:
recomend = "No tenemos recomendación"
return recomend
recomendacion("rap")
'Makiza'
Replicar la función de 7. utilizando diccionarios.
musica_dic = {'blues':'Nina Simone', 'rock':'Led Zeppelin', 'rap':'Makiza', 'trap':'Pablo Chill-e', 'pop':'Dua Lipa' }
def recomendacion(estilo):
#Entrada como texto: ejm "rock"
if type(estilo) == str:
for k, v in musica_dic.items():
if estilo == k:
recomend = v
break
else:
recomend = "No tenemos recomendación"
#Entrada como lista ej ["rock"] o ["rock", "blues"]
else:
#1 estilo musical
recomend = []
if len(estilo) == 1:
for k, v in musica_dic.items():
if estilo[0] == k:
recomend = v
break
else:
recomend = "No tenemos recomendación"
#2 estilos musicales
elif len(estilo) == 2:
recomend = []
for k, v in musica_dic.items():
if estilo[0] == k:
recomend.append(v)
elif estilo[1] == k:
recomend.append(v)
#3 estilos musicales:
elif len(estilo) == 3:
recomend = []
for k, v in musica_dic.items():
if estilo[0] == k:
recomend.append(v)
elif estilo[1] == k:
recomend.append(v)
elif estilo[2] == k:
recomend.append(v)
return recomend
gustos = ["AA"]
recomendacion(gustos)
'No tenemos recomendación'
Crear una función que entregue una edad como un valor aleatorio entre 15-65 años y educación como otro valor aleatorio entre 0-22, pero tiene que ser menor que la edad.
import random
import numpy as np
#Caso 1: una sola persona
def fun_edad_educ(eda_in, eda_end, edu_in, edu_end):
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
if edad<educ:
educ = random.randint(edu_in, edu_end)
return edad, educ
fun_edad_educ(15, 65, 0, 22) #->que pasa si el if no es suficiente
(43, 7)
#Caso 1: una sola persona
def fun_edad_educ(eda_in, eda_end, edu_in, edu_end):
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
while edad<educ:
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
return edad, educ
fun_edad_educ(15, 65, 50, 100)
(62, 57)
#Caso 3: varias persona
def fun_edad_educ(n, eda_in, eda_end, edu_in, edu_end):
edad_list = []
educ_list = []
for i in range(n):
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
if edad<educ:
educ = random.randint(edu_in, edu_end)
edad_list.append(edad)
educ_list.append(educ)
return np.array(edad_list), np.array(educ_list)
edad_list, educ_list = fun_edad_educ(20, 15, 65, 0, 22)
#Caso 4: varias persona
def fun_edad_educ(n, eda_in, eda_end, edu_in, edu_end):
edad_list = []
educ_list = []
for i in range(n):
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
while edad<educ:
edad = random.randint(eda_in, eda_end)
educ = random.randint(edu_in, edu_end)
edad_list.append(edad)
educ_list.append(educ)
return np.array(edad_list), np.array(educ_list)
edad_list, educ_list = fun_edad_educ(20, 15, 65, 50, 100)
(array([56, 58, 63, 58, 58, 54, 64, 57, 62, 61, 65, 64, 59, 62, 55, 54, 65,
65, 65, 54]),
array([51, 52, 60, 50, 52, 54, 64, 52, 53, 56, 60, 52, 55, 53, 50, 52, 54,
50, 58, 53]))
Crear una función que calcule la experiencia como edad-educación
def fun_exp(edad, educ):
return edad-educ
exp = fun_exp(edad_list, educ_list)
Crear una función que calcule la estimación del ingreso según la ecuación de
Mincer
: \(Ln(Y) = \beta_0 + \beta_1 S + \beta_2 Exp + \beta_3 Exp^2\) Donde:
\(S\): años de educación
\(Exp\): experiencia
\(Exp^2\): experiencia al cuadrado
Utilice: \(\beta_0=9.7\), \(\beta_1=0.14\), \(\beta_2=0.07\), \(\beta_3=-0.001\)
def mincer(S, Exp):
β0 = 9.7
β1 = 0.14
β2 = 0.07
β3 = -0.001
return β0 + β1*S + β2*Exp + β3*Exp**2
ln_y = mincer(educ_list, exp)
import matplotlib.pyplot as plt
plt.plot(educ_list, ln_y, 'o')
[<matplotlib.lines.Line2D at 0x7f8d284574c0>]

Actividad 1¶
Instrucciones:¶
Cada pregunta la debe responder en una celda diferente (en total 4 celdas de código).
Antes de cada celda de código debe ir un
markdown
que muestre la pregunta que está respondiendo.En la celda de código debe agregar un breve comentario de qué está haciendo.
Mandar el archivo PDF al correo felix.ordonez@usach.cl con el asunto “Actividad 1”.
Fecha de entrega: antes de la clase del 09/11.
En caso que no respete las instrucciones se le descontará puntaje de la nota
Nombre:
Crear una función que entregue una edad como un valor aleatorio entre 15-65 años, educación como otro valor aleatorio entre 0-22 (tiene que ser menor que la edad) y sexo igual a una variable dicotómica (0 o 1) aleatoria.
Crear una función que calcule la experiencia como edad-educación
Crear una función que calcule la estimación del ingreso según la ecuación de Mincer: \(Ln(y)=\beta_0+\beta_1S+\beta_2Exp+\beta_3Exp^2 + \beta_4 Sexo + \beta_5(Sexo*S)\)
Donde:
\(S\): años de educación
\(Exp\): experiencia
\(Exp^2\): experiencia al cuadrado
Utilice: \(\beta_0=9.7\), \(\beta_1=0.15\), \(\beta_2=0.08\), \(\beta_3=-0.0011\), \(\beta_4=-0.15\), \(\beta_5=-0.0136\)
Relice el proceso en una iteración para N = 100 personas, guarde los resultados mediante un diccionario que la llave sea la persona (\(n=1,\cdots,N\)) y el valor sea una lista del tipo: [S, Exp, Exp2, Sexo, Sexo*S, Ln(y)]. Muestre los resultados de su diccionario.