首先是先导入一些必要的库,方便后续的建模操作
import numpy as np
import pandas as pd
import re
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
from sklearn.metrics import *
from sklearn.model_selection import train_test_split
import seaborn as sns
这是原文件的截图,可见原文件并没有每一列的元素名称,也没有分列,而是将每一行的元素全塞到一列的前头,这对后续的数据处理并不友好
因此我们要通过一系列的操作将原数据集正确导入dataframe中 ,并且因为该数据集数据多,则也要看是否有缺失值
#读取数据
data = pd.read_csv('housing.csv',header=None)
'''
因为原数据集并未将全部数据都分别放在每一个格子中,所以我们通过一些操作来对数据进行处理,
以便后续的操作
'''
# 提取第一个格子中的数据,并去除空格
va = data.iloc[:, 0].str.strip().values
#利用正则表达式,提取每一行的数字并存储到列表中
result = []
for i in va:
values = re.split(r'\s+', i)
result.append(values)
#将处理好的数据形成一个dataframe
juzhen = np.array(result).reshape(506,14)
df = pd.DataFrame(juzhen,columns=['CRIM', 'ZN', 'INDUS', 'CHAS', 'NOX', 'RM', 'AGE','DIS', 'RAD', 'TAX','PTRATIO','B:1000','lstat','Medv'])
#将数据中的自变量和因变量分开
x = df.iloc[:,:13]
y = df['Medv']
#判断有无nan
print(df.isnull().sum())
这是最后的运行结果:
CRIM ZN INDUS CHAS NOX ... TAX PTRATIO B:1000 lstat Medv
0 0.00632 18.00 2.310 0 0.5380 ... 296.0 15.30 396.90 4.98 24.00
1 0.02731 0.00 7.070 0 0.4690 ... 242.0 17.80 396.90 9.14 21.60
2 0.02729 0.00 7.070 0 0.4690 ... 242.0 17.80 392.83 4.03 34.70
3 0.03237 0.00 2.180 0 0.4580 ... 222.0 18.70 394.63 2.94 33.40
4 0.06905 0.00 2.180 0 0.4580 ... 222.0 18.70 396.90 5.33 36.20
.. ... ... ... ... ... ... ... ... ... ... ...
501 0.06263 0.00 11.930 0 0.5730 ... 273.0 21.00 391.99 9.67 22.40
502 0.04527 0.00 11.930 0 0.5730 ... 273.0 21.00 396.90 9.08 20.60
503 0.06076 0.00 11.930 0 0.5730 ... 273.0 21.00 396.90 5.64 23.90
504 0.10959 0.00 11.930 0 0.5730 ... 273.0 21.00 393.45 6.48 22.00
505 0.04741 0.00 11.930 0 0.5730 ... 273.0 21.00 396.90 7.88 11.90
CRIM 0
ZN 0
INDUS 0
CHAS 0
NOX 0
RM 0
AGE 0
DIS 0
RAD 0