社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

实操演练 | 如何通过python实现描述性统计的内容?

量化研究方法 • 3 年前 • 579 次点击  
文章来源:shinerise
文章作者:小希

上周学习了数据的描述性统计,总结如下:

下面以我画的两张表格来比较下各特征值的异同:

这周就以 python 具体实现下描述性统计的内容。

完整代码见 github : StatisticLearning

一、集中趋势

还是以上周的  .xlsx 文件中的 9 个家庭的人均月收入数据(单位:元)为例:

1080 750 1080 1080 850 960 2000 1250 1630

首先读取文件中的数据:

import pandas as pd
df = pd.read_excel('data/2_table1.xlsx')
data = df['月收入']

1、众数

# 众数
# 法一
print('众数为:', data.mode().iloc[0])
# 法二
from collections import Counter
counts = Counter(data)
print('众数为:', counts.most_common(1)[0][0])
# 法三
from scipy.stats import mode
mode_num = mode(data)
print('众数为:', mode_num[0][0])

2、中位数

# 中位数
# 法一
print('中位数为:', data.median())
# 法二
import numpy as np
print('中位数为:', np.percentile(data, 50))
# 法三
print('中位数为:', data.quantile(.50))

3、分位数

类似中位数的计算,可以使用 numpy 库中的 percentile 方法。

也可以使用  pandas 库中的 quantile 方法。

注意:这两个函数确定四分位数位置的方法与上一周的方法略有不同,公式如下:

下四分位数:

上四分位数:

# 分位数
# 法一
print('下四分位数为:', np.percentile(data, 25))
print('上四分位数为:', np.percentile(data, 75))
# 法二
print('下四分位数为:', data.quantile(.25))
print('上四分位数为:', data.quantile(.75))

4、平均数

  • 算术平均数

    # 平均数
    # 算数平均数
    print('算数平均数为:', data.mean())
  • 几何平均数

    # 几何平均数
    import math
    s = 1
    for i in data:
    s *= i
    print('几何平均数为:', math.pow(s, 1/len(data)))

二、离散程度

1、异众比率

# 异众比率
# 众数
from collections import Counter
count = Counter(data)
modeCount = count.most_common(1)[0][1]
totalCount = len(data)
# 异众比率
ratio = (totalCount - modeCount) / totalCount
print(ratio)

2、四分位差

# 四分位差
# 法一
print('四分位差为:', np.percentile(data, 75) - np.percentile(data, 25))
# 法二
print('四分位差为:', data.quantile(.75) - data.quantile(.25))

3、极差

# 极差
print('极差为:', data.max() - data.min())

4、平均差

# 平均差
meanData = data.mean()
s = 0
for i in data:
s += (abs(i - meanData))
print('平均差为:', s/len(data))

5、方差

# 方差
print('方差为:', np.var(data))

6、标准差

# 标准差
print('标准差为:', np.std(data))

三、分布的形状

1、偏度

# 偏度
from scipy import stats
print('偏度为:', stats.skew(data))

2、峰度

# 峰度
print('峰度为:', stats.kurtosis(data))

参考资料:

《统计学(第七版)》贾俊平,所有数据都来自该书

数据的概括性度量:https://blog.csdn.net/qq_43315928/article/details/102151709

本代码的完整 github 链接:https://github.com/shiinerise/StatisticLearning


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/154900