Hipótesis 3🚩 - David-informatica/Pruebas GitHub Wiki
Tarjeta GOLD📀
Para llevar a cabo el prepocesado de los datos se tienen en cuenta los aquellos que son necesarios para abordar la hipótesis. Estos datos se procesan utilizando los siguientes métodos:
Se extraen las diferentes partes de los datasets que nos seran utiles a la hora de tratar la hipótesis.
hipotesis3_dataset = pd.merge(collision_accidents, pollution_emissions, on=['year', 'Local Authority Code'], how='inner')
hipotesis3_dataset = hipotesis3_dataset.drop(["road_surface_conditions", "road_name"], axis=1)
hipotesis3_dataset["accident_count"] = hipotesis3_dataset.groupby(["Local Authority Code", "year"])["CO2 emissions"].transform("count")
Después se eliminan los posibles registros duplicados teniendo en cuenta las columnas de local authority, code y year. Despues se obtiene la tasa de accidentes por cada 100 habitantes teniendo en cuenta la población censada de la zona a tratar.
hipotesis3_dataset = hipotesis3_dataset.drop_duplicates(subset=["year", "Local Authority Code"])
hipotesis3_dataset["accident_rate_per_100k"] = round(hipotesis3_dataset["accident_count"] / hipotesis3_dataset["Population (thousands)"] * 100, 3)
hipotesis3_dataset["CO2 emissions"] = round(hipotesis3_dataset["CO2 emissions"], 3)
Por último se extrae toda la información y se prepara para evaluar dicha hipótesis.
hipotesis3_dataset = hipotesis3_dataset.drop(["accident_index"], axis=1)
final_hipotesis3_dataset = hipotesis3_dataset.pivot(
index="Local Authority",
columns="year",
values=["CO2 emissions", "accident_rate_per_100k"]
)
final_hipotesis3_dataset.rename(columns={
"CO2 emissions": "CO2_emissions"
}, inplace=True)
final_hipotesis3_dataset.columns = [
f"{metric}_{year}" for metric, year in final_hipotesis3_dataset.columns
]
final_hipotesis3_dataset.reset_index(inplace=True)
[!IMPORTANT] Para esta hipótesis, se verificará si los municipios cuyas emisiones de CO₂ en kilotoneladas son mayores tienen una mayor tasa de accidentes de tráfico por cada 100,000 habitantes.
En primer lugar, se investigará si existe una relación significativa entre estas variables mediante análisis exploratorio y estadístico. Posteriormente, se aplicará un modelo de clustering para identificar patrones relevantes, como la concentración de casos en los que estas características se combinan, contribuyendo a accidentes más graves.
Análisis exploratorio y visualización de datos
A continuación, se describe el análisis realizado para entender los datos y explorar su relación:
Análisis de correlacion de variables
Se analiza la correlación entre las emisiones de CO₂ y la tasa de accidentes. Los resultados indicaron que:
- Las emisiones de CO₂ no muestran variaciones significativas entre años.
- La correlación entre las emisiones de CO₂ y la tasa de accidentes es prácticamente nula.
corr_matrix = df.corr()
plt.figure(figsize=(8, 6))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm", fmt=".2f", linewidths=0.5)
plt.title("Correlación entre CO₂ y tasa de accidentes")
plt.show()
Análisis de Componentes Principales
Se realiza una reducción de dimensionalidad con PCA para priorizar características relevantes y representar los datos visualmente.
scaler = StandardScaler()
states_scaled = scaler.fit_transform(df)
pca = PCA(n_components=2)
X_pca = pca.fit_transform(states_scaled)
# Gráfico PCA
plt.scatter(X_pca[:, 0], X_pca[:, 1], s=50, alpha=0.7)
plt.xlabel("Componente Principal 1")
plt.ylabel("Componente Principal 2")
plt.title("Análisis de Componentes Principales")
plt.show()
[!NOTE] Municipios como Leeds, Birmingham y City of London destacan en emisiones o tasas de accidentes.
Clustering de datos
Se aplicaron varios métodos de clustering: jerárquico, K-Means y DBSCAN, utilizando métricas como el coeficiente de Silhouette para evaluar la calidad de los grupos.
Clustering jerárquico
# mejorando los parámetros
clusters = cluster.hierarchy.linkage(matriz_similitud_CO2, method="single")
labels = cluster.hierarchy.fcluster(clusters, 6, criterion="distance")
[!NOTE]
- Emisiones de CO₂: coeficiente de Silhouette = 0.847
- Tasa de accidentes: coeficiente de Silhouette = 0.951
K-Means
km = KMeans(n_clusters=2, init="k-means++", n_init=10, random_state=42)
y_km = km.fit_predict(pca_dataframe)
[!NOTE]
- Emisiones de CO₂: coeficiente de Silhouette = 0.731
- Tasa de accidentes: coeficiente de Silhouette = 0.953
DBSCAN
dbscan = DBSCAN(eps=0.4, min_samples=3)
y_dbscan = dbscan.fit_predict(datanormal_CO2)
[!NOTE]
- Emisiones de CO₂: coeficiente de Silhouette = 0.847
- Tasa de accidentes: coeficiente de Silhouette = 0.951
Conclusiones preliminares
Los resultados de los métodos jerárquico, K-Means y DBSCAN coinciden en identificar clústeres distintos para emisiones y tasas de accidentes, indicando que:
- Los distritos con mayores emisiones (como Birmingham) no coinciden con los de mayor tasa de accidentes (como City of London). Por lo tanto, la hipótesis se rechaza.
Hipótesis adicional con estadística inferencial
Se analiza si las tasas de accidentes de 2022 superaron las de 2020. La hipótesis nula establece que no hay diferencias significativas, mientras que la hipótesis alternativa sugiere que las tasas de 2022 son mayores.
Contraste
# Bootstrap para intervalos de confianza
intervalo_confianza_bootstrap(df, "accident_rate_per_100k_2020", "accident_rate_per_100k_2022")
# Intervalos de confianza y prueba t
intervalos_confianza_sin_bootstrap(df, "accident_rate_per_100k_2020", "accident_rate_per_100k_2022")
Resultados
Tasas promedio:
- 2020: 85.21
- 2022: 95.94
- p-valor: < 0.05
La hipótesis nula se rechaza, confirmando que las tasas de accidentes en 2022 son significativamente mayores a las de 2020. Esto se atribuye a la reducción del tráfico en 2020 debido a la pandemia de COVID-19.