数据分析之基础篇
前言:
数据分析的应用:
- 了解用户画像、为企业做留存率、流失率等指标分析,进而精细化产品运营
- 预测比特币走势
- 信用卡发欺诈、自动屏蔽垃圾邮件等
高效的学习方法(MAS方法):
- Multi-Dimension:多角度认识事物,进而掌握它
- Ask:不懂就问(突破这一点,同时也要兼顾“会问”)
- Sharing:最好的学习就是分享,用自己的语言讲出来,并对知识进一步梳理
一、全景图以及修炼指南
数据分析的三个组成部分:
- 数据采集:最“接地气”的数据源部分
- 数据挖掘:最“高大上”的部分,整个商业价值所在,核心是挖掘数据的商业价值。方向(寻找其中的规律)、过程(数据分析)、目的(指导公司业务)
- 数据可视化:“万金油”技能,直观了解数据结果
1、数据采集部分
- 知晓常用的数据源,以及如何获取它们
- 掌握“八爪鱼”自动抓取的神器(爬取99%的页面源)
- 编写自动化爬虫,获取微博热点评论,自动给微博加粉等
2、数据挖掘部分(知识型工程)
- 知道它的基本流程、十大算法、背后的数学基础
- 掌握了数据挖掘,就可以通过历史数据,得知未来会发生什么,也会得知这件事发生的置信度是怎样的
3、数据可视化部分
进行数据可视化的两种方法:
- 使用python:在用python进行数据清洗、数据挖掘过程中,可使用Matplotlib、Seaborn等第三方库呈现
- 使用第三方工具:可采用微图、DataV、Data GIF Maker等第三方工具将csv文件呈现出来
4、修炼指南
- 学习数据分析:从“思维”到“工具”再到“实践”
- “认知”的过程:
只有把知识转化为自己的语言,它才能变成自己的东西
构思好数据挖掘算法模型需要注意的原则:
- 不要重复造轮子:
一个模型是否有相关的类库可以使用
——这几乎是每个程序员入行被告知的第一条准则。大部分情况下都能找到类库来完成自己的想法。也就意味着需要找到一个可用的轮子,即工具 - 工具决定效率:
- 工具的选择取决于工作
- 大部分情况选择使用者最多的工具,因为Bug少、文档全、案例多,例如python的第三方库
- 增加熟练度:使用题目和“专属题库”增加对工具使用的“熟练度”,从而提升自己的思考认知模型
修炼指南总结:
- 记录每天的认知:尤其课后;尤其自我理解
- 这些认知对应工具的操作:用工具表达对知识点的掌握,用自己的语言记录操作笔记
- 做更多的联系来巩固认知
二、数据挖掘的最佳路径
数据挖掘,从知识清单开始:数据挖掘的基本流程
、数据挖掘的十大算法
、数据挖掘的数学原理
1、数据挖掘的基本流程
数据挖掘过程的6个步骤:
- 商业理解:数据挖掘不是目的,目的是更好地帮助业务,所以要先从商业的角度理解项目需求,再次基础上对数据挖掘目标进行定义
- 数据理解:尝试收集部分数据、对数据探索(数据描述、数据质量验证等),这有助于对数据的初步认知
- 数据准备:收集数据、对数据清洗、数据集成等操作,完成数据挖掘前的准备工作
- 模型建立:选择和应用数据挖掘模型,并优化
- 模型评估:对模型进行评价,检查构建模型的步骤,确认模型是否实现预定的商业目标
- 上线发布:模型的作用是从数据总找到金矿(“知识”),获得知识需要转化成用户可以使用的方式(一份报告,或一个繁杂的数据挖掘过程),若挖掘结果是日常运营中的一部分,那么后续监控和维护就变得尤为重要
2、数据挖掘的十大算法
按目的不同而分类的算法:
- 分类算法:
C4.5(决策树的算法)
:创造性地在决策树构造过程中进行剪枝,既可处理连续的属性,也可对不完整的数据进行处理朴素贝叶斯
:对未知物体进行分类,需要求解在这个未知物体出现的条件下各个类别出现的概率,那个最大,就认为是那个分类SVM(支持向量机)
:在训练中建立一个超平面的分类模型KNN(K最近邻算法)
:每个样本都可用其最近的K个邻居来代表;例如K个最接近的邻居都属于分类A,那么这个样本也属于分类AAdaboost
:Adaboost在训练中建立一个联合的分类模型;是个构建分类器的提升算法;可让多个弱的分类器组成一个强的分类器CART
:CART代表分类和回归树,它构建两棵树(分类树和回归树),是决策树学习方法
- 聚类算法:
K-Means
:可以这么理解,最终想把物体划分成K类。如果每个类别都有个“中心点”(意见领袖、此类别核心),现有一个新点要归类,这时需要计算这个新点与K个中心点的距离,距离那个中心点近,就变成了哪个类别EM(最大期望算法)
:是求参数的最大似然估计的方法。原理:如果想要评估参数A和B(均未知),并且知道了A的信息就可以得到B的信息,反之亦然。可以考虑赋予A初值,从而得到B,然后从B重新估计A,一直到这个过程收敛为止。
- 关联分析:
Apriori
:是一种挖掘关联规则的算法,通过挖掘频繁项集(经常出现在一起的物品的集合)来解释物品之间的关联关系;关联规则暗示着两种物品之间可能存在很强的关系
- 连接分析:
PageRank
:PageRank 起源于论文影响力的计算方式,如果一篇文论被引入的次数越多,就代表这篇论文的影响力越强。同样 PageRank 被 Google 创造性地应用到了网页权重的计算中:当一个页面链出的页面越多,说明这个页面的“参考文献”越多,当这个页面被链入的频率越高,说明这个页面被引用的次数越高。基于这个原理,我们可以得到网站的权重划分。
3、数据挖掘的数学原理
- 概率论与数理统计
- 线性代数
- 图论
- 最优化方法
三、python
刷题网站:LeetCode、Kaggel、Online Judge
Python非常重要的第三方库:NumPy、Pandas
- NumPy重点学习对
数组
的使用,因为这是NumPy和标准Python最大的区别
- Pandas提供的基础数据结构DataFrame与json契合度高,转换方便
- NumPy中数据结构是围绕
ndarray
展开的,Pandas中核心数据结构是Series和DataFrame
Series和DataFrame
分别代表一维的序列和二维的表结构,可对数据进行导入、清洗、处理、统计和输出
四、数据分析基本概念
百货商店利用数据预测用户购物行为属于商业智能(BI)
,积累的顾客的消费行为习惯会存储在数据仓库
中,通过对个体进行消费行为分析总结出来的规律属于数据挖掘
;商业智能是基于数据仓库,经过了数据挖掘后,得到了商业价值的过程;数据挖掘的核心包括分类、聚类、预测、关联分析等,通过这些炼金术,可以从数据仓库中得到宝藏(商业报告);
数据挖掘:
- 分类:训练集==》分类模型==》对其他数据分类
- 聚类:将相似度大的数据聚类成几个类别,利用聚类做划分
- 预测:通过当前或历史数据预测
- 关联分析:寻找关联规则
数据挖掘之前要进行数据预处理:
- 数据清洗:去除重复数据,去噪声(即干扰数据)以及填充缺失值
- 数据集成:将多个数据源中的数据存放在一个统一的数据存储中
- 数据变换:将数据转换成适合数据挖掘的形式
理解:
五、用户画像:标签化就是数据的抽象能力
互联网的上半场是粗狂运营,有流量红利不需要考虑细节;在下半场,精细化运营将是长久的主题;做好用户画像是长久任务。
六、如何自动化采集数据
数据走势是由多维度影响的,需要多源的数据采集,收集更多的数据维度,保证数据的质量,才能得到高质量的数据挖掘结果。
1、数据采集的数据源
- 开放数据源:政府、企业、高校等行业数据库
- 爬虫抓取:网页、APP
- 传感器:图像、测速、热敏等物理信息
- 日志采集:前端采集、后端脚本
2、开放数据源的使用
使用的开放数据源可以从单位维度(政府、企业、高校)和行业维度(交通、金融、能源)来考虑;亦可搜索领域数据源,例如搜索金融领域开放数据源;数据源举例:
- 美国人口调查局:提供人口信息,地区分布和教育情况等美国公民相关数据
- 欧盟:提供欧盟各机构 的大量数据
- Facebook:用于查询该网站用户公开的海量信息
- Amazon:亚马逊网络服务开放数据集
- Google:谷歌金融,收录了40年以来的额股票数据,实时更新
- 北京大学:北大开放研究数据平台
- ImageNet:目前世界上图像识别最大的数据库,包括1500万张图像
3、使用爬虫做抓取
Python 爬虫三个基本过程:使用 Requests 库来抓取网页信息
、使用 XPath 解析内容
、使用 Pandas 保存数据
可视化爬虫工具:火车采集器
(不止爬取,也可清洗、分析、挖掘等)、八爪鱼
(免费的采集模板和付费的云采集)、集搜客
(完全可视化操作,让用户只关注爬取数据内容)
4、使用日志采集工具
日志采集最大的作用,就是通过分析用户访问情况,提升系统的性能,从而提高系统承载量。及时发现系统承载瓶颈,也可以方便技术人员基于用户实际的访问情况进行优化。
日志记录了用户访问网站的全过程:哪些人在什么时间,通过什么渠道(比如搜索引擎、网址输入)来过,都执行了哪些操作;系统是否产生了错误;甚至包括用户的 IP、HTTP 请求的时间,用户代理等。这些日志数据可以被写在一个日志文件中,也可以分成不同的日志文件,比如访问日志、错误日志等。
日志采集的形式:
- 通过 Web 服务器采集,例如 httpd、Nginx、Tomcat 都自带日志记录功能。同时很多互联网企业都有自己的海量数据采集工具,多用于系统日志采集,如 Hadoop 的 Chukwa、Cloudera 的 Flume、Facebook 的 Scribe 等,这些工具均采用分布式架构,能够满足每秒数百 MB 的日志数据采集和传输需求。
- 自定义采集用户行为,例如用 JavaScript 代码监听用户的行为、AJAX 异步请求后台记录日志等。
埋点:
- 埋点:在有需要的位置采集相应的信息,进行上报。比如某页面的访问情况,包括用户信息、设备信息;或者用户在页面上的操作行为,包括时间长短等
- 目的:每一个埋点就像一台摄像头,采集用户行为数据,将数据进行多维度的交叉分析,可真实还原出用户使用场景,和用户使用需求
- 方法:在需要统计数据的地方植入统计代码,可以自己写,也可使用第三方统计工具,友盟、Google Analysis、Talkingdata 等都是采用前端埋点的方式,然后在第三方工具里就可以看到用户的行为数据。但如果想要看到更深层的用户操作行为,就需要进行自定义埋点。
七、Python爬虫实操
- 练习使用八爪鱼爬虫工具
- Python的自动化爬虫
- Python 爬虫的流程;
- XPath 定位,JSON 对象解析;
- 使用 lxml 库,进行 XPath 的提取;
- 在 Python 中使用 Selenium 库来帮助你模拟浏览器,获取完整的 HTML。
- Python + Selenium + 第三方浏览器可以处理多种复杂场景,包括网页动态加载、JS 响应、Post 表单等。因为 Selenium 模拟的就是一个真实的用户的操作行为,就不用担心 cookie 追踪和隐藏字段的干扰
- Python 还给提供了数据处理工具,比如 lxml 库和 JSON 库,可以提取想要的内容
八、80%的数据清洗时间
有经验的数据分析师都知道,好的数据分析师必定是一名数据清洗高手,要知道在整个数据分析过程中,不论是在时间还是功夫上,数据清洗大概都占到了 80%。
1、数据质量的准则
很多数据挖掘的教学中,数据准则通常会列出来 7~8 项,在这里归类成了4项准则(完全合一):
- 完整性:单条数据是否存在空值,统计的字段是否完善。
- 全面性:观察某一列的全部数值,比如在 Excel 表中,选中一列,可以看到该列的平均值、最大值、最小值。可以通过常识来判断该列是否有问题,比如:数据定义、单位标识、数值本身。
- 合法性:数据的类型、内容、大小的合法性。比如数据中存在非 ASCII 字符,性别存在了未知,年龄超过了 150 岁等。
- 唯一性:数据是否存在重复记录,因为数据通常来自不同渠道的汇总,重复的情况是常见的。行数据、列数据都需要是唯一的,比如一个人不能重复记录多次,且一个人的体重也不能在列指标中重复记录多次。
2、数据清洗(附录文件)
用于明确数据清洗是怎么回事
案例:给以下的数据,让你做数据分析
这是一家服装店统计的会员数据。最上面的一行是列坐标,最左侧一列是行坐标。列坐标中,第 0 列代表的是序号,第 1 列代表的会员的姓名,第 2 列代表年龄,第 3 列代表体重,第 4~6 列代表男性会员的三围尺寸,第 7~9 列代表女性会员的三围尺寸。
由于 Pandas 纳入了大量库,它是基于 NumPy 的工具,专门为解决数据分析任务而创建,可以利用这些库高效地进行数据清理工作(当然,别的清洗方式也行)。
完整性
- 问题1:缺失值
解决数据中年龄、体重数值缺失问题:
1、删除数据缺失的记录 2、使用当前列的均值 3、使用当前列出现频率最高的数据
对 df['Age'] 中缺失的数值用平均年龄进行填充:
df['Age'].fillna(df['Age'].mean(), inplace=True)
如果用最高频的数据进行填充,可以先通过 value_counts 获取 Age 字段最高频次 age_maxf,然后再对 Age 字段中缺失的数据用 age_maxf 进行填充:
age_maxf = train_features['Age'].value_counts().index[0] train_features['Age'].fillna(age_maxf, inplace=True)
- 问题2:空行
发现数据中有一个空行,除了 index 之外,全部的值都是 NaN。Pandas 的 read_csv() 并没有可选参数来忽略空行,这样,我们就需要在数据被读入之后再使用 dropna() 进行处理,删除空行。
df.dropna(how='all',inplace=True) # 删除全空的行
全面性
问题:列数据的单位不统一
观察 weight 列的数值,能发现 weight 列的单位不统一。有的单位是千克(kgs),有的单位是磅(lbs)。这里使用千克作为统一的度量单位,将磅(lbs)转化为千克(kgs):
# 获取 weight 数据列中单位为 lbs 的数据
rows_with_lbs = df['weight'].str.contains('lbs').fillna(False)
print df[rows_with_lbs]
# 将 lbs转换为 kgs, 2.2lbs=1kgs
for i,lbs_row in df[rows_with_lbs].iterrows():
# 截取从头开始到倒数第三个字符之前,即去掉lbs。
weight = int(float(lbs_row['weight'][:-3])/2.2)
df.at[i,'weight'] = '{}kgs'.format(weight)
合法性
问题:非 ASCII 字符
在数据集中 Fristname 和 Lastname 有一些非 ASCII 的字符。可以采用删除或者替换的方式来解决非 ASCII 问题,这里使用删除方法:
# 删除非 ASCII 字符
df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True)
唯一性
- 问题 1:一列有多个参数
姓名列(Name)包含了两个参数 Firtname 和 Lastname。为了达到数据整洁目的,将 Name 列拆分成 Firstname 和 Lastname 两个字段。使用 Python 的 split 方法,str.split(expand=True),将列表拆成新的列,再将原来的 Name 列删除:
# 切分名字,删除源数据列
df[['first_name','last_name']] = df['name'].str.split(expand=True)
df.drop('name', axis=1, inplace=True)
- 问题 2:重复数据
校验数据中是否存在重复记录,如果存在,就使用 Pandas 提供的 drop_duplicates() 来删除重复数据:
# 删除重复数据行
df.drop_duplicates(['first_name','last_name'],inplace=True)
3、数据审核的习惯
- 可以说没有高质量的数据,就没有高质量的数据挖掘,而数据清洗是高质量数据的一道保障。
- 养成数据审核的习惯非常重要,而且越是优秀的数据挖掘人员,越会有“数据审核”的“职业病”。
- 朝着看一眼数据,差不多 7 秒钟的时间,就能知道这个数据是否存在问题的方向努力。
- 基础性的工作,需要耐下性子,一个坑一个坑地去解决。
九、数据集成
1、引入数据集成
采集的数据经常会有冗余重复的情况,例如:一个网络综艺节目邀请 30 位明星,这些明星影响力都很大,具体在微博上的粉丝数都有标记,统计下,这些明星一共能直接影响到微博上的多少粉丝,能产生多大的影响力??
突然发现,这些明星的粉丝数总和超过了 20 亿(显然不可能),那如何统计这 30 位明星真实的影响力总和呢?需要用到数据集成
2、数据集成的两种架构:ELT 和 ETL
ELT 和 ETL
ETL包括了数据抽取(Extract)、转换(Transform)、加载(Load)三个过程
- 抽取是将数据从已有的数据源中提取出来
- 转换是对原始数据进行处理,例如对两张或三张表的处理
ETL和ELT过程和区别(数据集成的主流架构是 ETL,但未来使用 ELT 作为数据集成架构的将越来越多)
- ETL 的过程为提取 (Extract)——转换 (Transform)——加载 (Load),在数据源抽取后首先进行转换,然后将转换的结果写入目的地。
- ELT 的过程则是提取 (Extract)——加载 (Load)——变换 (Transform),在抽取后将结果先写入目的地,然后利用数据库的聚合分析能力或者外部计算框架,如 Spark 来完成转换的步骤
- ELT 和 ETL 相比,最大的区别是“重抽取和加载,轻转换”,从而可以用更轻量的方案搭建起一个数据集成平台。使用 ELT 方法,在提取完成之后,数据加载会立即开始。一方面更省时,另一方面 ELT 允许 BI 分析人员无限制地访问整个原始数据,为分析师提供了更大的灵活性,使之能更好地支持业务
- 在 ELT 架构中,数据变换这个过程根据后续使用的情况,需要在 SQL 中进行,而不是在加载阶段进行。这样做的好处是你可以从数据源中提取数据,经过少量预处理后进行加载。这样的架构更简单,使分析人员更好地了解原始数据的变换过程
ETL工具
- 商业软件:Informatica PowerCenter、IBM InfoSphere DataStage、Oracle Data Integrator、Microsoft SQL Server Integration Services 等
- 开源软件:Kettle、Talend、Apatar、Scriptella、DataX、Sqoop 等
3、Kettle 工具的使用
Kettle开源ETL工具,纯Java编写,跨平台运行,06年并入Pentaho公司,目前是Pentaho的一个组件;Kettle 采用可视化的方式进行操作,来对数据库间的数据进行迁移。包括了两种脚本:Transformation 转换和 Job 作业。
- Transformation(转换):相当于一个容器,对数据操作进行定义。数据操作就是数据从输入到输出的一个过程。可把转换理解成为是比作业粒度更小的容器。在通常的工作中,会把任务分解成为不同的作业,然后再把作业分解成多个转换。
- Job(作业):相比于转换是个更大的容器,它负责将转换组织起来完成某项作业
创建 Transformation(转换)
Transformation分三步(输入、中间转换、输出)
Transformation中两个主要概念:Step 和 Hop
- Step(步骤):Step 是转换的最小单元,每一个 Step 完成一个特定的功能。在上面这个转换中,就包括了表输入、值映射、去除重复记录、表输出
- Hop(跳跃线):用来在转换中连接 Step,它代表了数据的流向
创建 Job(作业)
Job 中两个概念:Job Entry、Hop
- Job Entry(工作实体):Job Entry 是 Job 内部的执行单元,每一个 Job Entry 都是用来执行具体的任务,比如调用转换,发送邮件等
- Hop:指连接 Job Entry 的线。并且它可以指定是否有条件地执行
在 Kettle 中,可以使用Spoon(一种图形化的方式)设计 Job 和 Transformation,并保存为文件或者保存在数据库中
案例 1:将文本文件内容转化到 MySQL 数据库中
创建文本文件(table分隔符)数据集.txt:
create_time name Chinese English Math
2018/12/22 ZhangFei 66 65 30
2018/12/22 GuanYu 95 85 98
2018/12/22 ZhaoYun 93 92 96
2018/12/22 HuangZhong 90 88 77
2018/12/22 DianWei 80 90 90
预备条件:
转化流程:
- 启动Spoon.bat,右击
转换
点击新建
,转到核心对象
,拖控件和
到工作区,增加连接线:
- 双击
文本文件输入
编辑,之后确定
- MySQL中创建表score(这里使用的是Navicat)
- 双击
表输出
,点击Wizard...
添加数据库连接,然后选择打钩指定数据库字段
,然后选择数据库字段
(我这里手动输入的),最后确定
- 点击运行
,查看运行结果
4、阿里开源软件:DataX
以往的数据库都是两两之间进行的转换,没有统一的标准,转换形式如下:
有了DataX(可实现跨平台、跨数据库、不同系统之间的数据同步及交互,将自己作为标准,连接了不同的数据源)数据库之间的转换如下:
DataX模式是基于框架 + 插件完成,
Job 作业被 Splitter 分割器分成了许多小作业 Sub-Job。在 DataX 里,通过两个线程缓冲池来完成读和写的操作,读和写都是通过 Storage 完成数据的交换。比如在“读”模块,切分后的小作业,将数据从源头装载到 DataXStorage,然后在“写”模块,数据从 DataXStorage 导入到目的地。这样好处就是,在整体的框架下,可以对 Reader 和 Writer 进行插件扩充,比如我想从 MySQL 导入到 Oracle,就可以使用 MySQLReader 和 OracleWriter 插件,装在框架上使用即可
5、Apache 开源软件:Sqoop
Sqoop可以方便地将数据从关系型数据库导入到 HDFS 中,或者将数据从 HDFS 导出到关系型数据库中
十、数据转换
百分制考试中95常被认为成绩好、65成绩不好、80中等,产生这样认知行为的原因是小到大的考试成绩基本上都会满足正态分布的情况;在正态分布中,大部分人的成绩会集中在中间的区域,少部分人处于两头的位置;正态分布的另一个好处就是,如果知道了自己的成绩,和整体的正态分布情况,就可以知道自己的成绩在全班中的位置
1、数据变换在数据分析中的角色
假如两个人均80分,但是一个是百分之,另一个是五百分制,如果把从这两个渠道收集上来的数据进行集成、挖掘,就算使用效率再高的算法,结果也不是正确的,因为这两个渠道的分数代表的含义完全不同(这也就是为什么80%的工作时间会花在数据准备上的原因);但是如何让不同渠道的数据统一到一个目标数据库里呢?这样就用到了数据变换。
在数据变换前,需要:
- 先对字段进行筛选
- 然后对数据进行探索和相关性分析
- 接着是选择算法模型(这里暂时不需要进行模型计算)
- 然后针对算法模型对数据的需求进行数据变换
- 从而完成数据挖掘前的准备工作
数据变换是数据准备的重要环节,通过数据平滑、数据聚集、数据概化和规范化等方式将数据转换成适用于数据挖掘的形式;
2、数据变换方法
- 数据平滑:去除数据中的噪声,将连续数据离散化。可以采用分箱、聚类和回归的方式进行数据平滑
- 数据聚集:对数据进行汇总,在 SQL 中有一些聚集函数可以供操作,比如 Max() 反馈某个字段的数值最大值,Sum() 返回某个字段的数值总和
- 数据概化:将数据由较低的概念抽象成为较高的概念,减少数据复杂度,即用更高的概念替代更低的概念。比如说上海、杭州、深圳、北京可以概化为中国
- 数据规范化:使属性数据按比例缩放,这样就将原来的数值映射到一个新的特定区域中。常用的方法有最小—最大规范化、Z—score 规范化、按小数定标规范化等
- 属性构造:构造出新的属性并添加到属性集中。这里会用到特征工程的知识,因为通过属性与属性的连接构造新的属性,其实就是特征工程。比如说,数据表中统计每个人的英语、语文和数学成绩,可以构造一个“总和”这个属性,来作为新属性。这样“总和”这个属性就可以用到后续的数据挖掘计算中
数据规范化的几种方法
- Min-max 规范化
Min-max 规范化方法是将原始数据变换到 [0,1] 的空间中。用公式表示就是:新数值 =(原数值 - 极小值)/(极大值 - 极小值) - Z-Score 规范化
假设 A 与 B 的考试成绩都为 80 分,A 的考卷满分是 100 分(及格 60 分),B 的考卷满分是 500 分(及格 300 分)。虽然两个人都考了 80 分,但是 A 的 80 分与 B 的 80 分代表完全不同的含义。那么如何用相同的标准来比较 A 与 B 的成绩呢?Z-Score 就是用来可以解决这一问题的。
定义:新数值 =(原数值 - 均值)/ 标准差。假设 A 所在的班级平均分为 80,标准差为 10。B 所在的班级平均分为 400,标准差为 100。那么 A 的新数值 =(80-80)/10=0,B 的新数值 =(80-400)/100=-3.2。那么在 Z-Score 标准下,A 的成绩会比 B 的成绩好。所以能看到 Z-Score 的优点是算法简单,不受数据量级影响,结果易于比较。不足在于,它需要数据整体的平均值和方差,而且结果没有实际意义,只是用于比较 - 小数定标规范化
小数定标规范化就是通过移动小数点的位置来进行规范化。小数点移动多少位取决于属性 A 的取值中的最大绝对值。举个例子,比如属性 A 的取值范围是 -999 到 88,那么最大绝对值为 999,小数点就会移动 3 位,即新数值 = 原数值 /1000。那么 A 的取值范围就被规范化为 -0.999 到 0.088
可以使用Python 的 SciKit-Learn 库进行数据规范化(SciKit-Learn 不仅可以用于数据变换,它还提供了分类、聚类、预测等数据挖掘算法的 API 封装)
3、数据挖掘中数据变换比算法选择更重要
在考试成绩中,都需要让数据满足一定的规律,达到规范性的要求。这就是数据变换的作用。如果不进行变换的话,要不就是维数过多,增加了计算的成本,要不就是数据过于集中,很难找到数据之间的特征。在数据变换中,重点是如何将数值进行规范化,有三种常用的规范方法,分别是 Min-Max 规范化、Z-Score 规范化、小数定标规范化。其中 Z-Score 规范化可以直接将数据转化为正态分布的情况,当然不是所有自然界的数据都需要正态分布,也可以根据实际的情况进行设计,比如取对数 log,或者神经网络里采用的激励函数等
十一、数据可视化
根据不同的需求选择不同的视图来呈现:
- 想呈现某个变量的分布情况,选择直方图的形式呈现
- 想要看两个变量之间的相关性及分布情况,选择散点图的形式呈现等等
可视化工具介绍:
十二、Python数据可视化
用 Python 进行数据分析,就需要在项目初期开始进行探索性的数据分析,这样方便对数据有一定了解。其中最直观的就是采用数据可视化技术,这样,数据不仅一目了然,而且更容易被解读。同样在数据分析得到结果之后,还需要用到可视化技术,把最终的结果呈现出来
按照数据之间的关系,把可视化视图划分为 4 类,它们分别是比较、联系、构成和分布:
- 比较:比较数据间各类别的关系,或者是它们随着时间的变化趋势,比如折线图
- 联系:查看两个或两个以上变量之间的关系,比如散点图
- 构成:每个部分占整体的百分比,或者是随着时间的百分比变化,比如饼图
- 分布:关注单个变量,或者多个变量的分布情况,比如直方图
按照变量的个数,可以把可视化视图划分为单变量分析和多变量分析
- 单变量分析指的是一次只关注一个变量。比如只关注“身高”这个变量,来看身高的取值分布,而暂时忽略其他变量
- 多变量分析可以在一张图上查看两个以上变量的关系。比如“身高”和“年龄”
可视化的视图多种多样,主要常用的视图包括了散点图、折线图、直方图、条形图、箱线图、饼图、热力图、蜘蛛图、二元变量分布和成对关系
附件列表