1. 数据加载与初步检查
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
# 加载数据
boston_df = pd.read_csv("boston_housing_data.csv")
# 查看前5行
display(boston_df.head())
# 检查数据基本信息(列名、数据类型、非空值数量)
print(boston_df.info())
# 统计描述(均值、标准差、最小值、最大值等)
display(boston_df.describe())
关键点:
是否有缺失值(
boston_df.isnull().sum()
)?目标变量通常是
MEDV
(房屋中位数价格)。特征包括
CRIM
(犯罪率)、RM
(房间数)、LSTAT
(低收入人口比例)等。
2. 数据可视化
(1) 目标变量分布(MEDV)
plt.figure(figsize=(8, 4))
sns.histplot(boston_df['MEDV'], kde=True)
plt.title("Distribution of Median Home Prices (MEDV)")
plt.show()
检查是否正态分布或存在偏态。
(2) 特征与目标变量的关系
# 选择关键特征与 MEDV 的关系
sns.pairplot(boston_df[['RM', 'LSTAT', 'PIRATIO', 'MEDV']])
plt.show()
RM
(房间数)与MEDV
通常呈正相关。LSTAT
(低收入人口比例)与MEDV
通常呈负相关。
(3) 相关性热力图
plt.figure(figsize=(10, 6))
sns.heatmap(boston_df.corr(), annot=True, cmap='coolwarm', fmt=".2f")
plt.title("Correlation Matrix")
plt.show()
高相关性特征(如
RM
和MEDV
)可能对预测重要。多重共线性检查(如
TAX
和RAD
)。
3. 异常值检测
# 箱线图检查异常值
plt.figure(figsize=(12, 6))
sns.boxplot(data=boston_df)
plt.xticks(rotation=45)
plt.show()
重点关注
CRIM
(犯罪率)、ZN
(住宅用地比例)等是否有极端值。
4. 简单回归建模(示例)
(1) 线性回归(预测 MEDV)
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# 选择特征和目标变量
X = boston_df[['RM', 'LSTAT', 'PIRATIO']]
y = boston_df['MEDV']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 训练模型
model = LinearRegression()
model.fit(X_train, y_train)
# 预测并评估
y_pred = model.predict(X_test)
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse:.2f}")
可尝试其他模型(如随机森林、梯度提升)。
(2) 特征重要性
# 如果是随机森林
from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor()
rf.fit(X_train, y_train)
# 特征重要性
pd.DataFrame({
'Feature': X.columns,
'Importance': rf.feature_importances_
}).sort_values('Importance', ascending=False)
5. 结论与建议
关键影响因素:
RM
(房间数)、LSTAT
(低收入人口比例)对房价影响最大。异常值处理:某些特征(如
CRIM
)可能需要对数变换或截断。模型优化:可尝试更多特征工程(如交互项、多项式特征)或高级模型。