基础统计方法

基础统计方法

作者: 莫烦 编辑: 莫烦 发布于: 2022-02-07

在 Pandas 上做数据统计,要比在 Numpy 上做舒服很多,因为在数据展示上,有很多额外的信息辅助你来消化这些信息。 而且你还能比较方便地绘制成图

我们在这一节内容中,会对比 Numpy 中的方法和 Pandas 的不同,来解释为什么人们在做数据分析的时候喜欢用 Pandas。

这节内容涉及到的功能有:

static

数据

在分析数据或者统计数据的时候,首先得有数据,我简单创建了一份数据,后续的工作将会依赖于这份数据,所以请你帮我点击一下下面的 Run 键,初始化一下这份数据。

你在日常生活中,也经常是以这种 2 维表格型数据为主,而且因为各种不可知原因,你的数据可能存在缺失状况。比如有人没交作业,有数据还没被采集到等等。 如果你使用 Excel 收集的数据(用 Pandas 读 Excel),那这种情况可能更加多。

快速总结

通常,如果我们不知道这份数据包含了什么,想快速了解一下这份数据的基础信息,我们可以直接先上一个 describe(),让 Pandas 自动帮我们描述一下这份数据的基础信息。

这里,会显示出来 count 计数(剔除掉 None 或者 NAN 这种无效数据),所以你在结果中能看到 c0c2 两个的有效数是 3 个,而 c1 有效数有 4 个。

unique 表示的是每个 column 中有多少独特的数据。这个在初步感知数据丰富度上会有一定的作用。

top 表示出现最多的数据是哪一个,这组数据在 c0 column 处,我们能观察到 0.34 出现了两次,所以它选的 top 是 0.34

freq 是继续了 top,表述的是这个出现频率最多的数据,出现的次数有多少次。

上面这份数据还不是纯数据,如果是存数值型的数据,我们跑 describe() 还能看到统计学的信息。

平均数(mean),均方差(std),最小值(min),统计学的 25 分位,50 分位,75 分位各是多少,最大值(max)是多少。

均值中位数

像上面,我们已经可以从 describe() 功能中略知一二了,但是你肯定也不满足于这些简单的描述信息。那么我们看看还有哪些简单实用的统计学功能。 比较常用的,我们通常会想知道一组数据的均值,用 mean() 就好了。

这样可以直接输出每一个 columns 的均值,因为这是在对 df 的第0个维度在做求均值。也可以这么写。

当然,如果你不想对第 0 个维度,而是想对第 1 个维度求均值呢(后面的功能中 axis 的用法都基本相似)。我们只需要把 axis=0 换成 axis=1

还有一个比较有用的参数 skipna,这个是用来处理数据中有 None 或者是 NaN 时用的。我们需不需要排除掉有 None 或者 NaN 的数据。 如果需要 skip 掉这些,我们就还是会计算所有行列的数值,只是在计数的时候,扣掉这些 None 和 NaN。而当 skipna=False 的时候, Pandas 只要遇到了 None 或者 NaN,就不计算这列、行的数据了。所以下面你会看到,它只返回了一个 column 的结果。

你看,对比 Numpy 的用法,你会发现, Pandas 在展示信息上还是挺对用户考虑的,它把行名等都展示出来,让人不犯迷糊。

有了上面的 mean() 的用法做铺垫,理解后面的用法也方便很多。比如在计算人民收入的时候, 我们常用中值来代替均值,原因很简单,极高收入群体总是拉高了我们的平均收入, 用中位数反倒能反映出群众的真实收入。 查中值的方式也很简单,就是 median()

累加累乘

有了上面的 mean()median() 的用法做铺垫,理解后面的用法也方便很多。 比如要对数据做累加和累乘的运算,我们使用方式和 mean() 就没啥差别。

最大最小

同理,理解了上面的用法,查找最大最小也不是问题。

不过你注意到没,这种 max()min() 都是对某一维度进行操作的,肯定有时候,你想要找到那个全局最大最小的数,这怎么找? 哈哈,那你就做两次操作吧。或者你可以先把它转成 numpy,然后展平了求全局最大最小。

如果想计算 mean 或者 median 这种,你想想然后再试试,用哪种方式比较合适呢?

处理空值

总有 None 或者 NaN 值有时候挺烦人的,因为在做机器学习或者是统计数据的时候,你也不能放它在那不管。比如在机器学习中,如果有空值,你要么就选择放弃这条数据, 要么就要对它进行科学的填充,有人用均值有人用中值等。所以上面学到的技巧都能在这里用上。

第一,你可能想要先看看你的数据中有没有空值。用下面的 isnull() 或者 notnull() 就能找到。

发现这里有空值,下面你就可以对这些 None, Null, NaN 做处理了。要么你就放弃这些有空值的数据,用 dropna()

当然,你觉得数据只要有值你就想留下来,只去除掉那些全为空的数据,那么你还能在筛选的时候加一个 how="all" 参数。

刚也说了,除了 drop 掉有 None 的,还可以对这些空值进行填充,填充的值也可以自行选定。

对不同特征列做差异化的填充数值。

甚至,如果你有一个每一位上的默认值,你都可以用一个全新的 df 来做空位的填充。

获取索引

一般来说,当你想用 np.argmax() 或者 np.argmin() 的时候,你可以在 pandas 用 idxmax()idxmin() 来替换。原理都一样, 就是找到那个最大最小值的索引。这个的好处是,你只关注索引而不用关注值,你可以对这个索引的值做你想要的后续处理。

同上面一样,你还能用上面学到的 skipna 来对空值做控制。

总结

在机器学习或者统计学中,只要你是和数据打交道,就少不了先观察和了解数据。用 Pandas 的这些功能,可以帮你快速了解数据的全貌, 也可以对其中的数据缺失做一些处理。


降低知识传递的门槛

莫烦经常从互联网上学习知识,开源分享的人是我学习的榜样。 他们的行为也改变了我对教育的态度: 降低知识传递的门槛免费 奉献我的所学正是受这种态度的影响。 【支持莫烦】 能让我感到认同,我也更有理由坚持下去。

我组建了微信群,欢迎大家加入,交流经验,提出问题,互相帮持。 扫码后,请一定备注"莫烦",否则我不会同意你的入群申请。

wechat