import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
import plotly.express as px
from scipy import stats

Análisis exploratorio de datos¶

# importar los archivos

df_company = pd.read_csv('project_sql_result_01.csv')
df_trips = pd.read_csv('project_sql_result_04.csv')
df_hipotesis = pd.read_csv("project_sql_result_07.csv")
# estudiar los datos que contienen

print(df_company.head())
print(df_trips.head())
                      company_name  trips_amount
0                        Flash Cab         19558
1        Taxi Affiliation Services         11422
2                 Medallion Leasin         10367
3                       Yellow Cab          9888
4  Taxi Affiliation Service Yellow          9299
  dropoff_location_name  average_trips
0                  Loop   10727.466667
1           River North    9523.666667
2         Streeterville    6664.666667
3             West Loop    5163.666667
4                O'Hare    2546.900000
print(df_company.info())
print(df_trips.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 64 entries, 0 to 63
Data columns (total 2 columns):
 #   Column        Non-Null Count  Dtype 
---  ------        --------------  ----- 
 0   company_name  64 non-null     object
 1   trips_amount  64 non-null     int64 
dtypes: int64(1), object(1)
memory usage: 1.1+ KB
None
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 94 entries, 0 to 93
Data columns (total 2 columns):
 #   Column                 Non-Null Count  Dtype  
---  ------                 --------------  -----  
 0   dropoff_location_name  94 non-null     object 
 1   average_trips          94 non-null     float64
dtypes: float64(1), object(1)
memory usage: 1.6+ KB
None
print(df_company.isna().sum())
print(df_trips.isna().sum())
company_name    0
trips_amount    0
dtype: int64
dropoff_location_name    0
average_trips            0
dtype: int64
print(df_company.duplicated().sum())
print(df_trips.duplicated().sum())
0
0
# asegurarte de que los tipos de datos sean correctos

print(df_company.dtypes)
print(df_trips.dtypes)
company_name    object
trips_amount     int64
dtype: object
dropoff_location_name     object
average_trips            float64
dtype: object
# identificar los 10 principales barrios en términos de finalización del recorrido

top_10_destinos = df_trips.sort_values(by="average_trips", ascending=False).head(10)
top_10_destinos
dropoff_location_name average_trips
0 Loop 10727.466667
1 River North 9523.666667
2 Streeterville 6664.666667
3 West Loop 5163.666667
4 O'Hare 2546.900000
5 Lake View 2420.966667
6 Grant Park 2068.533333
7 Museum Campus 1510.000000
8 Gold Coast 1364.233333
9 Sheffield & DePaul 1259.766667
# gráfico empresas de taxis y número de viajes

plt.figure(figsize=(12,6))
plt.bar(df_company["company_name"], df_company["trips_amount"])

plt.xticks(rotation=75, ha='right')
plt.xlabel("Compañía")
plt.ylabel("Numero de viajes")
plt.title("Viajes por Compañía")

plt.show()
No description has been provided for this image

Conclusiones:

  • La compañía Flash Cab realiza casi 20,000 viajes, muy por encima del resto. Es claramente la compañía lider del mercado. posiblemente gracias a una mayor flotilla, mejor cobertura, acuerdos comerciales, antigüedad en el mercado.

  • Las siguientes 5–7 compañías (desde Taxi Affiliation Services hasta más o menos Sun Taxi) están en el rango de 7,000–12,000 viajes. Compiten en un nivel similar entre ellas.

  • La gráfica muestra una curva típica de distribución de Pareto (80/20): Unas pocas empresas concentran la mayoría de los viajes. La mayoría aporta muy poco.

# grafico 10 barrios principales por número de finalizaciones

plt.figure(figsize=(12,6))
plt.bar(top_10_destinos["dropoff_location_name"], top_10_destinos["average_trips"])

plt.xticks(rotation=75, ha='right')
plt.xlabel("Destinos")
plt.ylabel("Promedio de viajes")
plt.title("Top 10 destinos mas populares")

plt.show()
No description has been provided for this image

Conclusiones:

  • Loop es el destino más popular (casi 11,000 viajes).

  • Hay una gran diferencia entre los primeros 4 destinos y el resto.

  • Los destinos del centro de Chicago dominan la lista.

Prueba de hipótesis (Python)¶

Prueba la hipótesis: "La duración promedio de los viajes desde el Loop hasta el Aeropuerto Internacional O'Hare cambia los sábados lluviosos".

Decide por tu cuenta dónde establecer el nivel de significación (alfa).

# Convertir start_ts a tipo datetime
df_hipotesis["start_ts"] = pd.to_datetime(df_hipotesis["start_ts"])

# Crear columna con día de la semana (lunes=0, ..., sábado=5, domingo=6)
df_hipotesis["dow"] = df_hipotesis["start_ts"].dt.dayofweek

# Filtrar solo los sábados
df_sat = df_hipotesis[df_hipotesis["dow"] == 5]

# Separar duración de viajes por condición climática
rain = df_sat[df_sat["weather_conditions"] == "Bad"]["duration_seconds"]
good = df_sat[df_sat["weather_conditions"] == "Good"]["duration_seconds"]

print("Tamaño muestra sábados lluviosos  :", len(rain))
print("Tamaño muestra sábados buen clima:", len(good))

# Calcular estadísticas descriptivas
print("\nMedia duración (lluvia)    :", rain.mean())
print("Media duración (buen clima):", good.mean())

# Prueba t de Student para muestras independientes (Welch)
t_stat, p_val = stats.ttest_ind(
    rain,
    good,
    equal_var=False,       
    nan_policy="omit"      
)

print("\nEstadístico t:", t_stat)
print("p-valor      :", p_val)

# Decisión con alfa = 0.05
alpha = 0.05
if p_val < alpha:
    print(f"\nComo p ({p_val:.3e}) < alfa ({alpha}), RECHAZAMOS H0:")
    print("La duración promedio de los viajes los sábados SÍ cambia cuando llueve.")
else:
    print(f"\nComo p ({p_val:.3e}) ≥ alfa ({alpha}), NO rechazamos H0:")
    print("No hay evidencia suficiente de que cambie la duración promedio cuando llueve.")
Tamaño muestra sábados lluviosos  : 180
Tamaño muestra sábados buen clima: 888

Media duración (lluvia)    : 2427.2055555555557
Media duración (buen clima): 1999.6756756756756

Estadístico t: 7.186034288068629
p-valor      : 6.738994326108734e-12

Como p (6.739e-12) < alfa (0.05), RECHAZAMOS H0:
La duración promedio de los viajes los sábados SÍ cambia cuando llueve.

Explica:

  • ¿cómo planteaste las hipótesis nula y alternativa?

    Hipotesis nula H₀ = La duración promedio de los viajes los sábados no cambia cuando llueve.

    Hipotesis alternativa H₁ = La duración promedio de los viajes los sábados sí cambia cuando llueve.

  • ¿qué criterio usaste para probar las hipótesis y por qué?

    t de Student para muestras independientes (Welch’s t-test) debido a que los datos

    son numéricos y continuos, se comparan dos grupos independientes, tenemos

    tamaños de muestra distintos y asumimos varianzas diferentes.