1. 对DataFrame类型的数据中的某一列数据进行归一化处理

1.1.code

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
data=pd.read_csv(‘C:/Users/Administrator/Desktop/txt.csv’)
#data.plot()
#data.columns #ndex([‘Date’, ‘Price’], dtype=‘object’)
#data.info()

#归一化部分代码
min1=min(data[‘Price’])
max1=max(data[‘Price’])
def to_onevec(x):
x1=(x-min1)/(max1-min1)
return x1
#处理完后重新塞回去数据就更新
data[‘Price’]=data[‘Price’].apply(lambda x:to_onevec(x)) #针对DataFrame和Series类型的数据可以使用apply遍历他们中的每一个元素:并对每一个元素执行同样的操作(如:数据的归一化、对数变换、统一减掉均值、取绝对值等)

在这里插入图片描述
1.2.效果

  1. 安装Prophet

pip install pystan ==>粘贴到QQ浏览器使用迅雷加速下载文件 https://files.pythonhosted.org/packages/ed/dc/386aa9acc6c3f89ef56f75255a2de97bb8593f3109e01ebbe20ab2a4718e/pystan-2.18.0.0-cp35-cp35m-win_amd64.whl

pip install C:\Users\Administrator\AppData\Local\conda\conda\envs\tensorflow\Lib\site-packages\pystan-2.18.0.0-cp35-cp35m-win_amd64.whl

pip install fbprophet

import fbprophet #检验安装成功
1
2
3
4
5
6
7
3. XX银行股票分析走起

“”“python3股票数据分析预测”""
import fix_yahoo_finance as yf
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import datetime
#1.读取数据
yf.pdr_override()
end=datetime.datetime.now()
start=end-10*datetime.timedelta(days=365) #取到10年的数据,从当前向过去回退10年
#读取平安银行数据
df_csvsave=web.get_data_yahoo(‘000001.SZ’,start,end)
print(df_csvsave)
df_csvsave.index
df_csvsave.columns
plt.subplots(figsize=(15,8))
plt.plot(df_csvsave[‘Open’])
plt.plot(df_csvsave[‘High’])
#plt.plot(df_csvsave[‘Low’])
#plt.plot(df_csvsave[‘Close’])
plt.show()
1 在这里插入图片描述

import pandas_datareader as pdr
pdr1=pdr.get_data_fred(‘GS10’) #取到某一列
#2.检查缺失值
df_csvsave.isnull().values.sum() #0
#可视化股票走势图
from matplotlib import pyplot as plt
df_csvsave[‘Close’].plot(figsize=(16,9)) #画出收盘价格走势

#3.绘图的样式
#plt.style.available查看全部的绘图样式,推荐:绘图样式
#‘fivethirtyeight’,‘dark_background’,‘seaborn-whitegrid’
plt.style.use(‘fivethirtyeight’)
df_csvsave.plot(figsize=(16,9)) #发现没有出现四条曲线,原因是量纲的不同=>对数据做归一化

#由于上述Volume是极值,故把有用的Open(开盘价)和Close(收盘价)等都淹没了,所以对数据的量纲进行统一化很重要。如下将对数据进行归一化处理。均匀数据使用区间缩放法来做归一化
#4.使用区间法归一化:处理后重新覆盖写回
df_csvsave=(df_csvsave-df_csvsave.min())/(df_csvsave.max()-df_csvsave.min())
plt.style.use(‘seaborn-whitegrid’)
df_csvsave.plot(figsize=(16,9)) #归一化只是使得向量计算点积更方便,但是不会改变数据走势

#5.加载画出K线的包
from mpl_finance import candlestick2_ohlc
year2018=df_csvsave[‘2018-01-01’:‘2018-10-20’] #拿出指定时间段的数据
fig,ax=plt.subplots(figsize=(16,9)) #画布和坐标轴
candlestick2_ohlc(ax,year2018.Open,year2018.High,year2018.Low,year2018.Close,colorup=‘g’,colordown=‘r’,width=.5,alpha=.6) #注意K线条的顺序

#6.绘制对比变化
import numpy as np
year_2018_close=year2018.Close
year_2018_close.shift(-1) #取到昨天的数据,(2号,3号)
year_2018_close.shift(1) #取到今天的数据,(3号,4号)
log_change=np.log(year_2018_close)-np.log(year_2018_close.shift(1)) #取昨天的数据和求取明天的数据,都用shift向前滑动1天,或者向后滑动1天。
fig,ax=plt.subplots(figsize=(16,9)) #画布和画板
ax.plot(log_change)
#画图方法很多不是固定的
ax.axhline(y=0,color=‘red’) #画出一条横线来标记一下走势图相对于y=0的偏离程度
#图的含义:点在上面今天相对于昨天是涨了,点在下面今天相对于昨天是跌了。

#绘制当日于上日的涨跌柱状图
x1=np.arange(len(log_change))+1
plt.subplots(figsize=(16,9))
plt.bar(x1,log_change,width = 0.8) #left=水平刻度个数,hight=纵轴坐标刻度个数

#绘制涨跌天数之间的比例
pos,neg=[],[]
def up_down(x):
if x>0:
pos.append(1)
else:
neg.append(1)
log_change.apply(lambda x:up_down(x)) #apply用于Series和DataFrame的遍历(遍历他们中的每一个元素,可以结合lambda函数对每个值做特定的处理:如归一化、取对数,与均值做差值)
up_dwon_rate=np.sum(pos)/np.sum(neg)
#7.股票交易策略
short_rolling=year_2018_close.rolling(window=5).mean() #滑动窗口的大小window=5越大走势曲线相对会更平滑一些
long_rolling=year_2018_close.rolling(window=15).mean()
fig,ax=plt.subplots(figsize=(16,9)) #画布和画板
p1,=ax.plot(year_2018_close.index,year_2018_close,label=“blue–short(day)”)
p2,=ax.plot(short_rolling.index,short_rolling,label=“red–window=5”)
p3,=ax.plot(long_rolling.index,long_rolling,label=“yellow–window=15”)
handles, labels = ax.get_legend_handles_labels()
ax.legend(handles[::-1], labels[::-1])
#rolling平滑的目的:想要时间更长一点,去抵消掉股价在短时间内的波动,通俗来说,除非你是那种短期操作者
#甚至当天买了当天就卖出。除此之外,如果你想要持股的时间在7天,半个月甚至是1月,那么你就可以通过一个
#长期的变化去平滑掉短期波动带来的影响。从而找到你适合买入和卖出的点。

#算法导论中使用最大子数组的方式来研究股票的走势,一定程度上和滑动平均很像。

fig,ax=plt.subplots(figsize=(16,9))
short_long=np.sign(short_rolling-long_rolling)
buy_sell=np.sign(short_long-short_long.shift(1))
#股票整体下滑的年份是很难赚到钱,基本不够手续费。选择上证指数整体上升的年份做投资,
#相对来说比较能够赚到钱。

#buy_sell.plot(ax=ax) #这个语句很好用,可以直接画图,但是发现y=0的水平线画不出来
ax.plot(buy_sell) #type(buy_sell)=Series
ax.axhline(y=0,color=‘red’)
plt.show()
#粗略的来看,可以认为红线上方的是适合买入的时机,红色以下是适合卖出的时间。
#适合买入的时间节点
buyin=buy_sell[buy_sell 1]
#适合卖出的时间节点
buyout=buy_sell[buy_sell
-1]
#可以选出相邻两个时间点计算交易收益
year_2018_close[‘2018-07-16’]-year_2018_close[‘2018-07-13’]

1 在这里插入图片描述
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
#观察数据发现包含很多的0和np.nan=None==>过滤一下方便买入卖出点的可视化
“”"
链式法则:不断的对原始数据做处理,处理成特定的数据结构,再根据该特定的数据结构的特点(list,DataFrame,Series,array,tuple,dict)继续对数据结构做操作,一直到完成业务需要截止
Series和DataFrame可以使用apply遍历每一个元素,对每一个元素执行相同的处理操作;
array,list等等只能通过map()来实现遍历每一个元素,对每一个元素执行相同的处理操作;
x = list(map(lambda xx:xx.strftime(’%Y-%m-%d’),buy_sell[np.abs(buy_sell)>0].index.tolist())) #type(buy_sell)=Series
“”"
#只想要取到年月日作为字符串索引,如何截取datetime类型的数据
#x= buy_sell[np.abs(buy_sell)>0]
#y = buy_sell[np.abs(buy_sell)>0] #非空数值
“”“正确的一版程序”""
x1= np.arange(0,len(buy_sell[np.abs(buy_sell)>0]))
y1 = buy_sell[np.abs(buy_sell)>0]
plt.subplots(figsize=(21,13))
#x=pd.Series(x)
#type(x.head(1)) #str
#y.index=x[:] #将x的值赋给y的索引
plt.plot(x1, y1, marker=‘o’)
for xy in zip(x1, y1):
if xy[1]>0:
plt.annotate("%s" % ‘buyin’, xy=xy, xytext=(-20, 10), textcoords=‘offset points’)
if xy[1]<0:
plt.annotate("%s" % ‘saleout’, xy=xy, xytext=(-20, 10), textcoords=‘offset points’)

plt.xticks(range(len(x1)),y1.index,rotation=90)
plt.show()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

“”“测试版本1:正确”""
x1= np.arange(0,len(buy_sell))
y1 = buy_sell
fig,ax=plt.subplots(figsize=(60,41))
#x=pd.Series(x)
#type(x.head(1)) #str
#y.index=x[:] #将x的值赋给y的索引
plt.plot(x1, y1, marker=‘o’)
for xy in zip(x1, y1):
if xy[1]>0:
plt.annotate("%s" % ‘buyin’, xy=xy, xytext=(-20, 10), textcoords=‘offset points’)
if xy[1]<0:
plt.annotate("%s" % ‘saleout’, xy=xy, xytext=(-20, 10), textcoords=‘offset points’)
ax.axhline(y=0,color=‘red’)
plt.xticks(range(len(x1)),y1.index,rotation=90)
plt.show()
#图形的横坐标是:2018-01-02 00:00:00 ~2018-10-19 00:00:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

#8.股票预测:时间序列的预测----长期才会比较可行,短期不可信
#Prophet加性模型预测
import fbprophet #facebook的模块
data=df_csvsave[‘Close’].reset_index() #重新指定index,因为之前是Date是作为index
#Dataframe must have columns ‘ds’ and ‘y’ with the dates and values respectively.
data=data.rename(columns={‘Date’:‘ds’,‘Close’:‘y’}) #列名的重名令
changepoint_prior=[0.01,0.02,0.03,0.04,0.05,0.06,0.1]
count=0
for iten in range(0,1):
model=fbprophet.Prophet(changepoint_prior_scale=changepoint_prior[iten],daily_seasonality=True)
model.fit(data)
#默认情况下,Prophet能够满足附加的季节性,这意味着季节性的影响是加到趋势中得到了最后的预报
forecst_df=model.make_future_dataframe(periods=365,freq=‘D’)
forecast=model.predict(forecst_df)
model.plot(forecast,xlabel=‘Date’,ylabel=‘Close Price’)
#绘图中黑色表示真实数据;蓝色表示预测数据
#9.变化点观测
#Prophet提供了帮助我们绘制股票价格变化点,变化点代表时间序列上升与下降的变化时刻
from fbprophet.plot import add_changepoints_to_plot
fig=model.plot(forecast)
a=add_changepoints_to_plot(fig.gca(),model,forecast)
plt.title(‘changepoint_prior_scale=%f ,fbprophet prediction curve’ % iten)
plt.savefig(‘D:/momo_%d.png’ % count )
count+=1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
changepoint_prior_scale=0.01 ,fbprophet prediction curve
1

changepoint_prior_scale=0.02 ,fbprophet prediction curve
1

changepoint_prior_scale=0.03 ,fbprophet prediction curve
1

changepoint_prior_scale=0.04 ,fbprophet prediction curve
1

changepoint_prior_scale=0.05 ,fbprophet prediction curve
1

changepoint_prior_scale=0.06 ,fbprophet prediction curve
1

changepoint_prior_scale=0.1 ,fbprophet prediction curve
1
2

#10.多维度变化趋势观测
from fbprophet.plot import plot_components
model.plot_components(forecast) #展示不同时间粒度:如年、月、日、时的走势

1
2
3
4

————————————————

对DataFrame类型的数据中的某一列数据进行归一化处理1.1.codeimport pandas as pdimport numpy as npimport matplotlib.pyplot as pltdata=pd.read_csv(‘C:/Users/Administrator/Desktop/txt.csv’)#data.plot()#data.columns #n...
Prophet 的算法实现 在时间序列 分析 领域,有一种常见的 分析 方法叫做时间序列的分解 (Decomposition of Time Series),它把时间序列 分成几个部分,分别是季节项 ,趋势项 ,剩余项 。也就是 说对所有的 ,都有 除了加法的形式,还有乘法的形式,也就是: 以上式子等价于 。所以,有的时候在预测模型的时候,会先取 对数,然后再进行时间序列的分解,就能得到乘法的形式。在 fbprophet 算法中,作者们基于这 种方法进行了必要的改进和优化。一般来说,在实际生活和生产环节中,除了季节项,趋势项,剩余项之外,通常还有节假日的效 应。所以,在 prophet 算法里面,作者同时考虑了以上四项,也就是: 其中 表示趋势项,它表示时间序列在非周期上面的变化趋势; 表示周期项,或者称为 季节项,一般来说是以周或者年为单位; 表示节假日项,表示在当天是否存在节假日; 表 示误差项或者称为剩余项。Prophet 算法就是通过拟合这几项,然后最后把它们累加起来就得到了 时间序列的预测值。
1、内容概要:本资源主要包括 Python 3对 股票 数据进行 分析 源代码、 Python 3对 股票 的收益和风险 分析 源代码、 Python 3对多 股票 的投资组合进行 分析 源代码、北京某投资管理有限公司20支真实 股票 数据、20支 股票 整体绘图 分析 结果展示等。 2、本资源适用于对量化交易感兴趣的学生学习实验参考使用。 3、量化交易是以先进的数学模型替代人为的主观判断,利用计算机技术从庞大的历史数据中海选能带来超额收益的多种“大概率”事件以制定策略,极大地减少了投资者情绪波动的影响,避免在市场极度狂热或悲观的情况下作出非理性的投资决策。本资源仅供学习使用,不可作为真实场景模拟操作。 4、源代码主要包括: 股票 的开盘价、最高价、最低价、收盘价、成交量、市值、换手率、pe、pb等指标 分析 ,绘制K线图、 股票 指标相关性 分析 、移动平均线、 股票 收益率 分析 、风险性衡量、投资组合等。
Python 数据分析 ---- XX 银行 股票 分析 小娱 本文使用Facebook的Prophet工具对 XX 银行 股票 进行 分析 和预测,just for fun!如下是 分析 过程中的收获和随笔记录。 1. 对DataFrame类型的数据中的某一列数据进行归一化处理 1.1.code import pandas as pd import numpy as np import matplotlib.pyplot ...
一、 前言 写在前面:不是人人都是巴菲特,作为普通小韭菜不要幻想一夜暴富!!!踹开临门一脚,投点小钱,进去冲个浪还是挺有意思的,注意总结经验,最大程度的减少被割的概率。年轻人还是要脚踏实地! 股谚云:“股市上什么都能骗人,唯有成交量不能骗人。”成交量通常比股价先行,股市上有"先见量后见价"之说。 开局一张图,接下来慢慢编(来自资深小韭菜的挣扎): 根据美国的股市 分析 家葛兰碧(Joe Granville)著名的“量价理论”的核心思想:影响股价走势的关键因素就是成交量(此处不考虑政策等其他因素)。 如果只关注K
import numpy as np df = pd.DataFrame(np.random.randint(0,10,size=(5, 2)),columns=['test1','test2']) 生成的dataframe格式是: 直接使用: df.loc[0,'test_list'] = np.array([1,2,3]) 会报错:ValueError: Must have equal len keys and value when settin
文章目录prophet 安装数据集下载 prophet 实战导入包pandas 读取 csv 数据画个图拆分数据集从日期中拆分特征使用 prophet 训练和预测prophet 学到了什么放大图 prophet 安装 prophet 是facebook 开源的一款时间序列预测工具包,直接用 conda 安装 fbprophet 即可 prophet 的官网:https://facebook.github.io/prophet/ prophet 中文意思是“先知” prophet 的输入一般具有两列:ds和y ds(datestamp) 列应为 Pandas 可以识别的日期格式,日期应为YYYY-
Python 3是一种高级编程语言,可用于在Excel中 分析 和处理各种数据。 Python 的开放源代码和广泛应用使其成为 数据分析 领域的首选工具之一。 开发Excel 数据分析 师需要具备以下技能: 1. 熟悉 Python 3编程语言和其内置的数据结构及函数库。 2. 掌握 数据分析 的基础概念,了解如何从大量数据中提取关键信息。 3. 熟练使用Excel应用程序,熟悉其基本功能及公式等。 4. 熟练使用 Python 的第三方 数据分析 库如pandas和numpy等进行 数据分析 与处理。 5. 能够将Excel数据导入到 Python 环境中,以便进行更为详尽的 数据分析 。 6. 熟练使用 Python 生成各种数据可视化图形,形象地展现 数据分析 结果。 7. 能够编写 Python 脚本自动化 数据分析 过程,提高 数据分析 的效率。 8. 了解常用的机器学习算法,对数据建模 分析 。 总之, Python 3开发-Excel 数据分析 师需要掌握 Python 编程技能,了解 数据分析 流程和原理,并能够熟练应用Excel和 Python 数据分析 库进行 数据分析 ,以发掘数据的价值。