▌前言
本次教程内容和之前的类似,但是新增了一个S&P500指数的数据读取, 并利用之前教程的split方法提取股票的对应价格(Price)
▌视频
▌视频出处
视频系列:Scikit-learn Machine Learning with Python and SKlearn
本视频出处:Scikit Learn Machine Learning for investing Tutorial with Python p. 7
哔哩哔哩:Scikit Learn Machine Learning for investing Tutorial with Python p. 7
▌数据下载
下载地址:数据
百 度 云: 地址 密码: yyq8
SP500指数数据: 链接 密码:k08j
▌内容
本教程主要目的是获取股票的对应价格和SP500指数的对应价格,并保存在CSV文件当中。
而对于如何在html文件中获取相应的股票,教程用了之前的split方法,下面提及到的</-small><-big><-b>在html的源码中可以查看得到:
#读取html后并以</small><big><b>作为split,提取第一位元素,然后将后面'</b></big>'作为结束
stock_price = float(source.split('</small><big><b>')[1].split('</b></big>')[0])
提取完股票价格之后,我们将之前获取的unix_time重新转为SP500指数里面的日期格式,"%Y/%m/%d", ex.“2001/01/02”.
转换后,将SP500的日期和股票的日期对上并赋予对应的价格。
之所以用到try 和 except, 是因为在雅虎得到的SP500指数数据没有区分工作日和周末,所以会出现日期对应不上的错误。 所以except下面的代码的作用是:如果日期对应不上,那么就往后减259200秒,等于3日(259200=60秒*60分钟*24小时*3日)
。
try:
sp500_date = datetime.fromtimestamp(unix_time).strftime('%Y/%m/%d')
row = sp500_df[(sp500_df.index ==sp500_date)]
sp500_value = float(row['Adj Close'])
except:
sp500_date = datetime.fromtimestamp(unix_time-259200).strftime('%Y/%m/%d')
row = sp500_df[(sp500_df.index ==sp500_date)]
sp500_value = float(row['Adj Close'])
▌源代码
import matplotlib.pyplot as plt
from sklearn import datasets
import pandas as pd
import os
import time
from datetime import datetime
#获取数据的具体路径
path = '../intraQuarter'
#定义一个function,默认值为Total Debt/Equity (mrq),以后可以更改为其他
def Key_Stats(gather="Total Debt/Equity (mrq)"):
statspath = path+'/_KeyStats'
#os模块提供的walk方法很强大,能够把给定的目录下的所有目录和文件遍历出来。
#方法:os.walk(path),遍历path,返回一个对象,他的每个部分都是一个三元组,('目录x',[目录x下的目录list],目录x下面的文件)
stock_list = [x[0] for x in os.walk(statspath)]
df = pd.DataFrame(columns = ['Date','Unix','Ticker','DE Ratio', 'Price','SP500'])
#读取sp500的数据
sp500_df = pd.DataFrame.from_csv('SPY.csv')
#stock_list[1:] -- skip the root folder
for each_dir in stock_list[1:25]:
#os.listdir(each_dir):列出each_dir下的目录和文件
each_file = os.listdir(each_dir)
ticker = each_dir.split("\\")[1]
if len(each_file) > 0:
for file in each_file:
#将文件名转换为时间序列
date_stamp = datetime.strptime(file, '%Y%m%d%H%M%S.html')
#转换为unix_time
unix_time = time.mktime(date_stamp.timetuple())
full_file_path = each_dir+'/'+file
#读取html文件
source = open(full_file_path, 'r').read()
try:
#读取html后并以gather + ':</td><td class="yfnc_tabledata1">作为split,提取第一位元素,然后将后面</td>作为结束
value = float(source.split(gather + ':</td><td class="yfnc_tabledata1">')[1].split('</td>')[0])
try:
sp500_date = datetime.fromtimestamp(unix_time).strftime('%Y/%m/%d')
row = sp500_df[(sp500_df.index ==sp500_date)]
sp500_value = float(row['Adj Close'])
except:
sp500_date = datetime.fromtimestamp(unix_time-259200).strftime('%Y/%m/%d')
row = sp500_df[(sp500_df.index ==sp500_date)]
sp500_value = float(row['Adj Close'])
#读取html后并以'</small><big><b>'作为split,提取第一位元素,然后将后面'</b></big>'作为结束
stock_price = float(source.split('</small><big><b>')[1].split('</b></big>')[0])
# print('stock_price:', stock_price, 'ticker:', ticker)
#将数据叠加并保存在字典里面
df = df.append({'Date':date_stamp,
'Unix':unix_time,
'Ticker':ticker,
'Price':stock_price,
'SP500':sp500_value,
'DE Ratio':value}, ignore_index=True)
except Exception as e:
pass
#将gather="Total Debt/Equity (mrq)" 中的多余符号替换掉,用作文件名
save = gather.replace(' ','').replace('(','').replace(')','').replace('/','')+ ('.csv')
print(save)
df.to_csv(save)
Key_Stats()
▌最后
虽然分c君_BingWong
只是作为一名搬运工,连码农都称不上。 但制作代码中的注释、翻译和搬运都花了很多时间,请各位大侠高抬贵手,在转载时请注明出处。