このサイトを参考にして、米企業12社(アップル、ジョンソン&ジョンソン、マクドナルド、ネットフリックス、ウォールマート、フェースブック、ツイッター、アマゾン、グーグル、ディズニー、インテル、AMD、マイクロソフト)の相対的収益率をplotlyで視覚化してみたいと思います。
import numpy as np
import pandas as pd
import plotly.graph_objs as go
from plotly.offline import plot,iplot
import datetime
import matplotlib.pyplot as plt
%matplotlib inline
from pandas_datareader import data as pdr
import fix_yahoo_finance as yf
アップル、ジョンソン&ジョンソン、マクドナルド、ネットフリックス、ウォールマート、フェースブック、ツイッター、アマゾン、グーグル、ディズニー、インテル、AMD、マイクロソフトの株価をダウンロードします。
tickers = (['AAPL','JNJ','MCD','NFLX','WMT','FB','TWTR','AMZN','GOOGL',
'DIS','INTC','AMD','MSFT'])
stocks_start = datetime.datetime(2010, 1, 1)
stocks_end = datetime.datetime(2019, 7, 18)
def get(tickers, startdate, enddate):
def data(ticker):
return (pdr.get_data_yahoo(ticker, start=startdate, end=enddate))
datas = map(data, tickers)
return(pd.concat(datas, keys=tickers, names=['Ticker', 'Date']))
all_data = get(tickers, stocks_start, stocks_end)
all_data.tail()
close = all_data[['Close']].reset_index()
close.head()
start_of_year = datetime.datetime(2017, 1, 3)
close_start = close[close['Date']>=start_of_year]
close_start.tail()
chart_data_eval = close_start
chart_data_eval.reset_index(inplace=True)
chart_data_eval.head()
chart_data_eval_pivot = pd.pivot_table(chart_data_eval, index='Date', columns='Ticker', values = 'Close')
chart_data_eval_pivot.reset_index(inplace=True)
chart_data_eval_pivot.head()
chart_data_eval_pivot_relative = pd.pivot_table(chart_data_eval, index='Date', columns='Ticker', values = 'Close')
chart_data_eval_pivot_relative.tail()
chart_data_eval_pivot_relative_first = chart_data_eval_pivot_relative.iloc[0,:]
chart_data_eval_pivot_relative_first.head()
chart_data_eval_pivot_relative = (chart_data_eval_pivot_relative.divide(chart_data_eval_pivot_relative_first, axis=1))-1
chart_data_eval_pivot_relative.reset_index(inplace=True)
chart_data_eval_pivot_relative.head()
chart_data_eval_pivot_relative.tail()
スポンサーリンク
相対的収益率をグラフ化する¶
trace1 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['FB'],
mode = 'lines',
name = 'FB Prices')
trace2 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['AAPL'],
mode = 'lines',
name = 'AAPL Returns')
trace3 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['NFLX'],
mode = 'lines',
name = 'NFLX Returns')
trace4 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['WMT'],
mode = 'lines',
name = 'WMT Returns')
trace5 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['TWTR'],
mode = 'lines',
name = 'TWTR Returns')
trace6 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['JNJ'],
mode = 'lines',
name = 'JNJ Returns')
trace7 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['AMZN'],
mode = 'lines',
name = 'AMZN Returns')
trace8 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['GOOGL'],
mode = 'lines',
name = 'GOOGL Returns')
trace9 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['DIS'],
mode = 'lines',
name = 'DIS Returns')
trace10 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['INTC'],
mode = 'lines',
name = 'INTC Returns')
trace11 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['AMD'],
mode = 'lines',
name = 'AMD Returns')
trace12 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['MSFT'],
mode = 'lines',
name = 'MSFT Returns')
trace12 = go.Scatter(
x = chart_data_eval_pivot_relative['Date'],
y = chart_data_eval_pivot_relative['MCD'],
mode = 'lines',
name = 'MCD Returns')
data = [trace1,trace2,trace3,trace4,trace5,trace6,trace7,trace8,
trace9,trace10,trace11,trace12]
layout = dict(autosize=False,width=1050, height=1100
, title = 'Share Price Returns by Ticker'
, title_font=dict(size=24, family='Courier', color='black')
, barmode = 'group'
, hovermode= 'x'
, yaxis=dict(title='Relative Returns',tickformat=".1%",title_font=dict(size=22)
,tickfont=dict(size=20))
, xaxis=dict(title='Ticker',title_font=dict(size=22),tickfont=dict(size=20))
, legend=dict(x=-.001,y=1,font=dict(size=21,color='white'),bgcolor='black')
, legend_orientation="v"
, hoverlabel=dict(font=dict(size=31))
, plot_bgcolor='black'
)
fig = go.Figure(data=data, layout=layout)
plot(fig,show_link=False,filename="a.html",include_plotlyjs=False)
plotlyは、確かに、matplotlibよりも視覚効果が圧倒的に高いのですが、matplotlibの方が手軽に扱えるので、個人的にはmatplotlibを使うだろうと思われます。
スポンサーリンク
スポンサーリンク
コメント