pandas 统计类函数

pandas 统计类函数


先生成测试数据,包括学生各科成绩:

import pandas as pd
data=pd.DataFrame({'name':['Abbe','Tony','Henry','Perry','Billy','Tracy'],
                  'english':[99,89,68,73,82,78],
                   'math':[89,81,78,69,81,92],
                   'science':[81,83,87,91,86,92]
                  })
data
nameenglishmathscience
0Abbe998981
1Tony898183
2Henry687887
3Perry736991
4Billy828186
5Tracy789292

1.汇总类统计

1.统计描述describe()

返回 DataFrame 中数值列数据的常见统计数据,返回一个 DataFrame 的数据表。

具体如下:

count(计数)、mean(平均值)、std(标准差)、min(最小值)、

25%(排在25%处的值)、50%(排在50%处的值)、75%(排在75%处的值)、max(最大值) 等。

data.describe()
englishmathscience
count6.0000006.0000006.000000
mean81.50000081.66666786.666667
std11.2205178.1894244.320494
min68.00000069.00000081.000000
25%74.25000078.75000083.750000
50%80.00000081.00000086.500000
75%87.25000087.00000090.000000
max99.00000092.00000092.000000

也可以只对某一列进行统计描述,返回一个 Series 类型的数据。

data['english'].describe()
count     6.000000
mean     81.500000
std      11.220517
min      68.000000
25%      74.250000
50%      80.000000
75%      87.250000
max      99.000000
Name: english, dtype: float64

2.计数count()

对每列或每行的非空单元格进行计数

参数列表:

DataFrame.count(axis=0, level=None, numeric_only=False)

axis : {0 or ‘index’, 1 or ‘columns’},默认为 0。

  • If 0 or ‘index’:为每列生成计数。
  • If 1 or ‘columns’:为每行生成计数。

返回 DataFrame 中 所有行/列 的计数,返回一个 Series 类型的数据。

列计数

data.count()    # 默认axis=0,为列生成计数
name       6
english    6
math       6
science    6
dtype: int64

行计数

data.count(axis=1)    # axis=1,为行生成计数
0    4
1    4
2    4
3    4
4    4
5    4
dtype: int64

3.求和sum()

返回请求轴的值之和。

参数列表:

data.sum(axis=0, skipna=None, level=None, numeric_only=None, min_count=0, **kwargs,)

axis : {index (0), columns (1)}

axis也是默认为0(列求和),axis=1时表示行求和。

返回 DataFrame 中 所有行/列 的求和,返回一个 Series 类型的数据。

列求和

data.sum()    # 默认axis=0,进行 列求和
name       AbbeTonyHenryPerryBillyTracy
english                             489
math                                490
science                             520
dtype: object

注:在python中,字符串类型的数据也可以直接进行求和(连接字符串)。

行求和

data.sum(axis=1)    # axis=1,进行 行求和
0    269
1    253
2    233
3    233
4    249
5    262
dtype: int64

案例:我们就可以新增一列,来存放每个学生的总成绩。

new_data=data.assign(总成绩=data.sum(axis=1))
new_data
nameenglishmathscience总成绩
0Abbe998981269
1Tony898183253
2Henry687887233
3Perry736991233
4Billy828186249
5Tracy789292262

注:后面的每一个函数都可以对 axis 值进行设定,表示对行/列进行操作,就不一一赘述。

4.平均值mean()

返回 DataFrame 中 数值行/列 的平均值,返回一个 Series 类型的数据。

data.mean()
english    81.500000
math       81.666667
science    86.666667
dtype: float64

5.最大值max()

返回 DataFrame 中 所有行/列 的最大值,返回一个 Series 类型的数据。

data.max()
name       Tracy
english       99
math          92
science       92
dtype: object

注:在python中,字符串类型的数据也可以比大小(根据字母排序)。

6.最小值max()

返回 DataFrame 中 所有行/列 的最小值,返回一个 Series 类型的数据。

data.min()
name       Abbe
english      68
math         69
science      81
dtype: object

7.中位数median()

中位数是指按顺序排列的一组数据中居于中间位置的数。

data.median()
english    80.0
math       81.0
science    86.5
dtype: float64

8.众数mode()

众数是指一组数据中出现次数最多的数。

data.mode()
nameenglishmathscience
0Abbe6881.081
1Billy73NaN83
2Henry78NaN86
3Perry82NaN87
4Tony89NaN91
5Tracy99NaN92

9.绝对值abs()

返回数据的绝对值。

注意:绝对值函数abs()是针对数值型的字段,不能对字符类型的字段求绝对值。

data[['english','math']].abs()
englishmath
09989
18981
26878
37369
48281
57892

10.乘积prod()

返回请求轴的值之积。

data.prod()
english    279746994384
math       289128940776
science    421124040792
dtype: int64

11.方差var()

方差是衡量随机变量或一组数据离散程度的度量

每个样本值与全体样本值的平均数之差的平方和的平均数。

需要注意的是:numpy中的方差叫总体方差,pandas中的方差叫样本方差

总体方差的分母为 n ,是有偏的;样本方差的分母为 n-1 ,是无偏的

参考:百度百科-方差

data.var()
english    125.900000
math        67.066667
science     18.666667
dtype: float64

验证英语学科的方差

  • 1.平均值:data[‘english’].mean()=81.5;

  • 2.用英语成绩中的每个元素依次减去平均值,然后求平方和:

    (68-81.5)**2+(73-81.5)**2+(78-81.5)**2+(82-81.5)**2+(89-81.5)**2+(99-81.5)**2;

  • 3.最后除以 样本例数n-1 ,即除以6-1=5。

((68-81.5)**2+(73-81.5)**2+(78-81.5)**2+(82-81.5)**2+(89-81.5)**2+(99-81.5)**2)/5
125.9

12.标准差std()

返回 DataFrame 中 数值行/列 的标准差值,返回一个 Series 类型的数据。

标准差是 一组数据离散程度 的一种度量。

一个较大的标准差,代表大部分数值和其平均值之间差异较大;

一个较小的标准差,代表这些数值较接近平均值。

参考:百度百科-标准差

data.std()
english    11.220517
math        8.189424
science     4.320494
dtype: float64

13.累计求和cumsum()

可以对指定轴进行 行或列的累计求和(包括字符串类型的列)。

data.cumsum()
nameenglishmathscience
0Abbe998981
1AbbeTony188170164
2AbbeTonyHenry256248251
3AbbeTonyHenryPerry329317342
4AbbeTonyHenryPerryBilly411398428
5AbbeTonyHenryPerryBillyTracy489490520

这与窗口函数 expanding().sum() 实现的效果是一样的。

只是expanding().sum()只会对数值类型的数据进行累计求和。

data.expanding().sum() 
englishmathscience
099.089.081.0
1188.0170.0164.0
2256.0248.0251.0
3329.0317.0342.0
4411.0398.0428.0
5489.0490.0520.0

2.去重和按值计数

1.去重unique()

查看某一行或列有哪些非非重复值。

一般不用于数值列,而是枚举、分类列。返回一个 ndarray 类型的数据。

data['name'].unique()
array(['Abbe', 'Tony', 'Henry', 'Perry', 'Billy', 'Tracy'], dtype=object)

2.非重复计数nunique()

如何统计非重复值的个数呢?

由于unique()函数返回的数据类型为 ndarray ,不能直接使用count()函数。

ndarray类型的数据有一个 shape 属性,返回 ndarray数据的行和列,ndarray.shape[0] 就代表了ndarray数据的行数。

所以我们可以用下面的方式来获取去重后的个数

data['name'].unique().shape[0]
6

pandas还专门提供了一个函数 nunique() ,来进行非重复计数。

data['name'].nunique()
6

3.按值计数value_counts()

value_counts()函数可以对某列的各个值统计个数,返回一个 Series 类型的数据。

data['math'].value_counts()  # 统计数学成绩中各个值出现的次数
81    2
92    1
78    1
69    1
89    1
Name: math, dtype: int64

3.协方差和相关系数

1.协方差和相关系数简介

协方差:corvariance;相关系数:correlation

协方差

简单地来说,协方差就是反映两个变量 X 和 Y 的相互关系。这种相互关系大致分为三种:正相关、负相关、不相关

什么是正相关呢?例如:房屋面积(X)越大,房屋总价(Y)越高,则房屋面积与房屋总价是正相关的;

什么是负相关呢?例如:一个学生打游戏的时间(X)越多,学习成绩(Y)越差,则打游戏时间与学习成绩是负相关的;

什么是不相关呢?例如:一个人皮肤的黑白程度(X)与他的身体健康程度(Y)并无明显关系,所以是不相关的。

相关系数

计算协方差的时候我们并没有把不同变量幅值差异性考虑进来,在比较协方差的时候也就没有一个统一的量纲标准。

所以,为了消除这一影响,为了准确得到变量之间的相似程度,我们需要把协方差除以各自变量的标准差

可见,相关系数就是在协方差的基础上除以变量 X 和 Y 的标准差。

为什么除以各自变量的标准差就能消除幅值影响呢?这是因为标准差本身反映了变量的幅值变化程度,除以标准差正好能起到抵消的作用,让协方差标准化。这样,相关系数的范围就被归一化到 [-1,1] 之间了

总结

相关系数是协方差的标准化、归一化形式,消除了量纲、幅值变化不一的影响。

实际应用中,在比较不同变量之间相关性时,使用相关系数更为科学和准确。

参考:通俗解释协方差与相关系数

2.计算协方差

协方差和相关系数都是一个相互的概念,必须计算两个变量(两列)之间的协方差或相关系数,不能只用一列来计算协方差或相关系数。

使用 cov() 函数来计算协方差。

协方差矩阵(计算 DataFrame 中任意“数值列”之间的协方差):

data.cov()
englishmathscience
english125.948.800000-37.400000
math48.867.066667-7.933333
science-37.4-7.93333318.666667

计算指定两列之间的协方差

# 计算英语和数学之间的协方差
data['english'].cov(data['science']) 
-37.4

3.计算相关系数

使用 corr() 函数来计算相关系数。

相关系数矩阵(计算 DataFrame 中任意“数值列”之间的相关系数):

data.corr()
englishmathscience
english1.0000000.531072-0.771481
math0.5310721.000000-0.224217
science-0.771481-0.2242171.000000

计算指定两列之间的相关系数

# 计算英语和数学之间的相关系数
data['english'].corr(data['math']) 
0.5310722343446015
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值