为了得到更准确的结果,必须理解数据的特征、分布情况,以及需要解决的问题,以便建立和优化算法模型。
- 简单的查看数据
- 审查数据的维度
- 审查数据的类型和属性
- 总结查看数据分类的分布情况
- 通过描述性统计分析数据
- 理解数据属性的相关性
- 审查数据的分布状态
简单的查看数据
对数据的简单审视,是加强对数据的理解最有效的方法之一。通过对数据的观察,可以发现数据内在关系。
1 from pandas import read_csv 2 #使用pandas导入CSV数据,显示数据的前10行 3 filename='/home/aistudio/work/pima_data1.csv' 4 names=['preg','plas','pres','skin','test','mass','pedi','age','class'] 5 data=read_csv(filename,names=names) 6 peak=data.head(10) 7 print(peak)
preg plas pres skin test mass pedi age class 0 6 148 72 35 0 33.6 0.627 50 1 1 1 85 66 29 0 26.6 0.351 31 0 2 8 183 64 0 0 23.3 0.672 32 1 3 1 89 66 23 94 28.1 0.167 21 0 4 0 137 40 35 168 43.1 2.288 33 1 5 5 116 74 0 0 25.6 0.201 30 0 6 3 78 50 32 88 31.0 0.248 26 1 7 10 115 0 0 0 35.3 0.134 29 0 8 2 197 70 45 543 30.5 0.158 53 1 9 8 125 96 0 0 0.0 0.232 54 1
数据的维度
在机器学习中要注意数据的行和列,必须对所有的数据非常了解,要知道有多少行和多少列,这是因为:
太多的行会导致花费大量时间来训练得到模型;太少的数据会导致对算法的训练不充分,得不到合适模型。
如果数据具有太多的特征,会引起某些算法性能低下的问题。
通过DataFrame的shape属性,可以很方便查看数据集中有多少行、列。
1 print(data.shape)
(768, 9)
数据的类型和属性
数据的类型是很重要的一个属性。字符串会被转化为浮点数或整数,以便于计算和分类。可以通过DataFrame的Type属性来查看每一个字段的数据类型。
1 print(data.dtypes)
preg int64 plas int64 pres int64 skin int64 test int64 mass float64 pedi float64 age int64 class int64 dtype: object
描述性统计
描述性统计可以给出一个更加直观、更加清晰的视觉,以加强对数据的理解。可通过DataFrame的describe()方法给我们展示八方面得信息:数据记录数、平均值、标准方差、最小值、下四分位数、中位数、上四分位数、最大值。这些信息主要用来描述数据的分布情况。
1 from pandas import set_option 2 set_option('display.width',100) 3 #设置数据的精度 4 set_option('precision',4) 5 print(data.describe())
preg plas pres ... pedi age class count 768.0000 768.0000 768.0000 ... 768.0000 768.0000 768.000 mean 3.8451 120.8945 69.1055 ... 0.4719 33.2409 0.349 std 3.3696 31.9726 19.3558 ... 0.3313 11.7602 0.477 min 0.0000 0.0000 0.0000 ... 0.0780 21.0000 0.000 25% 1.0000 99.0000 62.0000 ... 0.2437 24.0000 0.000 50% 3.0000 117.0000 72.0000 ... 0.3725 29.0000 0.000 75% 6.0000 140.2500 80.0000 ... 0.6262 41.0000 1.000 max 17.0000 199.0000 122.0000 ... 2.4200 81.0000 1.000
数据分组分布(适用于分类算法)
在分类算法中,需要知道每个分类的数据大概有多少条记录,以及数据分布是否平衡。如果数据分布的平衡性很差,需要在数据加工阶段进行数据处理,来提高数据分布的平衡性。
1 print(data.groupby('class').size())
class 0 500 1 268 dtype: int64
数据属性的相关性
数据属性中的相关性是指数据的两个属性是否互相影响,以及这种影响是什么方式的等。非常通用的计算两个属性的相关性的方法是皮尔森相关系数,皮尔森相关系数是度量两个变量间相关程度的方法。它是一个介于1和-1之间的值,其中,1表示完全正相关,0表示无关,-1表示完全相关。
在自然科学领域,该系数广泛用于度量两个变量之间的相关程度。
在机器学习中,当数据的关联程度比较高时,有些算法(如linear,逻辑回归等)的性能会降低,所以在开始训练前,查看一下算法的关联性是一个很好的方法。当数据特征的相关性比较高时,应该考虑对特征进行降维处理。
下面通过使用DataFrame的corr()方法来计算数据集中数据属性之间的关联关系矩阵。
1 print(data.corr(method='pearson'))
preg plas pres skin ... mass pedi age class preg 1.0000 0.1295 0.1413 -0.0817 ... 0.0177 -0.0335 0.5443 0.2219 plas 0.1295 1.0000 0.1526 0.0573 ... 0.2211 0.1373 0.2635 0.4666 pres 0.1413 0.1526 1.0000 0.2074 ... 0.2818 0.0413 0.2395 0.0651 skin -0.0817 0.0573 0.2074 1.0000 ... 0.3926 0.1839 -0.1140 0.0748 test -0.0735 0.3314 0.0889 0.4368 ... 0.1979 0.1851 -0.0422 0.1305 mass 0.0177 0.2211 0.2818 0.3926 ... 1.0000 0.1406 0.0362 0.2927 pedi -0.0335 0.1373 0.0413 0.1839 ... 0.1406 1.0000 0.0336 0.1738 age 0.5443 0.2635 0.2395 -0.1140 ... 0.0362 0.0336 1.0000 0.2384 class 0.2219 0.4666 0.0651 0.0748 ... 0.2927 0.1738 0.2384 1.0000 [9 rows x 9 columns]
上面就是执行之后会得到一个每个属性相互影响的矩阵
数据的分布分析
通过分析数据的高斯分布情况来确认数据的偏离情况。高斯分布又叫正态分布,是在数据、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响。高斯分布的曲线呈钟形,两头低,中间高,左右对称。
在高斯分布图中,y轴两点之间的面积是发生的概率。在很多机器学习算法中都会假定数据遵循高斯分布,先计算数据的高斯偏离状况,再根据偏离状况准备数据。
我们可以使用DataFrame的skew()方法来计算所有数据属性的高斯分布偏离情况。
1 print(data.skew())
preg 0.9017 plas 0.1738 pres -1.8436 skin 0.1094 test 2.2723 mass -0.4290 pedi 1.9199 age 1.1296 class 0.6350 dtype: float64
shew()函数的结果显示数据分布是左偏还是右偏。当数据接近0时,表示数据的偏差非常小。