数据挖掘与分析——数据预处理

  1. 数据探索

波士顿房价数据集:卡内基梅隆大学收集,StatLib库,1978年,涵盖了麻省波士顿的506个不同郊区的房屋数据。

一共含有506条数据。每条数据14个字段,包含13个属性,和一个房价的平均值。

数据读取方法:

import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn import datasets
names =['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PTRATIO','B','LSTAT','MEDV']
data=pd.read_csv('housing.csv', names=names, delim_whitespace=True)
data1=data.head(10)
  1. 请绘制散点图探索波士顿房价数据集中犯罪率(CRIM)和房价中位数(MEDV)之间的相关性。
# 创建散点图
sns.scatterplot(x=data1['CRIM'], y=data1['ZN'])
# 添加数据标签
for i in range(len(data1['CRIM'])):
    plt.text(data1['CRIM'][i], data1['ZN'][i], str(i), fontsize=8, color='black')
# 添加标题
plt.title('Correlation between CRIM and ZN')
# 显示图形
plt.show()

 

  1. 请使用波士顿房价数据集中房价中位数(MEDV)来绘制箱线图。
# 创建箱线图
sns.boxplot(data['CRIM'])
# 添加数据标签
# for i in range(len(data['CRIM'])):
#     plt.text(1, data['CRIM'][i], data['CRIM'][i], horizontalalignment='center', verticalalignment='bottom')
plt.title('Boxplot of CRIM')
plt.show()

 

  1. 请使用暗点图矩阵探索波士顿房价数据集。
sns.pairplot(data)
plt.show()

print(data['CRIM'].corr(data['MEDV'],method='pearson'))
print(data['CRIM'].corr(data['MEDV'],method='spearman'))
print(data['CRIM'].corr(data['MEDV'],method='kendall'))

 

  1. 请分别使用皮尔逊(pearson)、斯皮尔曼(spearman)、肯德尔(kendall)相关系数对犯罪率(CRIM)和房价中位数(MEDV)之间的相关性进行度量。
print(data['CRIM'].corr(data['MEDV'],method='pearson'))
print(data['CRIM'].corr(data['MEDV'],method='spearman'))
print(data['CRIM'].corr(data['MEDV'],method='kendall'))

 

相关系数计算方法:

  1. 请绘制波士顿房价数据集中各变量之间相关系数的热力图。

需提前安装seaborn库:pip install seaborn


plt.figure(figsize=(12, 10))
sns.heatmap(data.corr(),annot=True,cmap='Blues_r')
plt.show()

 

  1. 数据预处理
x1x2x3x4x5x6x7x8x9x10x11x12x13x14y
122.0811.462441.5850001210012130
022.6772840.1650000216010
029.581.751441.250001228010
021.671530111112011
120.178.172641.96111402601591
00.5852881120211
117.426.52340.12500002601010
058.674.4621183.0411602435611
127.8311283000021765380
055.757.082486.7511312100510
133.51.752148114122538581
141.425211851161247011
120.671.251881.375113121400
34.92521487.511612010011
12.712842.415001232010
148.086.0424400002026911
129.584.52947.51121233011
018.9292640.7511202885921
1201.251440.1250000214050
022.425.66521142.585170212932581
028.170.5852640.04000210050
019.170.5851640.5851001216010
141.171.3352240.1650000216810
141.581.752440.21100216010
19.52640.7900002803510
132.751.521385.511312011
122.50.1251440.12500002200710
133.173.041882.0411112180180281
030.6712284211102220201
123.082.52841.0851111126021851
1270.75288113123121511
020.4210.51148000012154330
152.331.3751889.4610122001010
123.0811.52982.1251111122902851
142.831.2527413.875011123521130
174.83191110.040120203520
125264310012011
139.5813.9152948.625116127011
047.7582847.87511612012611
047.423214413.8751121251917051
123.17021340.0851002011
122.581.51640.5400012120680
126.751.12521481.2510002052991
163.330.542840.5851131218010
123.750.4151840.040120212870
020.7521140.71112124911
024.51.751840.1650000213210
116.170.042840.0400002011
029.521108200002256180
052.83152845.5111402022011
132.333.52440.50001223210
121.084.1251380.0400021401010
128.170.1251440.0850000221621010
1191.751842.3350001211270
127.583.251185.0850121220
127.831.52942111112434361
16.52653.51110205011
037.332.52380.21000022600
142.54.9151943.16510125214431
156.7512.252741.251141220011
143.1752352.250001214110
023.750.712940.250111224050
118.522341.5112021203011
040.833.52350.500001116010
024.50.521181.5100022808251
  1. 读取“银行贷款审批数据.xlsx”表,自变量为x1-x14,决策变量为y(1-同意贷款,0-不同意贷款),自变量中有连续变量(x2,x3,x5,x6,x7,x10,x13,x14)和离散变量(x1,x4,x8,x9,x11,x12),请对连续变量中的缺失值用均值策略填充,对离散变量中的缺失值用最频繁值策略填充。
import pandas as pd

# 读取Excel文件
df = pd.read_excel("银行贷款审批数据.xlsx")

# 定义连续变量和离散变量列表
continuous_vars = ['x2', 'x3', 'x5', 'x6', 'x7', 'x10', 'x13', 'x14']
discrete_vars = ['x1', 'x4', 'x8', 'x9', 'x11', 'x12']

# 使用均值填充连续变量的缺失值
for var in continuous_vars:
    df[var].fillna(df[var].mean(), inplace=True)

# 使用最频繁值填充离散变量的缺失值
for var in discrete_vars:
    most_frequent_value = df[var].mode()[0]
    df[var].fillna(most_frequent_value, inplace=True)

# 检查是否还有缺失值
missing_values = df.isnull().sum().sum()
if missing_values == 0:
    print("所有缺失值已填充。")
else:
    print("仍有缺失值未填充。")

# 输出填充后的数据框的前几行
print(df.head())

# 保存填充后的数据框到Excel文件
df.to_excel("填充后的银行贷款审批数据.xlsx", index=False)

 

 

x1x2x3x4x5x6x7x8x9x10x11x12x13x14y
122.0811.462441.5850001210012130
022.6772840.1650000216010
029.581.751441.250001228010
021.674.7216372981530111112011
120.178.172641.96111402601591
031.594380530.5852882.22917525811202183.760997111
117.426.52340.12500002601010
058.674.4621183.0411602435611
127.8311283000021765380
055.757.082486.7511312100510
133.51.7521482.229175258114122538581
141.425211851161247011
120.671.251881.375113121401023.6530610
134.92521487.511612010011
131.594380532.712842.415002.4245973651232010
148.086.042442.22917525800002026911
129.584.52947.51121233011
018.9292640.7511202885921
1201.251440.1250000214050
022.425.66521142.5851070212932581
028.170.5852640.0410002183.760997110050
019.170.5851640.5851001216010
141.171.3352240.1650000216810
141.581.752440.21102.4245973650216010
119.54.7216372982640.7900002803510
132.751.521385.511312011
122.50.1251440.12500002200710
133.173.041882.0411112180180281
030.6712284211102220201
123.082.52841.0851111126021851
1270.752882.229175258113123121511
020.4210.51148000012154330
152.331.3751889.46102.424597365122001010
123.0811.52982.1251111122902851
142.831.2527413.875011123521130
174.83191110.040120203520
1254.7216372982643100122011
139.5813.9152948.625116127011
047.7582847.87511612012611
047.423214413.8751121251917051
123.17021340.085102.42459736502011
122.581.51640.5400012120680
126.751.12521481.2510002052991
163.330.542840.5851131218010
123.750.4151840.040120212870
  1. 请使用StandardScaler对波士顿房价数据集进行零-均值规范化。
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled)
print(X_scaled.shape)

  1. 在上一问规范化后的数据基础上使用PCA对数据进行降维处理(降维后的特征数量为2)。

 

pca = PCA(n_components=2)
X_pca = pca.fit_transform(X_scaled)
print(X_pca)
print(X_pca.shape)

 

  • 17
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张謹礧

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值