4.7.5-时间序列数据分析.md

4.7.5 时间序列数据分析(问答库)

  1. 【单选题·易】时间序列数据分析旨在发现时间上的哪些规律? A. 仅缺失值和重复值 B. 趋势、季节性变化、周期性波动等 C. 仅文件编码与分隔符 D. 仅两表是否按学号对齐 答案:B 解析: 语料定义:时间序列数据分析是对按时间顺序排列的数据进行研究和处理的过程,旨在发现时间上的趋势、季节性变化、周期性波动等规律。A、C、D 分别属于 4.6、4.5、4.4。
  2. 【单选题·易】KDJ 指标是股票技术分析中常用的一种什么指标,主要用于判断什么状态? A. 重采样指标,判断升采样还是降采样 B. 动量指标,判断市场的超买或超卖状态 C. 连接指标,判断内连接还是外连接 D. 清洗指标,判断是否删除重复行 答案:B 解析: 语料:KDJ 是动量指标,用于判断超买或超卖。它生成 K、D、J 三条曲线,不是 resample() 或 merge() 的类别。
  3. 【判断题·易】时间序列分析在金融、经济、气象、制造业等领域具有广泛应用,如股票价格波动预测、市场需求分析、气候变化趋势等。 答案:√ 解析: 这是 4.7.5 开篇对应用领域的原句概括。
  4. 【判断题·易】计算 KDJ 时,若无前一日 K 值与 D 值,则可分别用 50 来代替。 答案:√ 解析: 语料明确给出初值规则。课程程序把 K_last、D_last 初始化为 50,再按日递推。
  5. 【多选题·中】关于 K、D、J 三个曲线指标,下列说法正确的有: A. K 值和 D 值反映股价趋势的中短期波动 B. J 值用于放大市场信号,更能敏感地捕捉转折点 C. 指标处于极端区域时,往往意味着趋势可能反转 D. J 值等于当日 RSV,不必用 K、D 计算 答案:ABC 解析: A、B、C 来自 4.7.5 对 KDJ 的说明。J 的公式是当日 J 值=3×当日 K 值-2×当日 D 值,不是 RSV 本身,故 D 错误。
  6. 【单选题·中】课程用文件 601398.xlsx 计算 KDJ。下列说法正确的是? A. 文件保存的是幸福银行 2024 年 1 月 2 日至 8 月 30 日的收盘、最高和最低价,用 pd.read_excel('601398.xlsx', index_col=0) 读入 B. 文件是 renshu.csv,列名为会计、保险、外语 C. 必须用 read_csv 读取,且不能设置 index_col D. 列名必须是温度、滚动平均 答案:A 解析: 语料给出文件名、标的、日期区间和三列价格,以及 read_excel(..., index_col=0)。B 是 4.5 的人数表示例,D 是 4.7.4 移动窗口示例列名。
  7. 【单选题·中】执行下列代码后,第一日 RSV 是?
import pandas as pd
stockData = pd.DataFrame({
    '收盘': [10.0, 14.0, 12.0],
    '最高': [12.0, 14.0, 13.0],
    '最低': [8.0, 10.0, 10.0]
}, index=pd.date_range('2024-01-02', periods=3, freq='D'))
n = 2
low_n = stockData['最低'].rolling(window=n, min_periods=1).min()
high_n = stockData['最高'].rolling(window=n, min_periods=1).max()
rsv = (stockData['收盘'] - low_n) / (high_n - low_n) * 100
print(float(rsv.iloc[0]))

A. 50.0 B. 100.0 C. 0.0 D. 25.0 答案:A 解析: 第一日窗口只有当天:Ln=8,Hn=12,Cn=10。RSV=(10-8)÷(12-8)×100=50。B 是第二日 RSV;D 把乘数 100 误写成 50。

  1. 【多选题·中】按课程程序计算 RSV 时,下列说法正确的有: A. stockData['最低'].rolling(window=n, min_periods=1).min() 得到最近 n 天最低价 B. stockData['最高'].rolling(window=n, min_periods=1).max() 得到最近 n 天最高价 C. window 指定窗口大小,min_periods 指定最少观测数 D. 应当用 resample('W').max() 代替滚动窗口来计算 RSV 答案:ABC 解析: A、B、C 与课程 kdj 及对 rolling 的说明一致。resample() 属于 4.7.3 按日历频率分箱,不是 n 日滚动最值,故 D 错误。
  2. 【判断题·中】课程中的 kdj 函数会 return 一个新数据框,传入的 stockData 保持不变。 答案:× 解析: 函数把 K、D、J 写回传入的数据框,return 后没有返回值。调用方式是 stockData = pd.read_excel(...) 再 kdj(stockData),最后 print(stockData[['K','D','J']]),靠就地修改得到结果。
  3. 【单选题·难】执行下列代码,三处打印结果依次是?
import pandas as pd
import numpy as np
stockData = pd.DataFrame({
    '收盘': [10.0, 14.0, 12.0],
    '最高': [12.0, 14.0, 13.0],
    '最低': [8.0, 10.0, 10.0]
}, index=pd.date_range('2024-01-02', periods=3, freq='D'))
n = 2
low_n = stockData['最低'].rolling(window=n, min_periods=1).min()
high_n = stockData['最高'].rolling(window=n, min_periods=1).max()
rsv = (stockData['收盘'] - low_n) / (high_n - low_n) * 100
K_last = 50
D_last = 50
for i in range(2):
    K_last = (2 / 3) * K_last + (1 / 3) * rsv.iloc[i]
    D_last = (2 / 3) * D_last + (1 / 3) * K_last
print(round(float(rsv.iloc[1]), 1))
print(round(float(rsv.iloc[2]), 1))
print(round(float(K_last), 2))

A. 100.0,50.0,66.67 B. 100.0,66.7,66.67 C. 50.0,50.0,50.0 D. 100.0,50.0,50.0 答案:A 解析: 第二日 2 日窗口:最低 8、最高 14、收盘 14,RSV=100。第三日窗口:最低 10、最高 14、收盘 12,RSV=(12-10)÷(14-10)×100=50。若误用当日最高 13,会得到约 66.7(选项 B)。K 从 50 起:第一日 RSV=50 仍为 50;第二日 K=2/3×50+1/3×100=66.67。D 把 K 停在初值 50。

  1. 【简答题·中】请写出完整可运行代码:构造与第 7 题相同的三行价格数据框,按 n=2、min_periods=1 计算 RSV 并打印。说明 RSV 公式中 Cn、Ln、Hn 的含义,并给出三日 RSV。

    答案:

import pandas as pd
stockData = pd.DataFrame({
    '收盘': [10.0, 14.0, 12.0],
    '最高': [12.0, 14.0, 13.0],
    '最低': [8.0, 10.0, 10.0]
}, index=pd.date_range('2024-01-02', periods=3, freq='D'))
n = 2
low_n = stockData['最低'].rolling(window=n, min_periods=1).min()
high_n = stockData['最高'].rolling(window=n, min_periods=1).max()
rsv = (stockData['收盘'] - low_n) / (high_n - low_n) * 100
print(rsv)

当日 RSV=(Cn-Ln)÷(Hn-Ln)×100。Cn 为第 n 日收盘价,Ln 为 n 日内最低价,Hn 为 n 日内最高价。三日 RSV 依次为 50、100、50。 解析: 评分要点:① 列名为收盘、最高、最低;② 写出 rolling(...).min()/.max() 再套 RSV 公式;③ 能解释 Cn、Ln、Hn;④ 三日结果 50、100、50。只用当日最高最低算第三日、或改用 resample(),应扣分。

  1. 【简答题·难】结合课程 kdj 程序,回答:(1)从原始价格到 K、D、J 的计算顺序与三条公式;(2)为什么 rolling 要写 min_periods=1,若省略会怎样;(3)K、D 为何用循环加 at[],J 却可以直接列运算;(4)函数为什么几乎不使用参数 m1、m2,调用后又怎样看到结果。

    答案: (1)先 RSV,再 K、D,最后 J。RSV=(收盘-n 日最低)÷(n 日最高-n 日最低)×100;K=2/3×前一日 K+1/3×当日 RSV;D=2/3×前一日 D+1/3×当日 K;无前值时 K、D 取 50;J=3×K-2×D。 (2)min_periods=1 让不足 n 日的前几天仍用已有数据计算。省略则默认需满窗口,前 n-1 日 RSV 为 NaN,随后 K、D、J 会连锁为空。 (3)K、D 依赖前一日取值,必须按行递推,并用 at[行标签, 列名] 写入单个元素;J 只依赖当日已算好的 K、D,可用序列一次算出。 (4)默认 m1=3、m2=3 对应公式里的 1/3 与 2/3,课程实现直接写成 2/3、1/3。函数就地改写 stockData,return 无返回值,故先 read_excel 再 kdj(stockData),最后打印 [['K','D','J']]。 解析: 评分要点:① 顺序与四条公式(含初值 50)正确;② 能说明 min_periods 与 NaN 连锁;③ 能区分递推写入与列运算;④ 能说明就地修改与调用方式。把 J 写成 3D-2K、或把 KDJ 说成 resample(),不得满分。

下载此文件