本文为学习黄晓林老师开设的慕课《探索数据的奥秘》所作笔记
数据
数据传感器采集到的各种物理、生物、化学指标等等可记录、可表征的数量、性质都是数据,对于行为的描述与记录也能构成数据,例如互联网上的一次次交易,访问。总之,现实中某种事物或事物间关系数量或性质的表征和记录,都称之为数据,数据是信息的载体。
大数据
有观点认为,当数据量大到需要使用并行计算工具处理时,就称之为大数据(Big Data)。通常认为大数据有4V特点,即体量大(High Volume)、速度快时效高(High Velocity)、类型繁多(High Variety)、价值密度低(High Veracity)
1993年,美国学者挨个拉沃提出了Aprior算法,可以通过分析购物篮中的商品几何,找出商品间关系,然后研究或推测顾客的购买行为,沃尔玛将其引入pos机数据分析,发现一些看似毫无关联的商品,例如啤酒和尿布经常出现在同一购物车中,即两者具有相关性。
数据科学
应用科学的方法、流程、算法和系统从多种形式的结构化或非结构化数据中提取知识和洞见的交叉学科。所有对数据的搜集,存储,分类,处理,分析,呈现都可纳入数据科学的范畴。
数据科学项目克可能涉及的人员:
用户层面
针对用户的具体问题,应做好充足的背景调查,从而制定出相应的用户层面的目标。
数据科学层面:可将问题抽象为分类、预测、排名或打分、关联化、特征提取、聚类等。
前提假设和数据构成
明确必要的前提假设,基于假设的前提来设计数据的构成,明确总体和抽样方案再搜集数据。
在面向实际应用时,始终不能忘记方案的可行性分析,不同的假设很可能会涉及不同的数据,最终导致不同的研究内容。因此,在真正进行数据搜集之前,应认真审视与事实最符合的假设,根据最符合事实的假设提出对应的数据方案,思考方案的可行性,确定数据的构成。
通常,后续方便处理的数据是 ” 结构化 “ 的数据(可将其抽象的理解为一张二维表,一行对应一个样本,一列对应一个属性)
总体和抽样
总体(Population):待研究对象的全体
个体(Individual):总体中的每一个对象
样本:在无法获得总体的情况下,从总体中抽取出来的子集
样本容量:样本包含的个体数量
- 数据收集是一种从总体中抽样的过程
- 样本容量不能太小,传统统计学认为小于30的样本容量不具备统计学意义
- 抽样时不能有预设偏见,也就是必须无偏抽样,即抽样的过程不受个体性质的影响。
- 抽样偏差指从总体中非随机型抽样带来的系统性错误,幸存者偏差就是一种常见的抽样偏差
- 避免抽样偏差常见的作法是随机抽样。随机抽样是指总体中的个体是否被抽样并非是确定的(即,不因为个体的某个或某些性质一定被抽中或一定不被抽中),而是以一定的概率被抽样
混杂因素和A/B Testing
辛普森悖论: 人们尝试探究两种变量(比如新生录取率与性别)是否具有相关性的时候,会分别对之进行分组研究。然而,在分组比较中都占优势的一方,在总评中有时反而是失势的一方。
常见的排除混杂因素影响的做法: 对两相比较的样本集,做好潜在混杂因素(甚至所有非考察因素)的匹配。
- 对于关联任务而言,混杂因素的排除是关键
A/B Testing: 指专门设计一些对比试验,在其他所有特征都匹配(或一致)的情况下,只观察一个变量的不同取值对于结果的影响。科学研究中,在实验室的可控环境下,A/B Testing 是一种非常常见的实验手段,例如 “ 双盲实验 ” 。主动搜集数据时,A/B Testing 是一种可靠而有效的方式。
NumPy.load_txt()
- 将指定文件中的数据加载到数组
- 支持纯文本文件,如 txt 文件和 csv 文件
- 返回 NumPy 的 ndarray 多维数组
- 一般用来加载数据类型一直的数据文件
Pandas.read_csv()
- 面对数据并不统一的电子表格数据
- 将电子表格文件中的数据导入到 Pandas 的 Dataframe 结构(二维表格结构)
Python自带模块urllib 可用于网上在线获取文件
- urllib.request.urlopen()
CountVectorizer实现非结构化数据转化为结构化数据
非结构化数据一般通过结构化处理使其成为表格,方便后续的分析与建模
对大规模数据的读取
- 以连续流的方式流入,而非一次性加载
- csv 包中的 reader 函数和 DictReader 函数 可以实现小块数据的迭代
- 初步了解数据集
- 验证初步假设
数据检查和预处理
- 数据检查 :数据的规模与特征的数据类型及意义
- 预处理:缺失处理、异常处理、冗余处理
数据的类型:数值型数据、字符型数据、逻辑型数据(bool型数据)、排序类型
(依据某个量度得到的,具备一定的量化意义)
对于数值型数据,可以用算术平均,标准差等量化统计量进行分析。
对于非数值型数据,主要依据它们进行分组与筛选。
数据的初步分析
- 缺失数据:用 NaN 表示
- 数据随机性缺失
- 直接丢弃:dataframe.dropna函数(样本容量大,缺失信息少)
- 修补填充:dataframe.fillna函数(样本容量小,无法承受进一步缺失) 缺失值填充是一种止损手段,可以将原本不完整数据行中的其他信息利用起来,从而避免了有效信息的进一步损失。
- 非随机性缺失:具体情况具体分析
- 数据混则了噪声、干扰,甚至错误数据。应基于数据的实际意义,利用常识或专业领域知识进行判断。
- 对于服从正态分布的数据:z-score
z-score 是个无量纲的数,可以消除数据本身的取值范围带来的影响。一般认为z-score > 3 时,可以怀疑异常。 - 对于不服从正态分布的数据:四分位距
q1:第一个四分位数
q3:第三个四分位数
△ = q3 - q1:四分位距
x > q3 + 3△ 或 x < q1 - 3△:认为是极端异常值或离群值outlier - 对于异常值
- 数据冗余
判断特征冗余常用方法:线性相关分析
Dataframe.corr函数
当参数 method=‘pearson’ 时,直接求线性相关系数
- 线性相关系数接近 1 或 -1 ,则说明两个特征存在强的线性相关或反相关,有着较大的冗余
- 线性相关系数等于 0, 两个特征间没有线性相关性
描述性统计
描述性统计不对数据做任何预先地猜想,实事求是地告诉我们样本数据是怎样的。在描述性的结果上进行思考可以形成一些初步的结论。
- 位置性测度计算
位置性测度主要用来反映样本集合的中心成员或特定成员在所考察的数域或空间的位置。只能针对数值数据计算。
- 离散性测度计算
只能针对数值数据计算
describe函数:对dataframe中所有用数值保存的特征(无论是整数还是浮点数),一次性计算多个常用的描述性统计量
- 图形化描述
既适用于数值型数据,也适用于非数值型数据的计算
-
非数值型的特征
主要应用来分组,从而对各组进行频次统计,绘制与直方图类似的柱状图
利用 dataframe.groupby 函数进行分组 -
两个数值型特征相结合
简单的图形化方法为二维散点图,其绘制方法为: 用样本在一个特征上的取值作为横轴,在另一个要关联考察的特征上的取值作为纵轴,这样在二维平面上确定下该样本的位置,描绘出一个样本点。
可以采用 pandas.plotting.scatter_matrix 对两个数值型特征绘制散点图。
实质:由样本去推断总体的过程
主要包括:参数估计和假设检验
假设检验
- 提出假设
- 验证是否可以接受假设
零假设(null hypothesis):H0,需要检验的假设,如:
- 总体的均值等于μ
- 测试组和对照组来源于均值相等的总体
- 控制因素对观察变量有没有影响,A组和B组数据同分布