机器学习实战第二版—第一节:数据预处理(2)
只要分为以下几点: 1.查看几个特征之间的相关性
'''
housing.plot(kind = 'scatter',x='longitude',y='latitude',alpha = 0.1,s= housing['population']/100,label='population',figsize=(10,7),
c='median_house_value',cmap=plt.get_cmap('jet'),colorbar=True,) #scatter 散点图 alpha = 0.1显示出高密度点的位置
# s生成每个点的大小,每个数据点生成控制大小的数组 size#c 生成每个点的颜色大小,每个数据点生成控制颜色的数组 colour
#使用一个名为jet的预定义颜色表(选项cmap)来进行可视化,颜色范围从蓝色到红色
plt.legend()
plt.show()
'''
'''
由于数据集不大,可以使用corr()计算每队属性的标准相关关系 相关矩阵
'''
# corr_matrix = housing.corr()#相关矩阵
# print(corr_matrix['median_house_value'].sort_values(ascending=False)) #查看每组与房价信息的相关性 可以根据这个提取特征 但遗漏了非线性特征
'''
pandas 的scatter_matrix 也可以求出其他数值的属性相关性 这里显示了4个属性 会出现4**2的图 可以明显看出收入和价值成线性相关
'''
# attribute = ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']
# scatter_matrix(housing[attribute], figsize=(12, 8))
# plt.show()
'''
放大看 看出收入和价值成线性相关
'''
# housing.plot(kind = 'scatter',x='median_income',y='median_house_value',alpha = 0.1)
# plt.show()
'''
重尾:中值的右边拖的很长,而左边较短。这种分布会增加一些机器学习算法在进行模式识别时的难度。我们需要之后转化这些属性,尽量量它们的分布转为钟形分布
可以计算其对数
'''
2.数据清理–缺失值处理:干掉那一行,那一列,将缺失值用中值替代
########################################################### 数据清理
'''
'''
处理缺失值
1.housing.dropna(subset=['total_bedrooms']) #删除某些空的数据
2.housing.drop('total_bedrooms',axis=1) #整列干掉
3.median=housing['total_bedrooms'].median()#将空的值转为话为平均值
housing.fillna(median,inplace=True)
'''
'''
#处理缺失值直接上轮子
imputer = SimpleImputer(strategy='median') #要是村数字才能算 ocean_proximity时文本
housing_num = housing.drop('ocean_proximity',axis=1)
imputer.fit(housing_num) #每列的中位数 为了防止在启动程序时不知道是否存在空的,索性之前全加进去
# print(imputer.statistics_,housing_num.median().values)
X = imputer.transform(housing_num)
housing_tr = pd.DataFrame(X,columns=housing_num.columns,index=housing_num.index) #放回原来的数据 dataframe
'''
3.文本数据分类转换–用轮子 独热编码
'''
文本数据分类转换
#处理文本 分类的文本转文字
housing_cat = housing[['ocean_proximity']]
ordinal_encoder = OrdinalEncoder()
housing_cat_ordinal = ordinal_encoder.fit_transform(housing_cat)
print(housing_cat_ordinal,ordinal_encoder.categories_)
####独热编码
cat_encoder = OneHotEncoder()
housing_cat_lhot = cat_encoder.fit_transform(housing_cat)
print(housing_cat_lhot) #输出的是一个稀疏矩阵 toarry可以形成一个numpy
'''
4.数据特征缩放—归一化和标准化
对测试集进行特征缩放时采用相同的的方法,不同的是,测试集所使用的均值,标准差是训练集的均值和标准差。
全部代码:
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
from pandas.plotting import scatter_matrix
from zlib import crc32
from sklearn.model_selection import train_test_split
from sklearn.impute import SimpleImputer
from sklearn.preprocessing import OrdinalEncoder
from sklearn.preprocessing import OneHotEncoder
def loaddata(path):
'''
下载数据集
:param path:
:return:
'''
csvpath=os.path.join(path,'housing.csv')
return pd.read_csv(csvpath)
if __name__ == "__main__":
housingdata = loaddata('./')
housing = housingdata.copy() #拷贝数据
# print(housingdata.head(4)) #head 默认查看前五行
# print(housingdata.describe()) #查看某种属性下的摘要 数据大小,平均值,中位数 std标准差 分位数等。。。
# print(housingdata.info())#info也是pandas的方法 这个数据集查看简介
# print(housingdata['count'].value_counts()) #观察到object下是分类的标签 ==查看某列的类型的值
'''
housing.plot(kind = 'scatter',x='longitude',y='latitude',alpha = 0.1,s= housing['population']/100,label='population',figsize=(10,7),
c='median_house_value',cmap=plt.get_cmap('jet'),colorbar=True,) #scatter 散点图 alpha = 0.1显示出高密度点的位置
# s生成每个点的大小,每个数据点生成控制大小的数组 size#c 生成每个点的颜色大小,每个数据点生成控制颜色的数组 colour
#使用一个名为jet的预定义颜色表(选项cmap)来进行可视化,颜色范围从蓝色到红色
plt.legend()
plt.show()
'''
'''
由于数据集不大,可以使用corr()计算每队属性的标准相关关系 相关矩阵
'''
# corr_matrix = housing.corr()#相关矩阵
# print(corr_matrix['median_house_value'].sort_values(ascending=False)) #查看每组与房价信息的相关性 可以根据这个提取特征 但遗漏了非线性特征
'''
pandas 的scatter_matrix 也可以求出其他数值的属性相关性 这里显示了4个属性 会出现4**2的图 可以明显看出收入和价值成线性相关
'''
# attribute = ['median_house_value', 'median_income', 'total_rooms', 'housing_median_age']
# scatter_matrix(housing[attribute], figsize=(12, 8))
# plt.show()
'''
放大看 看出收入和价值成线性相关
'''
# housing.plot(kind = 'scatter',x='median_income',y='median_house_value',alpha = 0.1)
# plt.show()
'''
重尾:中值的右边拖的很长,而左边较短。这种分布会增加一些机器学习算法在进行模式识别时的难度。我们需要之后转化这些属性,尽量量它们的分布转为钟形分布
可以计算其对数
'''
'''
########################################################### 数据清理
'''
'''
处理缺失值
1.housing.dropna(subset=['total_bedrooms']) #删除某些空的数据
2.housing.drop('total_bedrooms',axis=1) #整列干掉
3.median=housing['total_bedrooms'].median()#将空的值转为话为平均值
housing.fillna(median,inplace=True)
'''
'''
#处理缺失值直接上轮子
imputer = SimpleImputer(strategy='median') #要是村数字才能算 ocean_proximity时文本
housing_num = housing.drop('ocean_proximity',axis=1)
imputer.fit(housing_num) #每列的中位数 为了防止在启动程序时不知道是否存在空的,索性之前全加进去
# print(imputer.statistics_,housing_num.median().values)
X = imputer.transform(housing_num)
housing_tr = pd.DataFrame(X,columns=housing_num.columns,index=housing_num.index) #放回原来的数据 dataframe
'''
'''
文本数据分类转换
#处理文本 分类的文本转文字
housing_cat = housing[['ocean_proximity']]
ordinal_encoder = OrdinalEncoder()
housing_cat_ordinal = ordinal_encoder.fit_transform(housing_cat)
print(housing_cat_ordinal,ordinal_encoder.categories_)
####独热编码
cat_encoder = OneHotEncoder()
housing_cat_lhot = cat_encoder.fit_transform(housing_cat)
print(housing_cat_lhot) #输出的是一个稀疏矩阵 toarry可以形成一个numpy
'''
|