数据挖掘与机器学习-第二章 Pandas


数据挖掘与机器学习-第二章 Pandas

1
统计学是关于认识客观现象总体数量特征和总体数量关系的科学
1
2
3
4
5
6
统计学常用指标:
平均数
绝对数与相对数
百分比
频率
同比与环比

Pandas快速入门

优质参考连接

简介

1
2
官网链接:http://pandas.pydata.org/ 
简介:Pandas是python的一个数据分析包,最初由AQR Capital Management于2008年4月开发,并于2009年底开源出来,目前由专注于Python数据包开发的PyData开发team继续开发和维护,属于PyData项目的一部分。Pandas最初被作为金融数据分析工具而开发出来,因此,pandas为时间序列分析提供了很好的支持。

功能

image-20220419202003501

image-20220419202018510

数据结构

Series(一维)

1
2
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及一组与之相关的数据标签(即索引)组成
Series的字符串表现形式为:索引在左边,值在右边
创建
1
2
3
4
5
6
>>>ser1 = pd.Series(range(4))
>>>ser2 = pd.Series(range(4),index = ["a","b","c","d"])
>>>sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
>>>ser3 = pd.Series(sdata)

注:传递的data是一个dict字典类型对象,并且传递了index参数,那么对应的值将从字典中取出。否则,index的值将由字典对象里的key值进行构造

image-20220419203403486

1
2
3
4
Series的index和values
>>>ser3.index
>>>ser3.values
>>>ser2[["a","c"]]

image-20220419203503573

image-20220419203611446

image-20220419203735729

读写
下标访问和切片

image-20220419203949053

image-20220419204021047
运算
Series间的计算

image-20220419204341693

Series函数的使用

参考链接

mean

1
2
3
4
>>>a = pd.Series([1, 2, 3, 4, 5])
平均值
>>>print(a.mean())
>>>3

isin

image-20220419205730838

image-20220419210245276

unique和value_counts

image-20220419210635004

sort_index和sort_values

image-20220419211323708

sample 抽样

1
2
3
4
5
6
7
8
s.sample(n=None,frac=None,replace=False,weights=None,random_state=None,axis=None) # dataframe也可以

n:指定抽取的样本量
frac:指定抽取样本比例
replace:是否又放回,默认又放回
weights:指定样本抽中的概率,默认等论抽样
random_state:指定抽样的随机种子 类似于random库中随机种子的作用)确保示例的可复现性
axis:抽取行或列 1是列,0是行

优质参考链接

参考链接

参考链接

image-20220419233328091

image-20220419233414653 image-20220420001304292 image-20220420104543372 image-20220420104623972 image-20220420104733322 image-20220420153247563 image-20220420153426420
统计运算(describe、isnull函数)
image-20220420002152905 image-20220420002259906

DataFrame(二维)

创建

image-20220420203611296

image-20220420154342882 image-20220420154402661 image-20220420154430956 image-20220420154450776 image-20220420154841233
查看
head和info
image-20220420155315947
index和columns、dtypes、values
image-20220420155532908
索引对象

image-20220420203538657

image-20220420203520596

image-20220420203459896

image-20220420160051104

image-20220420160329471

image-20220420160350152
索引操作

image-20220420161117262

image-20220420161544928

image-20220420162352487

重新索引

image-20220420202807391

image-20220420162634368 image-20220420162916153

image-20220420163704511

groupby操作

image-20220420163422038

image-20220420163146199

image-20220420163451766

排序和排名
对行或列索引进行排序

image-20220420164026168

image-20220420164239871
汇总和计算描述统计
常用描述和汇总统计函数

image-20220420164359848

唯一值以及成员资格

image-20220420164856013

缺失值处理

image-20220420165236650

滤除缺失数据方法

image-20220420165313794

image-20220420165333554

image-20220420165537126 image-20220420165638422
填充缺失数据

image-20220420170550398

image-20220420170038065 image-20220420165956589

image-20220420170622102

image-20220420170503126

image-20220420170816073

image-20220420170849202

image-20220420171054175

对于DataFrame,根据任意一个轴上的索引进行排序
可以指定升序降序
按值排序
对于DataFrame,可以指定按值排序的列
rank函数
函数应用和映射

image-20220420195734257

apply方法
image-20220420195930080
applymap方法
image-20220420200111929
算数运算

image-20220420200342940

image-20220420200643108 image-20220420201317096

Panel(三维)

正态分布(findn函数需要用到)

参考链接

名字

1
又叫高斯分布、正常分布、常态分布
1
2
3
就是说这些指标背后的数据都会呈现一种中间密集、两边稀疏的特征。

你可能不禁要问,这是为什么?我们认为,这其实与我们前面所讲的同质与变异的概念相关(参见课程第三讲 统计学核心思维与统计描述)。因为我们研究的对象具有同质性(比如都是成年的中国男子),所以其特征往往是趋同的,即存在一个基准;但由于个体变异的存在(当然变异不会太大),这些特征又不是完全一致,所以会以一定的幅度在基准的上下波动,从而形成了中间密集,两侧稀疏的特征。

连续型随机变量研究区间概率

1
首先,正态分布属于“连续型随机变量分布”的一类。我们知道,对于连续型随机变量,我们不关注“点概率”,只关注“区间概率”,这是什么意思?
1
我们看这个例子,假定随机变量X指是“北京市成年男子的身高”,理论上它可以取任意正数,所以我们把它当做一个连续型随机变量(连续型变量,就是指可以取某一区间或整个实数轴上的任意一个值的变量)来看待。这里,我们先想一想如何计算P(X =1.87)? 即身高恰好完全exactly等于1.87的概率是多少,这就是所谓的“点概率”。更极端一点,让随机变量Y是[0,1]这个区间上的任意一点,那么Y的取值有多少个呢?无数多个,我们数不清楚,所以Y 取某一个具体的值的概率是1除以无数,即可以看做是0。于是,这里透露一个很重要的结论:连续型随机变量取任意某个确定的值的概率均为0。因此,对于连续型随机变量,我们通常不研究它取某个特定值的概率,而研究它在某一段区间上的取值,比如身高在1.70~1.80的概率。

概率密度函数

1
2
3
4
5
对于初学者来讲,“概率密度”可能是最不友好的一个概念,直接谈概率不行吗,好好的为什么要生出一个“密度”?

的确,没有太多数理基础,这个概念着实不太好理解。虽然文字和数学公式上你可能感觉很陌生,但我们特别熟知的那条中间高、两边低的“钟形曲线”恰恰就是正态分布的概率密度曲线。前面我们讲了区间概率,这里你就可以通过区间的角度来理解概率密度曲线:曲线越高,也就代表着这个区间的数据越密集,简单理解成在同样大小的房子里,这个房间的人数更多、更挤。除此之外,另一个关于概率密度函数的重要知识点是,积分(这里简单理解为“密度曲线下面积“即可)等于概率。

随机变量X在某个区间比如(a,b)即a<X<b的概率,就是概率密度曲线在这个区间下的面积,数学上的表达就是密度函数在区间(a, b)上的积分。所以,概率的大小就是“概率密度函数曲线下的面积”的大小,这个不太起眼的概念实际上就决定了你日后是否能理解假设假设中所谓的“拒绝域”
1
下图中的三条曲线f(x),就是概率密度函数,各种形式的概率就是相对应的曲线下面积。这里,数学基础不太好的同学不用特别深挖积分的计算过程,但对这三张图与对应的概率表达形式,同学们要熟知。

image-20220420112153426

均数和标准差

1
前面说对于正态分布的概率密度函数以及积分不用特别关注,那真正需要关注的是什么呢?就是均数和标准差。这里需要明确的是,一旦谈及正态分布,我们首先要想到它的两个参数:均数和标准差。每次一遇到正态分布就迅速找这两个概念,最好形成条件反射,因为这两个数才是我们日后运用正态分布解决实际问题的“利器”。
1
2
3
4
5
6
7
8
9
10
11
关于正态分布均数和标准差的性质,我们这里简单总结一下:

1)概率密度曲线在均值处达到最大,并且对称;

2)一旦均值和标准差确定,正态分布曲线也就确定;

3)当X的取值向横轴左右两个方向无限延伸时,曲线的两个尾端也无限渐近横轴,理论上永远不会与之相交;

4)正态随机变量在特定区间上的取值概率由正态曲线下的面积给出,而且其曲线下的总面积等于1 ;

5)均值可取实数轴上的任意数值,决定正态曲线的具体位置;标准差决定曲线的“陡峭”或“扁平”程度:标准差越大,正态曲线越扁平;标准差越小,正态曲线越陡峭。这是因为,标准差越小,意味着大多数变量值离均数的距离越短,因此大多数值都紧密地聚集在均数周围,图形所能覆盖的变量值就少些(比如1±0.1涵盖[0.9,1.1]),于是都挤在一块,图形上呈现瘦高型。相反,标准差越大,数据跨度就比较大,分散程度大,所覆盖的变量值就越多(比如1±0.5涵盖[0.5,1.5]),图形呈现“矮胖型”。

image-20220420112347075

标准化与查表求概率

1
2
3
接下来,我们通过一个例子来看如何通过查表法计算正态分布变量在某个区间的概率。首先,我们看这个问题,说小明每天上学的通勤时间是一个随机变量X,这个变量服从正态分布。统计他过去20天的通勤时间(单位:分钟):26、33、65、28、34、55、25、44、50、36、26、37、43、62、35、38、45、32、28、34。现在我们想知道他上学花30~45分钟的概率。

首先,我们将问题转化为数学表达式,要算他上学花30~45分钟的概率,就是求P(30 < X < 45)。之前我们一直强调,一个变量服从正态分布,就要立马考虑到它的均数和标准差是多少。这里我们简化一下用他过去20天的样本数据来代替。所以,我们首先计算这20天通勤时间的样本均数及标准差,分别为38.8(分钟)和11.4(分钟)。
1
2
3
4
5
6
7
然后,我们进行标准化,这一步很重要,也称z变换。通过标准化,所有服从一般正态分布的随机变量都变成了服从均数为0,标准差为1的标准正态分布。对于服从标准正态分布的随机变量,专门用z表示。因此,求P(30 < X < 45),就转换成了求P(-0.77 < Z < 0.54),标准化的具体计算为:

30 →(30-38.8)/ 11.4 = - 0.77
45 →(45-38.8)/ 11.4 = 0.54
X → Z
P(30 ≤ X ≤ 45)= P(-0.77 ≤ Z ≤ 0.54)
这里简单提醒一下,经过标准化后,原来的曲线的形状不会变化,即不会改变胖瘦,只是位置发生平移,比如下图中的例子,经过标准化实际上只是均数从1010移到了0。
1
2
3
下面我们正式看看怎么查表,前面我们已经把问题转化成求P (-0.77 ≤ Z ≤0.54) = P (Z ≤ 0.54)–P (Z ≤ -0.77),于是,我们需要找当Z≤0.54和Z≤-0.77的概率值然后相减即可。

先看Z≤0.54的P值,对照下图,首先看表格最左边那一列,找到0.5,然后,因为0.54的第二位小数是4,所以定位到顶行找到“4”那一列,得到0.7054;同样的方法,我们找到Z≤-0.77对应的P值0.2206。最后我们就能算出,P (-0.77 ≤ Z ≤0.54) = 0.4848,约等于0.5。因此,我们可以说,小明上学通勤时间花费30~45分钟的概率是50%,这个概率还挺大的,占了一半。我们通过这个具体的例子详细讲解了随机变量在某个区间的概率求解,不是因为这个计算有多重要,而是想提前给你打好基础,方便理解假设检验及p值等相关概念。
image-20220420114925762
标准差(预备知识)

参考链接

1
2
3
4
平均值:(x1+x2+...)/n=
方差:(平均值-x1)^2,(平均值-x2)^2,.....
平均方差:(方差1+方差2+...)/n
标准差:平均方差开根
image-20220420114545252

三个百分数68%、95%、99.7%

1
熟悉了Z变换、查表求概率,我们来看看正态分布运用十分广泛的三个百分数:68%,95%,99.7%。先看标准正态分布,我们知道一个变量服从标准正态分布,它的均数是0,标准差是1,那除了这两个数字之外,我们还能获得更多的信息吗?可以,这三个百分数告诉了我们答案。
image-20220420115546009
1
2
3
虽然理论上正态随机变量可以取无数个值,定义域是整个实数轴,但实际上在[-1,1]这个区间就包含了它可以取的68%的值,[-2,2]区间包含了95%的值,[-3,3]包含了它可能取的99.7%的值。这里的1,2,3分别代表一个、两个和三个标准差(标准正态分布的均数为0,标准差为1)。所以,根据这些,我们就可以推断,一个服从标准正态分布的变量,它的取值很不可能超过2,极不可能超过3。这个用处非常大,一下子把我们要研究的重心从整个实数轴缩小到[-3,3]这个区间。另外,这里虽然是以标准正态分布为例进行说明,但这个性质是完全可以推到普通的正态分布的变量的。百分数不变,不过均数和标准差不再是0和1,而是代入具体分布的均数和标准差即可。下面我们来看一个实际应用的例子。

某小学学生身高的平均值和标准差分别为1.4(米)和0.15(米),我们知道身高一般是服从正态分布的,由此我们可以知道这个学校有68%的学生的身高在1.25到1.55,这里的1.25和1.55就是1.4加减0.15得到的(均数加减一个标准差),有95%的学生身高在1.1到1.7之间(均数加减两个标准差),由此便极大地提升了我们对数据的掌握程度。讲完这些你会发现一种巧妙的求解均数和标准差的方法:如果我们知道了某个变量的95%区间的取值(关于均值对称),我们就可以算出对应的均数和标准差,进而几乎知道了一切。
image-20220420115813609
1
以上即为梳理的有关正态分布的关键知识点,希望大家在遇到假设检验和p值等概念的理解障碍时能回头看看这些最基础的要点,相信对你会有所帮助。

numpy.random.seed() 随机数 预备知识

1
seed() 用于指定随机数生成时所用算法开始的整数值,如果使用相同的seed()值,则每次生成的随即数都相同,如果不设置这个值,则系统根据时间来自己选择这个值,此时每次生成的随机数因时间差异而不同。

参考链接

参考链接

参考链接

1
2
3
4
5
6
7
8
# 别人的见解
1.感觉seed括号中的数是计算机创建随机数的依据,确定数后(比如seed(5)),之后的所有随机操作都有确定性。上述例子中,seed()在循环外时,多次运行random.random()会产生一个固定顺序(seed导致)的序列;seed()在循环中时,每次都是重新定义一次相同的seed()(seed(5)),然后只执行一次random.random(),因此每次产生的都是固定的随机序列的首项。

2.seed全局有效,seed函数是保证你每次运行程序生成的顺序相同,而不是保证你每次生成同样的值。
比如你在程序中randint() 100次,输出100个数,
当你第二次运行该程序时,若设置了和第一次同样的seed的值,程序会输出与第一次运行同样顺序的100个数。
博主博客中的例子在每次print的前设置seed来保证每次输出的数相同,道理和上面我说的一样。
重复一次,seed函数是为了保证生成的数序列相同,而不是保证每次生成的值相同。
1
2
总结:
1.感觉与seed(n)里的n值无关,指定了只是下次生成的随机数基于这个随机序列
image-20220420144031937 image-20220420144107407 image-20220420144240525 image-20220420144146914 image-20220420145813877

本文标题:数据挖掘与机器学习-第二章 Pandas

文章作者:TTYONG

发布时间:2022年04月13日 - 17:04

最后更新:2022年05月05日 - 10:05

原始链接:http://tianyong.fun/%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E6%8A%80%E6%9C%AF%E4%B8%8E%E5%BA%94%E7%94%A8-%E7%AC%AC%E4%BA%8C%E7%AB%A0-Pandas.html

许可协议: 转载请保留原文链接及作者。

多少都是爱
0%