import numpy as np
import scipy.stats as st
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
import seaborn as sns
# 正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 正常显示负号
plt.rcParams['axes.unicode_minus'] = False
# 学生体重测试数据
weights = np.array([75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5,
66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0])
# 极差
R_weights = np.max(weights) - np.min(weights)
print('体重数据的极差:%0.2f' % R_weights)
# 均值的两种方式
w_mean = np.mean(weights)
w_mean1 = weights.mean()
# 限定范围的数据求均值
limitedMean = st.tmean(weights, (60, 70)) # 排除离群值(只统计60~70之间的数据)::注意不要想当然的排除
# 对数据进行排列
sorted_weig = sorted(weights, reverse=True)
# 求中位数(在对称分布比如正态分布和T分布,均值和中位数很接近;在偏态分布的情况下,比如F分布,均值和中位数相差较大)
median_weig = np.median(weights)
# 分位数
quantiles = np.quantile(weights, [0.1, 0.2, 0.4, 0.6, 0.8, 1])
print('学生体重的[10%,20%,40%,60%,80%,100%]分位数:', quantiles)
# 方差和方差的无偏估计
v = np.var(weights) # 有偏估计或样本方差::这里的样本误差其实指的是母体误差,也就是说除以的是n而非(n-1)
v_unb = st.tvar(weights) # 无偏估计,也就是真正意义上的样本误差
print('体重数据方差的估计为:%0.2f,无偏估计为:%0.2f' % (v, v_unb)) # 有一说一,这样写真难受,等我学好fromat后,必不再用0.2f
# 标准差,同样存在有偏和无偏估计
s = np.std(weights) # 有偏的标准差,同上
s_unb = st.tstd(weights) # 无偏的标准差,同上
print('体重数据标准差的估计为:%0.2f,无偏估计为:%0.2f' % (s, s_unb))
# 标准误
sm_weights = st.tstd(weights) / np.sqrt(len(weights))
print('体重数据的标准误:%0.2f' % sm_weights)
# 变异系数(标准差的无偏估计除以均值再乘100),无量纲,百分数表示
cv = s_unb / w_mean * 100
print('体重数据的变异系数为:', np.round(cv, 2), '%')
利用Python求数据的极差、均值、中位数、分位数、方差、标准差、标准误、变异系数
最新推荐文章于 2023-04-21 16:51:07 发布