欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

机器学习入门(一)——数据理解

程序员文章站 2022-03-06 21:21:28
...

此处以Pima印第安人数据集为例,根据诊断措施预测糖尿病的发病。

一、数据集简介

1、该数据集最初来自国家糖尿病/消化/肾脏疾病研究所。数据集的目标是基于数据集中包含的某些诊断测量来诊断性的预测 患者是否患有糖尿病。
2、从较大的数据库中选择这些实例有几个约束条件。尤其是,这里的所有患者都是Pima印第安至少21岁的女性。
3、数据集由多个医学预测变量和一个目标变量组成Outcome。预测变量包括患者的怀孕次数、BMI、胰岛素水平、年龄等。

二、导入数据集

#导入库
import pandas as pd

#导入CSV文件
filename = "pima_data.csv"
name = ['preg','plas','pres','skin','test','mass','pedi','age','class']
data = pd.read_csv(filename,names=name)

数据属性:

【1】Preg:怀孕次数
【2】Plas:葡萄糖
【3】Pres:血压 (mm Hg)
【4】Skin:皮层厚度 (mm)
【5】Test:胰岛素 2小时血清胰岛素(mu U / ml
【6】Mass:体重指数 (体重/身高)^2
【7】Pedi:糖尿病谱系功能
【8】Age:年龄 (岁)
【9】Class:类标变量 (0或1)

三、查看数据

#显示数据前10行
peek = data.head(10)
print('数据查看:')
print(peek)
数据查看:
   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

四、数据维度--查看行和列

#数据维度--查看行和列
print('数据行列:')
print(data.shape)
数据行列:
(768, 9)

五、数据属性和类型

#数据属性和类型
print('字段属性:')
print(data.dtypes)
字段属性:
preg       int64
plas       int64
pres       int64
skin       int64
test       int64
mass     float64
pedi     float64
age        int64
class      int64
dtype: object

六、数据统计性描述

1、describe()函数:展示数据记录数、平均值、标准方差、最小值、下四分位数、中位数、上四分位数、最大值
2、set_option()函数详解:
【1】pd.set_option(‘expand_frame_repr’, False)
         True就是可以换行显示。设置成False的时候不允许换行
【2】pd.set_option(‘display.max_rows’, 10)
         pd.set_option(‘display.max_columns’, 10)
        显示的最大行数和列数,如果超额就显示省略号,这个指的是多少个dataFrame的列。如果比较多又不允许换行,就会显得很乱。
【3】pd.set_option(‘precision’, 5)
         显示小数点后的位数
【4】pd.set_option(‘large_repr’, A)
         truncate表示截断,info表示查看信息,一般选truncate
【5】pd.set_option(‘max_colwidth’, 5)
         列长度
【6】pd.set_option(‘chop_threshold’, 0.5)
         绝对值小于0.5的显示0.0
【7】pd.set_option(‘colheader_justify’, ‘left’)
         显示居中还是左边,
【8】pd.set_option(‘display.width’, 200)
         横向最多显示多少个字符, 一般80不适合横向的屏幕,平时多用200

pd.set_option('display.width',200)
pd.set_option('precision',2)

print('数据描述性统计:')
print(data.describe())
数据描述性统计:
         preg    plas    pres    skin    test    mass    pedi     age   class
count  768.00  768.00  768.00  768.00  768.00  768.00  768.00  768.00  768.00
mean     3.85  120.89   69.11   20.54   79.80   31.99    0.47   33.24    0.35
std      3.37   31.97   19.36   15.95  115.24    7.88    0.33   11.76    0.48
min      0.00    0.00    0.00    0.00    0.00    0.00    0.08   21.00    0.00
25%      1.00   99.00   62.00    0.00    0.00   27.30    0.24   24.00    0.00
50%      3.00  117.00   72.00   23.00   30.50   32.00    0.37   29.00    0.00
75%      6.00  140.25   80.00   32.00  127.25   36.60    0.63   41.00    1.00
max     17.00  199.00  122.00   99.00  846.00   67.10    2.42   81.00    1.00

七、数据分组分布

#数据分组分布
print('数据分组分布:')
print(data.groupby('class').size())
数据分组分布:
class
0    500
1    268
dtype: int64

八、数据属性的相关性

1、数据属性的相关性:指数据的两个属性是否相互影响,以及这种影响是什么方式的
2、皮尔逊相关系数:最通用的计算两个属性的相关性,为介于1和-1之间的值
                 其中1表示变量完全正相关,0表示无关,-1表示完全负相关
3、当数据特征的相关性比较高时,应该考虑对特征进行降维处理
#数据属性的相关性
print('数据属性的相关性:')
print(data.corr(method='pearson'))
数据属性的相关性:
       preg  plas  pres  skin  test  mass  pedi   age  class
preg   1.00  0.13  0.14 -0.08 -0.07  0.02 -0.03  0.54   0.22
plas   0.13  1.00  0.15  0.06  0.33  0.22  0.14  0.26   0.47
pres   0.14  0.15  1.00  0.21  0.09  0.28  0.04  0.24   0.07
skin  -0.08  0.06  0.21  1.00  0.44  0.39  0.18 -0.11   0.07
test  -0.07  0.33  0.09  0.44  1.00  0.20  0.19 -0.04   0.13
mass   0.02  0.22  0.28  0.39  0.20  1.00  0.14  0.04   0.29
pedi  -0.03  0.14  0.04  0.18  0.19  0.14  1.00  0.03   0.17
age    0.54  0.26  0.24 -0.11 -0.04  0.04  0.03  1.00   0.24
class  0.22  0.47  0.07  0.07  0.13  0.29  0.17  0.24   1.00

九、数据的分布分析

1、通过分析数据的高斯分布情况来确认数据的偏离情况
2、在高斯分布图中,y轴两点之间的面积是发生的概率
3、skew()函数的结果显示了数据分布是左偏还是右偏。当数据接近0时,表示数据的偏差非常小
#数据的分布分析
print('数据的分布分析:')
print(data.skew())
数据的分布分析:
preg     0.90
plas     0.17
pres    -1.84
skin     0.11
test     2.27
mass    -0.43
pedi     1.92
age      1.13
class    0.64
dtype: float64