机器学习-Python实践Day2(数据操作)
1、数据操作(Pima Indians 印第安人医疗数据)
1.1、 数据导入方法
机器学习的数据源通常都会以csv的格式来存储,因此在开始机器学习之前,需要先将数据导入到项目中,便于对数据进行后续操作。
有多种方法能对数据进行导入操作,我接下来将介绍常用的三种方法:
1.1.1、通过标准的Python库导入csv文件
from csv import reader
import numpy as np
# 使用标准的Python类库导入csv数据
filename='pima_data.csv'
with open(filename,'r') as raw_data:
readers=reader(raw_data,delimiter=',')
x=list(readers)
data=np.array(x)
print(data.shape)
print(data)
1.1.2、通过Numpy导入csv文件
# 采用Numpy导入数据
import numpy as np
filename='pima_data.csv'
with open(filename,'r') as raw_data:
data=np.loadtxt(raw_data,delimiter=',')
print(data.shape)
print(data)
1.1.3、通过Pandas导入csv文件
# 采用Pandas导入数据
import pandas as pd
filename='pima_data.csv'
df=pd.read_csv(filename,header=None)
print(df.shape)
print(np.array(df))
通过Pandas.read_csv()函数导入CSV文件,返回值是DataFrame。在机器学习中经常利用Pandas来做数据清洗和数据处理工作。因此推荐使用这个方法。
1.2、数据理解
1.2.1、简单查看数据
import pandas as pd
filename='pima_data.csv'
names=['preg','plas','pres','skin','test','mass','pedi','age','class']
df=pd.read_csv(filename,names=names)
# 查看前5行数据
df.head()
1.2.2、数据维度
# 查看数据维度
print(df.shape)
1.2.3、数据类型和属性
# 查看数据属性和类型
print(df.dtypes)
1.2.4、数据分类和分布情况
# 数据分组分类
print(df.groupby('class').size())
1.2.5、描述性统计分析数据
# 描述性统计
print(df.describe())
描述性统计可以给出一个更加直观的视角,加强对数据的理解,通过DataFrame的describe()方法来查看描述性统计的内容。
展示了8个指标:数据量,平均数,标准方差,最小数,第一四分位数,中位数,第三位四分位数,最大值。
1.2.6、理解数据属性相关性
import pandas as pd
# 数据属性相关性
pd.set_option('display.width',100)
# 设置数据精确度
pd.set_option('precision',2)
print(df.corr(method='pearson'))
数据属性的相关性是指两个属性是否互相影响,非常通用的计算两个属性的相关性方法是皮尔逊相关系数。它是一个介于1和-1之间的值,1表示变量完全正相关,0表示无关,-1表示全负相关。
通过DataFrame的corr()方法来计算个特征之间的关联关系矩阵。
1.2.7、查看数据分布分析
# 计算数据高斯偏离
print(df.skew())
通过分析数据的高斯分布情况来确认数据的偏离情况。高斯分布又称正态分布,图形呈钟形)
DataFrame的skew()方法来计算数据属性的高斯分布偏离情况。
当数据接近0时,表示数据偏差非常小。
1.3、数据可视化
1.3.1、单一图表
直方图
# 直方图
import matplotlib.pyplot as plt
df.hist()
plt.show()
密度图
# 密度图
df.plot(kind='density',subplots=True,layout=(3,3),sharex=False)
plt.show()
箱线图
# 箱线图
df.plot(kind='box',subplots=True,layout=(3,3),sharex=False)
plt.show()
1.3.2、多重图表
相关矩阵图
# 相关矩阵图
correlations=df.corr()
fig=plt.figure()
ax=fig.add_subplot(111)
cax=ax.matshow(correlations,vmin=-1,vmax=1)
fig.colorbar(cax)
ticks=np.arange(0,9,1)
ax.set_xticks(ticks)
ax.set_yticks(ticks)
ax.set_xticklabels(names)
ax.set_yticklabels(names)
散点矩阵图
# 散点矩阵图
from pandas.plotting import scatter_matrix
scatter_matrix(df)
plt.show()