一、实验概述
实验目标:选择加州房价数据集,基于1990年加州人口普查的数据,添加了一个分类属性,并且移除了一些特征。模型需要从这个数据中学习,从而能够根据其他指标,预测任意区域的房价中位数。
二、获取数据
1.创建工作环境
工作环境选择的Jupyter notebook,使用python3.0版本,安装Python模块:Jupyter、Numpy、Pandas、Matplotlib和Scikit-Learn。
2.下载数据(这里我不会按照网上的教程下载,我是找到了数据集之后直接引用的,这方面还存在不足,还有加强)
import pandas as pd
housing = pd.read_csv("C:/Users/10489/Desktop/datasets/housing/housing.csv")#这里大家就写自己下载好的数据集地址
3.查看数据结构
housing.head()#默认是5行
每一行都表示一个分区,每一列代表一个属性:经度、维度、房屋年龄中位数、总房间数、卧室数量、人口数、家庭数、收入中位数、房屋价值中位数、大海距离。
housing.info()
info()方法可以快速查看数据的描述,包括总行数、每个属性的类型和非空值的数量。可以看出来,所有的属性都是数值的,只有第十项大海距离这项不是数值,它是文本。通过上面前五行的表格数据,可以看出其中有的列是相同的、重复的,意味着它可能是一个分类属性,它可以使用value_counts()的方法查看都有什么类型,每个类型有几个分区:
housing["ocean_proximity"].value_counts()
可以看出有五个类别,每个类别有9139、6551、2658、2290、5个分区。
housing.describe()
describe()方法展示了数值属性的概括。std表示标准差。25%、50%、75%展示了对应的分位数:每个分位数指明小于这个值,且指定分组的百分比。例如,25%的分区的房屋年龄中位数小于18,而50%的小于29,75%的小于37。
import matplotlib.pyplot as plt
housing.hist(bins=55, figsize=(20, 15))
plt.show()
这是快速了解数据类型的一种方法,画出每个数值属性的柱状图。纵轴表示了特定范围的实例个数。
4.创建测试集(利用sklearn实现,纯随机采用测试集)
from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)
做一个分层处理
import numpy as np
housing["income_cat"] = pd.cut(housing["median_income"],
bins = [0., 1.5, 3.0, 4.5, 6., np.inf],
labels=[1, 2, 3, 4, 5])
分层采样:将人群分成均匀的子分组,称为分层,从每个分层取出合适数量的实例,以保证测试集对总人数有代表性。分层不宜过多,这里分了5层。
housing.head()
income_cat存的是pd.cut之后的标签。
housing["income_cat"].hist()
显示各个标签的个数。
from sklearn.model_selection import StratifiedShuffleSplit
split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42)
for train_index, test_index in split.split(housing, housing["income_cat"]):
strat_train_set = housing.loc[train_index]
strat_test_set = housing.loc[test_index]
按照收入类别划分训练集和测试集。
strat_train_set["income_cat"].value_counts() / len(strat_train_set)
strat_test_set["income_cat"].value_counts()/len(strat_test_set)
strat_train_set.drop('income_cat',axis=1,inplace=True)
strat_test_set.drop('income_cat',axis=1,inplace=True)
将income_cat这个属性删除,使得数据回到最初的状态,这一部分我们只是熟悉一下这个数据集,观察一下数据集,并没有开始搭建模型。
三、可视化数据,观察规律
housing = strat_train_set.copy()
我们要保证我们将测试集放在了一旁,只研究了训练集。这一步呢是做了一个复制,是因为这个数据集很小,所以我们可以在这个数据集上直接进行操作,复制下来,以免损伤训练集。
1.可视化地理数据
housing.plot(kind='scatter',x='longitude',y='latitude'