博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
掌握python机器学习-读书笔记2 (导入数据 && 数据描述)
阅读量:6800 次
发布时间:2019-06-26

本文共 7391 字,大约阅读时间需要 24 分钟。

  hot3.png

0 课程

2 Python 用于机器学习的生态系统

2.1 python 语言

不必多说, 现在python 语言是机器学习的主流语言之一, 甚至可以去掉之一。 比R 流行, 比java简洁。

Python 版本。 2.7 3.5 任选。 如果新装, 不如直接上3.5, 有些软件已经开始不支持2.x的python了。

工作包呢, 主要是如下 scipy, pandas, numpy, matplotapi, scikitlearn。

环境的安装, 装一个anacond即可。 否则每个包需要单独来处理, 还有依赖的问题。 如果没有特别需求, 建议直接ananconda

Link:

3 Python 基础

3.1 python 语言

任何一门语言

  • 变量的定义
  • 流程的控制
  • 数据结构 具体的- 略

3.2 numpy

3.3 pandas

推荐这个官方文档, 不错。

link

TODO

  • series
  • DataFrame

4 如何导入数据

如何通过numpy, pandas 来导入csv。 详见代码。

# Load CSV Using Python Standard Libraryimport csvimport numpyfilename = 'pima-indians-diabetes.data.csv'raw_data = open(filename, 'rt')reader = csv.reader(raw_data, delimiter=',', quoting=csv.QUOTE_NONE)x = list(reader)data = numpy.array(x).astype('float')print(data.shape)(768L, 9L)
# Load CSV using NumPyfrom numpy import loadtxtfilename = 'pima-indians-diabetes.data.csv'raw_data = open(filename, 'rt')data = loadtxt(raw_data, delimiter=",")print(data.shape)(768L, 9L)
# Load CSV using Pandasfrom pandas import read_csvfilename = 'pima-indians-diabetes.data.csv'names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)print(data.shape)(768, 9)

5 使用描述统计方法来理解你的数据

你必须理解你的数据,理解其内在的规律, 进而理解数据和结论之间的练习。 以下是你需要知道的。

  • 看一下你的原始数据
  • 清楚你数据的维度, 数量
  • 审查一下数据的类型
  • 在你数据集中根据分类来找到个体分布
  • 使用描述统计来分析你的数据
  • 使用关联来分析数据中的关联关系
  • 审查每个特征的分布

5.1 粗略的看一下你的数据

看原始数据是不可以替代的,看原始数据可以让你洞悉到很多, 这是其他方式所不能带来的。 可以给你后期的处理带来很多的灵感。 你可以通过 datafram的 head 方法来看一下前面几行的样例。

# View first 20 rowsfrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)peek = data.head(20)print(peek)--    preg  plas  pres  skin  test  mass   pedi  age  class0      6   148    72    35     0  33.6  0.627   50      11      1    85    66    29     0  26.6  0.351   31      02      8   183    64     0     0  23.3  0.672   32      13      1    89    66    23    94  28.1  0.167   21      04      0   137    40    35   168  43.1  2.288   33      15      5   116    74     0     0  25.6  0.201   30      06      3    78    50    32    88  31.0  0.248   26      17     10   115     0     0     0  35.3  0.134   29      08      2   197    70    45   543  30.5  0.158   53      19      8   125    96     0     0   0.0  0.232   54      110     4   110    92     0     0  37.6  0.191   30      011    10   168    74     0     0  38.0  0.537   34      112    10   139    80     0     0  27.1  1.441   57      013     1   189    60    23   846  30.1  0.398   59      114     5   166    72    19   175  25.8  0.587   51      115     7   100     0     0     0  30.0  0.484   32      116     0   118    84    47   230  45.8  0.551   31      117     7   107    74     0     0  29.6  0.254   31      118     1   103    30    38    83  43.3  0.183   33      019     1   115    70    30    96  34.6  0.529   32      1

5.2 数据的维度

你必须很清楚数据的维度。 如果维度过多,训练时间会很长;太少则达不到训练的效果。 你可以用Dataframe的shape来看。

# Data Types for Each Attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)types = data.dtypesprint(types)(768, 9)

5.3 每个参数的数据类型

Dataframe的dtypes 类型可以返回数据类型。

# Data Types for Each Attributefrom pandas import read_csv# Data Types for Each Attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)types = data.dtypesprint(types)preg       int64plas       int64pres       int64skin       int64test       int64mass     float64pedi     float64age        int64class      int64dtype: object

5.4 描述性统计

describe() 可以返回具体的结果, 对于每一列。

  • 数量
  • 平均值
  • 标准差
  • 25% 分位
  • 50% 分位数
  • 75% 分位数
  • 最大值 很多时候你可以得到NA的数量和比例。
# Statistical Summaryfrom pandas import read_csvfrom pandas import set_optionfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)set_option('display.width', 100)set_option('precision', 3)description = data.describe()print(description)         preg     plas     pres     skin     test     mass     pedi      age    classcount  768.000  768.000  768.000  768.000  768.000  768.000  768.000  768.000  768.000mean     3.845  120.895   69.105   20.536   79.799   31.993    0.472   33.241    0.349std      3.370   31.973   19.356   15.952  115.244    7.884    0.331   11.760    0.477min      0.000    0.000    0.000    0.000    0.000    0.000    0.078   21.000    0.00025%      1.000   99.000   62.000    0.000    0.000   27.300    0.244   24.000    0.00050%      3.000  117.000   72.000   23.000   30.500   32.000    0.372   29.000    0.00075%      6.000  140.250   80.000   32.000  127.250   36.600    0.626   41.000    1.000max     17.000  199.000  122.000   99.000  846.000   67.100    2.420   81.000    1.000preg       int64plas       int64pres       int64skin       int64test       int64mass     float64pedi     float64age        int64class      int64dtype: object

5.5 类型分布 - 只是对于分类问题

其实就是对于类别这块做一个处理, 能够看到类型的一个分布状态, 通过表格的形式。

# Class Distributionfrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)class_counts = data.groupby('class').size()print(class_counts)class0    5001    268dtype: int64

5.6 属性的相关性

数据的相关性是说每两个数据类型之间的关联, 就是说如何一起改变或者不一起改变。 你可以通过dataframe 的corr 函数来看到结果。 常用的是皮尔森相关系数。 我的理解是一个协方差矩阵。 如果是正的话就是说变化的趋势相同, 如果负的那么变化的趋势相反。 数字越大变化就越一直。 那么就是说如果相关性越大。 后面有一个降维算法PCA 就是为了解决系数之间关联的问题, 经过处理可以转化成不相关的参数。 这是后话。

# Pairwise Pearson correlationsfrom pandas import read_csvfrom pandas import set_optionfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)set_option('display.width', 100)set_option('precision', 3)correlations = data.corr(method='pearson')print(correlations)-----------       preg   plas   pres   skin   test   mass   pedi    age  classpreg   1.000  0.129  0.141 -0.082 -0.074  0.018 -0.034  0.544  0.222plas   0.129  1.000  0.153  0.057  0.331  0.221  0.137  0.264  0.467pres   0.141  0.153  1.000  0.207  0.089  0.282  0.041  0.240  0.065skin  -0.082  0.057  0.207  1.000  0.437  0.393  0.184 -0.114  0.075test  -0.074  0.331  0.089  0.437  1.000  0.198  0.185 -0.042  0.131mass   0.018  0.221  0.282  0.393  0.198  1.000  0.141  0.036  0.293pedi  -0.034  0.137  0.041  0.184  0.185  0.141  1.000  0.034  0.174age    0.544  0.264  0.240 -0.114 -0.042  0.036  0.034  1.000  0.238class  0.222  0.467  0.065  0.075  0.131  0.293  0.174  0.238  1.000

5.7 单变量分布的倾斜度

倾斜度是说, 假设分布是高斯分布, 那么所有值的分布是偏向于哪个方向(最大, 最小值)。 知道这个倾斜可以帮助你后期的处理。 其实生活中很多的数据都是正态分布的, 也就是高斯分布的。 当然也有一些不是。

  • 结果如果接近于0 就意味着倾斜度很小, 更符合正态分布。
# Skew for each attributefrom pandas import read_csvfilename = "pima-indians-diabetes.data.csv"names = ['preg', 'plas', 'pres', 'skin', 'test', 'mass', 'pedi', 'age', 'class']data = read_csv(filename, names=names)skew = data.skew()print(skew)----------------preg 0.901674plas 0.173754pres -1.843608skin 0.109372test 2.272251mass -0.428982pedi 1.919911age 1.129597class 0.635017

5.8 小贴士

  • 需要停下来仔细的思考数据
  • 问问题, 看这些数据和结果的关系
  • 写下来想法。

下一章 会用图形的办法来分析数据。

TODO 1 倾斜度落实到数据处理, 如何来操作, 具体的例子。

转载于:https://my.oschina.net/sizhe/blog/1585904

你可能感兴趣的文章
typeof vs instanceof
查看>>
Array.from方法具体理解(3分钟)
查看>>
CS229课程01-机器学习的动机与应用
查看>>
iOS开发常用框架总览!
查看>>
Javascript实现冒泡排序与快速排序以及对快速排序的性能优化
查看>>
深入React v16新特性(一)
查看>>
笔记(2) 从webpack到vue-cli3.0
查看>>
记一次阿里巴巴一面的经历
查看>>
用前端 最舒服的躺姿 "搞定" Flutter (组件篇)
查看>>
Android开发无线调试工具adbwireless的使用简介(附AirADB)
查看>>
ContentProvider 详解
查看>>
简单优化容器服务
查看>>
TCP详解
查看>>
重学ES6 数组扩展(2)
查看>>
你会这道阿里多线程面试题吗?
查看>>
行云管家V4.9正式发布:监控全面提升,首页、主机详情大幅优化,新增大量实用功能.md...
查看>>
采用镜像部署LNMP 环境操作步骤
查看>>
不服?来跑个分!
查看>>
Python笔记 开发环境搭建
查看>>
ios logo 启动页大小
查看>>