使用关联规则分析股票数据--数据来自tushare大数据社区
- 一、开发环境
- 二、目标
- 三、关联规则(之前了解过直接跳到第四步)
- 1.关联规则的定义
- 2.啤酒尿布的例子
- 2.1 支持度
- 2.2置信度
- 2.3 提升度
- 2.4 关联规则
- 2.5 啤酒和尿布
- 四、股票关联规则分析
- 1.使用的库
- 2.获取数据
- 3.数据分类
- 4.关联规则(超简单)
- 五、小结
Tushare运行三年多以来,数据从广度和深度都得到了提升,Pro版正是在此基础上做了更大的改进。
数据内容将扩大到包含股票、基金、期货、债券、外汇、行业大数据,同时包括了数字货币行情等区块链数据的全数据品类的金融大数据平台,为各类金融投资和研究人员提供适用的数据和工具。
一、开发环境
1.编程:python3.7+jupyter
2.算法:python自带的apriori算法
2.数据来源:tushare大数据社区
二、目标
使用关联规则分析在一段时间内,哪些股票是它涨我也涨的(关联)。
三、关联规则(之前了解过直接跳到第四步)
1.关联规则的定义
关联规则挖掘可以让我们从数据集中发现项与项(item 与 item)之间的关系,它在我们的生活中有很多应用场景,“啤酒尿布”就是一个常见的场景。
需要了解的概念:支持度、置信度、提升度;
2.啤酒尿布的例子
2.1 支持度
支持度是个百分比,它指的是某个商品组合出现的次数与总次数之间的比例。支持度越高,代表这个组合出现的频率越大。
suopport(X)=集合X中的所有项同时出现在一条记录中出现的次数/数据记录的个数
例如:
support({啤酒})
=啤酒出现的次数/总记录数
=3/5=60%
在这个例子中,我们能看到“啤酒”出现了 3 次,那么这 5笔订单中“牛奶”的支持度就是 3/5=0.6。
同样“牛奶 + 面包”出现了 3 次,那么这 5 笔订单中"牛奶 + 面包”的支持度就是 3/5=0.6。
2.2置信度
置信度可以看作为一个条件概率,即当你购买了商品 A,会有多大的概率购买商品 B。置信度越高,代表若条件X成立,则Y出现的可能性越大。
confidence(X->Y)=集合X与集合Y中的项在一条记录中同时出现的次数/集合X出现的个数。
在上面这个例子中:
confidence(牛奶→啤酒)=牛奶和啤酒同时出现的次数/牛奶出现的次数=2/4=0.5,代表如果你购买了牛奶,有0.5的概率会购买啤酒。
confidence(啤酒→牛奶)=2/3=0.67,代表如果你购买了啤酒,有0.67的概率会购买牛奶。
2.3 提升度
我们在做商品推荐的时候,重点考虑的是提升度,因为提升度代表的是“商品 A 的出现,对商品 B 的出现概率提升的”程度。 lift是度量规则是否可用的指标,描述的是相对于不用规则,使用规则可以提高多少。
lift有三种可能:
(1)提升度大于1 ,代表有提升,规则有效;
(2)提升度等于1 ,代表没有提升,也没有下降;
(3)提升度小于1 ,代表有下降。
计算公式 lift(X->Y)=confidence(X->Y)/supper(Y)
例如: lift({牛奶}->{啤酒}) =confidence({牛奶}->{啤酒})/support(啤酒) =0.5/0.6=0.83
2.4 关联规则
用于从大量数据中挖掘出有价值的数据项之间的相关关系 协同过滤(Collaborative Filtering,简称CF)
两个不相交的非空集合X、Y,如果有X->Y,就说X->Y是一条关联规则。
强度:支持度(support)、置信度(confidence)。
效度:提升度(Lift) 。
2.5 啤酒和尿布
from efficient_apriori import aprioridata = [['牛奶','面包','尿布'],['可乐','面包', '尿布', '啤酒'],['牛奶','尿布', '啤酒', '鸡蛋'],['面包', '牛奶', '尿布', '啤酒'],['面包', '牛奶', '尿布', '可乐']]
import pandas as pd
pd.DataFrame()
itemsets, rules = apriori(data, min_support=0.5, min_confidence=1)
print(itemsets)
print(rules)
itemsets统计了每个元素出现了几次,这里只展示了一部分
设置支持度为0.5,置信度为1后,得到以下几个元素在一定参数下有关联关系
四、股票关联规则分析
1.使用的库
只是把股票数据导出成为csv文件,没用到数据库,用数据库的朋友自行把数据库加上(我懒得加了,毕竟这是很久之前做的作业了)。
主要是pandas、tushare还有efficient_apriori库
import pandas as pd
import tushare as ts
from efficient_apriori import apriori
2.获取数据
pro=ts.pro_api('e89ff146498d80dfcdc326dacbe6c397363b4a37cebadff0c81e8d23')
上面pro,就是tushare自带的一个接口token,接入后,即可获得海量股票数据。
下面就是获取数据了,这里用的是日线行情,选好股票代码,注明开始日期和结束日期即可
#获取数据
df = pro.daily(ts_code='000001.SZ,000002.SZ,000004.SZ,000005.SZ,000006.SZ,000007.SZ,000008.SZ,000009.SZ,000010.SZ,000011.SZ,000012.SZ,000014.SZ,000016.SZ,000017.SZ,000018.SZ,000019.SZ,000020.SZ,000021.SZ,000022.SZ',start_date='20180701',end_date='20180730')
df.to_csv("股票数据.csv")
print(df)
其实不整成csv文件也能用,主要就是方便以后可能还会用到数据,如图所示,开盘价,最高价,最低价,涨跌幅等等参数都有了。
3.数据分类
python的库功能非常强大,写起程序来也相对简单。
刚刚已经有了数据,但这是每只股票不同时间的数据,想要做关联规则分析就必须把同一天的数据放在一起,就像上面每天销售的啤酒尿布一样。
这里我用的是笨办法,先是对涨跌幅>=3%的数据进行筛选,完了再对照日期把同一天股票数据涨跌幅>=3%的放在一起,如有高招,请在评论区交流。
#数据整理
df=df[df['pct_chg']>=3]
print(df)
a1=list(df[df['trade_date']=='20180703']['ts_code'])
a2=list(df[df['trade_date']=='20180704']['ts_code'])
a3=list(df[df['trade_date']=='20180706']['ts_code'])
a4=list(df[df['trade_date']=='20180709']['ts_code'])
a5=list(df[df['trade_date']=='20180710']['ts_code'])
a6=list(df[df['trade_date']=='20180712']['ts_code'])
a7=list(df[df['trade_date']=='20180713']['ts_code'])
a8=list(df[df['trade_date']=='20180717']['ts_code'])
a9=list(df[df['trade_date']=='20180718']['ts_code'])
a10=list(df[df['trade_date']=='20180720']['ts_code'])
a11=list(df[df['trade_date']=='20180723']['ts_code'])
a12=list(df[df['trade_date']=='20180724']['ts_code'])
a13=list(df[df['trade_date']=='20180725']['ts_code'])
a14=list(df[df['trade_date']=='20180726']['ts_code'])
a15=list(df[df['trade_date']=='20180727']['ts_code'])
a16=list(df[df['trade_date']=='20180730']['ts_code'])
data=[a1,a2,a3,a4,a5,a6,a7,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16]
print(data)
结果就是这样了
可以看到虽然我们之前选了很多只股票,其实涨的也没几只,这对于数据分析来说是不太有利的,感兴趣可以多选一点。
4.关联规则(超简单)
python的库特别多,很多东西不用自己编,它都是有的。
#关联规则
results = list(apriori(data, min_support=0.1,min_confidence=1))
print(results)
可以看到我选择的支持度特别低,因为一直涨的或者说大部分时间都在涨的股票真的是太少了(也可能是股票样本太小或者样本选得不好)。
前面统计了次数,后面就是关联规则分析结果。结果并不是很好,这里仅仅给大家提供一个思路。
五、小结
本次用关联规则分析股票数据,为股票选择提供了一种参考,编程的思路大概就是这样。
根据结果是可以作为股票选择的一个参考,比如谁和谁总是一起涨,这个我们是可以通过关联规则分析得出结论的。
当然,股票样本选择、支持度、置信度的选择是看大家自己的需求慢慢调整了。