数据的探索性分析

  • 1. 读入数据
    • (1)csv文件读取
    • (2)json文件读取
    • (3)SQL数据库读取
    • (4)Not-only SQL (NoSQL)读取
    • (5)从网络中获取
  • 2. 数据清洗
    • (1)缺失值问题
    • (2)异常值问题
  • 3. 数据探索性分析(EDA)
  • 4. 特征工程
    • (1)数据转换
    • (2)特征编码
    • (3)特征缩放
  • 5. 估计和推理(estimation and inference)

IBM Machine Learning是Coursera上的一门课程,学习的内容简略记录一下,第一周内容是Exploratory Data Analysis for Machine Learning,也就是探索性分析(EDA),主要章节包含六个部分,以下一一介绍:

1. 读入数据

数据的来源有很多种,例如csv文件、json文件、数据库文件等,需要用到的库为pandas

(1)csv文件读取

import pandas as pdfilepath = " "
data = pd.read_csv(filepath)# 一些重要参数:
# 以tab作为分隔符的文件(.tsv)
data = pd.read_csv(filepath, sep = "\t")
# 以空格作为分隔符的文件
data = pd.read_csv(filepath, delim_whitespace = True)
# 不使用第一行作为列名
data = pd.read_csv(filepath, header=None)
# 选择需要的列名读取
data = pd.read_csv(filepath, names = ["name", "age"])
# 读取时使特定值变为缺失值
data = pd.read_csv(filepath, na_values="NA")

(2)json文件读取

# 读取json文件
data = pd.read_json(filepath)
# 将dataframe导出为json
data.to_json("output.json")

(3)SQL数据库读取

SQL数据库有很多种类,例如MySQL、Oracle DB、Db2 Family等,从这些数据库中读取文件时需要用到不同种类的库。

以sqlite3为例:

import sqlite3 as sq3path = " "
con = sq3.Connection(path)
query = ''' SELECT * FROM rock_songs;
'''
data = pd.read_sql(query, con)

(4)Not-only SQL (NoSQL)读取

一些NoSQL数据库,例如MongoDB、 Hbase、Neo4j等,许多NoSQL数据库以json形式存储数据

以MongoDB为例;

from pymongo import MongoClientcon = MongoClient()
db = con.database_namecursor = db.collection_name.find(query)
df = pd.DataFrame(list(cursor))

注:这部分代码是复制的,未经证实,本人对SQL不太了解

(5)从网络中获取

data_url = "https://archive.ics.uci.edu/ml/machine-learning-databases/autos/imports-85.data"
data = pd.read_csv(data_url, header = None)

2. 数据清洗

数据清洗对于数据分析有着重要作用,数据清洗主要包括重复值/无意义数据、文本输入问题、缺失值、异常值、数据来源问题等,主要需要处理的问题为缺失值和异常值

(1)缺失值问题

处理缺失值的办法:

  1. 删除含有缺失值的行/列
    优点:处理速度快
    缺点:由于数据量变少,会丢失较多信息
  2. 使用平均数/中位数/众数等特征来填充缺失值
    优点:不会丢失太多数据
    缺点:添加了额外的不确定性
  3. 将缺失值作为一个新的类别
    优点:不会丢失太多数据
    缺点:添加了额外的不确定性,即假设所有的缺失值意义相同

(2)异常值问题

异常值不会对模型造成非常巨大的影响,但也会产生某种程度的影响

寻找异常值的方法有很多种,这里介绍三种:

  1. 画图
import seaborn as sns
sns.distplot(data, bins=20)
  1. 箱线图

简单实现:

sns.boxplot(data)

箱线图的具体原理:

import numpy as npq25, q50, q75 = np.percentile(data, [25, 50, 75])
iqr = q75 - q25min = q25 - 1.5*iqr
max = q75 + 1,5*iqrprint(min, q25, q50, q75, max)
  1. 通过残差

残差是指实际值和预测值的 区别,包含以下几种:

  • 标准化残差(standardized): 残差除以其标准差后得到的数值
  • 剔除残差(deleted):去除掉某异常值后得到的残差
  • 学生化残差(studentized):剔除残差除以其标准差。包含两种
    • 学生化外残差就是异常点检验的t统计量
    • 学生化内残差可得到异常点检验的似然比统计量

在找到异常值后,处理办法如下:

  1. 删除含有缺失值的行/列
    优点:处理速度快
    缺点:由于数据量变少,会丢失较多信息
  2. 使用平均数/中位数/众数等特征来填充缺失值
    优点:不会丢失太多数据
    缺点:添加了额外的不确定性
  3. 将数据进行变换,例如取对数,减小异常值的影响
  4. 通过回归或利用相似样本预测该异常值可能的值
  5. 使用对异常值容忍度高的模型

3. 数据探索性分析(EDA)

EDA是一种探索数据集并总结数据特征的方法,经常和可视化方法一起使用

sample = data.sample(n=5, replace=False)
print(sample.iloc[:,-3:])

在读入数据时可以随机采样观察数据的结构

EDA技术包括:

  • 统计特征:平均数、中位数、最大值、最小值、相关性等
  • 可视化:直方图、散点图、箱线图等

EDA使用的工具:pandas、matplotlib、seaborn

以鸢尾花数据集为例,数据参考下图,包含四个特征,三个类别

import numpy as np
import pandas as npdata = pd.read_csv(filepath)
print(data.head())
print(data.shape)
print(data.columns)
print(data.dtypes)

查看数据的前五列、形状、列名、数据类型

data.species.value_counts()statas_df = data.describe()
status_df.loc["range"] = status_df.loc["max"] - status_df.loc["min"]

value_counts查看每种数值的数量,describe方法查看数据的统计特征

data.groupby(["species"]).agg(["mean", "median"])

按照species分组并查看平均数和中位数

import matplotlib.pyplot as plt
%matplotlib inlineax = plt.axes()
ax.scatter(data.sepal_length, data.sepel_width)
ax.set(xlabel = "xlabel", ylabel="ylabel", title="title")

绘制散点图

# matplotlib方法
ax = plt.axes()
ax.hist(data.sepal_length, bins=25)
ax.set(xlabel = "xlabel", ylabel="ylabel", title="title")# pandas方法
ax = data.sepal_length.plot.hist(bins=25)
ax.set(xlabel = "xlabel", ylabel="ylabel", title="title")

绘制直方图的两种方法

data.boxplot(by="species")

使用pandas画箱线图

import seaborn as sns
sns.set_context('talk')
plot = sns.pairplot(data, hue = "species")
print(plot)

绘制pairplot查看变量间的相关程度

4. 特征工程

(1)数据转换

对于线性回归,一般假定特征是正态分布的,但很多情况下,特征的分布会和正态分布有差别,此时应用数据转换有可能解决问题。

数据转换包括很多种,比如进行log变换、加入多项式特征等

  1. log变换
log_data = [math.log(d) for d in data["score"]]sns.distplot(data, bins=25)
sns.distplot(log_data, bins=25)

下面的图片体现了进行log变换后数据的分布情况

  1. 加入多项式特征
    当对于线性模型 y=wx+b无法拟合时,可以尝试加入更高阶的项
from skllearn.preprocessing import PolynomialFeaturespolyFeat = PolynomialFeatures(degree=2)
polyFeat = polyFeat.fit(x_data)
x_poly = polyFeat.transform(x_data)

(2)特征编码

对于类别特征这种非数值型特征,需要先将其编码,类别特征主要有两种:

  1. 没有明确顺序的特征,例如红色,黄色,绿色
  2. 有明确顺序的特征,例如高,中等,矮

编码的方法包括:

  1. 二进制编码:对于有两类的特征,分别将其编码为0,1
  2. one-hot编码:对于两类以上的特征使用one-hot编码
from sklearn.preprocessing import LabelEncoder, LabelBinarizer, OneHotEncoder
from pandas import get_dummies
  1. 有序编码:对于有序特征,可编码为1,2,3…
from sklearn.preprocessing import OrdinalEncoder
from sklearn.feature_extraction import DictVectorizer

(3)特征缩放

由于不同的连续性变量有着不同的数值范围,会导致模型对于范围较小的特征不敏感,因此要将特征进行缩放变换。

缩放的方法有:

  1. 标准化:减去平均值除以标准差
  2. 最大最小值缩放:转换到(0,1)之间,最大值视为1,最小值视为0.这种方法对异常值很敏感
  3. 鲁棒性缩放:和最大最小值缩放类似,但将四分之三分位点减去四分之一分位点映射到(0,1)之间
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler

5. 估计和推理(estimation and inference)

本节内容比较抽象,表示没怎么看懂

估计vs推理

  • 估计(estimation):是算法的应用,统计不同因素的影响,例如取平均
  • 推理(inference):对估计进行准确度计算,例如标准差

有参数模型vs无参数模型

  • 有参数模型(parametric model):是一种统计模型,也是一个分布或者回归的集合,有有限的参数。例如正态分布

    在有参数模型中估计参数的方法:极大似然估计

    常见的数据分布:均匀分布、高斯分布、log正态分布、指数分布、泊松分布等

  • 无参数模型(non-parametric model):假设数据不属于任何分布,通过已有数据自行创造数据分布

频率派vs贝叶斯派;略
假设检验:略

IBM Machine Learning学习笔记(一)——Exploratory Data Analysis for Machine Learning相关推荐

  1. [学习笔记]Python for Data Analysis, 3E-9.绘图和可视化

    进行信息可视化(有时称为绘图)是数据分析中最重要的任务之一.它可能是探索过程中的一部分-例如,帮助识别异常值或所需的数据转换,或作为生成模型想法的一种方式.对于其他人来说,为Web构建交互式可视化可能 ...

  2. [学习笔记]Python for Data Analysis, 3E-8.数据整理:连接、合并和重塑

    在许多应用程序中,数据可能分布在多个文件或数据库中,或者以不便于分析的形式排列.本章重点介绍有助于合并.联接和重新排列数据的工具. 首先,介绍一下pandas中的分层索引的概念,这个概念在其中一些操作 ...

  3. [学习笔记]Python for Data Analysis, 3E-11.时间序列

    时间序列数据是许多不同领域结构化数据的重要形式,如金融.经济.生态.神经科学和物理学.在许多时间点重复记录的任何内容都会形成一个时间序列.许多时间序列都是固定频率,也就是说数据点回根据某些规律以固定的 ...

  4. 【Machine Learning 学习笔记】Stochastic Dual Coordinate Ascent for SVM 代码实现

    [Machine Learning 学习笔记]Stochastic Dual Coordinate Ascent for SVM 代码实现 通过本篇博客记录一下Stochastic Dual Coor ...

  5. 【Machine Learning 学习笔记】feature engineering中noisy feature的影响

    [Machine Learning 学习笔记]feature engineering中noisy feature的影响 通过本篇博客记录一下添加噪声对Lasso和SVM的影响,采用的数据集为sklea ...

  6. 【CookBook pandas】学习笔记第五章 Exploratory Data Analysis

    dive more into - 深入讨论 exploratory data analysis , the process of sifting through the data and trying ...

  7. 笔记 | 吴恩达Coursera Deep Learning学习笔记

    向AI转型的程序员都关注了这个号☝☝☝ 作者:Lisa Song 微软总部云智能高级数据科学家,现居西雅图.具有多年机器学习和深度学习的应用经验,熟悉各种业务场景下机器学习和人工智能产品的需求分析.架 ...

  8. oracle dg 增加redo组,【学习笔记】Oracle Data Guard 修改dataguard主库redo组数和大小

    天萃荷净 运维DBA反映检查到Oracle DataGuard环境redo日志较小,总结一下修改dataguard主库redo组数和大小方法 在一个dg环境中,配置的是实时同步,需要增加主库的redo ...

  9. 【Azure 架构师学习笔记】-Azure Data Factory (4)-触发器详解-事件触发器

    本文属于[Azure 架构师学习笔记]系列. 本文属于[Azure Data Factory]系列. 接上文[Azure 架构师学习笔记]-Azure Data Factory (3)-触发器详解-翻 ...

最新文章

  1. 【Android Gradle 插件】ProductFlavor 配置 ( ProductFlavor 引入 | ProductFlavor 参考文档地址 )
  2. python冒泡排序_5种python方法实现冒泡排序可视化:Bubble Sort Visualizer
  3. js比较查看两个数组之间是否相等
  4. iOS 简简单单构造单例
  5. 计算机无法还原,降级为Windows 7的计算机无法引导至Windows 10恢复介质
  6. 程序崩溃 分析工具_程序分析工具| 软件工程
  7. layui 传递前端请求_layui弹出层如何传值?
  8. 【美团分享】美团大脑及其在推荐系统中的应用.pdf(附下载链接)
  9. python解压文件(自用)
  10. C++初学者该如何写程序?
  11. linux设备驱动模型架构分析 一
  12. 迭代扩展卡尔曼滤波IEKF
  13. Linux——RAID磁盘阵列及配置
  14. SD卡、记忆棒等内存卡的数据恢复方法
  15. 云计算未来的新方向会是“Sky Computing”吗?
  16. 特惠快车和快车的区别,滴滴特惠快车老司机说了实话?
  17. SQL SERVER中PERCENTILE_CONT和PERCENTILE_DISC
  18. 1.网络通讯-9种常用网络命令
  19. 17964 水桶打水
  20. 结构体的内存对齐规则

热门文章

  1. TensorFlow人工智能入门教程之十一 最强网络DLSTM 双向长短期记忆网络(阿里小AI实现)...
  2. top、kill实现进程结束
  3. Java Architecture [JAVA的架构]
  4. C++-实现matlab的meshgird(OpenCV)
  5. c语言break和return区别,C语言break,continue和return的区别
  6. cordova指定版本_cordova 插件的安装和删除
  7. geoserver三维_集团公司自主研发三维GIS平台产品——GeniusWorld 2.0 C版本发布
  8. linux怎么执行frida脚本,Frida使用和Hook代码整理
  9. yum安装ruby_CentOS 7下配置Ruby语言开发环境的方法教程
  10. python一个函数可以有参数也可以没有参数_Python:有和没有关键字参数的lambda函数行为?...