🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

练习

所需库与工具:

import yfinance as yf
import numpy as np
import scipy.stats as stats
import matplotlib.pyplot as plt

# 自定义众数函数(与讲义中相同)
def mode(l):
    counts = {}
    for e in l:
        counts[e] = counts.get(e, 0) + 1

    maxcount = max(counts.values(), default=0)
    if maxcount < 1 and len(l) > 1:
        return 'No mode'

    modes = [k for k, v in counts.items() if v == maxcount]
    return modes if maxcount > 1 or len(l) == 1 else 'No mode'

练习1:算术平均数

1a 随机数据集平均数

生成包含99个1-100随机整数的列表,计算其算术平均数:

np.random.seed(42)
l = [np.random.randint(1, 100) for _ in range(99)]

# 你的代码写在此处
# print(f"随机数据集的平均数: {_____}")

1b 股票收益率平均数

计算美国银行(BAC)2015-2020年的日收益率平均数:

# 获取数据
bac = yf.download('BAC', start='2015-01-01', end='2020-01-01')

# 计算收益率
returns = _____  # 提示:使用pct_change和dropna

# 你的代码写在此处
# print(f"BAC收益率平均数: {_____}")

练习2:中位数

2a 随机数据集中位数

使用练习1生成的随机列表,计算中位数:

# 你的代码写在此处
# print(f"随机数据集的中位数: {_____}")

2b 股票收益率中位数

计算花旗集团(C)2018-2023年收益率中位数:

citi = yf.download('C', start='2018-01-01', end='2023-01-01')
returns = _____

# 你的代码写在此处
# print(f"花旗收益率中位数: {_____}")

练习3:众数

3a 随机数据集众数

计算练习1中随机列表的众数:

# 你的代码写在此处
# print(f"随机数据集的众数: {_____}")

3b 收益率众数分箱

分析标普500 ETF(SPY)近3年收益率的众数分箱:

spy = yf.download('SPY', start='2021-01-01', end='2024-01-01')
returns = _____

# 分箱处理(20个箱)
hist, bins = _____

# 找出最高频率分箱
maxfreq = _____
# 你的代码写在此处
# print(f"高频分箱区间: {_____}")

练习4:几何平均数

4a 随机几何平均数

计算练习1随机列表的几何平均数:

# 你的代码写在此处
# print(f"几何平均数: {_____}")

4b 长期收益率验证

验证苹果公司(AAPL)10年价格的几何平均增长率:

aapl = yf.download('AAPL', start='2013-01-01', end='2023-01-01')['Close']

# 计算几何平均收益率
ratios = _____ + 1
geo_mean = _____

# 验证价格计算
initial = aapl.iloc[0]
calculated = _____
# 你的验证代码写在此处

练习5:调和平均数

5a 随机调和平均数

计算练习1随机列表的调和平均数:

# 你的代码写在此处
# print(f"调和平均数: {_____}")

5b 交易策略应用

假设每月定投QQQ ETF,计算平均成本价(需用调和平均数):

qqq = yf.download('QQQ', start='2022-01-01', end='2023-01-01')['Close']

# 提取每月第一个交易日价格
monthly_prices = _____

# 你的计算代码写在此处
# print(f"定投平均成本价: {_____}")

练习6:偏度分析

6a 市场偏度判断

分析纳斯达克100(QQQ)近5年收益率的分布偏度:

qqq = yf.download('QQQ', start='2018-01-01', end='2023-01-01')['Close']
returns = _____

mean = _____
median = _____
mode_val = _____

# 你的判断逻辑写在此处
# if _____:
#     print("正偏分布")
# elif _____:
#     print("负偏分布")
# else:
#     print("对称分布")

6b 收益率分布可视化

绘制上述收益率的直方图:

plt.figure(figsize=(10,6))
_____  # 绘制50个分箱的直方图
plt.xlabel('Daily Returns')
plt.ylabel('Frequency')
plt.title('QQQ Daily Returns Distribution')
plt.show()

提示:

  1. 数据获取时注意处理多股票情况:yf.download(['AAPL', 'MSFT'], ...)
  1. 收益率计算推荐使用.pct_change().dropna()组合
  1. 分箱处理时注意numpy.histogram返回值的结构
  1. 几何平均数计算需处理负收益率情况(收益率+1)

完成所有练习后,可通过实际金融数据分析加深对不同集中趋势度量的理解。建议尝试更换不同股票和时间周期观察结果差异。