和鲸社区-Numpy+Pandas数据处理·闯关-关卡4

STEP1: 按照以下要求计算结果
1. 将数据往前移动5天

data.shift(-5)
data.head()

在这里插入图片描述

2. 使用expanding函数计算开盘价的移动窗口均值
Pandas进阶之窗口函数rolling()和expanding():
https://www.jianshu.com/p/b8c795345e93
rolling()函数,是固定窗口大小,进行滑动计算,expanding()函数只设置最小的观测值数量,不固定窗口大小,实现累计计算,即不断扩展;
DataFrame.expanding(min_periods = 1,center = False,axis = 0)

# data.rolling(window = 1, min_periods = 1)["开盘价(元)"].agg(np.mean)

data_expanding = data.expanding(min_periods = 1)["开盘价(元)"].mean()
data_expanding
# data

日期
2016-01-04 16.144400
2016-01-05 15.804400
2016-01-06 15.805867
2016-01-07 15.784525
2016-01-08 15.761120
2016-01-11 15.667500
2016-01-12 15.595586
2016-01-13 15.585812
2016-01-14 15.522278
2016-01-15 15.542100

2017-05-03 16.041489
2017-05-04 16.038314
2017-05-05 16.034769
2017-05-08 16.030695
2017-05-09 16.026356
Name: 开盘价(元), Length: 309, dtype: float64
3. 绘制上一题的移动均值与原始数据折线图

#方法一:分开绘制曲线
import pandas as pd
import matplotlib.pyplot as plt
font = {"family":"MicroSoft YaHei", "weight":"bold", "size":12 }
matplotlib.rc("font", **font)

plt.rc("figure", figsize = (16,6), dpi = 150)#设置图的大小
plt.plot(data["开盘价(元)"], label = "原始数据")
plt.plot(data_expanding, label = "累积数据")
plt.legend(loc = "upper right")
plt.show()
#方法二:新增一列,一起生成曲线(可以自动生成图例)
# data = pd.merge(data,data_expanding, on ="日期" )
# data["开盘价(元)_x"].plot()
# data["开盘价(元)_y"].plot()

在这里插入图片描述

4. 计算布林指标
简介:
布林线指标,即BOLL指标,其英文全称是“Bollinger Bands”,布林线(BOLL)由约翰·布林先生创造,其利用统计原理,求出股价的标准差及其信赖区间,从而确定股价的波动范围及未来走势,利用波带显示股价的安全高低价位,因而也被称为布林带。
布林线(Boll)指标是股市技术分析的常用工具之一,通过计算股价的“标准差”,再求股价的“信赖区间”。
该指标在图形上画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均线,布林线指标的参数最好设为20。一般来说,股价会运行在压力线和支撑线所形成的通道中。
与MACD、RSI、KDJ等指标一样,BOLL指标也是股票市场最实用的技术分析参考指标。
计算布林指标(BOLL指标的计算公式)
移动平均线(MA)
中轨线(MB)=N日的移动平均线
上轨线(UP)=中轨线+两倍的标准差
下轨线(DN)=中轨线-两倍的标准差

N = 20 #布林线指标的参数最好设为20
#第一步:计算MA
MA = data["收盘价(元)"]
#第二步:计算标准差MD
MD = data["收盘价(元)"].rolling(N, min_periods = 1).std()
#第三步:计算MB、UP、DN线
MB = data["收盘价(元)"].rolling(N, min_periods = 1).mean()
UP = MB + 2 * MD
DN = MB - 2 * MD
UP

日期
2016-01-04 NaN
2016-01-05 15.990978
2016-01-06 16.121128
2016-01-07 16.205469
2016-01-08 16.172948

2017-05-03 16.318797
2017-05-04 16.216689
2017-05-05 16.112513
2017-05-08 15.988986
2017-05-09 15.883583
Name: 收盘价(元), Length: 309, dtype: float64

5. 计算布林线并绘制

import pandas as pd
import matplotlib.pyplot as plt

font = {"family":"MicroSoft YaHei", "weight":"bold", "size":12 }
matplotlib.rc("font", **font)
plt.rc("figure", figsize = (16,6), dpi = 150)#设置图的大小
#绘制网格
plt.grid()
#设置x,y轴标签
plt.xlabel("时间")
plt.ylabel("收盘价(元)")
#绘制布林线(中轨线、上轨线、下轨线)
plt.plot(MA, label = "MA")
plt.plot(MB, label = "MB")
plt.plot(UP, label = "UP")
plt.plot(DN, label = "DN")

plt.legend(loc = "upper right")
plt.show()

在这里插入图片描述

STEP2: 为了简化最终提交的行数,所以这里只需要保留上轨线UP这一字段即可,并保存为 csv 文件

dic = {'上轨线':UP}
df = pd.DataFrame(dic).reset_index(drop=True)
df = df.round(2)
df

上轨线
0 NaN
1 15.99
2 16.12
3 16.21
4 16.17
… …
304 16.32
305 16.22
306 16.11
307 15.99
308 15.88
309 rows × 1 columns

设置列名为answer,删除存在缺失值的行,最后保留id(数据行数,从0开始)和answer

df.columns = ['answer']
df.dropna(axis=0, how='any', inplace=True)
df['id'] = range(len(df))
df = df[['id', 'answer']]
df

id answer
1 0 15.99
2 1 16.12
3 2 16.21
4 3 16.17
5 4 16.26
… … …
304 303 16.32
305 304 16.22
306 305 16.11
307 306 15.99
308 307 15.88
308 rows × 2 columns

# 保存文件到本地
#结果就是和答案不一样,自己手动修改的格式
df.index
a = df.loc[19:]
a["id"] = [i for i in range(0,290)]
a
a.to_csv('answer_4.csv', index=False, encoding='utf-8-sig')

在这里插入图片描述

STEP3: 提交 csv 文件,获取分数结果

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值