Head First 数据分析学习

来源:互联网 发布:手机新浪微博盗号软件 编辑:程序博客网 时间:2024/06/18 16:53

数据分析 Head First

分解数据

确定->分解->评估->决策

实验研究法

控制组(对照组):不做任何处理

历史控制法和同期控制法

历史控制法使用的是过去的数据,将过去的数据做为控制数据
同期控制法与历史控制法相反,控制组和实验组是同时进行的
历史控制法不推荐,最好使用同期控制法。
实验时要注意混杂因素,要尽可能的减少混杂因素
避免的方法:随机选择相似组

最优化 寻找最大值

**目标函数:**c1x1+c2x2=p 『p为目标| c为约束条件| x为决策变量』

用电子表格实现最优化

用excel表格数据拦下的规划求解,最后要得到的结果是哪一格就点这个单元格的规划求解,在弹出的框中填上决策变量和约束条件,约束条件一定要写全, 而且约束条件是随着时间的变化而不断变化的

数据图形化

当提供的数据太多时,只要记住自己的目标只看与目标有关的数据
数据图形化的根本在于正确比较

散点图

散点图通过自变量和因变量发现因果关系
多元图形:能对三个以上的变量进行比较
将多张散点图相邻排放可以实现图形,可以实现这种图形的软件工具
* R统计数据分析程序
* Adobe Illustrator绘图工具

## 假设检验

假设检验的核心是证伪,即剔除无法证实的假设
满意法是选出看上去最可信的第一个假设的做法,但不推荐使用
诊断性能帮助你评估所考虑假设的相对似然,即按照强弱程度对假设进行排列。如果一个证据对3个假设的效果是一样的,那么这个证据没有诊断性

贝叶斯统计

条件概率:以一件事情的发生为前提的另一件事的发生概率
基础概率:
1.又称事前概率,在根据实验分析每个人的情况之前,就已经知道患病的人口大概有1%。
2.要小心基础概率谬误,基础概率不一定每种情况下都存在,但是有的时候一定要用,否则就毁于基础概率谬误。
3.基础概率会因实验针对的人群不同而发生改变。比如第一次针对的是所有人,基础概率为1%。第二次针对的是第一次检测结果为阳性的人,那么基础概率为上次计算出的为阳性且患病的概率9%

贝叶斯规则

利用基础概率和条件概率
实验结果为阳性患蜥蜴流感的概率=基础概率(人口患病的概率)X 真阳性率/[基础概率(人口的患病率)X 真阳性率 + 人口未患病率 X 假阳性率]

主观概率(信念数字化)

主观概率:用一个数字形式的概率来表示自己对某事的确认程度。把人们说话中的可能、一定之类的词用 概率表示

用Excel的STDEV公式计算标准偏差—-=STDEV(数据范围)

贝叶斯规则是用来修正主观概率的好办法

即有新情况或新数据产生时,用贝叶斯规则对原来的主观概率进行修正
P(S1)——>P(S1|E) 第一次的主观概率P(S1)为认为俄罗斯会支持石油业
第二次的主观概率为有新证据出来后继续认为俄罗斯会支持石油业

通过贝叶斯公式 P(S1|E)=P(E|S1)P(S1)/P(E|S1)P(S1)+P(~S1)P(E|~S1)

P(E|S1)也就是在假设条件(俄罗斯会继续支持石油业)成立的条件下,分析师认为证据出现(俄罗斯会宣布他们卖出石油)的主观概率
P(E|~S1)也就是在假设条件(俄罗斯会继续支持石油业)不成立的条件下,分析师认为证据出现(俄罗斯会宣布卖出石油)的主观概率

启发法(凭人类的天性作分析)

启发法:选取一俩个变量,然后根据这几个变量对整个系统做出结论。
1.心理学定义:用一种更便于理解的属性代替一种难解的令人困惑的属性
2.计算机科学定义:一种解决问题的方法,可能会得出正确答案,不保证得出最优化的答案
当解决一个最优化问题时(要知道最大值或最小值),不能都用目标函数来求解,大多数的思维活动都是启发式的

使用快省树

工作总结 7_28

直方图

用excel创建一个直方图
1. 打开EXCEL的Data analysis对话框
2. 选择直方图Histogram
3. 选择数据:Input range 填要画的数据(如加薪表的薪资)
勾选Chart Output ,勾选才能制作出图表
4. 运行
【区间表示若采用默认设置会导致X轴的数值杂乱不齐,可以自主设置为整数。但直方图不同区间之间的缺口即数据点之间没数据, EXCEL函数会生成杂乱虚假的空间,有欺骗性

R程序

1. CSV文件的导入
①souce()

employees <- source("文件名") 

导入本地文件时需要把CSV文件放在r程序的根目录下。
这里写的和书上介绍的有一点小区别,因为如果不写前面的employees是r程序是无法知道你的文件是什么的,因此接下来的查看文件、画直方图的操作都无法进行。
②read.csv()

employees <- read.csv("文件名")


通过输入数据框架的名称employees可以看到下表

2.画直方图
employees表示画的图的对象,received是指要用的数据是薪金
breaks=50表示如何分组,数值越大越密集

hist(employees$received,breaks=50


3.分析数据
① 标准偏差

sd(employees$received)


② 汇总统计值

summary(employees$received)

铃形曲线:指正态分布和高斯分布。峰的数目超过一个则不是正态分布。

③ 用数据的子集绘制直方图

因为上述数据出现了2个峰,不是正态分布。所以想通过多画直方图描绘数据块的小组成块,分别进行评估
只选用2007/2008年的加薪数据

hist(employees$received[employees$year==2007/2008],breaks=50)

只选用女性/男性的加薪数据

hist(employees$received[employees$gender=="F/M"],breaks=50)

只选用未提出/提出 加薪的人的加薪数据

hist(employees$received[negotiated==FALSE/TRUE],breaks=50)

通过以上六组数据的直方图分析发现只有要求或不要求加薪的人在结果分布上与其他直方图呈现完全不同的分布形态。

回归 预测

散点图可以从多方面展现数据特点,如本书中对比那些提出加薪人的期望加薪值和实际加薪值

R程序

1.生成散点图
①加载数据

employees <- read.csv("hfda..",header=TRUE)

②显示数据

head(employees,n=30)

③画散点图

plot(employees$requested[employees$negotiated==TRUE],employees$received[employees$negotiated==TRUE])


x轴表示要求的薪金,y轴为实际得到的薪金
2.使用平均值图形预测每个区间的数值,回归线预测实际加薪幅度
平均值图是一种散点图,显示与x轴区间相对应的y轴数值。我们据此可以得到 提出各种加薪幅度的人平均得到的加薪值
回归线是最准确贯穿平均图各个点的直线
相关系数r量度线性相关性,r的范围为-1至1,0表示无相关性1和-1表示俩个变量完全相关

cor(employees$requested[employees$negotiated==TRUE],employees$received[employees$negotiated==TRUE])


0.6表示俩个变量中等程度的相关性
3.得到等数进行精准预测

y=a+bx



用R计算出截距a=2.3,斜率b=0.7
所以得到回归方程y=2.3+0.7x,客户提出自己的预期就可以根据这个方程预测他的实际加薪情况。

回归分析要注意的地方

回归分析的有效取决于你的问题类型。如果数据不停变化就应该不停进行回归分析。

合理误差

根据上述方程预测结果不尽人意,其实我们刚开始就可以从散点图看的出来不应该这样分析,接下来这一章就从几个方面来纠正问题。
1.小心外插法,即代入回归方程的数据不能超出模型范围之外
所以要在方程下写上 该公式的使用条件,如这个公式只在加薪要求(x)介于0%到22%之间时有效
2.要定量指出机会误差(残差)——实际结果与预测结果之间的误差,
①查看R对模型的汇总,其中包括残差

summary(myLm)

②直接写出残差变量,根据指令得到残差值

summary(myLm)$sigma


得到的残差值为2.3, 误差太大!! 而且可以在散点图中看出不同区间的误差范围区别很大。

通过分割(将数据拆分成几个组)来管理误差

因为前半段和后半段的误差迥然不同,所以可以把散点图分成俩个部分分别进行分析
用百分之十来分割数据,得到激进谈判者和胆小谈判者的数据


分别得到俩组的系数和残差,得到俩个回归方程
所以加薪计算器最后的结果:
①如果要求加薪低于10%,则使用y=0.8+0.9x。得到的加薪将会是预测加薪的+-1.4%
②如果要求加薪高于10%,则使用y=7.8+0.3x。得到的加薪将会是预测加薪的+-4.5%。以上算法仅在加薪要求不超过22%时有效。

关系数据库

数据库是一系列相互有特定关系的数据
1、计算文章数目
第一步:把issues也就是期数的CSV文件打开,右击底部带有文件名的选项卡,将电子表格程序转移到articles文档中
第二步:使用countif公式计算期刊的文章数目

countif(range,criteria)

range为对单元格计数的区域,criteria为条件

本例是指计算的区域为文章表格中的B列(issueID),条件为期数的第A列(issueID)。也就是说在所有文章所在的期数范围内,把期数为1的都数量加在一起就得到了期数为1的文章数。
2、计算总销量
第一步:把sales的CSV文件复制到articles文档中
第二步:使用sumif公式计算每期的销量

sumif(range,criteria,sum_range)

range为求和的单元格区域,criteria即求这些单元格的哪几个,sum_range就是说加的数值是什么

3、画散点图
①先得到R存储数据的文件目录

②将刚刚处理好的文件加载到R程序中

可以用header(dispatch)查看一下刚刚加载的数据
③画散点图——得到文章数目和销量之间的关系

plot()是用来画散点图的函数,data表示要画的数据来源,sales为横坐标,article.count为纵坐标

jitter在数字中加了一些噪音,使数据互相分隔,以便于在散点图上识别

下图为不加jitter后的结果

用关系数据库管理关系

可以把所有电子表格载入RDBMS
通过SQL查询语句得到查询结果

更有效的创建散点图的方式

①加载作者文章评论数和点击数的csv文件,这个文件是通过SQL提取出来的。

②用library加载lattice数据包,运行xyplot公式,得到下图结果

整理数据

一、从原始数据开始准备
①保存原始数据副本,便于回头检查
②设想数据集的最终外观,比如书上的例子所说的客户只想要客户的电话那么我们的最后数据可以为

| 编号 | 姓名 | 电话 |
| — | — | — |
③区分混乱数据中重复出现的模式
④整理并重新构造
⑤使用最终数据

Excel部分工具

①用分隔符将多个数据分成多个列
各数据域以某个分隔符分隔时,可以将数据拆分成几个列
data 选项卡的 text to columns(文本转化为列)按钮
②以指定的新文本替代单元格中不需要的文本

SUBSTITUTE(text,old_text,new_text,[instance_num])

第一个参数text是指要修改的文本
第二个参数old_text指要替换什么东西
第三个参数new_text指用什么东西来替换

指将B2列的^用空白字符串代替,也就是去掉^

这个公式得到的结果为公式输出结果,可以先复制这一列然后在原来的列上点选择性粘贴-数值,就可以把公式输出结果变成纯文本
③find 在单元格的哪个位置查找搜索字符串
④left(right)取单元格左(右)边的字符
⑤trim 删除单元格中的空格
⑥len 求单元格的长度
⑦concatenate 取俩个值然后合并在一起
⑧value 求以文本格式存储的数字的数值

Excel可以用嵌套文本公式处理复杂的模式,但是公式会看起来晦涩难懂。

R可以用正则表达式处理复杂的数据模式

NewLastName <- sub("\\(.*\\)","",hfhh$LastName)

sub指令用 空白字符串 替换所发现的 所有指定模式
\( 这里的反斜杠为退出符,告诉R括号本身不是R表达式
.表示任何字符
*代表任何数目的前面字符

R语言部分操作

①从hfhh数据框架中删除旧的LastName矢量
②在hfhh中增加新的LastName矢量

③将结果写入CSV文件

这个文件会出现在R的工作目录下
用getwd()查看R的工作目录


重复数据的解决方法:给数据排序,让重复数值集中出现,分析原因【然后删除重复数据】

①使用 order函数,排序得出新名单

②数据重复是因为查询返回数据的方式,并不是因为数据质量低劣,所以可以删除重复数据
<1>在R中删除重复数据
第一步:创建一个新数据框架

hfhhNamesOnly <- hfhhSorted

第二步:删除callID和Time域,因为这些域对客户没有用, 而且他们的存在影响unique函数的使用效果,personID相同但是time或者callID不同,unique就不会删掉这行数据

hfhhNamesOnly$CallID <-NULLhfhhNamesOnly$Time <-NULL

第三步:删除数据
hfhhNamesOnly <-unique(hfhhNamesOnly)
由第二步得知

unique函数是将 【一模一样】 的数据只保留一个

第四步:查看结果,将结果写入新的CSV文件

head(hfhhNamesOnly,n=50)write.csv(hfhhNamesOnly,file="hfhhNamesOnly.csv")
原创粉丝点击