该数据集反映了各种火灾事件中建筑物所遭受的损坏情况,按损坏百分比分类——从轻微损坏(1-10%)到完全损坏(50-100%),由评估受野火影响的建筑物的现场检查员收集。
该数据集由加州林业和消防局 (CAL FIRE) 与国家跨部门消防中心 (NIFC) 和火灾综合实时情报系统 (FIRIS) 合作提供。
该数据集对于防火、应急响应和灾害管理工作非常有价值。
OBJECTID:数据集中每个记录的唯一标识符。
Damage:表明火灾对建筑物的损坏程度(例如“无损坏”、“受影响(1-9%)”)。
STREETNUMBER:受影响建筑物的街道号码。
STREETNAME:受影响建筑物所在街道的名称。
STREETTYPE:街道类型(例如“道路”、“车道”)。
CITY:受影响建筑所在的城市。
STATE:州缩写(例如,“CA”代表加利福尼亚州)。
ZIPCODE:受影响建筑物的邮政编码。
CALFIREUNIT:负责该地区的 CAL FIRE 单位。
COUNTY:受影响建筑物所在的县。
Community:该建筑所在的社区或邻里。
INCIDENTNAME:影响建筑物的火灾事故的名称。
APN:该财产的评估员包裹编号 (APN)。
ASSESSEDIMPROVEDVALUE:改良财产(例如建筑物,而不仅仅是土地)的评估价值。
YEARBUILT:该建筑的建造年份。
SITEADDRESS:房产的完整地址,包括城市、州和邮政编码。
GLOBALID:每个记录的全局唯一标识符。
Latitude:结构位置的纬度坐标。
Longitude:结构位置的经度坐标。
UTILITYMISCSTRUCTUREDISTANCE:主要结构与任何公用设施或杂项结构(如果记录)之间的距离。
FIRENAME:火灾事件的替代名称或次要名称。
geometry:以点格式表示位置的地理空间(例如,“POINT(-13585927.697 4646740.750)”)。
import numpy as np
from sklearn.preprocessing import LabelEncoder
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
import warnings
warnings.simplefilter(action='ignore', category=FutureWarning)
df = pd.read_csv("California Wildfire Damage.csv")
df.head()
| Incident_ID | Date | Location | Area_Burned (Acres) | Homes_Destroyed | Businesses_Destroyed | Vehicles_Damaged | Injuries | Fatalities | Estimated_Financial_Loss (Million $) | Cause | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | INC1000 | 2020-11-22 | Sonoma County | 14048 | 763 | 474 | 235 | 70 | 19 | 2270.57 | Lightning |
| 1 | INC1001 | 2021-09-23 | Sonoma County | 33667 | 1633 | 4 | 263 | 100 | 2 | 1381.14 | Lightning |
| 2 | INC1002 | 2022-02-10 | Shasta County | 26394 | 915 | 291 | 31 | 50 | 6 | 2421.96 | Human Activity |
| 3 | INC1003 | 2021-05-17 | Sonoma County | 20004 | 1220 | 128 | 34 | 28 | 0 | 3964.16 | Unknown |
| 4 | INC1004 | 2021-09-22 | Sonoma County | 40320 | 794 | 469 | 147 | 0 | 15 | 1800.09 | Unknown |
# 创建 LabelEncoder 对象
label_encoder = LabelEncoder()
# 编码 'Incident_ID' 列
df['Incident_ID_Encoded'] = label_encoder.fit_transform(df['Incident_ID'])
# 编码 'Location' 列
df['Location_Encoded'] = label_encoder.fit_transform(df['Location'])
# 编码 'Cause' 列
df['Cause_Encoded'] = label_encoder.fit_transform(df['Cause'])
# 打印编码的详细信息
encoded_info = {
'Incident_ID': dict(zip(label_encoder.classes_, range(len(label_encoder.classes_)))),
'Location': dict(zip(label_encoder.classes_, range(len(label_encoder.classes_)))),
'Cause': dict(zip(label_encoder.classes_, range(len(label_encoder.classes_))))
}
print("Encoded Values for 'Incident_ID':", encoded_info['Incident_ID'])
print("Encoded Values for 'Location':", encoded_info['Location'])
print("Encoded Values for 'Cause':", encoded_info['Cause'])
# 打印编码后的数据
print(df[['Incident_ID', 'Incident_ID_Encoded', 'Location', 'Location_Encoded', 'Cause', 'Cause_Encoded']].head())
Encoded Values for 'Incident_ID': {'Human Activity': 0, 'Lightning': 1, 'Unknown': 2}
Encoded Values for 'Location': {'Human Activity': 0, 'Lightning': 1, 'Unknown': 2}
Encoded Values for 'Cause': {'Human Activity': 0, 'Lightning': 1, 'Unknown': 2}
Incident_ID Incident_ID_Encoded Location Location_Encoded \
0 INC1000 0 Sonoma County 9
1 INC1001 1 Sonoma County 9
2 INC1002 2 Shasta County 8
3 INC1003 3 Sonoma County 9
4 INC1004 4 Sonoma County 9
Cause Cause_Encoded
0 Lightning 1
1 Lightning 1
2 Human Activity 0
3 Unknown 2
4 Unknown 2
df.shape
(100, 14)
df.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 100 entries, 0 to 99 Data columns (total 14 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Incident_ID 100 non-null object 1 Date 100 non-null object 2 Location 100 non-null object 3 Area_Burned (Acres) 100 non-null int64 4 Homes_Destroyed 100 non-null int64 5 Businesses_Destroyed 100 non-null int64 6 Vehicles_Damaged 100 non-null int64 7 Injuries 100 non-null int64 8 Fatalities 100 non-null int64 9 Estimated_Financial_Loss (Million $) 100 non-null float64 10 Cause 100 non-null object 11 Incident_ID_Encoded 100 non-null int32 12 Location_Encoded 100 non-null int32 13 Cause_Encoded 100 non-null int32 dtypes: float64(1), int32(3), int64(6), object(4) memory usage: 9.9+ KB
df.describe().T
| count | mean | std | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|
| Area_Burned (Acres) | 100.0 | 26531.4600 | 14282.123824 | 357.00 | 15916.250 | 25618.00 | 39775.00 | 49653.00 |
| Homes_Destroyed | 100.0 | 941.8900 | 543.019967 | 18.00 | 501.000 | 908.50 | 1401.75 | 1968.00 |
| Businesses_Destroyed | 100.0 | 251.5700 | 138.317761 | 4.00 | 134.750 | 256.50 | 371.00 | 493.00 |
| Vehicles_Damaged | 100.0 | 150.3300 | 88.471197 | 5.00 | 70.750 | 150.50 | 229.75 | 300.00 |
| Injuries | 100.0 | 42.0400 | 29.201467 | 0.00 | 16.000 | 37.00 | 60.00 | 100.00 |
| Fatalities | 100.0 | 9.9300 | 5.682251 | 0.00 | 5.000 | 10.00 | 14.25 | 20.00 |
| Estimated_Financial_Loss (Million $) | 100.0 | 2396.0993 | 1430.439422 | 52.59 | 1175.195 | 2408.53 | 3662.11 | 4866.99 |
| Incident_ID_Encoded | 100.0 | 49.5000 | 29.011492 | 0.00 | 24.750 | 49.50 | 74.25 | 99.00 |
| Location_Encoded | 100.0 | 4.6900 | 2.980390 | 0.00 | 2.000 | 5.00 | 8.00 | 9.00 |
| Cause_Encoded | 100.0 | 0.9300 | 0.831878 | 0.00 | 0.000 | 1.00 | 2.00 | 2.00 |
df.isnull().sum()
Incident_ID 0 Date 0 Location 0 Area_Burned (Acres) 0 Homes_Destroyed 0 Businesses_Destroyed 0 Vehicles_Damaged 0 Injuries 0 Fatalities 0 Estimated_Financial_Loss (Million $) 0 Cause 0 Incident_ID_Encoded 0 Location_Encoded 0 Cause_Encoded 0 dtype: int64
df.duplicated().sum()
0
关于这些数据,有几个问题:
数值之间的相关性是怎样的?
不同的因素如何影响房产的价值?不同城市的损害有何不同?
采取防御行动所造成的伤害有何不同?
损失的地理分布是怎样的?
numeric_df = df.select_dtypes(include=[np.number])
# 计算相关性矩阵
correlation_matrix = numeric_df.corr()
# 设置绘图大小
plt.figure(figsize=(12, 8))
# 绘制热力图
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f", cbar=True)
# 显示热力图
plt.title("Correlation Heatmap of Original and Encoded Features")
plt.show()
column_correlations = corr_matrix['Homes_Destroyed'].sort_values(ascending=False)
plt.figure(figsize=(12, 6))
sns.barplot(x=column_correlations.index, y=column_correlations.values)
plt.title(f'Correlation with House Value')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
plt.figure(figsize=(12, 6))
column_correlations = column_correlations.abs().sort_values(ascending=False)
sns.barplot(x=column_correlations.index, y=column_correlations.values)
plt.title(f'Absolute Value of Correlation with House Value')
plt.xticks(rotation=45, ha='right')
plt.tight_layout()
采取防御行动所造成的伤害有何不同?
sns.countplot(data = df, x = 'Injuries')
plt.xticks(rotation = 90)
plt.show()