Hanns Maza
Brayan Raul Kari
Muchas gracias!!
Ejercicio: Análisis de Ventas Mensuales con NumPy
El objetivo de este ejercicio es trabajar con arrays de NumPy para analizar y manipular datos de ventas de tres productos a lo largo de un año. A través de diversas operaciones, explorarás cómo usar NumPy para obtener estadísticas, realizar manipulaciones avanzadas y aplicar técnicas de indexación para extraer información clave.
Instrucciones:
Paso 1: Crear Arrays con Datos de Ventas
Paso 2: Estadísticas Básicas
Paso 3: Manipulación y Análisis de Datos
Paso 4: Operaciones Avanzadas con NumPy
Reshape y Transposición:
Paso 5: Análisis de Elementos Únicos
Paso 6: Indexación y Slicing
Hanns Maza
Brayan Raul Kari
Muchas gracias!!
Oscar Puentes
rodrigo nicolas merlo
el tema era hacerlo con numpy no era necesario hacer una app pero esta bueno
Cristian Miguel Gómez Salazar
Aquí comparto mi solución al reto:
Marina Barraza
Caso Práctico de Análisis de Datos
El objetivo es realizar un análisis de datos de ventas mensuales para 3 productos en una tienda, durante 1 año. Donde realizaras transformaciones básicas para obtener insights valiosos sobre e rendimiento de cada una de estas ventas.
Encontraras toda la información del ejercicio en los recursos de esta clase.
Jhon Freddy Tavera Blandon
FABIAN PEREZ
me tomó como 1 hora y media resolver todo el el ejercicio
Dayana Castillo
Jhon Alexander Mosquera Vanegas
El ejercicio de ventas mensuales de tres productos durante un año deja ver algo que a veces se pasa por alto: los mismos datos admiten tres lecturas distintas según lo que se sume. El total por producto indica cuál pesa más, el total por mes muestra cómo se mueve la venta a lo largo del año y el total anual resume el cierre. Es decir, el cálculo es sencillo, pero la pregunta de negocio decide qué suma hacer. Por eso conviene escribir primero la pregunta que se quiere responder y solo después elegir cómo agrupar los datos.
José Arturo Melgar Martínez
Daniel stevens Celorio sanabria
benjamín Tamayo
como se calcula la media
Calcular la media en NumPy es tan directo como sumar todos los valores y dividirlos entre el total, pero la gracia aquí es hacerlo con una sola función optimizada.
¿Recuerdas cuál es el nombre de esa función que reduce las dimensiones de tu matriz para darte el promedio por mes o por producto?
Steven Rengifo
Jhonatan Smith Perez Guerrero
Leidy Katherin
Humberto Cruz
🖖🏽Hola, les comparto el archivo de Google Colab donde hice el ejercicio: Mi solución en Colab 😬
Edwin Javier Rodriguez Gonzalez
Jhan Daniel Parra Hernández
Cristian Alexander Vallejos De la rosa
Saul Antonio Cerén Gálvez
copia y resuelve xd
months = np.array([ 'Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre' ]) product_A = np.array([150, 200, 250, 300, 220, 210, 180, 190, 230, 240, 280, 300]) product_B = np.array([180, 210, 230, 250, 270, 260, 240, 250, 270, 290, 310, 330]) product_C = np.array([200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420])
Realice el Ejercicio 1 con un poco más de complejidad :
import numpy as np # Función para ingresar los datos de los estudiantes y sus calificaciones def ingresar_datos(): num_estudiantes = int(input("¿Cuántos estudiantes desea ingresar? ")) estudiantes = [] for _ in range(num_estudiantes): nombre = input("Nombre del estudiante: ") calificaciones = [] for i in range(4): calificacion = float(input(f"Ingresa la calificación del examen {i + 1}: ")) calificaciones.append(calificacion) estudiantes.append([nombre] + calificaciones) return np.array(estudiantes) #FUNCION PARA ENCONTRAR EL PROMEDIO POR ESTUDIANTE def promedio_por_estudiante(estudiantes): calificaciones = estudiantes[:, 1:].astype(float) promedios = np.mean(calificaciones, axis=0) for i, estudiante in enumerate(estudiantes[:, 0 ]): print(f"estudiante: {estudiante} Promedio: {promedios[i]}") return promedios #FUNCION PARA ENCONTRAR EL PROMEDIO DE CADA EXAMEN def promedio_examen(estudiantes): calificaciones = estudiantes[: , 1:].astype(float) promedio_examenes = np.mean(calificaciones, axis=0) for i, promedio in enumerate(promedio_examenes): print(f"Promedio examen {i + 1}: {promedio}") #FUNCION PARA ENCONTRAR EL ESTUDIANTE CON MEJOR PUNTAJE EN EL TERCER EXAMEN def mayor_promedio_tercer_examen(estudiantes): calificaciones_tercer_examen = estudiantes[:, 3].astype(float) mejor_promedio_tercer_examen = np.argmax(calificaciones_tercer_examen) print(f"El Estudiante con mayor promedio en el examen 3 es : {estudiantes[mejor_promedio_tercer_examen, 0]} con una calificacion de {calificaciones_tercer_examen[mejor_promedio_tercer_examen]}") #FUNCION PARA ENCONTRAR EL ESTUDIANTE CON MENOR PROMEDIO def promedio_menor_estudiante(estudiantes, promedios): indice_bajo = np.argmin(promedios) print(f"El estudiante con menor promedio es : {estudiantes[indice_bajo]} , con una calificacion de {promedios[indice_bajo]}") #PROGRAMA PRINCIPAL def main(): estudiantes = ingresar_datos() print("\n EL PROMEDIO DE CALIFICACIONES POR ESTUDIANTES: ") promedios = promedio_por_estudiante(estudiantes) print(promedios) print("\n EL PROMEDIO DE CADA DE EXAMEN: ") promedio_por_examen = promedio_examen(estudiantes) print(promedio_por_examen) print("\n EL ESTUDIANTE CON MEJOR PROMEDIO EN EL TERCER EXAMEN ES : ") indice_alto_tercer_examen = mayor_promedio_tercer_examen(estudiantes) print(indice_alto_tercer_examen) print("\n El ESTUDIANTE CON MENOR PROMEDIO ES: ") indice_bajo = promedio_menor_estudiante(estudiantes, promedios) print(indice_bajo) if __name__ == "__main__": main() ```Cualquier consejo, los estaré leyendo gracias!!!
import numpy as np # Paso 1: Crear Arrays con Datos de Ventas print("--- Paso 1: Crear Arrays con Datos de Ventas ---") 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]) print(f"Array Meses: {meses}") print(f"Ventas Producto A: {ventas_A}") print(f"Ventas Producto B: {ventas_B}") print(f"Ventas Producto C: {ventas_C}\n") # Paso 2: Estadísticas Básicas print("--- Paso 2: Estadísticas Básicas ---") media_A, suma_A = np.mean(ventas_A), np.sum(ventas_A) media_B, suma_B = np.mean(ventas_B), np.sum(ventas_B) media_C, suma_C = np.mean(ventas_C), np.sum(ventas_C) print(f"Media de ventas Producto A: {media_A}") print(f"Suma de ventas Producto A: {suma_A}") print(f"Media de ventas Producto B: {media_B}") print(f"Suma de ventas Producto B: {suma_B}") print(f"Media de ventas Producto C: {media_C}") print(f"Suma de ventas Producto C: {suma_C}\n") # Paso 3: Manipulación y Análisis de Datos print("--- Paso 3: Manipulación y Análisis de Datos ---") total_ventas_mes = ventas_A + ventas_B + ventas_C promedio_A = np.mean(ventas_A) promedio_B = np.mean(ventas_B) promedio_C = np.mean(ventas_C) mes_mayor = meses[np.argmax(total_ventas_mes)] mes_menor = meses[np.argmin(total_ventas_mes)] print(f"Total de ventas por mes: {total_ventas_mes}") print(f"Promedio ventas por producto: A={promedio_A:.2f}, B={promedio_B:.2f}, C={promedio_C:.2f}") print(f"Mes con mayor ventas: {mes_mayor} (Ventas: {np.max(total_ventas_mes)})") print(f"Mes con menor ventas: {mes_menor} (Ventas: {np.min(total_ventas_mes)})\n") # Paso 4: Operaciones Avanzadas con NumPy print("--- Paso 4: Operaciones Avanzadas ---") # Matriz 2D con ventas de los tres productos (forma 3, 12) matriz_ventas = np.array([ventas_A, ventas_B, ventas_C]) # Reshape a (3, 4, 3) matriz_3d = matriz_ventas.reshape(3, 4, 3) print("Matriz 3D (3, 4, 3):\n", matriz_3d) # Transponer la matriz para que filas se conviertan en columnas matriz_transpuesta = matriz_ventas.T print("\nMatriz Transpuesta (Meses x Productos):\n", matriz_transpuesta) # Invertir las ventas de cada producto en orden de meses ventas_A_invertida = ventas_A[::-1] ventas_B_invertida = ventas_B[::-1] ventas_C_invertida = ventas_C[::-1] print(f"\nVentas Producto A invertidas: {ventas_A_invertida}") # Aplanar la matriz matriz_aplanada = matriz_ventas.flatten() print(f"Matriz de ventas aplanada: {matriz_aplanada}\n") # Paso 5: Análisis de Elementos Únicos print("--- Paso 5: Análisis de Elementos Únicos ---") valores_unicos, conteos = np.unique(matriz_ventas, return_counts=True) print("Valores únicos:", valores_unicos) print("Frecuencias:", conteos, "\n") # Paso 6: Indexación y Slicing print("--- Paso 6: Indexación y Slicing ---") # Ventas del primer trimestre primer_trimestre = matriz_ventas[:, :3] print("Ventas del primer trimestre (marzo incluido):\n", primer_trimestre) # Indexación booleana: meses donde el total de ventas supere 800 meses_superan_800 = meses[total_ventas_mes > 800] print(f"Meses que superan 800 en ventas: {meses_superan_800}") # Selección avanzada: ventas de los meses pares (índices 1, 3, 5, 7, 9, 11) indices_pares = [1, 3, 5, 7, 9, 11] ventas_meses_pares = matriz_ventas[:, indices_pares] print("Nueva matriz con ventas de meses seleccionados (pares):\n", ventas_meses_pares)
import numpy as np meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio','Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']) productoA = np.array([150, 200, 250, 300, 220, 210, 180, 190, 230, 240, 280, 300]) productoB = np.array([180, 210, 230, 250, 270, 260, 240, 250, 270, 290, 310, 330]) productoC = np.array([200, 220, 240, 260, 280, 300, 320, 340, 360, 380, 400, 420]) # Vamos a imprimir la media y la suma de cada uno de los productos # Media y suma del producto A mediaProductoA = np.mean(productoA) sumaProductoA = np.sum(productoA) # Media y suma del producto B mediaProductoB = np.mean(productoB) sumaProductoB = np.sum(productoB) # Media y suma del producto C mediaProductoC = np.mean(productoC) sumaProductoC = np.sum(productoC) print('La media del producto A es:\n', mediaProductoA) print('La suma del producto A es:\n', sumaProductoA) print('La media del producto B es:\n', mediaProductoB) print('La suma del producto B es:\n', sumaProductoB) print('La media del producto C es:\n', mediaProductoC) print('La suma del producto C es:\n', sumaProductoC) # Total de ventas por mes: sumar las ventas de los 3 productos por mes TotalDeVentasPorMes = productoA + productoB + productoC tiposDatos = [('Mes','U10'),('sumaTotal','i4')] reporte = np.array(list(zip(meses,TotalDeVentasPorMes)),dtype=tiposDatos) print('Reporte de ventas mes a mes:\n',reporte) # Promedio de ventas por producto: Calcula el promedio de ventas por producto promedioProductoA = np.mean(productoA) promedioProductoB = np.mean(productoB) promedioProductoC = np.mean(productoC) print('Promedio producto A:\n',promedioProductoA) print('Promedio producto B:\n',promedioProductoB) print('Promedio producto C:\n',promedioProductoC) # 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 mesMayorVentas = np.argmax(TotalDeVentasPorMes) mesMenorVentas = np.argmin(TotalDeVentasPorMes) print(f'El mes de mayor ventas fue {meses[mesMayorVentas]} con un total de {TotalDeVentasPorMes[mesMayorVentas]}') print(f'El mes de menor ventas fue {meses[mesMenorVentas]} con un total de {TotalDeVentasPorMes[mesMenorVentas]}') # Crea una matriz 2D con las ventas de los tres productos y transforma su forma (reshape) a un array tridimensional con dimensiones (3, 4, 3) matrizProductos = np.array([productoA,productoB,productoC]) print('Matriz 2D de los productos\n',matrizProductos) print('Reshape\n',matrizProductos.reshape(3,4,3)) # Transpone la matriz de ventas para que las filas se conviertan en columnas. print('Transponer\n',matrizProductos.T) # Invertir arrays: Invierte las ventas de cada producto en orden de meses. print('Reves del producto A\n',productoA[::-1]) print('Reves del producto B\n',productoB[::-1]) print('Reves del producto C\n',productoC[::-1]) # Aplanar la matriz: Convierte la matriz de ventas a un array unidimensional. flatteningMatriz = matrizProductos.flatten() print('Conversión de matriz a unidimensional\n',flatteningMatriz) # Utiliza np.unique para encontrar los elementos únicos en los datos de ventas y cuenta cuántas veces aparece cada uno elementosUnicosVentas, conteoCadaElemento = np.unique(flatteningMatriz, return_counts=True) print(f'Los elementos unicos de ventas son\n {elementosUnicosVentas} y las veces que aparece cada uno\n {conteoCadaElemento}') # Ventas del primer trimestre: Extrae las ventas de los tres primeros meses del año ventasPrimerTrimestre = TotalDeVentasPorMes[0:3] print('Las ventas del primer trimestre son\n', ventasPrimerTrimestre) # Indexación booleana: Selecciona los meses donde el total de ventas de los tres productos supere los 800. ventasMayor800 = TotalDeVentasPorMes > 800 mesesMayor800 = meses[ventasMayor800] valor = TotalDeVentasPorMes[ventasMayor800] reporteVentasMayor800 = np.array(list(zip(mesesMayor800,valor)),dtype=tiposDatos) print('Meses con ventas mayores a 800\n',reporteVentasMayor800) # 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. listaIndices = [0,2,4,6,8,10] ventasMesesPares = TotalDeVentasPorMes[listaIndices] mesesPares = meses[listaIndices] matrizNueva = np.array(list(zip(mesesPares,ventasMesesPares)),dtype=tiposDatos) print('Meses pares\n',matrizNueva)
Este codigo lo genere como practica , aplicando conceptos aprendidos.
import numpy as np mes = np.array(["Enero", "Febrero","Marzo", "Abril", "Mayo", "Junio", "Julio", "Agosto", "Septiembre", "Octubre", "Noviembre", "Diciembre"]) ventas_A = np.random.randint(100,500,12) ventas_B = np.random.randint(65,780,12) ventas_C = np.random.randint(76,940,12) print(ventas_A) print(ventas_B) print(ventas_C) print(f"suma total de las ventas A = {ventas_A.sum()} y media = {np.round(ventas_A.mean(),2)}") print(f"suma total de las ventas A = {ventas_B.sum()} y media = {np.round(ventas_B.mean(),2)}") print(f"suma total de las ventas A = {ventas_C.sum()} y media = {np.round(ventas_C.mean(),2)}") vmax_A = (ventas_A.max()) vmax_B = (ventas_B.max()) vmax_C = (ventas_C.max()) vmin_A = (ventas_A.min()) vmin_B = (ventas_B.min()) vmin_C = (ventas_C.min()) pmax_A = ventas_A.argmax() pmax_B = ventas_B.argmax() pmax_C = ventas_C.argmax() pmin_A = ventas_A.argmin() pmin_B = ventas_B.argmin() pmin_C = ventas_C.argmin() print(f"La mayor venta de A es = {vmax_A} y corresponde al mes {mes[pmax_A]} y la venta minima es {vmin_A} y corresponde al mes {mes[pmin_A]}") print(f"La mayor venta de B es = {vmax_B} y corresponde al mes {mes[pmax_B]} y la venta minima es {vmin_B} y corresponde al mes {mes[pmin_B]}") print(f"La mayor venta de C es = {vmax_C} y corresponde al mes {mes[pmax_C]} y la venta minima es {vmin_C} y corresponde al mes {mes[pmin_C]}") A = sum(ventas_A) B = sum(ventas_B) C = sum(ventas_C) suma_total = A+B+C print(f"Suma Total = {suma_total}") suma_array = ventas_A + ventas_B + ventas_C print(suma_array) print(mes) mxa = suma_array.argmax() mna = suma_array.argmin() print(mxa) print(mna) print(f"el mes con mayor venta fue: {mes[mxa]}") print(f"el mes con menor venta fue: {mes[mna]}") matriz_u = np.array([ventas_A, ventas_B, ventas_C]) print(matriz_u) print(matriz_u.T) print(matriz_u.reshape(3,4,3)) print(matriz_u.flatten()) inv_mat_u = matriz_u[:,::-1] print(inv_mat_u) # invierte el orden de los meses print(np.unique(matriz_u)) print(np.unique (matriz_u, return_counts=True)) print(f"ventas primer trimestre de A {ventas_A[:3]}, se vendio una media de {np.round(ventas_A[:3].mean(),2)} USD") print(f"ventas primer trimestre de B {ventas_B[:3]}, se vendio una media de {np.round(ventas_B[:3].mean(),2)} USD") print(f"ventas primer trimestre de C {ventas_C[:3]}, se vendio una media de {np.round(ventas_C[:3].mean(),2)} USD") print(mes[suma_array>800]) Ac = sum(ventas_A[:3]) Bc = sum(ventas_B[:3]) Cc = sum(ventas_C[:3]) Total_trimestres = Ac + Bc + Cc print(f"Venta totales del trimestre fue de {Total_trimestres} USD") print(f"Solo meses de las ventas A que vendieron mas de 270 {mes[ventas_A>270]}, respetivamente {ventas_A[ventas_A>270]} USD") print(f"Solo meses de las ventas B que vendieron mas de 220 {mes[ventas_B>220]}, respetivamente {ventas_B[ventas_B>220]} USD") print(f"Solo meses de las ventas C que vendieron mas de 250 {mes[ventas_C>250]}, respetivamente {ventas_C[ventas_C>250]} USD") print(mes[[1,3,5,7,9,11]])
Hola amigos, quise probar aplicar unos for en algunas partes para identificar bien a que mes pertenece ese valor o cuantas veces se repetian los valores unicos y ponerlos al frente.
Comparto mi codigo:
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 print('PASO 2: ESTADISTICA BASICA***') #Producto A suma_A = np.sum(ventas_A) mean_A= np.mean(ventas_A) print('Media de ventas Producto A: ' , mean_A) print('Suma de ventas Producto A: ' , suma_A) #Producto B suma_B = np.sum(ventas_B) mean_B= np.mean(ventas_B) print('Media de ventas Producto B: ' , mean_B) print('Suma de ventas Producto B: ' , suma_B) #Producto C suma_C = np.sum(ventas_C) mean_C= np.mean(ventas_C) print('Media de ventas Producto C: ' , mean_C) print('Suma de ventas Producto C: ' , suma_C) #PASO 3 print('\nPASO 3: MANIPULACION Y ANALISIS DE DATOS***') print('Suma total por meses: ') suma_total = ventas_A + ventas_B + ventas_C for i,y in zip(suma_total,meses): print(y, ':' , i) promedio_producto = np.array([mean_A,mean_B,mean_C]) print('\nMedia producto A: ', promedio_producto[0], 'Media producto B: ', promedio_producto[1], 'Media producto C: ', promedio_producto[2]) #Mes con mayor y menos ventas print('El mes con mayor ventas es: ', meses[np.argmax(suma_total)]) print('El mes con menor ventas es:', meses[np.argmin(suma_total)]) print('PASO 4: OPERACIONES AVANZADAS CON NUMPY***') matrix_2D = np.array([ventas_A, ventas_B, ventas_C]) #Pasamos a 2D print('Array 2D\n', matrix_2D) reshaped_array = matrix_2D.reshape(3,4,3) #Pasamos a 3D print('\nMatrizreshaped_array\n') print(reshaped_array) traspose_matrix = matrix_2D.T print('Matriz traspuesta\n', traspose_matrix) #Transponemos reversed_ventas = matrix_2D[:,::-1] print('\nVentas invertidas\n', reversed_ventas) flatten = matrix_2D.flatten() print('\nVentas flatten\n', flatten) print('\nPASO 5: ANALISIS DE ELEMENTOS UNICOS***') elementos_unicos, count = np.unique(matrix_2D, return_counts=True) for i,y in zip(elementos_unicos,count): print(i, 'Se repite: ' , y , 'veces') print(np.sum(count)) print('\nPASO 6: INDEXACION Y SLICING***') trimestre_ventas = np.array([matrix_2D[:,0:3]]) print(trimestre_ventas) boolean = suma_total > 800 print(suma_total) print(boolean) print([meses[boolean]]) #boolean = meses([suma_total > 800]) #print('\n' , boolean)
import numpy as np meses = np.array (["ENERO", "FEBRERO", "MARZO", "ABRIL", "MAYO", "JUNIO", "JULIO", "AGOSTO", "SEPTIEMBRE", "OCTUBRE", "NOVIEMBRE", "DICIEMBRE"]) productoA = np.array([150,200,250,300,220,210,180,190,230,240,280,300]) productoB = np.array([180,210,230,250,270,260,240,250,270,290,310,330]) productoC = np.array([200,220,240,260,280,300,320,340,360,380,400,420]) print("Total ventas a", productoA.sum()) print("Total ventas b", productoB.sum()) print("Total ventas c", productoC.sum()) print("Total media a", productoA.mean()) print("Total media b", productoB.mean()) print("Total media c", productoC.mean()) ventas_totales = productoA + productoB + productoC print("VENTAS TOTALES POR MES:") print(ventas_totales) for i in range(len(meses)): print(f"{meses[i]}: {ventas_totales[i]} unidades") mesMayor = np.argmax(ventas_totales) mesMenor = np.argmin(ventas_totales) print(f"El mes con mayor ventas fue {meses[mesMayor]} con {ventas_totales[mesMayor]} unidades.") print(f"El mes con menor ventas fue {meses[mesMenor]} con {ventas_totales[mesMenor]} unidades.") matrizVentas = np.array([productoA, productoB, productoC]) matrizReshape = matrizVentas.reshape(3,4,3) print(f"Matriz Tridimensional{matrizReshape}") matrizTranspuesta = np.transpose(matrizVentas) print(matrizTranspuesta) print(productoA[::-1]) print(productoB[::-1]) print(productoC[::-1]) print(matrizReshape.flatten()) valoresUnicos, conteo = np.unique(ventas_totales, return_counts=True) print("Valores Unicos", valoresUnicos) print("Cuantas veces aparece cada uno:", conteo) mesesPrimerTrimestre = meses[0:3] ventasPrimerTrimestre = ventas_totales[0:3] print(f"Meses{mesesPrimerTrimestre}") print(f"Ventas{ventasPrimerTrimestre}") indexacionBooleana = ventas_totales > 800 mesesMayores = meses[indexacionBooleana] ventasMayores = ventas_totales[indexacionBooleana] for i in range(len(mesesMayores)): print(f"{mesesMayores[i]}: {ventasMayores[i]} unidades") indicePar = [1,3,5,7,9,11] mesPar = meses[indicePar] ventasPar = ventas_totales[indicePar] matrizPar = np.array ([mesPar, ventasPar]) print(matrizPar)
Fue muy complaciente poder intentarlo, fallar y lograrlo.
# EJERCICIO 1 Crear datos de ventas de 3 productos en 12 meses meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']) ventas_a = np.array ([50000,60000,30000,45000,70000,40000,38000,80000,90000,35000,44000,90000]) ventas_b = np.array ([6000,7000,4000,4000,7000,4000,3800,8000,9000,3500,4400,9000]) ventas_c = np.array ([150000,160000,130000,145000,170000,140000,108000,180000,90000,135000,144000,90000]) print("\n") # SUMA DE VENTAS POR PRODUCTO total_ventas_a = ventas_a.sum() total_ventas_b = ventas_b.sum() total_ventas_c = ventas_c.sum() print("Total ventas producto a :\n", total_ventas_a) print("Total ventas producto b :\n", total_ventas_b) print("Total ventas producto c :\n", total_ventas_c) # PROMEDIO MENSUAL POR PRODUCTO promedio_a = ventas_a.mean() promedio_b = ventas_b.mean() promedio_c = ventas_c.mean() print("Promedio producto a :\n", promedio_a) print("Promedio producto b :\n",promedio_b) print("Promedio producto c :\n",promedio_c) print("\n") # Manipulación Análisis de datos #Total ventas por mes total_ventas_mes = ventas_a + ventas_b + ventas_c print("Total ventas por mes :\n", total_ventas_mes) #Promedio por producto promedio_producto = np.array([promedio_a, promedio_b, promedio_c]) print("Venta promedio por producto :\n", promedio_producto) #VENTA MÁXIMA venta_max = total_ventas_mes.max() mes_max = meses[np.argmax(total_ventas_mes)] print("Venta máxima:\n", mes_max, venta_max) #VENTA MINIMA venta_min = total_ventas_mes.min() mes_min = meses[np.argmin(total_ventas_mes)] print("Venta mínima:\n", mes_min, venta_min) print("\n") #OPERACIONES AVANZADAS ventas = np.vstack ((ventas_a, ventas_b, ventas_c)) print("Matriz 2d:\n",ventas) reshaped_ventas = ventas.reshape(3, 4, 3) print("Reshaped:\n", reshaped_ventas) print("\n") #Trasponer trasposed_matriz = ventas.T print("Trasponer:\n", trasposed_matriz) print("\n") #Invertir reversed_ventas = ventas[::-1] print("Invertir:\n", reversed_ventas) #Unidimensional flattened_ventas = ventas.flatten() print("Unidimensional :\n", flattened_ventas) print("\n") #CONTEO UNICO elementos_unicos_ventas, counts = np.unique(ventas, return_counts=True) print(elementos_unicos_ventas) print(counts) print("\n") #INDEXAR Y SLICING #VENTAS 1ER TRIMESTRE num_mes = np.arange(1,13) print(num_mes) print(meses[num_mes<4]) print(total_ventas_mes[num_mes <4]) # Booleano ventas mayor a $200.000 mes_venta_mayor_dos = meses [total_ventas_mes>=200000] venta_mayor_dos = total_ventas_mes[total_ventas_mes>=200000] print("Mes con ventas superiores a $200.000 :\n", mes_venta_mayor_dos) print("Total ventas mes :\n",venta_mayor_dos) # Ventas pares meses_pares = [1, 3, 5, 7, 9, 11] ventas_mes_par = ventas [:, meses_pares] print("ventas mes par:\n", ventas_mes_par)
# EJERCICIO 1 Crear datos de ventas de 3 productos en 12 meses
meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'])
ventas_a = np.array ([50000,60000,30000,45000,70000,40000,38000,80000,90000,35000,44000,90000])
ventas_b = np.array ([6000,7000,4000,4000,7000,4000,3800,8000,9000,3500,4400,9000])
ventas_c = np.array ([150000,160000,130000,145000,170000,140000,108000,180000,90000,135000,144000,90000])
import numpy as np # Meses del año meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio', 'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre']) # Ventas de cada sucursal ventas_norte = np.array([120, 140, 160, 180, 200, 220, 210, 230, 250, 270, 290, 310]) ventas_sur = np.array([100, 130, 150, 170, 190, 210, 200, 220, 240, 260, 280, 300]) ventas_centro = np.array([90, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290, 320]) #Estadisticas Basicas # Suma total de ventas por sucursal total_norte = np.sum(ventas_norte) total_sur = np.sum(ventas_sur) total_centro = np.sum(ventas_centro) print(f"Total de ventas en la sucursal Norte: {total_norte}") print(f"Total de ventas en la sucursal Sur: {total_sur}") print(f"Total de ventas en la sucursal Centro: {total_centro}") # Promedio de ventas por sucursal promedio_norte = np.mean(ventas_norte) promedio_sur = np.mean(ventas_sur) promedio_centro = np.mean(ventas_centro) print(f"Promedio de ventas en la sucursal Norte: {promedio_norte:.2f}") print(f"Promedio de ventas en la sucursal Sur: {promedio_sur:.2f}") print(f"Promedio de ventas en la sucursal Centro: {promedio_centro:.2f}") # total de ventas por mes total_ventas_mes = ventas_norte + ventas_sur + ventas_centro print("Total de ventas por mes:") for mes, total in zip(meses, total_ventas_mes): print(f"{mes}: {total}") # promedio de ventas por producto promedio_ventas_producto = total_ventas_mes / 3 print("Promedio de ventas por producto:") for mes, promedio in zip(meses, promedio_ventas_producto): print(f"{mes}: {promedio:.2f}") # total mes con mayor y menor ventas mes_mayor_ventas = meses[np.argmax(total_ventas_mes)] mes_menor_ventas = meses[np.argmin(total_ventas_mes)] mes_mayor_menor_ventas_sucursal = np.argmax([total_norte, total_sur, total_centro]) print(f"Mes con mayor ventas: {mes_mayor_ventas} con {np.max(total_ventas_mes)} ventas") print(f"Mes con menor ventas: {mes_menor_ventas} con {np.min(total_ventas_mes)} ventas") print(f"Sucursal con mayor ventas: {['Norte', 'Sur', 'Centro'][mes_mayor_menor_ventas_sucursal]} con {max(total_norte, total_sur, total_centro)} ventas") # Mes con mayor venta en cada sucursal print("📊 Mes con mayor venta por sucursal:\n") sucursal_norte = np.argmax(ventas_norte) sucursal_sur = np.argmax(ventas_sur) sucursal_centro = np.argmax(ventas_centro) print("Norte:", meses[sucursal_norte], "-", ventas_norte[sucursal_norte]) print("Sur:", meses[sucursal_sur], "-", ventas_sur[sucursal_sur]) print("Centro:", meses[sucursal_centro], "-", ventas_centro[sucursal_centro]) #Diferencia de ve tas entre sucursales print("📊 Diferencia de ventas entre sucursales por mes:\n") for mes, n, s, c in zip(meses, ventas_norte, ventas_sur, ventas_centro): print(f"{mes}:") print(f" Norte - Sur: {n - s}") print(f" Norte - Centro: {n - c}") print(f" Sur - Centro: {s - c}") print() # Reshape y Transpose ventas_matrix= np.array([ventas_norte, ventas_sur, ventas_centro]) ventas_reshaped = ventas_matrix.reshape(3, 4, 3) # Reshape a una matriz de 3x4x3 ventas_transposed = ventas_matrix.T # Transpose de la matriz original print("ventas_matrix:\n", ventas_matrix) print("ventas_reshaped:\n", ventas_reshaped) print("ventas_transposed:\n", ventas_transposed) # Invertir arrays y aplanar matrices Ventas_inverted = ventas_matrix[:, ::-1] # Invertir el orden de las ventas por mes ventas_flattened = ventas_matrix.flatten() # Aplanar la matriz a un array print("Ventas invertidas:\n", Ventas_inverted) print("Ventas aplanadas:\n", ventas_flattened) # Paso 5: Análisis de elementos únicos y sus conteos elementos_unicos, conteos = np.unique(ventas_flattened, return_counts=True) print("Elementos únicos en las ventas aplanadas:\n", elementos_unicos) print("Conteos de cada elemento único:\n", conteos) # Seleccionar ventas del primer trimestre primer_trimestre = ventas_matrix[:, :3] print("Ventas del primer trimestre:\n", primer_trimestre) # Meses con ventas totales superiores a 800 meses_superiores_800 = meses[total_ventas_mes > 800] print("Meses con ventas totales superiores a 800:") for mes in meses_superiores_800: print(f" {mes}: {total_ventas_mes[meses == mes][0]}") # Selección avanzada indices = [0, 2, 4, 6, 8, 10] # Índices de los meses pares ventas_pares = ventas_matrix[:, indices] print("Ventas de los meses pares:\n", ventas_pares) #📉 Crecimiento mes a mes (tendencia) print("📈 CRECIMIENTO MENSUAL POR SUCURSAL\n") sucursales = { "Norte": ventas_norte, "Sur": ventas_sur, "Centro": ventas_centro } for nombre, ventas in sucursales.items(): print(f"--- {nombre} ---") crecimiento = np.diff(ventas) for i in range(len(crecimiento)): print(f"{meses[i+1]}: {crecimiento[i]}") print() # espacio entre sucursales #📊 Porcentaje de participación por sucursal total_general = total_norte + total_sur + total_centro print("📊 Participación de cada sucursal:") print(f"Norte: {(total_norte / total_general)*100:.2f}%") print(f"Sur: {(total_sur / total_general)*100:.2f}%") print(f"Centro: {(total_centro / total_general)*100:.2f}%") #🏆 Sucursal ganadora por mes print("🏆 Sucursal ganadora por mes:\n") nombres = np.array(["Norte", "Sur", "Centro"]) ventas_stack = np.vstack([ventas_norte, ventas_sur, ventas_centro]) ganador_indices = np.argmax(ventas_stack, axis=0) for i, mes in enumerate(meses): print(f"{mes}: {nombres[ganador_indices[i]]}")
import numpy as np
# Meses del año
meses = np.array(['Enero', 'Febrero', 'Marzo', 'Abril', 'Mayo', 'Junio',
'Julio', 'Agosto', 'Septiembre', 'Octubre', 'Noviembre', 'Diciembre'])
# Ventas de cada sucursal
ventas_norte = np.array([120, 140, 160, 180, 200, 220, 210, 230, 250, 270, 290, 310])
ventas_sur = np.array([100, 130, 150, 170, 190, 210, 200, 220, 240, 260, 280, 300])
ventas_centro = np.array([90, 110, 130, 150, 170, 190, 210, 230, 250, 270, 290, 320])
#Estadisticas Basicas
# Suma total de ventas por sucursal
total_norte = np.sum(ventas_norte)
total_sur = np.sum(ventas_sur)
total_centro = np.sum(ventas_centro)
print(f"Total de ventas en la sucursal Norte: {total_norte}")
print(f"Total de ventas en la sucursal Sur: {total_sur}")
print(f"Total de ventas en la sucursal Centro: {total_centro}")
# Promedio de ventas por sucursal
promedio_norte = np.mean(ventas_norte)
promedio_sur = np.mean(ventas_sur)
promedio_centro = np.mean(ventas_centro)
print(f"Promedio de ventas en la sucursal Norte: {promedio_norte:.2f}")
print(f"Promedio de ventas en la sucursal Sur: {promedio_sur:.2f}")
print(f"Promedio de ventas en la sucursal Centro: {promedio_centro:.2f}")
# total de ventas por mes
total_ventas_mes = ventas_norte + ventas_sur + ventas_centro
print("Total de ventas por mes:")
for mes, total in zip(meses, total_ventas_mes):
print(f"{mes}: {total}")
# promedio de ventas por producto
promedio_ventas_producto = total_ventas_mes / 3
print("Promedio de ventas por producto:")
for mes, promedio in zip(meses, promedio_ventas_producto):
print(f"{mes}: {promedio:.2f}")
# total mes con mayor y menor ventas
mes_mayor_ventas = meses[np.argmax(total_ventas_mes)]
mes_menor_ventas = meses[np.argmin(total_ventas_mes)]
mes_mayor_menor_ventas_sucursal = np.argmax([total_norte, total_sur, total_centro])
print(f"Mes con mayor ventas: {mes_mayor_ventas} con {np.max(total_ventas_mes)} ventas")
print(f"Mes con menor ventas: {mes_menor_ventas} con {np.min(total_ventas_mes)} ventas")
print(f"Sucursal con mayor ventas: {['Norte', 'Sur', 'Centro'][mes_mayor_menor_ventas_sucursal]} con {max(total_norte, total_sur, total_centro)} ventas")
# Mes con mayor venta en cada sucursal
print("📊 Mes con mayor venta por sucursal:\n")
sucursal_norte = np.argmax(ventas_norte)
sucursal_sur = np.argmax(ventas_sur)
sucursal_centro = np.argmax(ventas_centro)
print("Norte:", meses[sucursal_norte], "-", ventas_norte[sucursal_norte])
print("Sur:", meses[sucursal_sur], "-", ventas_sur[sucursal_sur])
print("Centro:", meses[sucursal_centro], "-", ventas_centro[sucursal_centro])
#Diferencia de ve tas entre sucursales
print("📊 Diferencia de ventas entre sucursales por mes:\n")
for mes, n, s, c in zip(meses, ventas_norte, ventas_sur, ventas_centro):
print(f"{mes}:")
print(f" Norte - Sur: {n - s}")
print(f" Norte - Centro: {n - c}")
print(f" Sur - Centro: {s - c}")
print()
# Reshape y Transpose
ventas_matrix= np.array([ventas_norte, ventas_sur, ventas_centro])
ventas_reshaped = ventas_matrix.reshape(3, 4, 3) # Reshape a una matriz de 3x4x3
ventas_transposed = ventas_matrix.T # Transpose de la matriz original
print("ventas_matrix:\n", ventas_matrix)
print("ventas_reshaped:\n", ventas_reshaped)
print("ventas_transposed:\n", ventas_transposed)
# Invertir arrays y aplanar matrices
Ventas_inverted = ventas_matrix[:, ::-1] # Invertir el orden de las ventas por mes
ventas_flattened = ventas_matrix.flatten() # Aplanar la matriz a un array
print("Ventas invertidas:\n", Ventas_inverted)
print("Ventas aplanadas:\n", ventas_flattened)
# Paso 5: Análisis de elementos únicos y sus conteos
elementos_unicos, conteos = np.unique(ventas_flattened, return_counts=True)
print("Elementos únicos en las ventas aplanadas:\n", elementos_unicos)
print("Conteos de cada elemento único:\n", conteos)
# Seleccionar ventas del primer trimestre
primer_trimestre = ventas_matrix[:, :3]
print("Ventas del primer trimestre:\n", primer_trimestre)
# Meses con ventas totales superiores a 800
meses_superiores_800 = meses[total_ventas_mes > 800]
print("Meses con ventas totales superiores a 800:")
for mes in meses_superiores_800:
print(f" {mes}: {total_ventas_mes[meses == mes][0]}")
# Selección avanzada
indices = [0, 2, 4, 6, 8, 10] # Índices de los meses pares
ventas_pares = ventas_matrix[:, indices]
print("Ventas de los meses pares:\n", ventas_pares)
#📉 Crecimiento mes a mes (tendencia)
print("📈 CRECIMIENTO MENSUAL POR SUCURSAL\n")
sucursales = {
"Norte": ventas_norte,
"Sur": ventas_sur,
"Centro": ventas_centro
}
for nombre, ventas in sucursales.items():
print(f"--- {nombre} ---")
crecimiento = np.diff(ventas)
for i in range(len(crecimiento)):
print(f"{meses[i+1]}: {crecimiento[i]}")
print() # espacio entre sucursales
#📊 Porcentaje de participación por sucursal
total_general = total_norte + total_sur + total_centro
print("📊 Participación de cada sucursal:")
print(f"Norte: {(total_norte / total_general)*100:.2f}%")
print(f"Sur: {(total_sur / total_general)*100:.2f}%")
print(f"Centro: {(total_centro / total_general)*100:.2f}%")
#🏆 Sucursal ganadora por mes
print("🏆 Sucursal ganadora por mes:\n")
nombres = np.array(["Norte", "Sur", "Centro"])
ventas_stack = np.vstack([ventas_norte, ventas_sur, ventas_centro])
ganador_indices = np.argmax(ventas_stack, axis=0)
for i, mes in enumerate(meses):
print(f"{mes}: {nombres[ganador_indices[i]]}")
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)
import numpy as np
# 1. Definir los meses del año
meses = np.array(['Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',
'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic'])
# 2. Crear los arrays de ventas (datos de ejemplo para cada producto)
impresoras = np.array([120, 150, 130, 170, 160, 180, 190, 200, 210, 230, 250, 300])
computadoras = np.array([80, 95, 110, 105, 120, 130, 140, 150, 160, 180, 220, 280])
tablets = np.array([200, 210, 190, 220, 230, 240, 250, 260, 270, 290, 350, 400])
# 3. Operaciones de Análisis con NumPy
# Total de ventas anuales por producto
total_imp = np.sum(impresoras)
total_comp = np.sum(computadoras)
total_tab = np.sum(tablets)
# Venta total mensual (suma de los 3 productos mes a mes)
total_mensual = impresoras + computadoras + tablets
# Encontrar el mes con la venta más alta de computadoras
mes_top_comp = meses[np.argmax(computadoras)]
# Mostrar resultados
print(f"--- Reporte de Ventas Anual ---")
print(f"Total Impresoras: {total_imp} unidades")
print(f"Total Computadoras: {total_comp} unidades")
print(f"Total Tablets: {total_tab} unidades")
print(f"-------------------------------")
print(f"Mes con mayor venta de Computadoras: {mes_top_comp}")
print(f"Promedio de ventas mensuales globales: {np.mean(total_mensual):.2f}")
--- Reporte de Ventas Anual ---
Total Impresoras: 2290 unidades
Total Computadoras: 1770 unidades
Total Tablets: 3110 unidades
-------------------------------
Mes con mayor venta de Computadoras: Dic
Promedio de ventas mensuales globales: 597.50
paso numero dos
# --- Cálculos para Impresoras ---
media_imp = np.mean(impresoras)
suma_imp = np.sum(impresoras)
# --- Cálculos para Computadoras ---
media_comp = np.mean(computadoras)
suma_comp = np.sum(computadoras)
# --- Cálculos para Tablets ---
media_tab = np.mean(tablets)
suma_tab = np.sum(tablets)
# --- Impresión de Resultados ---
print(f"La media de ventas de impresoras es: {media_imp:.2f} y la suma es: {suma_imp}")
print(f"La media de ventas de computadoras es: {media_comp:.2f} y la suma es: {suma_comp}")
print(f"La media de ventas de tablets es: {media_tab:.2f} y la suma es: {suma_tab}")
La media de ventas de impresoras es: 190.83 y la suma es: 2290
La media de ventas de computadoras es: 147.50 y la suma es: 1770
La media de ventas de tablets es: 259.17 y la suma es: 3110
paso tres
1. Calcular el total de ventas por mes (Suma de los 3 productos mes a mes)
ventas_totales_por_mes = impresoras + computadoras + tablets
# 2. Promedio de ventas anual de cada producto (ya los calculamos, pero los organizamos aquí)
promedio_imp = np.mean(impresoras)
promedio_comp = np.mean(computadoras)
promedio_tab = np.mean(tablets)
# 3. Obtener el mes con mayor y menor ventas globales
# Usamos argmax y argmin para encontrar el índice (posición 0 a 11)
indice_max = np.argmax(ventas_totales_por_mes)
indice_min = np.argmin(ventas_totales_por_mes)
# Usamos ese índice para buscar el nombre del mes en nuestro array de meses
mes_mayor_venta = meses[indice_max]
mes_menor_venta = meses[indice_min]
# --- IMPRESIÓN DE RESULTADOS ---
print("TOTAL DE VENTAS POR MES (Los 3 productos combinados):")
for i in range(len(meses)):
print(f"{meses[i]}: {ventas_totales_por_mes[i]} unidades")
print("\n--- PROMEDIOS POR PRODUCTO ---")
print(f"Promedio Impresoras: {promedio_imp:.2f}")
print(f"Promedio Computadoras: {promedio_comp:.2f}")
print(f"Promedio Tablets: {promedio_tab:.2f}")
print("\n--- RÉCORDS DEL AÑO ---")
print(f"El mes con MAYOR ventas totales fue {mes_mayor_venta} con {ventas_totales_por_mes[indice_max]} unidades.")
print(f"El mes con MENOR ventas totales fue {mes_menor_venta} con {ventas_totales_por_mes[indice_min]} unidades.")
TOTAL DE VENTAS POR MES (Los 3 productos combinados):
Ene: 400 unidades
Feb: 455 unidades
Mar: 430 unidades
Abr: 495 unidades
May: 510 unidades
Jun: 550 unidades
Jul: 580 unidades
Ago: 610 unidades
Sep: 640 unidades
Oct: 700 unidades
Nov: 820 unidades
Dic: 980 unidades
--- PROMEDIOS POR PRODUCTO ---
Promedio Impresoras: 190.83
Promedio Computadoras: 147.50
Promedio Tablets: 259.17
--- RÉCORDS DEL AÑO ---
El mes con MAYOR ventas totales fue Dic con 980 unidades.
El mes con MENOR ventas totales fue Ene con 400 unidades.
paso cuatro
import numpy as np
# 1. Crear la Matriz 2D (3 filas x 12 columnas)
# Cada fila representa un producto y cada columna un mes
matriz_ventas = np.array([impresoras, computadoras, tablets])
print("Dimensiones matriz original:", matriz_ventas.shape)
# 2. Transformar a un array Tridimensional (reshape)
# Esto agrupa los datos en 3 bloques, cada uno con 4 filas y 3 columnas
matriz_3d = matriz_ventas.reshape(3, 4, 3)
print("\nMatriz 3D (3, 4, 3):\n", matriz_3d)
# 3. Trasponer la matriz de ventas
# Ahora las filas (productos) serán columnas y viceversa
matriz_traspuesta = matriz_ventas.T
print("\nForma de la matriz traspuesta:", matriz_traspuesta.shape)
# 4. Invertir las ventas de cada producto (Orden de meses inverso)
# Usamos el slicing [:, ::-1] que significa: "todas las filas, meses en orden inverso"
ventas_invertidas = matriz_ventas[:, ::-1]
print("\nVentas de Enero a Diciembre invertidas (Diciembre a Enero):\n", ventas_invertidas)
# 5. Convertir la matriz de ventas a un array Unidimensional (Aplanado)
matriz_plana = matriz_ventas.flatten()
print("\nArray unidimensional (36 elementos):\n", matriz_plana)
Dimensiones matriz original: (3, 12)
Matriz 3D (3, 4, 3):
[[[120 150 130]
[170 160 180]
[190 200 210]
[230 250 300]]
[[ 80 95 110]
[105 120 130]
[140 150 160]
[180 220 280]]
[[200 210 190]
[220 230 240]
[250 260 270]
[290 350 400]]]
Forma de la matriz traspuesta: (12, 3)
Ventas de Enero a Diciembre invertidas (Diciembre a Enero):
[[300 250 230 210 200 190 180 160 170 130 150 120]
[280 220 180 160 150 140 130 120 105 110 95 80]
[400 350 290 270 260 250 240 230 220 190 210 200]]
Array unidimensional (36 elementos):
[120 150 130 170 160 180 190 200 210 230 250 300 80 95 110 105 120 130
140 150 160 180 220 280 200 210 190 220 230 240 250 260 270 290 350 400]
paso cinco
# 1. Obtenemos los valores únicos y sus frecuencias de toda la matriz
# Usamos return_counts=True para que NumPy nos diga cuántas veces aparece cada valor
valores_unicos, frecuencias = np.unique(matriz_ventas, return_counts=True)
print("--- ANÁLISIS DE VALORES ÚNICOS ---")
print(f"Se encontraron {len(valores_unicos)} valores de ventas diferentes.\n")
# 2. Imprimir los resultados de forma organizada
print("Valor de Venta | Frecuencia (Veces que aparece)")
print("----------------------------------------------")
for valor, frecuencia in zip(valores_unicos, frecuencias):
# Solo imprimimos si el valor se repite (frecuencia > 1) para que sea más útil,
# o puedes imprimirlos todos:
print(f"{valor:>14} | {frecuencia} vez/veces")
# 3. Ejemplo: ¿Cuál es el valor que más se repite?
indice_moda = np.argmax(frecuencias)
print(f"\nEl valor más común en las ventas fue: {valores_unicos[indice_moda]} (aparece {frecuencias[indice_moda]} veces)")
--- ANÁLISIS DE VALORES ÚNICOS ---
Se encontraron 25 valores de ventas diferentes.
Valor de Venta | Frecuencia (Veces que aparece)
----------------------------------------------
80 | 1 vez/veces
95 | 1 vez/veces
105 | 1 vez/veces
110 | 1 vez/veces
120 | 2 vez/veces
130 | 2 vez/veces
140 | 1 vez/veces
150 | 2 vez/veces
160 | 2 vez/veces
170 | 1 vez/veces
180 | 2 vez/veces
190 | 2 vez/veces
200 | 2 vez/veces
210 | 2 vez/veces
220 | 2 vez/veces
230 | 2 vez/veces
240 | 1 vez/veces
250 | 2 vez/veces
260 | 1 vez/veces
270 | 1 vez/veces
280 | 1 vez/veces
290 | 1 vez/veces
300 | 1 vez/veces
350 | 1 vez/veces
400 | 1 vez/veces
El valor más común en las ventas fue: 120 (aparece 2 veces)
paso seis
import numpy as np
# 1. Extraer ventas del primer trimestre (Meses 0, 1, 2 -> Ene, Feb, Mar)
# Usamos slicing [:, 0:3] que significa: todas las filas, columnas de la 0 a la 2
ventas_primer_trimestre = matriz_ventas[:, 0:3]
# 2. Seleccionar meses donde el total supera 800
# Usamos el array 'ventas_totales_por_mes' que creamos anteriormente
meses_superan_800 = meses[ventas_totales_por_mes > 800]
valores_superan_800 = ventas_totales_por_mes[ventas_totales_por_mes > 800]
# 3. Seleccionar las ventas de los meses pares (Febrero, Abril, Junio, etc.)
# En Python, los índices pares son 0, 2, 4... pero los meses pares (2, 4, 6)
# tienen índices impares (1, 3, 5...).
# Si te refieres a los meses con índice par (Ene, Mar, May...):
ventas_meses_indice_par = matriz_ventas[:, ::2]
# 4. Crear una nueva matriz con los meses de índice par
# Esta matriz tendrá 3 filas (productos) y 6 columnas (meses 0, 2, 4, 6, 8, 10)
nueva_matriz_pares = np.array(ventas_meses_indice_par)
# --- IMPRESIÓN DE RESULTADOS ---
print("--- VENTAS PRIMER TRIMESTRE ---")
print(ventas_primer_trimestre)
print("\n--- MESES CON VENTAS TOTALES > 800 ---")
for m, v in zip(meses_superan_800, valores_superan_800):
print(f"Mes: {m} | Total: {v}")
print("\n--- NUEVA MATRIZ (MESES ÍNDICE PAR) ---")
print(nueva_matriz_pares)
print(f"Forma de la nueva matriz: {nueva_matriz_pares.shape}")
--- VENTAS PRIMER TRIMESTRE ---
[[120 150 130]
[ 80 95 110]
[200 210 190]]
--- MESES CON VENTAS TOTALES > 800 ---
Mes: Nov | Total: 820
Mes: Dic | Total: 980
--- NUEVA MATRIZ (MESES ÍNDICE PAR) ---
[[120 130 160 190 210 250]
[ 80 110 120 140 160 220]
[200 190 230 250 270 350]]
Forma de la nueva matriz: (3, 6)
1. Extraer el último trimestre (Meses 9, 10, 11 -> Oct, Nov, Dic)
ventas_ultimo_trimestre = matriz_ventas[:, 9:12]
# 2. Calcular la suma total por producto para cada trimestre
suma_ini = np.sum(ventas_primer_trimestre, axis=1)
suma_fin = np.sum(ventas_ultimo_trimestre, axis=1)
# 3. Calcular el porcentaje de crecimiento
# NumPy lo hace de forma vectorizada para los 3 productos a la vez
crecimiento = ((suma_fin - suma_ini) / suma_ini) * 100
# --- RESULTADOS ---
productos = ['Impresoras', 'Computadoras', 'Tablets']
print("--- CRECIMIENTO DEL 1ER AL 4TO TRIMESTRE ---")
for i in range(len(productos)):
print(f"{productos[i]}: {crecimiento[i]:.2f}%")
--- CRECIMIENTO DEL 1ER AL 4TO TRIMESTRE ---
Impresoras: 95.00%
Computadoras: 138.60%
Tablets: 73.33%