#1
import math as mt

def circulo(diam,circ):
  areac = mt.pi * ((diam/2)**2)
  perimetroc = circ
  return areac , perimetroc

circulo(2,2)
## (3.141592653589793, 2)
def rombo(lado,dmayor,dmenor):
  arear = (dmayor * dmenor) / 2
  perimetror = lado * 4
  return arear, perimetror

rombo(2,2,2)
## (2.0, 8)
#2
#Sumar: Suma ambos vectores y devuelve el resultado.
#Restar: Resta al primer vector el segundo y devuelve el resultado.
#Multiplicar: Multiplica ambos vectores y devuelve el resultado.
#Correlacion: Devuelve la correlaci ́on de los vectores.
#Covarianza: Devuelve la covarianza de los vectores
import numpy as np
def operacion(x,y):
  suma = np.add(x, y)
  mult = np.dot(x, y)
  corr = np.corrcoef(x, y)
  cov = np.cov(x,y)
  respuesta = {'suma' : suma, 'multiplicacion' : mult, 
                 'correlacion' : corr, 'covarianza' : cov}
  return respuesta

v1 = [16,17,17,15,16,18]
v2 = [6,7,8,2,4,9]

operacion(v1,v2)
## {'suma': array([22, 24, 25, 17, 20, 27]), 'multiplicacion': 607, 'correlacion': array([[1.        , 0.95065415],
##        [0.95065415, 1.        ]]), 'covarianza': array([[1.1, 2.6],
##        [2.6, 6.8]])}
def suma(x,y):
  suma = np.add(x, y)
  return suma

v1 = [16,17,17,15,16,18]
v2 = [6,7,8,2,4,9]

suma(v1,v2)
## array([22, 24, 25, 17, 20, 27])
def mult(x,y):
  mult = np.dot(x, y)
  return mult

v1 = [16,17,17,15,16,18]
v2 = [6,7,8,2,4,9]

mult(v1,v2)
## 607
def corr(x,y):
  corr = np.corrcoef(x, y)
  return corr

v1 = [16,17,17,15,16,18]
v2 = [6,7,8,2,4,9]

corr(v1,v2)
## array([[1.        , 0.95065415],
##        [0.95065415, 1.        ]])
def cov(x,y):
  cov = np.cov(x,y)
  return cov

v1 = [16,17,17,15,16,18]
v2 = [6,7,8,2,4,9]

cov(v1,v2)
## array([[1.1, 2.6],
##        [2.6, 6.8]])
#3
import pandas as pd

def as_data_frame(frutas):
    precios = pd.Series(frutas)
    df = pd.DataFrame({'Frutas': list(frutas.keys()), 'Precios': precios.values})
    return df

def agregar_fruta(nombre, precio, frutas):
  frutas[nombre] = precio
  return frutas

def eliminar_fruta(nombre, frutas):
    if nombre in frutas:
        del frutas[nombre]
    return frutas

def calcular_precio(nombre, kilos, frutas):
    if nombre in frutas:
        pkilo = frutas[nombre]
        ptotal = pkilo * kilos
        return ptotal
    else:
        print(f"No se encontró la fruta {nombre} en el diccionario.")

def maximo(frutas):
  maximo = max(frutas.values())
  return maximo

def buscar(nombre, frutas):
  if nombre in frutas:
        precio = frutas[nombre]
        return f"El precio de {nombre} es {precio} por kilo."
  else:
        return f"{nombre} no se encuentra en el diccionario."

frutas = {
    "manzanas": 1.50,
    "platanos": 2.00,
    "naranjas": 1.75,
    "uvas": 3.50
}

as_data_frame(frutas)
##      Frutas  Precios
## 0  manzanas     1.50
## 1  platanos     2.00
## 2  naranjas     1.75
## 3      uvas     3.50
agregar_fruta("mango", 3.2, frutas)
## {'manzanas': 1.5, 'platanos': 2.0, 'naranjas': 1.75, 'uvas': 3.5, 'mango': 3.2}
eliminar_fruta("manzanas", frutas)
## {'platanos': 2.0, 'naranjas': 1.75, 'uvas': 3.5, 'mango': 3.2}
calcular_precio("naranjas", 3.0, frutas)
## 5.25
maximo(frutas)
## 3.5
buscar("manzanas", frutas)
## 'manzanas no se encuentra en el diccionario.'
#4

def actualiza_clase(nombre, clase, titanic):
    for i, pasajero in titanic.iterrows():
        if pasajero["Name"] == nombre:
            titanic.at[i, "Pclass"] = clase
            print("Se actualizó la clase.")
            return
    print("No se encontró en la lista de pasajeros.")

def resumen_tripulante(nombre, titanic):
   for pasajero in titanic:
        if pasajero['Name'] == nombre:
            return print(f"{PassengerId},{Survived}, {Pclass}, {Name}, {Sex}, {Age}, {SibSp}, {Parch}, {Ticket},  {Fare}, {Cabin}, {Embarked}")
   return print("No se encontró en la lista de pasajeros.")


def resumen_columna(columna, titanic):
    if titanic[columna].dtype == 'object':
        moda = titanic[columna].value_counts().idxmax()
        print(f"La moda de la columna {columna} es: {moda}")
    elif titanic[columna].dtype == 'float64' or titanic[columna].dtype == 'int64':
        promedio = titanic[columna].mean()
        print(f"El promedio de la columna {columna} es: {promedio}")
    else:
        print("Tipo de datos no válido")


def cantidad_sobrevivientes(titanic):
    cantidad_sobrevivientes = titanic.groupby('Pclass')['Survived'].sum()
    sv = {}
    for clase, sobrevivientes in cantidad_sobrevivientes.items():
        sv[str(clase)] = f"{sobrevivientes} Sobrevivientes"
    return sv


def agregar_tripulante(PassengerId,Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket,  Fare, Cabin, Embarked):
  titanic.loc[len(titanic.index)] = [PassengerId,Survived, Pclass, Name, Sex, Age, SibSp, Parch, Ticket,  Fare, Cabin, Embarked] 
  return print(f"Se ha agregado al pasajero")

def eliminar_tripulante(nombre, titanic):
  if nombre in titanic:
        del titanic[nombre]
        return print(f"se ha eliminado a {nombre}")
  else:
    return print(f"ese pasajero no se encuentra en la lista")

import pandas as pd
titanic = pd.read_csv("C:/Users/Rodrigo/Desktop/TEC/Concentracion/titanic.csv")

actualiza_clase("Braund, Mr. Owen Harris",1, titanic)
## Se actualizó la clase.
resumen_columna("Age", titanic)
## El promedio de la columna Age es: 29.881137667304014
cantidad_sobrevivientes(titanic)
## {'1': '186 Sobrevivientes', '2': '117 Sobrevivientes', '3': '191 Sobrevivientes'}
agregar_tripulante('0','1','1','Rodrigo Rioseco','male','23','1','1','1','0','lux','S')
## Se ha agregado al pasajero
eliminar_tripulante("Juan Ignacio", titanic)
## ese pasajero no se encuentra en la lista