File size: 2,564 Bytes
4a55bf3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import base64
import yfinance as yf
import streamlit as st
st.set_option('deprecation.showPyplotGlobalUse', False)

st.title('Scrapping Yahoo Finance App')
st.markdown("""
This app retrieves the list of the S&P 500 (from Wikipedia) and its corresponding stock closing price (year-to-date)!
* Python libraries: base64, pandas, streamlit, numpy, matplotlib, seaborn
* Data source: [Wikipedia](https://en.wikipedia.org/wiki/List_of_S%26P_500_companies).
""")
st.sidebar.header('User Input Features')

#Scrappage des donnees sur Wikipedia
@st.cache_data
def load_data():
    url = "https://en.wikipedia.org/wiki/List_of_S%26P_500_companies"
    html = pd.read_html(url,header= 0)
    df = html[0]
    return df
df = load_data()
sector = df.groupby('GICS Sector')

#Sidebar - Sector Selection
sorted_sector_unique = sorted(df['GICS Sector'].unique())
selected_sector = st.sidebar.multiselect('Sector',sorted_sector_unique)


#Filtering datas
df_selected_sector = df[(df['GICS Sector'].isin(selected_sector))]
st.header('Display companies in Selected sector')
st.write('Data Dimension: ' + str(df_selected_sector.shape[0]) + ' rows and ' + str(df_selected_sector.shape[1]) + ' columns.')
st.dataframe(df_selected_sector)

#Download des datas selectionnees dans le sidebar
def filedownload(df):
    csv = df.to_csv(index=False)
    b64 = base64.b64encode(csv.encode()).decode()  # strings <-> bytes conversions
    href = f'<a href="data:file/csv;base64,{b64}" download="SP500.csv">Download CSV File</a>'
    return href

st.markdown(filedownload(df_selected_sector), unsafe_allow_html=True)

#Download datas correspondantes de yahoo finance
data = yf.download(
    tickers = list(df_selected_sector[:10].Symbol),
    period="ytd",
    interval="1d",
    group_by="ticker",
    auto_adjust=True,
    prepost=True,
    threads=True,
    proxy=None
)
#Plot Closing price of Selected Symbols
def price_plot(symbol):
  df = pd.DataFrame(data[symbol].Close)
  df['Date'] = df.index
  plt.fill_between(df.Date, df.Close, color='skyblue', alpha=0.3)
  plt.plot(df.Date, df.Close, color='skyblue', alpha=0.8)
  plt.xticks(rotation=90)
  plt.title(symbol, fontweight='bold')
  plt.xlabel('Date', fontweight='bold')
  plt.ylabel('Closing Price', fontweight='bold')
  return st.pyplot()

num_company = st.sidebar.slider('Number of companies',1,5)

if st.button('Show plots'):
   st.header('Show Closing price')
   for i in list(df_selected_sector.Symbol)[:num_company]:
      price_plot(i)