Python 股票市场分析实战
目标:
1.股票数据获取
2.历史趋势分析及可视化
3.风险分析
实验数据:来源于Yahoo Finance / Stooq,该网站提供了很多API接口,本文用的工具是pandas-datareader
实验平台:Anaconda (pandas-datareader 需手动pip install)
导入工具包
1 import datetime 2 import seaborn as sns 3 import matplotlib.pyplot as plt 4 import pandas as pd 5 import numpy as np 6 import pandas_datareader as web
获取数据
1 start = datetime.datetime(2016, 1, 1) # 获取数据的时间段-起始时间 2 end = datetime.date.today() # 获取数据的时间段-结束时间 3 alibaba = web.DataReader("BABA", "stooq", start, end) # 获取阿里巴巴2016年1月1日至今的股票数据
查看数据
print(alibaba.head()) # 查看前5条数据
print(alibaba.tail()) # 查看后5条数据 print(alibaba.index) # 查看DataFrame索引,索引为时间序列 print(alibaba.columns) # 查看DataFram列名,列信息为开盘价、最高价、最低价、收盘价、成交量 print(alibaba.shape) # 查看DataFram形状 print(alibaba.describe()) # 查看DataFrame数据每组的统计情况,如最小值、最大值、均值、标准差等
趋势分析及可视化
1 alibaba["Close"].plot(legend=True) # 收盘价可视化 2 plt.show()
3 alibaba["Volume"].plot(legend=True) # 交易量可视化 4 plt.show()
10 # 每日内股票变化 11 alibaba['high-low'] = alibaba['High'] - alibaba['Low'] 12 print(alibaba.head())
14 # 每日间股票变化daily return 15 alibaba['daily-return'] = alibaba['Close'].pct_change() 16 alibaba['daily-return'].plot(figsize=(40,2)) 17 plt.show()
19 # 每日间股票变化分布图 20 alibaba['daily-return'].plot(kind='hist') 21 plt.show()
23 sns.distplot(alibaba['daily-return'].dropna()) 24 plt.show()
风险分析
1 # 获取五家科技公司2015至今的股票数据 2 start = datetime.datetime(2015,1,1) 3 company = ['AAPL','GOOG','MSFT','AMZN','FB'] 4 top_tech_df = web.DataReader(company,'stooq',start)['Close'] 5 print(top_tech_df.head())
1 # 每日收盘价较前一个交易日的百分比变化,即涨跌幅度
2 top_tech_dr = top_tech_df.pct_change()
3 print(top_tech_dr.head())
# 五家公司的股票收盘价走势图
top_tech_df.plot()
plt.show()
# 探究两组变量的分布及关系 sns.jointplot(x='GOOG',y='MSFT',data=top_tech_dr) plt.show()
# 所有股票相关性比较
sns.pairplot(top_tech_dr.dropna())
plt.show()