学了一段时间的python数据分析以后,下面来完成一个股票数据分析的实际案例。
1.数据获取:
去雅虎财务上面搜索,具体网址如下:
https://finance.yahoo.com/
安装pandas-datareader
pip install pandas-datareader
在这里我选择的是苹果公司的股票数据做测试,网址如下:
https://finance.yahoo.com/quote/AAPL?p=AAPL&.tsrc=fin-srch
代码如下:
初步获取Apple.Inc的股票基本信息
import pandas_datareader as pdr
# 苹果股票数据,代码为AAPL
apple = pdr.get_data_yahoo('AAPL')
print(apple.head())
print(apple.shape)
print(apple.tail())
print(apple.describe())
print(apple.info())
2.数据分析:
(1)历史趋势分析:
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
# 股票数据读取
import pandas_datareader as pdr
# 可视化
import matplotlib.pyplot as plt
# time
from datetime import datetime
start = datetime(2009,12,31)
Apple = pdr.get_data_yahoo('AAPL',start=start)
Microsoft = pdr.get_data_yahoo('MSFT',start=start)
# 将数据存入CSV文件
# Apple.to_csv('Apple.csv')
# Microsoft.to_csv('Microsoft.csv')
# 苹果和微软的股票价格对比
Apple['Adj Close'].plot(legend=True,label='Apple.Inc')
Microsoft['Adj Close'].plot(legend=True,label='Microsoft')
plt.show()
# 交易量对比
Apple['Volume'].plot(legend=True,label='Apple.Inc')
Microsoft['Volume'].plot(legend=True,label='Microsoft')
plt.show()
# 股票价格极差对比
Apple['high-low'] = Apple['High'] - Apple['Low']
Microsoft['high-low'] = Apple['High'] - Apple['Low']
Apple['high-low'].plot(label='Apple.Inc')
Microsoft['high-low'].plot(label='Microsoft')
plt.show()
# daily return(每天变化情况)
Apple['daily return'] = Apple['Adj Close'].pct_change()
Apple['daily return'].plot(label='Apple.Inc',figsize=(15,8),linestyle='--',marker='o')
plt.show()
Apple['daily return'].plot(label='Apple.Inc',kind='hist')
plt.show()
(2)风险评估分析:
分位数:
分位数,亦称分位点,是指用分割点将一个随机变量的概率分布范围分为几个具有相同概率的连续区间。分割点的数量比划分出的区间少1,例如3个分割点能分出4个区间。 常用的有中位数、四分位数、十分位数、百分位数等。q-quantile是指将有限值集分为q个接近相同尺寸的子集。
import numpy as np
import pandas as pd
from pandas import Series,DataFrame
import seaborn as sns
# 股票数据读取
import pandas_datareader as pdr
# 可视化
import matplotlib.pyplot as plt
# time
from datetime import datetime
start = datetime(2015,1,1)
company=['AAPL','GOOG','MSFT','AMZN','FB']
top_tech_df = pdr.get_data_yahoo(company,start=start)['Adj Close']
top_tech_dr = top_tech_df.pct_change()
# 将数据存入CSV文件
# Apple.to_csv('Apple.csv')
# Microsoft.to_csv('Microsoft.csv')
top_tech_df.plot()
plt.show()
# 散点图
sns.jointplot('AAPL','GOOG',top_tech_dr,kind='scatter')
plt.show()
sns.pairplot(top_tech_dr.dropna())
plt.show()
# 分位数,有95%的把握在这个区间里面,应用于风险评估
top_tech_dr['AAPL'].quantile(0.05)