-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
91 lines (75 loc) · 2.38 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import pandas as pd
import yfinance as yf
import altair as alt
import streamlit as st
st.title('米国株価可視化アプリ')
st.sidebar.write("""
# GAFA株価
こちらは株価可視化ツールです。以下のオプションから表示日数を指定できます
""")
st.sidebar.write("""
## 表示日数選択
""")
days = st.sidebar.slider('日数', 1, 120, 20)
st.write(f"""
### **過去{days}日間** のGAFAの株価
""")
@st.cache ## キャッシュ化することでdefの読み取り速度を速くできる。
def get_data(days, tickers):
df = pd.DataFrame()
for company in tickers.keys():
tkr = yf.Ticker(tickers[company])
hist = tkr.history(period=f'{days}d')
hist.index = hist.index.strftime('%d %B %y')
hist = hist[['Close']]
hist.columns = [company]
hist = hist.T
hist.index.name = 'Name'
pd.concat([df, hist])
df = pd.concat([df, hist])
return df
try:
st.sidebar.write("""
## 株価の範囲指定
""")
ymin, ymax = st.sidebar.slider(
'範囲を指定してください。',
0.0, 3500.0, (0.0, 3500.0)
)
tickers = {
'apple': 'AAPL',
'facebook': 'FB',
'google': 'GOOGL',
'microsoft': 'MSFT',
'netflix': 'NFLX',
'amazon': 'AMZN',
}
df = get_data(days, tickers)
companies = st.multiselect(
'会社名を選択してください。',
list(df.index),
['google', 'amazon', 'facebook', 'apple']
)
if not companies:
st.error('少なくとも1社は選んでください。')
else:
data = df.loc[companies]
st.write('### 株価(USD)', data.sort_index())
data = data.T.reset_index()
data = pd.melt(data, id_vars=['Date']).rename(
columns={'value': 'Stock Prices(USD)'}
)
chart = (
alt.Chart(data)
.mark_line(opacity=0.8, clip=True) ## clipで範囲外のデータを非表示にする
.encode(
x="Date:T",
y=alt.Y("Stock Prices(USD):Q", stack=None, scale=alt.Scale(domain=[ymin, ymax])), ## scaleでデータの範囲を調整する
color='Name:N'
)
)
st.altair_chart(chart, use_container_width=True)
except:
st.error(
"おっと!何かエラーが起きているようです。"
)