Python计算均值、方差、标准差、协方差等常用指标的方法——Numpy模块+Pandas模块

Python计算均值、方差、标准差、协方差等常用指标的方法——Numpy模块+Pandas模块

一、利用Numpy模块计算均值、方差、标准差等

函数功能示例
np.mean(list_a)计算列表list_a的均值若a = [5, 6, 16, 9], 则np.mean(a)=9.0
np.average(list_a)计算列表list_a的均值若a = [5, 6, 16, 9], 则np.average(a)=9.0
np.average(list_a, weights = [1, 2, 1, 1])计算列表list_a的加权平均数若a = [5, 6, 16, 9], 则np.average(a, weights = [1, 2, 1, 1])=8.4
np.var(list_a)计算列表list_a的总体方差若a = [5, 6, 16, 9],则np.var(a) =18.5
np.var(list_a, ddof = 1)计算列表list_a的样本方差若a = [5, 6, 16, 9],则np.var(a, ddof = 1) =24.67
np.std(list_a)计算列表list_a的总体标准差若a = [5, 6, 16, 9],则np.std(a) =4.3
np.std(list_a, ddof = 1)计算列表list_a的样本标准差若a = [5, 6, 16, 9],则np.std(a, ddof = 1) =4.96
np.median(list_a)计算列表list_a的中位数若a = [5, 6, 16, 9], 则np.median(a)=7.5
np.mode(list_a)计算列表list_a的众数若a = [5, 6, 16, 9], 则np.mode(a)=7.5
np.percentile(list_a, (25))计算列表list_a的第1四分位数若a = [1,2,3,4,5,6,7,8,9,10,11,12] ,则np.mode(a)=3.75
np.percentile(list_a, (50))计算列表list_a的第2四分位数若a = [1,2,3,4,5,6,7,8,9,10,11,12] ,则np.mode(a)=6.5
np.percentile(list_a, (75))计算列表list_a的第3四分位数若a = [1,2,3,4,5,6,7,8,9,10,11,12] ,则np.mode(a)=9.25
np.percentile(list_a, (25)) - np.percentile(list_a, (75))计算列表list_a的四分位差
np.max(list_a) - np.min(list_a))计算列表list_a的极差
np.std(list_a)/np.mean(list_a))计算列表list_a的离散系数

参考链接:数据的离散程度度量:极差、四分位差、平均差、方差、标准差、异众比率、离散系数

均值:

  1. 可以用 numpy 中的 mean方法求得 :
import numpy as np
a = [5, 6, 16, 9]
np.mean(a)
>>> 
9.0
  1. 可以用numpy 中的 average 方法也能求得简单平均数。此外,它也可以求出 加权平均数 。(average 里面可以跟一个 weights 参数,里面是一个权数的数组)例如:
import numpy as np
a = [5, 6, 16, 9]
np.average(a)
>>> 
9.0
# 加权平均数计算:average 里面可以跟一个 weights 参数,里面是一个权数的数组
np.average(a, weights = [1, 2, 1, 1])
>>> 
8.4

方差:

  1. 若计算 总体方差(计算时除以样本数 N),可以利用 numpy 中的 var 函数,默认参数置空即可;
  2. 若计算 样本方差(计算时除以 N - 1),可以利用 numpy 中的 var 函数,但需要跟参数 ddof= 1

典型实例:

示例1(一维):
import pnumpy as np
a = [5, 6, 16, 9]

# 计算总体方差
np.var(a) 
>>>
18.5

# 计算样本方差
np.var(a, ddof = 1) 
24.666666666666668

示例2(多维):

b = [[4, 5], [6, 7]]
print(b)
>>>
[[4, 5], [6, 7]]

# 计算矩阵所有元素的方差
np.var(b) 
>>>
1.25

# 计算矩阵每一列的方差
np.var(b, axis = 0) 
>>> 
array([1., 1.])

# 计算矩阵每一行的方差
np.var(b, axis = 1) 
>>>
array([0.25, 0.25])

标准差:

  1. 若计算 总体标准差(计算时除以样本数 N),可以利用 numpy 中的 std 函数,默认参数置空即可;
  2. 若计算 样本方差(计算时除以 N - 1),可以利用 numpy 中的 std 函数,但需要跟参数 ddof= 1

典型实例:

示例1(一维):
import numpy as np
a = [5, 6, 16, 9]
# 计算总体标准差
np.std(a) 
>>>
4.301162633521313

# 计算样本标准差
np.std(a, ddof = 1 ) 
>>> 
4.96655480858378

示例2(多维):

b = [[4, 5], [6, 7]]
# 计算矩阵所有元素的标准差
np.std(b) 
>>> 
1.118033988749895

# 计算矩阵每一列的标准差
np.std(b, axis = 0) 
>>> 
array([1., 1.])

# 计算矩阵每一列的标准差
np.std(b, axis = 1) 
>>> 
array([0.5, 0.5])

二、利用Numpy模块计算均值、方差、标准差等

对于 pandas ,也可以用里面的 mean 函数可以求得所有行或所有列的平均数,例如:

import pandas as pd
df = pd.DataFrame(np.array([[85, 68, 90], [82, 63, 88], [84, 90, 78]]), columns=['统计学', '高数', '英语'], index=['张三', '李四', '王五'])
df
>>>
统计学  高数  英语
张三   85  68  90
李四   82  63  88
王五   84  90  78

df.mean() # 显示每一列的平均数
>>>
统计学    83.666667
高数     73.666667
英语     85.333333
dtype: float64

df.mean(axis = 1) # 显示每一行的平均数
>>>
张三    81.000000
李四    77.666667
王五    84.000000
dtype: float64

若计算 某一行或某一列的平均值,则可以使用 df.iloc 选取该行或该列数据,后面跟 mean 函数就能得到,例如:

df
>>>
    统计学  高数  英语
张三   85  68  90
李四   82  63  88
王五   84  90  78

df.iloc[0, :].mean()  # 得到第 1 行的平均值
>>>
81.0

df.iloc[:, 2].mean() # 得到第 3 列的平均值
>>> 
85.33333333333333

pandas 中的 var 函数可以计算 样本方差(注意不是总体方差),std 函数可以得到 样本标准差

若要得到某一行或某一列的方差,则也可用 df.iloc 选取某行或某列,后面再跟 var 函数std 函数即可,例如:

df.var() # 显示每一列的方差
>>>
统计学      2.333333
高数     206.333333
英语      41.333333
dtype: float64

df.var(axis = 1) # 显示每一行的方差
>>>
张三    133.000000
李四    170.333333
王五     36.000000
dtype: float64

df.std() # 显示每一列的标准差
>>> 
统计学     1.527525
高数     14.364308
英语      6.429101
dtype: float64

df.std(axis = 1) # 显示每一行的标准差
>>> 
张三    11.532563
李四    13.051181
王五     6.000000
dtype: float64

df.iloc[0, :].std() # 显示第 1 行的标准差
>>> 
11.532562594670797

df.iloc[:, 2].std() # 显示第 3 列的标准差
>>> 
6.429100507328636
### 使用Python进行金融数据分析 在金融领域,Python因其灵活性和丰富的库支持成为处理数据的强大工具。对于收益、方差协方差及相关系数的计算,`pandas` 和 `numpy` 是两个不可或缺的数据处理库。 #### 计算日收益率 日收益率可以通过调整后的收盘价来计算。假设有一个包含每日股价的时间序列数据集: ```python import numpy as np import pandas as pd # 创建一个示例DataFrame表示日期和对应的调整后收盘价格 data = {'Date': ['2023-01-01', '2023-01-02', '2023-01-03'], 'Adj Close': [100, 105, 107]} df = pd.DataFrame(data) # 转换'Date'列为datetime类型并设置为索引 df['Date'] = pd.to_datetime(df['Date']) df.set_index('Date', inplace=True) # 计算对数收益率 log_returns = np.log(df['Adj Close']/df['Adj Close'].shift(1)).dropna() print(log_returns) ``` 此代码片段展示了如何基于前一日的价格变化来计算连续两天之间的对数收益率[^2]。 #### 方差计算 方差衡量的是单个资产回报率波动性的度量,在这里可以使用Pandas内置函数轻松完成: ```python variance = df['Adj Close'].var(ddof=0) # ddof参数指定自由度,默认为1;设为0则采用总体样本标准差 print(f"Variance of the adjusted close prices is {variance}") ``` 这段代码用于评估整个期间内调整后收盘价的变化程度。 #### 协方差与相关性矩阵 当涉及到多个证券时,了解它们之间是否存在某种关系变得非常重要。这可以通过构建协方差或相关性矩阵来实现: ```python # 假设有另一个股票B的数据框db other_data = {'Date': ['2023-01-01', '2023-01-02', '2023-01-03'], 'Adj Close_B': [98, 102, 104]} df_b = pd.DataFrame(other_data) df_b['Date'] = pd.to_datetime(df_b['Date']) df_b.set_index('Date', inplace=True) combined_df = pd.concat([df.rename(columns={'Adj Close':'A'}), df_b.rename(columns={'Adj Close_B':'B'})], axis=1).dropna() cov_matrix = combined_df.cov() # 计算协方差矩阵 corr_matrix = combined_df.corr() # 计算皮尔逊相关系数矩阵 print("Covariance Matrix:\n", cov_matrix) print("\nPearson Correlation Coefficient Matrix:\n", corr_matrix) ``` 上述脚本不仅能够展示两支不同股票间的相互影响模式,还可以揭示潜在的风险因素。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yale曼陀罗

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值