前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Task2:数理统计与描述性分析

Task2:数理统计与描述性分析

作者头像
诡途
发布2022-05-09 19:20:55
5810
发布2022-05-09 19:20:55
举报
文章被收录于专栏:诡途的python路诡途的python路

快速阅读

思维导图

在这里插入图片描述
在这里插入图片描述

常用统计量

描述型统计学常用统计量与数学符号

在这里插入图片描述
在这里插入图片描述

python实现

1、基本统计量的python实现

代码语言:javascript
复制
#导入包
import pandas as pd
import numpy as np
from scipy import stats  
import  math

"""
Scipy是一个高级的科学计算库,Scipy一般都是操控Numpy数组来进行科学计算,
Scipy包含的功能有最优化、线性代数、积分、插值、拟合、特殊函数、快速傅里叶变换、
信号处理和图像处理、常微分方程求解和其他科学与工程中常用的计算。
"""

a = [1,2,4,5,3,12,12,23,43,52,11,22,22,22]
a_mean = np.mean(a)  #均值
a_med = np.median(a)  #中位数
print("a的平均数:",a_mean)
print("a的中位数:",a_med)

#Scipy库计算众数
a_m1 =stats.mode(a)[0][0]
print("a的众数:",a_m1)

#将一维数组转成Pandas的Series,然后调用Pandas的mode()方法
ser = pd.Series(a)
a_m2 = ser.mode() #得到的是Series
print("a的众数:",a_m2.iloc[0])

# 转成pandas的数据框,返回df数据框
# 包含 计数、均值、标准差、最大最小值,中位数,1/4分位数 ,3/4分位数 
a_des=pd.DataFrame(a).describe()
print(a_des)


"""
变异系数是刻画数据相对分散性的一种度量。
变异系数只在平均值不为零时有定义,而且一般适用于平均值大于零的情况。变异系数也被称为标准离差率或单位风险。
当需要比较两组数据离散程度大小的时候,如果两组数据的测量尺度相差太大,或者数据量纲的不同,变异系数可以消除测量尺度和量纲的影响。
"""

a_var = np.var(a)  #方差
a_std1 = np.sqrt(a_var) #标准差
a_std2 = np.std(a) #标准差
a_mean = np.mean(a)  #均值
a_cv =  a_std2 /a_mean #变异系数
print("a的方差:",a_var)
print("a的标准差:",a_std1)
print("a的标准差:",a_std2)
print("a的均值:",a_mean)
print("a的变异系数:",a_cv)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2、频率分布表

案例题目:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
data=pd.read_excel("Return.xlsx",sheet_name=1)
#data.groupby('Country').agg('mean')

data.head()

print(data.describe())
return_min=data['ArithmeticMean(%)'].min()
return_max=data['ArithmeticMean(%)'].max()

# 组距 = (最大值-最小值)/组数
# math.ceil向上取整   math.floor向下取整
int_val=(math.ceil(return_max)-math.floor(return_min))/5
print("最大回报:",return_min)
print("最小回报:",return_max)
print("组距:",int_val)

#构造频率分布表
l1=[i for i in range(math.floor(return_min),math.ceil(return_max)+1,int(int_val))]
fre_dis= pd.DataFrame(['%s to %s'%( l1[l1.index(j)-1],j) for j in l1[1:]],columns=['Interval'])

fre_dis.index=fre_dis.Interval
fre_dis['MIN']=fre_dis.Interval.str.split('to').str[0].str.strip().astype(int)
fre_dis['MAX']=fre_dis.Interval.str.split('to').str[1].str.strip().astype(int)
bins=fre_dis.MIN.tolist()
bins.append(max(bins)+1)
group_names=fre_dis.index.tolist()
#分组打标
group=pd.cut(data['ArithmeticMean(%)'].values,bins,labels=group_names,right=False)

#标签——可以定义传入labels,
#传入series时labels有效,传入list,labels默认0,1,2,3目前没找到原因
print(group.codes)

#分组区间,长度1
print(group.categories)

#series,区间——个数
_freq=group.value_counts()

#
print(_freq.index)

# 频率分布直方图
import matplotlib.pyplot as plt
_freq.plot(kind='bar',figsize=(10,6))


#频率分布表
data1=data.copy()
Inteval=pd.cut(data['ArithmeticMean(%)'],bins,right=False)
data1['区间']=Inteval.values
data1.groupby('区间').median()
data1.groupby('区间').mean()#每个区间平均数
 
_freq_df=pd.DataFrame(_freq,columns=['频数'])
_freq_df['频率%']=_freq_df / _freq_df['频数'].sum()
_freq_df['频率%']=_freq_df['频率%'].map(lambda x:'%.2f%%'%(x*100))
 
_freq_df['累计频数']=_freq_df['频数'].cumsum()
_freq_df['累计频率%']=_freq_df['累计频数'].map(lambda x: x/ _freq_df['频数'].sum())
_freq_df['累计频率%']=_freq_df['累计频率%'].map(lambda x:'%.2f%%'%(x*100))

_freq_df
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-06-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 快速阅读
  • 思维导图
  • 常用统计量
  • python实现
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档