0% encontró este documento útil (0 votos)
5 vistas7 páginas

ProyectoPythonFinal PDF

El documento describe un análisis de datos de ventas utilizando Python y bibliotecas como pandas y matplotlib. Se exploran los datos, se realizan cálculos estadísticos, se categorizan productos, se calculan descuentos y se visualizan resultados mediante gráficos. Finalmente, se entrena un modelo de regresión lineal para predecir las unidades vendidas en función del precio base y el porcentaje de descuento.

Cargado por

Caroline Diaz
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
5 vistas7 páginas

ProyectoPythonFinal PDF

El documento describe un análisis de datos de ventas utilizando Python y bibliotecas como pandas y matplotlib. Se exploran los datos, se realizan cálculos estadísticos, se categorizan productos, se calculan descuentos y se visualizan resultados mediante gráficos. Finalmente, se entrena un modelo de regresión lineal para predecir las unidades vendidas en función del precio base y el porcentaje de descuento.

Cargado por

Caroline Diaz
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

#Importamos libreria pandas

import pandas as pd
import numpy as np
import [Link] as plt #Traemos la herramienta para hacer dibujos
(gráficos)

#Fase1 leer los datos


#Data frame
df = pd.read_csv("C:/ACADÈMICO/CURSOS Y GRABACIONES/CURSO
PYTHON/[Link]")
df #refleja datos

ID Store ID Total Price Base Price Units Sold


0 1 8091 99.0375 111.8625 20
1 2 8091 99.0375 99.0375 28
2 3 8091 133.9500 133.9500 19
3 4 8091 133.9500 133.9500 44
4 5 8091 141.0750 141.0750 52
... ... ... ... ... ...
150145 212638 9984 235.8375 235.8375 38
150146 212639 9984 235.8375 235.8375 30
150147 212642 9984 357.6750 483.7875 31
150148 212643 9984 141.7875 191.6625 12
150149 212644 9984 234.4125 234.4125 15

150150 rows × 5 columns

#Fase2 Exploración inicial


[Link]

(150150, 5)

# Fase 4
#Información general
[Link]()

<class '[Link]'>
RangeIndex: 150150 entries, 0 to 150149
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 ID 150150 non-null int64
1 Store ID 150150 non-null int64
2 Total Price 150149 non-null float64
3 Base Price 150150 non-null float64
4 Units Sold 150150 non-null int64
dtypes: float64(2), int64(3)
memory usage: 5.7 MB

# Fase 5.
#Se ha realizado un resumen estadistico
#Se detectó que el Precio de Venta Promedio (206.63) es un 6% menor que el
Precio Base Promedio (219.43).
#Esto evidencia que la operación no vende a precio de lista, sino que existe
una política activa de promociones o
#descuentos para asegurar el cierre de ventas.
[Link]()

ID Store ID Total Price Base Price Un


count 150150.000000 150150.000000 150149.000000 150150.000000 150150
mean 106271.555504 9199.422511 206.626751 219.425927 51.674
std 61386.037861 615.591445 103.308516 110.961712 60.207
min 1.000000 8023.000000 41.325000 61.275000 1.0000
25% 53111.250000 8562.000000 130.387500 133.237500 20.000
50% 106226.500000 9371.000000 198.075000 205.912500 35.000
75% 159452.750000 9731.000000 233.700000 234.412500 62.000
max 212644.000000 9984.000000 562.162500 562.162500 2876.0

#Fase 6.
# Identificar la fila con el valor nulo
df[df['Total Price'].isnull()]

ID Store ID Total Price Base Price Units Sold


136949 193915 9436 NaN 469.5375 1

#Como solo se vendió 1 unidad, el valor para reemplazar sería el mismo precio
base 469.5375
[Link](469.5375,inplace=True)

import [Link] as stats


import numpy as np
data = df ['Units Sold']
media = [Link](data)
error = [Link](data)
intervalo = [Link](0.95, len(data)-1, loc=media, scale=error)
print("Media:", media)
print("Intervalo de confianza:", intervalo)

Media: 51.6742057942058
Intervalo de confianza: (np.float64(51.36966713514244),
np.float64(51.97874445326915))
df_clean = [Link](subset=["Total Price", "Units Sold"])
from [Link] import pearsonr
corr, p_valor = pearsonr(df_clean["Total Price"], df_clean["Units Sold"])
print("Correlación:", corr)
print("p-valor:", p_valor)

Correlación: -0.23563405944709034
p-valor: 0.0

# PASO: CATEGORIZACIÓN DE PRODUCTOS (Comida para Mascotas)

# 1. Definimos la regla de negocio para los 4 animales


def asignar_animal(precio):
if precio > 400:
return 'Perro' # Los sacos más grandes y caros
elif precio > 250:
return 'Gato' # Sacos medianos de precio alto
elif precio > 130:
return 'Conejo' # Alimento balanceado de precio medio
else:
return 'Gallina' # Semillas y maíz (lo más económico)

# 2. Creamos la nueva columna 'Category' usando la función


df['Category'] = df['Total Price'].apply(asignar_animal)

# 3. Visualizamos el resultado (Primeros y últimos)


print("Tabla con las 4 categorías asignadas:")
display([Link]())
display([Link]())

Tabla con las 4 categorías asignadas:

ID Store ID Total Price Base Price Units Sold Category


0 1 8091 99.0375 111.8625 20 Gallina
1 2 8091 99.0375 99.0375 28 Gallina
2 3 8091 133.9500 133.9500 19 Conejo
3 4 8091 133.9500 133.9500 44 Conejo
4 5 8091 141.0750 141.0750 52 Conejo

ID Store ID Total Price Base Price Units Sold Category


150145 212638 9984 235.8375 235.8375 38 Conejo
150146 212639 9984 235.8375 235.8375 30 Conejo
150147 212642 9984 357.6750 483.7875 31 Gato
150148 212643 9984 141.7875 191.6625 12 Conejo
150149 212644 9984 234.4125 234.4125 15 Conejo
#PASO: CÁLCULO DE DESCUENTOS

# 1. Calculamos el "Monto del Descuento" (Dinero que se ahorró el cliente)


# Fórmula: Precio Original - Precio Pagado
df['Discount_Amount'] = df['Base Price'] - df['Total Price']

# 2. Calculamos el "Porcentaje del Descuento" (Qué tan grande fue la oferta)


# Fórmula: (Ahorro / Precio Original) * 100
df['Discount_Percentage'] = (df['Discount_Amount'] / df['Base Price']) * 100

# 3. Limpieza de seguridad: Si el descuento sale negativo, lo ponemos en 0


[Link][df['Discount_Amount'] < 0, 'Discount_Amount'] = 0
[Link][df['Discount_Percentage'] < 0, 'Discount_Percentage'] = 0

# 4. Redondeamos a 2 decimales para que se vea limpio


df = [Link](2)

# Mostramos los resultados


display([Link]())

Store Total Base Units


ID Category Discount_Amount Discoun
ID Price Price Sold
0 1 8091 99.04 111.86 20 Gallina 12.83 11.46
1 2 8091 99.04 99.04 28 Gallina 0.00 0.00
2 3 8091 133.95 133.95 19 Conejo 0.00 0.00
3 4 8091 133.95 133.95 44 Conejo 0.00 0.00
4 5 8091 141.07 141.07 52 Conejo 0.00 0.00

# GRÁFICO DE TORTA: PARTICIPACIÓN POR ANIMAL

# Preparamos los datos, Sumamos las unidades vendidas por cada categoría
ventas_por_animal = [Link]('Category')['Units Sold'].sum()

# Creamos el gráfico de torta


[Link](figsize=(8, 8))
ventas_por_animal.plot(kind='pie',
autopct='%1.1f%%', # porcentaje automáticamente
startangle=90, # Gira el gráfico para que se vea mejor
colors=['#ff9999','#66b3ff','#99ff99','#ffcc99'], # Colores pasteles
shadow=True)

# Etiquetas y título
[Link]('Distribución de Unidades Vendidas por Tipo de Mascota')
[Link]('') # Quitamos el nombre del eje para que se vea limpio
[Link]()
#GRÁFICO COMPARATIVO: VOLUMEN Vs. DINERO

# Calculamos los Ingresos Totales por venta


df['Revenue'] = df['Total Price'] * df['Units Sold']

# Agrupamos por animal y extraemos los totales


comparativo = [Link]('Category')[['Units Sold', 'Revenue']].sum()

# Normalizamos los datos para que se puedan ver en la misma escala (Opcional
pero recomendado)
# Como el dinero son miles y las unidades son cientos, los dividimos para
comparar "proporciones"
comparativo_norm = comparativo / [Link]()

# Creamos el gráfico de barras doble


comparativo_norm.plot(kind='bar', figsize=(12, 6), color=['#3498db',
'#e74c3c'])

[Link]('Comparación: Volumen de Ventas vs. Ingresos por Mascota')


[Link]('Tipo de Animal')
[Link]('Proporción (0 a 1)')
[Link](['Unidades Vendidas (Volumen)', 'Dinero Generado (Valor)'])
[Link](rotation=0)
[Link](axis='y', alpha=0.3)
[Link]()

#Preparas los datos con Seaborn y LabelEncoder, los divides con


train_test_split, entrenas la lógica con DecisionTreeClassifier
#y auditas su razonamiento con plot_tree.

import seaborn as sns # Seaborn es una librería de Matplotlib, para crear


gráficos estadísticos
from [Link] import LabelEncoder # convierte variables
categóricas de texto a números enteros (0, 1, 2..)
from sklearn.model_selection import train_test_split # entrenar al modelo,
evaluar datos que no ha visto
from [Link] import DecisionTreeClassifier, plot_tree

#Importamos la herramienta de Machine Learning


from sklearn.linear_model import LinearRegression

# Selección de Variables
# Definimos X (las pistas) y y (el objetivo a adivinar)
X = df[['Base Price', 'Discount_Percentage']] # Usamos Precio y Porcentaje
y = df['Units Sold'] # Queremos predecir Ventas

# Entrenamiento
# Creamos el "cerebro" del modelo y lo entrenamos con nuestros datos
modelo_pronostico = LinearRegression()
modelo_pronostico.fit(X, y)

print("¡Modelo entrenado con éxito!")

# Realizando una Predicción


# Probando: ¿Qué pasa si el precio es 350 y damos 15% de descuento?
# Usamos un DataFrame con nombres para evitar errores
datos_prueba = [Link]([[350,15]], columns=['Base Price',
'Discount_Percentage'])
prediccion = modelo_pronostico.predict(datos_prueba)

print(f"🚀 Pronóstico: Se venderían aproximadamente {prediccion[0].round(0)}


unidades.")

🚀
¡Modelo entrenado con éxito!
Pronóstico: Se venderían aproximadamente 61.0 unidades.

# EVALUACIÓN DE RESULTADOS
from [Link] import mean_absolute_error, r2_score, mean_squared_error
import numpy as np

# 1. Generar predicciones
predicciones_finales = modelo_pronostico.predict(X)

# 2. Calcular métricas
error_mae = mean_absolute_error(y, predicciones_finales)
punteria_r2 = r2_score(y, predicciones_finales)
rmse = [Link](mean_squared_error(y, predicciones_finales))

# 3. Impresiones con formato correcto (Evita el .round)


print(f"EVALUACIÓN FINAL DEL PROYECTO:")
print(f"- MAE: {error_mae:.2f} unidades")
print(f"- RMSE: {rmse:.2f}")
print(f"- R-Squared: {punteria_r2:.2f}")

EVALUACIÓN FINAL DEL PROYECTO:


- MAE: 31.67 unidades
- RMSE: 54.40
- R-Squared: 0.18

También podría gustarte