import numpy as np
# Paso 1: Crear arrays con datos de ventas mensuales
meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio','Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'])
ventas_A = np.array([150, 200, 250, 300, 220, 210, 180, 190, 230, 240, 280, 300])
ventas_B = np.array([180, 210, 230, 250, 270, 260, 240, 250, 270, 290, 310, 330])
ventas_C = np.array([200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420])
# Paso 2: Transformaciones básicas con NumPy. Estadísticas básicas
### A ###
minino_A = np.min(ventas_A)
indice_minino_A = np.argmin(ventas_A)
indice_minino_A_mes = meses[np.argmin(ventas_A)]
minino_a_A = np.amin(ventas_A)
maximo_A = np.max(ventas_A)
indice_maximo_A = np.argmax(ventas_A)
indice_maximo_A_mes = meses[np.argmax(ventas_A)]
picos_A = np.ptp(ventas_A)
suma_A = np.sum(ventas_A)
promedio_A = np.mean(ventas_A)
promedio_p_A = np.average(ventas_A, weights=[0.5, 1, 1, 1, 1, 1, 1, 1.5, 1, 1, 1, 2])
mediana_A = np.median(ventas_A)
cuantil_A = np.quantile(ventas_A, 0.5)
percentil_A = np.percentile(ventas_A, 90)
varianza_p_A = np.var(ventas_A) # (poblacional)
varianza_m_A = np.var(ventas_A, ddof=1) # (muestral)
desviacion_estandar_A = np.std(ventas_A)
unicos_A = np.unique(ventas_A)
#enteros_bin_A = np.bincount(ventas_A)
conteo_enteros_positivos_A = np.size(ventas_A)
conteo_ceros_A = np.count_nonzero(ventas_A)
print("### A ###")
print(minino_A) # 150
print(indice_minino_A) # 0
print(indice_minino_A_mes) # Enero
print(minino_a_A) # 150
print(maximo_A) # 300
print(indice_maximo_A) # 3
print(indice_maximo_A_mes) # Abril
print(picos_A) # 150
print(suma_A) # 2750
print(promedio_A) # 229.16
print(promedio_p_A) # 236.15
print(mediana_A) # 225.0
print(cuantil_A) # 225.0
print(percentil_A) # 298.0
print(varianza_p_A) # 2057.63
print(varianza_m_A) # 2244.69
print(desviacion_estandar_A) # 45.36
print(unicos_A) # [150 180 190 200 210 220 230 240 250 280 300]
#print(enteros_bin_A) # []
print(conteo_enteros_positivos_A) # 12
print(conteo_ceros_A) # 12
### B ###
minino_B = np.min(ventas_B)
indice_minino_B = np.argmin(ventas_B)
indice_minino_B_mes = meses[np.argmin(ventas_B)]
minino_B_B = np.amin(ventas_B)
maximo_B = np.max(ventas_B)
indice_maximo_B = np.argmax(ventas_B)
indice_maximo_B_mes = meses[np.argmax(ventas_B)]
picos_B = np.ptp(ventas_B)
suma_B = np.sum(ventas_B)
promedio_B = np.mean(ventas_B)
promedio_p_B = np.average(ventas_B, weights=[0.5, 1, 1, 1, 1, 1, 1, 1.5, 1, 1, 1, 2])
mediana_B = np.median(ventas_B)
cuantil_B = np.quantile(ventas_B, 0.5)
percentil_B = np.percentile(ventas_B, 90)
varianza_p_B = np.var(ventas_B) # (poblacional)
varianza_m_B = np.var(ventas_B, ddof=1) # (muestral)
desviacion_estandar_B = np.std(ventas_B)
unicos_B = np.unique(ventas_B)
#enteros_bin_B = np.bincount(ventas_B))
conteo_enteros_positivos_B = np.size(ventas_B)
conteo_ceros_B = np.count_nonzero(ventas_B)
print("### B ###")
print(minino_B) # 180
print(indice_minino_B) # 0
print(indice_minino_B_mes) # Enero
print(minino_B_B) # 180
print(maximo_B) # 330
print(indice_maximo_B) # 11
print(indice_maximo_B_mes) # Diciembre
print(picos_B) # 150
print(suma_B) # 3090
print(promedio_B) # 257.5
print(promedio_p_B) # 265.76
print(mediana_B) # 255.0
print(cuantil_B) # 255.0
print(percentil_B) # 308.0
print(varianza_p_B) # 1568.75
print(varianza_m_B) # 1711.36
print(desviacion_estandar_B) # 39.60
print(unicos_B) # [180 210 230 240 250 260 270 290 310 330]
#print(enteros_bin_B) # []
print(conteo_enteros_positivos_B) # 12
print(conteo_ceros_B) # 12
### C ###
minino_C = np.min(ventas_C)
indice_minino_C = np.argmin(ventas_C)
indice_minino_C_mes = meses[np.argmin(ventas_C)]
minino_C_C = np.amin(ventas_C)
maximo_C = np.max(ventas_C)
indice_maximo_C = np.argmax(ventas_C)
indice_maximo_C_mes = meses[np.argmax(ventas_C)]
picos_C = np.ptp(ventas_C)
suma_C = np.sum(ventas_C)
promedio_C = np.mean(ventas_C)
promedio_p_C = np.average(ventas_C, weights=[0.5, 1, 1, 1, 1, 1, 1, 1.5, 1, 1, 1, 2])
mediana_C = np.median(ventas_C)
cuantil_C = np.quantile(ventas_C, 0.5)
percentil_C = np.percentile(ventas_C, 90)
varianza_p_C = np.var(ventas_C) # (poblacional)
varianza_m_C = (np.var(ventas_C, ddof=1))# (muestral)
desviacion_estandar_C = np.std(ventas_C)
unicos_C = np.unique(ventas_C)
#enteros_bin_C = np.bincount(ventas_C)
conteo_enteros_positivos_C = np.size(ventas_C)
conteo_ceros_C = np.count_nonzero(ventas_C)
print("### C ###")
print(minino_C) # 200
print(indice_minino_C) # 0
print(indice_minino_C_mes) # Enero
print(minino_C_C) # 200
print(maximo_C) # 420
print(indice_maximo_C) # 11
print(indice_maximo_C_mes) # Diciembre
print(picos_C) # 220
print(suma_C) # 3720
print(promedio_C) # 310.0
print(promedio_p_C) # 323.84
print(mediana_C) # 310.0
print(cuantil_C) # 310.0
print(percentil_C) # 398.0
print(varianza_p_C) # 4766.66
print(varianza_m_C) # 5200.0
print(desviacion_estandar_C) # 69.04
print(unicos_C) # [200 220 240 260 280 300 320 340 360 380 400 420]
#print(enteros_bin_C) # []
print(conteo_enteros_positivos_C) # 12
print(conteo_ceros_C) # 12
# Calcula la media y la suma de ventas para los productos A, B y C usando las funciones de NumPy.
# Imprime estos valores en el formato siguiente:
# Media de ventas Producto A: <valor>
print(f'Media de ventas Producto A: {promedio_A}') # Media de ventas Producto A: 229.16
print(f'Media de ventas Producto B: {promedio_B}') # Media de ventas Producto B: 257.5
print(f'Media de ventas Producto C: {promedio_C}') # Media de ventas Producto C: 310.0
# Suma de ventas Producto A: <valor>
print(f"Suma de ventas Producto A: {suma_A}") # Suma de ventas Producto A: 2750
print(f"Suma de ventas Producto B: {suma_B}") # uma de ventas Producto B: 3090
print(f"Suma de ventas Producto C: {suma_C}") # Suma de ventas Producto C: 3720
# Repite para los productos B y C.
# Paso 3: Manipulación y Análisis de Datos. Total de ventas por mes: Suma las ventas de los tres productos para cada mes.
total_ventas_mes = ventas_A + ventas_B + ventas_C
print("Total de ventas por mes:", total_ventas_mes)
# Total de ventas por mes: [ 530 630 720 810 770 770 740 780 860 910 990 1050]
# Promedio de ventas por producto: Calcula el promedio de ventas por producto.
# Forma 1 corta y creadon un array nuevo:
promedio_ventas_producto = np.array([promedio_A, promedio_B, promedio_C])
print("Promedio de ventas por producto:", promedio_ventas_producto)
# Promedio de ventas por producto: [229.16666667 257.5 310. ]
# Forma 2 larga, sin crear array nuevo
promedio_ventas_producto_A = np.mean(ventas_A)
promedio_ventas_producto_B = np.mean(ventas_B)
promedio_ventas_producto_C = np.mean(ventas_C)
print("Promedio de ventas producto A: ", promedio_A) # Promedio de ventas producto A: 229.16666666666666
print("Promedio de ventas producto B: ", promedio_B) # Promedio de ventas producto B: 257.5
print("Promedio de ventas producto C: ", promedio_C) # Promedio de ventas producto C: 310.0
# Identificar el mes con mayor y menor ventas
# Identifica qué mes tuvo el total de ventas más alto y cuál el más bajo usando las funciones np.argmax y np.argmin (Indices).
mes_mayor_ventas = meses[np.argmax(total_ventas_mes)]
mes_menor_ventas = meses[np.argmin(total_ventas_mes)]
print("Mes con mayor ventas:", mes_mayor_ventas) # Mes con mayor ventas: Diciembre
print(f"Mes con mayor ventas: {mes_mayor_ventas}") # Mes con mayor ventas: Diciembre
print(f"Mes con mayor ventas: (mes_mayor_ventas)") # "INCORRECTO" Mes con mayor ventas: (mes_mayor_ventas)
print(f"Mes con mayor ventas: [mes_mayor_ventas]") # "INCORRECTO" Mes con mayor ventas: [mes_mayor_ventas]
print("Mes con menor ventas:", mes_menor_ventas) # Mes con menor ventas: Enero
# Paso 4: Operaciones Avanzadas con NumPy. Reshape y Transposición:
# Crea una matriz 2D con las ventas de los tres productos
ventas_matriz = np.array([ventas_A, ventas_B, ventas_C])
print("Matriz ventas 2D: A,B,C:\n",ventas_matriz)
# transforma su forma (reshape) a un array tridimensional con dimensiones (3, 4, 3).
ventas_matriz_m = ventas_matriz.reshape(3,4,3) # 3 Dimensión, 4 Filas, 3 Columnas
print("Matriz Ventas Modificada 3D:\n", ventas_matriz_m)
# Transpone la matriz de ventas para que las filas se conviertan en columnas.
ventras_matriz_t = ventas_matriz.T
print("Matriz Ventas Transpuesta:\n", ventras_matriz_t)
# Invertir arrays: Invierte las ventas de cada producto en orden de meses.
ventas_matriz_i = ventas_matriz[:, ::-1]
print("Matriz Ventas Inversa:\n",ventas_matriz_i)
# Aplanar la matriz: Convierte la matriz de ventas a un array unidimensional.
ventas_matriz_p = ventas_matriz.flatten()
print("Matriz Ventas Plana 1D:\n", ventas_matriz_p) # [150 200 250 300 220 210 180 190 230 240 280 300 180 210 230 250 270 260 240 250 270 290 310 330 200 220 240 260 280 300 320 340 360 380 400 420]
# Paso 5: Análisis de Elementos Únicos
# Utiliza np.unique para encontrar los elementos únicos en los datos de ventas y cuenta cuántas veces aparece cada uno.
# Opción 1: 1 Array
ventas_matriz_u = np.unique(ventas_matriz, return_counts=True)
print("Matriz Ventas Datos Unicos:\n", ventas_matriz_u) # Matriz Ventas Datos Unicos: (array([150, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300, 310, 320, 330, 340, 360, 380, 400, 420]), array([1, 2, 1, 2, 2, 2, 2, 3, 3, 2, 2, 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 1]))
# Opción 2: 2 Arrays independientes
ventas_matriz_u, conteo_unicos =np.unique(ventas_matriz, return_counts=True)
print("Matriz Ventas Datos Unicos:\n", ventas_matriz_u) # Matriz Ventas Datos Unicos: [150 180 190 200 210 220 230 240 250 260 270 280 290 300 310 320 330 340 360 380 400 420]
print("Conteo datos unicos:\n", conteo_unicos) # Conteo datos unicos: [1 2 1 2 2 2 2 3 3 2 2 2 1 3 1 1 1 1 1 1 1 1]
# Paso 6: Indexación y Slicing
# Ventas del primer trimestre: Extrae las ventas de los tres primeros meses del año.
ventas_1T = ventas_matriz[:, :3] # Selecciono toda la matriz (:) y despues selecciona el rango requerido (:3)
print("Ventas 1er Trimestre\n", ventas_1T) #
# Indexación booleana: Selecciona los meses donde el total de ventas de los tres productos supere los 800.
meses_ventas_s = meses[total_ventas_mes>800]
print("Meses Ventas Superiores:\n", meses_ventas_s) # Meses Ventas Superiores: ['Abril' 'Septiembre' 'Octubre' 'Noviembre' 'Diciembre']
# Selección avanzada: Usa una lista de índices para seleccionar las ventas de los meses pares (o selecciona los meses a tu elección) y muestra esas ventas en una nueva matriz.
meses_seleccion = [0, 2, 4, 6, 8, 10]
ventas_meses_pares = ventas_matriz[:, meses_seleccion]
print("Ventas Meses Seleccionados\n", ventas_meses_pares)