数据分析概述

数据分析完整工作流程

关于数据分析的大体流程这里以图形的形式展现给大家,就不做过多的讲述。

数据探索与相关性分析

这一部分是直接从数据分析工作流程中的数据整理与清洗开始。

数据探索,探索性数据分析(Exploratory Data Analysis),简称EDA。传统的统计方法是先假定数据服从某种分布,然后运用这种模型进行预测,以概率论为基础,做参数检验。而EDA则是强调数据,“抛开”概率的理论,从数据出发,主要手段是汇总统计,可视化。

在进行EDA时,我们可以分为三个阶段,分别是:

  • 数据概况分析

  • 单变量分析

  • 多变量分析

用图形来展示如下:

接下来跟大家简单的分享一下数据探索性分析的流程,下面的所有过程都会使用到Python的pandas包。

数据概况分析

在数据概况分析阶段,我们主要了解数据整体的基本情况,比如数据的离散程度,数据的分布等,以及数据中是否存在异常值/缺失值。这里以二手车价格预测的数据来做个例子。(代码看不懂没关系,看结果就好,不妨碍理解)

#version:python3.6.5#package:Pandas#encoding=utf-8import pandas as pd#发现csv是以空格分割的car=pd.read_csv('used_car.csv',sep=' ')#查看数据维度,整体概况print(car.shape,'\n','#'*100)print(car.axes,'\n','#'*100)print(car.info(),'\n','#'*100)>>>结果:(150000, 31) #数据维度,数据有15万行,31列(属性)###############################################################################################[RangeIndex(start=0, stop=150000, step=1), Index(['SaleID', 'name', 'regDate', 'model', 'brand', 'bodyType', 'fuelType',       'gearbox', 'power', 'kilometer', 'notRepairedDamage', 'regionCode',       'seller', 'offerType', 'creatDate', 'price', 'v_0', 'v_1', 'v_2', 'v_3',       'v_4', 'v_5', 'v_6', 'v_7', 'v_8', 'v_9', 'v_10', 'v_11', 'v_12',       'v_13', 'v_14'],      dtype='object')]       #上面查看的是各属性的名称 ###############################################################################################<class 'pandas.core.frame.DataFrame'>RangeIndex: 150000 entries, 0 to 149999Data columns (total 31 columns):SaleID               150000 non-null int64name                 150000 non-null int64regDate              150000 non-null int64model                149999 non-null float64brand                150000 non-null int64bodyType             145494 non-null float64fuelType             141320 non-null float64gearbox              144019 non-null float64power                150000 non-null int64kilometer            150000 non-null float64notRepairedDamage    150000 non-null objectregionCode           150000 non-null int64seller               150000 non-null int64offerType            150000 non-null int64creatDate            150000 non-null int64price                150000 non-null int64v_0                  150000 non-null float64v_1                  150000 non-null float64v_2                  150000 non-null float64v_3                  150000 non-null float64v_4                  150000 non-null float64v_5                  150000 non-null float64v_6                  150000 non-null float64v_7                  150000 non-null float64v_8                  150000 non-null float64v_9                  150000 non-null float64v_10                 150000 non-null float64v_11                 150000 non-null float64v_12                 150000 non-null float64v_13                 150000 non-null float64v_14                 150000 non-null float64dtypes: float64(20), int64(10), object(1)memory usage: 35.5+ MBNone  #上面查看的是各数值型的数据缺失情况和类型 ###############################################################################################

查看了数据的整体情况,接下来对数据进行描述性统计分析。

#查看数据整体分布情况np.set_printoptions(suppress=True)#supress:设置不显示科学记数法|pd.set_option('display.float_format', lambda x: '%.2f' % x) car.describe()#用describe方法对整体数据进行描述统计分析

结果如下图所示。

  • count:该属性下数据的总数;

  • mean:平均数;

  • std:标准差,数据的偏离均值程度;

  • min~max:中间是四分位数,用于判断样本数据的分布情况和离群值等;

注:上面的描述统计针对的是数值型的变量,不包含类别型变量。

对于类别型的属性,首先查看一下这个属性有什么类别,如果类别数量不多的话,后面可以考虑将它转变为哑变量方便分析和建模。

类别型的统计描述与数值型的数据不一样,具体如下图所示。

类别型数据描述统计的参数含义是:

  • unique: 唯一值数

  • top: 频数最高者

  • freq: 最高频数

单变量分析

连续型数值变量分析

这里我们拿二手车数据的price字段来举个例子,见下图。

无论是单变量分析还是多变量分析阶段,都需要做大量的图对变量进行分析,因为通过图形的展示能够更加的直观看到问题所在。除了上面的直方图,我们还可以采用箱线图等对数据进行可视化分析。

通过可视化分析后,如果数据存在离群值,我们可以看看它在数据中的占比,再酌情删除,避免其对后续的模型构建造成影响。

如果变量数据存在缺失值,我们会看看缺失值占比,如果占比不高,我们可以通过填充均值的方式(适用于数值型(连续型)变量)来对缺失值进行填充。

离散型变量分析

对于离散型变量,我们可以用value_counts()函数来统计各类别数量和占总数比,也可以用直方图来进行可视化分析,如下图所示,X轴即为离散型变量的值。

如果离散型数据的类别过多,我们可以用先验知识查看各类别型数据,找到其区分点,对其进行一个特征衍生。

举个例子,如下,是邮箱属性下的类别数值。

df.xx.value_counts()>>>结果:邮箱                 总数gmail.com           61738hotmail.com         25657anonymous.com       19115yahoo.com            9563aol.com              3538outlook.com          2504comcast.net          1701icloud.com           1422yahoo.com.mx         1235msn.com               846live.com.mx           710live.com              682sbcglobal.net         611verizon.net           582me.com                539att.net               440outlook.es            420cox.net               395hotmail.fr            374bellsouth.net         373hotmail.es            303web.de                277mail.com              219mac.com               212hotmail.co.uk         212ymail.com             198yahoo.fr              178optonline.net         163gmx.de                150charter.net           136gmail                 101prodigy.net.mx         96earthlink.net          91hotmail.de             88embarqmail.com         72yahoo.co.jp            71yahoo.es               67yahoo.de               64juno.com               58frontier.com           58rocketmail.com         57windstream.net         57live.fr                50roadrunner.com         48servicios-ta.com       45

假设通过先验知识,我们得知到某个邮箱类别是匿名的,那么我们就可以将这个邮箱属性里的类别分为两类,一类是无匿名的,一类是匿名的,经过处理后,便衍生出了一个新的特征——邮箱是否匿名,同时也方便了对值多的离散型变量的处理。

相关性分析

一般来说,相关性分析是我们建模前的最后一个步骤。为什么要相关性分析呢?

当特征(属性)间的相关性达到0.99甚至1这种程度时,需要对特征(属性)进行删除处理。当特征(属性)相关性高时,模型会偏向采样这些高相关的特征,导致最后模型会依赖这些相关性高的特征,最终结果就是降低模型的泛化性能。

通过删除高相关性的数据,一方面可以节约内存,另一方面可以提高算法模型的泛化能力。

关于计算相关性的一个问题

最好使用全量数据进行相关性计算。

Pandas的corr函数(采用的是皮尔逊相关系数)计算相关性存在一个问题,就是如果两个特征存在较多的缺失值,那么计算出来的结果的偏差是很大的。举个例子:

#相关性计算dataframe.feature1=[2,4,5,np.nan,np.nan]dataframe.feature2=[np.nan,np.nan,5,6]df=dataframe[['feature1','feature2']]print(df.corr())>>>1

相关系数只会计算二者都不缺失的位置,对于上面的相关性计算来说,也就是5,那么算出来的结果是1。

显然这是错误的,所以我们要先进行缺失值的搜索,把缺失值恰好完全相同的特征放在一起,这样后续我们进行相关性的计算才是合理的

类别型数据的相关性无法使用皮尔逊相关系数去计算,需要使用一些特殊的指标去衡量。

相关性分析的可视化例子如下,采用的是热力图。

关于相关性高特征删除的一个问题

当两个特征,假设C1和C2两个特征相关性达到0.97,那么此时该删除哪个特征呢?

看C1和C2完全不相同的取值有多少个。

cols=['C1','C2']for col in cols:    print(dataframe[col].unique().shape[0])    >>>  C1:1495     C2:1167

这里选择删除C4,对于数来说,取值不同的越多,相对来说可能分裂的地方也就越多,也就意味着这个特征包含的信息量越多。

当然也可以看特征的IV值,但是较为麻烦,计算耗费时间,还不如用上面的方法,更加方便快速。

建模

一般情况下,在经过探索性数据分析和相关性分析后,我们就可以利用数据进行建模分析了。在建模分析或者说数据分析开始前,我们第一个需要明确的,就是我们为什么要进行数据分析,我们数据分析的目的是什么?

拿二手车价格预测举个例子,我们对二手车的数据进行分析,目的就是为了预测某种类型的二手车它大概能卖多少钱?这就是我们建模中的因变量——价格。而二手车的型号、品牌、使用年限等数据就是自变量。

对于建模来说,我们不需要一股脑的把所有的自变量都加入模型当中,并不是喂给模型的自变量越多出来的模型就越壮,它可能会被“撑死”,即表现为训练出来的模型效果不好,跟瞎猜没两样。

我们自变量的投喂是要依据前面的相关性的分析,去除高度一致(相关性高)的自变量中的一个,选取与因变量的相关性高的自变量,来进行建模。

而对于建立的模型的选择,根据你的目的,如果你是对一连串数值的预测,你可以选择线性回归模型,也可以选择CART算法的回归树模型。

如果你是想预测分类数据,且是二分类的问题,比如预测用户是否购买,则采用二元逻辑回归模型,当然,也可以采用使用CART算法的分类树模型。

如果你是想建模解决多分类问题,则也可以采取建立多个决策树模型来解决当然也可以采用多元逻辑回归模型。

如果你是想解决空间数据的分类问题,那么SVM算法模型是个不错的选择。

模型评估

输出为连续型数值的模型评估

建立好模型后,我怎么知道模型的优劣呢?这个时候就需要对建立好的模型进行一个评估,相应的,python的sklearn库中就有相应的评分函数,我们可以调用来计算。

对于模型输出的结果是连续的数值类的模型,我们通常采用二乘偏差均值和绝对值差均值来衡量模型的效果。通过将数据切割为训练集和测试集,测试集的数据拿来进行测试,训练集的数据拿来进行训练模型。

训练集数据训练出来模型后,将测试集的数据投喂给模型,最后得出模型预测的测试集的因变量的数值,我们用Vt表示,而测试集原来的因变量用Vd表示

则绝对值偏差均值为:

则二乘偏差均值为:

模型优化的目标就是使得绝对值偏差(LAD)均值,或者二乘偏差(LSD)均值最小。

对于无划分测试集的输出为连续型的模型评估

这里可以采用K折交叉验证的方法,详情可以自行百度,这里不多解释。

输出结果为离散型数值的模型评估

这里的模型指的就是分类问题的模型,这类模型一般输出结果固定为0(是)或1(否),可以通过划分训练集,测试集的方法直接比对结果就可。

模型优化

对于评估效果不好的模型,一般我们会调整模型的自变量,带入不同的特征(自变量),看看哪个自变量组合对模型输出的结果的准确率最高,就拿哪个自变量组合作为建模变量。

此外,还可以调整模型的迭代次数或通过数据进行一些变换处理,使得模型得到优化。

这里拿二手车价格预测的模型优化前后的可视化展示来做个例子。

这是一开始的模型结果可视化图。

红色的线条是测试集因变量的数据,蓝色的线条是模型预测的测试集的因变量数据,可以看到两种颜色的线条差异较大,说明模型效果并不好。

通过对数据进行一些变换处理后的模型结果可视化如下:

可以看见,经过处理后,模型的性能得到了很大的优化。

模型的优化方法还有很多,我这里就不一一列举了,今天分享的内容就到这里,希望能对大家有所帮助。

码字不易,希望大家能点个在看,顺带帮忙点个赞,谢谢大家~

END

扫码关注我吧!

搜索"EVERWEEKUP"关注我的个人网站~

 往期文章 


Webscraper让你不用编程也能爬虫!

科学吃瓜,你造吗?

个人公众号简介


gsea结果分析图怎么看_数据分析怎么做?看这篇就够了!相关推荐

  1. sip 时序图_时序图怎么看_教你如何看懂时序图 - 什么是时序图_时序图怎么看_教你如何看懂时序图...

    时序图怎么看_教你如何看懂时序图 操作时序永远使用是任何一片IC芯片的最主要的内容.一个芯片的所有使用细节都会在它的官方器件手册上包含.所以使用一个器件事情,要充分做好的第一件事就是要把它的器件手册上 ...

  2. 销售数据分析怎么做?这篇文章说清楚了

    如何分析销售数据?分析销售数据有哪些指标?销售数据分析有什么作用? 销售数据是不是得通过数据分析软件啊? 本文将为您解答疑惑-- 一.分析销售数据的指标 从两个层面上来讲,一个是对销售情况的整体把控, ...

  3. numpy 随机数_数据分析numpy基础看着一篇就够了

    1,Numpy基础数据结构 2,Numpy通用函数 3,Numpy索引及切片 4,Numpy随机数 5,Numpy数据的输入输出 1,Numpy基础数据结构 NumPy数组是一个多维数组对象,称为nd ...

  4. python数据维度小测试_数据分析|如何做一个ABtest测验

    A/B-test是为同一个目标制定两个方案,在同一时间维度,分别让组成成分相同(相似)的用户群组随机的使用一个方案,收集各群组的用户体验数据和业务数据,最后根据显著性检验分析评估出最好版本正式采用. ...

  5. 报告怎么看_体检报告怎么看? 超实用的阅读指南来了!

     体检报告怎么看?   超实用的阅读指南来了! 要点概括 除了禁食禁水可以吞口水吗?这样的问题,还有胆固醇.甘油三酯.胆红素-这些指标都是什么意思?出现升高或降低提示了怎样的身体变化? 九图带你读懂! ...

  6. 联想电脑尺寸在哪里看_笔记本屏幕大小怎么看 查看笔记本屏幕型号尺寸方法...

    最近有网友"微笑"问小编这样一个问题:笔记本屏幕大小怎么看?如何查看笔记本屏幕型号呢?对于这个问题,笔者感觉又简单,但又不好如何解释.我们知道,一般笔记本的屏幕大小主流相对固定的几 ...

  7. 肺功能曲线图怎么看_肺功能检查报告怎么看

    肺功能检查报告怎么看更新时间:2017-06-30 核心提示: 肺部是人体外呼吸与内呼吸的总枢纽,若异常时对人体健康影响很大.因此,欲知肺部健康状态,肺功能检查也是其检测指标之一.肺功能检查包括通气功 ...

  8. Escript氨基酸对比图怎么看_太神奇!看完了这8张NBA对比图发现,真的可以有一模一样的动作...

    日前湖人球星詹姆斯在社交媒体上面发布了一张自己扣篮对比图,这是一张詹姆斯新秀赛季和这个赛季的扣篮对比,这姿势和动作几乎是一模一样,就连空中蹬腿的姿势都是那么相似.网友看到后纷纷吐槽:这三旬老汉,都16 ...

  9. 三位数的茎叶图怎么看_茎叶图怎么看,茎叶图的特点(简要概括)

    茎叶图(Stem-and-Leaf Diagrams)又称"枝叶图",由统计学家约翰托奇设计,它的思路是将数组中的数按位数进行比较,将e68a84e8a2ade799bee5baa ...

最新文章

  1. 电网机巡智能管控平台渗透测试经历
  2. switch case in protected scope 异常解决
  3. Storm WordCount
  4. 图像增强算法四种,图示与源码,包括retinex(ssr、msr、msrcr)和一种混合算法
  5. Notepad++插件总结
  6. 会计职业道德教育的途径
  7. WindowsPhone-GameBoy模拟器开发四--Gameboy显示系统分析
  8. ajax获取301,PHP获取301重定向页面跳转后真实URL地址
  9. 一个人学习3D视觉太痛苦了怎么办?
  10. html自动旋转屏幕,求教!HTML5屏幕旋转90度再让画布自适应,该如何做,大神给留demo...
  11. 机器学习十大算法(一)
  12. python爬取网易云音乐评论并制作词云
  13. Linux的iio数据流程,linux iio子系统
  14. 下一代防火墙(NGFW)已死!
  15. 为什么手机网速太慢_手机网速慢怎么回事?一分钟就提速两倍的方法
  16. 目前市场上主流的BI产品主要有哪些?
  17. 用c语言做一个五子棋程序,C语言制作简单五子棋游戏
  18. pyautoGUI自动化脚本
  19. 【Electron】 NSIS 打包 Electron 生成exe安装包
  20. html打印图片不显示不全,Word里图片显示全打印不全是怎么回事

热门文章

  1. ajax插件库,03.vue-ajax、vue UI 组件库
  2. VK1629A 驱动芯片
  3. 4-剑指offer: 把数组排成最小的数
  4. Oauth2.0协议 http://www.php20.com/forum.php?mod=viewthreadtid=28 (出处: 码农之家)
  5. mysql忘记数据库密码
  6. 20140417--Linux课程讲解目录索引
  7. Silverlight学习笔记之页面跳转
  8. Cloud Foundry技术资料汇总
  9. Wand mixture在Horseshoe模型中的应用
  10. UA MATH563 概率论的数学基础 中心极限定理4 独立一元随机变量的性质