Practica de Python - Solución

Curso Python para Ciencia de datos

Por Jose R. Zapata - https://joserzapata.github.io/

Invítame a un Café

NOTA: Realizar Primero los ejercicios y luego revisar las soluciones propuestas.

Para realizar los ejercicios prácticos de este capitulo, hacer click en el siguiente enlace que los llevara a Google Colab, donde podrán ejecutar el código y realizar los ejercicios propuestos.

Ejercicios Python - click para abrir en colab

Ejercicios

Responda las preguntas o complete las tareas que se detallan en negrita a continuación, use el método específico descrito, si corresponde.

Cuanto es 43*28?

#Copie su código aca
43*28
1204

Cuanto es $7^4$?

#Copie su código aca
7**4
2401

Divida esta cadena de caracteres:

s = "Hola Estoy feliz aprendiendo python!"

y conviertalo en una lista

#Copie su código aca
s = "Hola Estoy feliz aprendiendo python!"
s.split()
['Hola', 'Estoy', 'feliz', 'aprendiendo', 'python!']

Dadas las siguientes variables:

planeta = "Tierra"
diametro = 12742

Use f-strings para imprimir lo siguiente:

El diametro de la Tierra es de 12742 kilometros.
planeta = "Tierra"
diametro = 12742
#Copie su código aca
print(f"El diametro de la {planeta} es de {diametro} kilometros.")
El diametro de la Tierra es de 12742 kilometros.

Dada la siguiente lista con muchos elementos, use la indexacion para extraer la palabra “hello”

lst = [1,2,[3,4],[5,[100,200,['hello']],23,11],1,7]
#Copie su código aca
lst[3][1][2][0]
'hello'

Dado el siguiente diccionario extraiga la palabra “hello”. Este puede ser un poco truculento

d = {'ID1':[1,2,3,{'truco':['oh','por','Dios','En serio',{'target':[1,2,3,'hello']}]}]}
#Copie su código aca
d['ID1'][3]['truco'][4]['target'][3]
'hello'

Cual es la diferencia principal entre una tupla y una lista?

# La tupla es inmutable

Agregar el nombre Jose al final de la siguiente lista

[“Alvaro”, “Jacinto”, “Miguel”, “Edgardo”, “David”]

#Copie su código aca
nombres = ['Alvaro', 'Jacinto', 'Miguel', 'Edgardo', 'David']
nombres.append('Jose')
nombres
['Alvaro', 'Jacinto', 'Miguel', 'Edgardo', 'David', 'Jose']

Cuente Cuantas veces esta el nombre Miguel de la siguiente lista

[“Alvaro”, “Miguel”, “Edgardo”, “David”, “Miguel”]

#Copie su código aca
["Alvaro", "Miguel", "Edgardo", "David", "Miguel"].count("Miguel")
2

Convierta la siguiente palabra en letras minusculas:

Soy FeliZ APREndienDo PYTHon pAra PROceSar DaTos

#Copie su código aca
"Soy FeliZ APREndienDo PYTHon pAra PROceSar DaTos".lower()
'soy feliz aprendiendo python para procesar datos'

los siguientes números cambie la coma por un punto

‘17656734,87’

#Copie su código aca
'17656734,87'.replace(',','.')
'17656734.87'

Cree una función llamada domainGet que capture el dominio del sitio web de correo electrónico a partir de una cadena con el siguiente formato:

user@domain.com

Por ejemplo, Con el siguiente argumento “juan_perez@correo.com” la función retornara: correo.com

#Copie su código aca
def domainGet(email):
    return email.split('@')[-1]
domainGet('juan_perez@correo.com')
'correo.com'

Cree una función básica llamada buscar palabra_promedio que devuelva True si la palabra ‘promedio’ o ‘Promedio’ o ‘PROMEDIO’ está contenida en string de entrada. No se preocupe por los casos extremos como una puntuación que se adjunta a la palabra promedio, pero tenga en cuenta las mayúsculas.

#Copie su código aca
def palabra_promedio(palabra:str)-> bool:
    """
    Retorna True si la palabra contiene la palabra promedio
    Args:
        palabra (str): Palabra a evaluar
    Returns:
        bool: True si la palabra contiene la palabra promedio

    Ejemplo:
        >>> palabra_promedio('El Promedio de la clase es de 4.3')
        True
        >>> palabra_promedio('El la media de la clase es de 4.3')
        False

    """

    return 'promedio' in palabra.lower().split()
palabra_promedio('El Promedio de la clase es de 4.3')
True

Crea una función llamada contar_python que cuente la cantidad de veces que aparece la palabra “python” en una cadena. Nuevamente ignore los casos extremos.

#Copie su código aca

def contar_python(palabra:str)-> int:
    """
    Cuenta el numero de veces que aparece la palabra python en un string.

    Args:
    string (str): el string a evaluar con la palabra python.

    Returns:
    int: numero de veces que aparece la palabra python.

    Ejemplo:
    >>> contar_python('Python es un lenguaje de programacion, Python es divertido')
    2
    """
    count = 0
    for word in palabra.lower().split():
        if word == 'python':
            count += 1
    return count
contar_python('Python es un lenguaje de programacion, Python es divertido')
2

Problema final

Un científico de datos está trabajando en un proyecto para desarrollar una función para detectar anomalías (outliers) extremas en un conjunto de datos de valores positivos. La función debe ser capaz de determinar si un dato es: normal, anormal o indeterminado en función de su valor y su desviación estándar.

La función deteccion_anomalias tiene las siguientes reglas:

  1. Tiene que recibir como argumentos tres números y un boolean:
    • El valor del dato (float)
    • La media (float)
    • La desviación estándar (float)
    • Si el tipo de distribución es normal (bool).
  2. Si la distribuccion en normal y Si el valor del dato es mayor a la media mas 3 veces la desviación estándar, la función debe retornar “anormal”.
  3. Si la distribuccion en normal y Si el valor del dato es menor a la media menos 3 veces la desviación estándar, la función debe retornar “normal”.
  4. En los casos contrarios a los anteriores debe retornar “indeterminado”.
#Copie su código aca

def deteccion_anomalia(valor:float,
                       valor_media: float,
                       desviacion_estandar: float,
                       distribucion_normal: bool,) -> str:
  """
  Clasifica un dato como "normal", "anormal" o indeterminado.

  Args:
    valor (float): El valor a clasificar.
    valor_media (float): La media de los datos.
    desviacion_estandar (float): La desviación estándar de los datos.
    distribucion_normal (bool): Si la distribución es normal o no.

  Returns:
    El resultado de la clasificación (str): normal, anormal, indeterminado .
  """

  # Comprobar si el valor está fuera de los límites normales.

  limite_superior = valor_media + 3 * desviacion_estandar

  if valor > limite_superior and distribucion_normal:
    return "anormal"
  elif valor < limite_superior and distribucion_normal:
    return "normal"
  else:
    return "indeterminado"
deteccion_anomalia(valor = 15.6,
                   valor_media=9.5,
                   desviacion_estandar= 8.7,
                   distribucion_normal=True)
'normal'
deteccion_anomalia(valor = 45.4,
                   valor_media=9.5,
                   desviacion_estandar= 8.7,
                   distribucion_normal= True)
'anormal'
deteccion_anomalia(valor = 15.6,
                   valor_media=9.5,
                   desviacion_estandar= 8.7,
                   distribucion_normal= False)
'indeterminado'

Phd. Jose R. Zapata