使用ARIMA算法进行时间序列预测。
| # 抓取行健宏扬中国基金 from bs4 import BeautifulSoup import requests headers = {'Accept':'text/javascript, application/javascript, */*; q=0.01', 'Accept-Encoding':'gzip, deflate', 'Accept-Language':'zh-CN,zh;q=0.8', 'Connection':'keep-alive', 'Cookie':'vjuids=148cf0186.15e03abf2ac.0.c311af0ddaa6c; ADVS=358187b0bd1a65; ASL=17431,000pn,7010519170105191; jrj_uid=15060593555978DJcIwmvnb; jrj_z3_newsid=723; ADVC=35686f6caeedf3; WT_FPC=id=2ef30c6a0af7eaf3a501506059355507:lv=1506063782501:ss=1506063782501; channelCode=3763BEXX; ylbcode=24S2AZ96; vjlast=1503300154.1506059356.23; Hm_lvt_a07bde197b7bf109a325eebaee445939=1506059356; Hm_lpvt_a07bde197b7bf109a325eebaee445939=1506063783', 'Host':'fund.jrj.com.cn', 'Referer':'http://fund.jrj.com.cn/archives,968006,jjjz.shtml', 'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 'X-Requested-With':'XMLHttpRequest'} params = {'fundCode':'968006', 'obj':'obj', 'date':2017} r = requests.get('http://fund.jrj.com.cn/json/archives/history/netvalue?',params=params,headers=headers) r.encoding ='utf-8' mydata = r.text |
| # 从字符串中提取标准json格式数据 table = mydata[8:] # 将字符串转为json,不用手动解析 myJson = json.loads(table) # 提取净值数据 myJson['fundHistoryNetValue'] |
| from pymongo import MongoClient db = MongoClient('localhost',27017)['fund'] collect = db.get_collection('hjhy') collect.insert(myJson['fundHistoryNetValue']) print('done') |
| from pymongo import MongoClient import pandas as pd import time,datetime db = MongoClient('localhost',27017)['fund'] data = dict() for item in db.get_collection('hjhy').find(): data[datetime.datetime.fromtimestamp(time.mktime(time.strptime(item['enddate'],'%Y-%m-%d')))] = item['accum_net'] |
| # 构建时间序列 my_series = pd.Series(data, data.keys()) # 处理数据类型,将Str转换为float my_series = my_series.apply(lambda x: float(x)) # 按日期生序排序 my_series = my_series.sort_index() |
| %pylab # plot(my_series) my_series.plot() |
| from matplotlib import pyplot as plt # 一阶差分 fig = plt.figure() diff1 = my_series.diff(1) diff1.plot() # 二阶差分 fig = plt.figure() diff2 = my_series.diff(2) diff2.plot() |
| # 一阶差分描述性统计 diff1.dropna(inplace=True) diff1.describe() |
| # 二阶差分描述性统计 diff2.dropna(inplace=True) diff2.describe() |
| import statsmodels.api as sm fig = plt.figure() ax0 = fig.add_subplot(211) fig = sm.graphics.tsa.plot_acf(diff1, lags=30, ax=ax0) ax1 = fig.add_subplot(212) fig = sm.graphics.tsa.plot_pacf(diff1, lags=30, ax=ax1) |
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
