Spaces:
Sleeping
Sleeping
File size: 2,600 Bytes
decde83 89bee7d decde83 89bee7d decde83 89bee7d decde83 89bee7d decde83 89bee7d decde83 89bee7d c510b88 89bee7d |
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 pandas as pd
import requests
import plotly.express as px
import streamlit as st
import time
import matplotlib.font_manager as fm
import matplotlib as mpl
# Download and set custom font
font_url = "https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download"
font_response = requests.get(font_url)
with open("TaipeiSansTCBeta-Regular.ttf", "wb") as font_file:
font_file.write(font_response.content)
# Register the font with matplotlib
fm.fontManager.addfont("TaipeiSansTCBeta-Regular.ttf")
mpl.rc('font', family='Taipei Sans TC Beta')
# Function to download and load CSV into a DataFrame
def download_csv(url, filename):
response = requests.get(url)
with open(filename, "wb") as file:
file.write(response.content)
df = pd.read_csv(filename)
df = df.fillna(0) # Fill missing values with 0
return df
# URLs to download data from
urls = {
"溫室氣體": "https://mopsfin.twse.com.tw/opendata/t187ap46_L_1.csv", # ESG
"再生能源": "https://mopsfin.twse.com.tw/opendata/t187ap46_O_2.csv", # Renewable Energy
"董事會": "https://mopsfin.twse.com.tw/opendata/t187ap46_L_6.csv" # Board of Directors
}
# Filenames to save CSV data
filenames = {
"溫室氣體": "data01.csv",
"再生能源": "data02.csv",
"董事會": "data03.csv"
}
# Streamlit app title
st.title("ESG Data Visualization with Streamlit")
# Dropdown menu for data selection
selected_option = st.selectbox("選擇資料類型", options=list(urls.keys()))
# Button to load data
if st.button("載入資料"):
with st.spinner('資料載入中...'):
# Simulate a delay for the process bar
for _ in range(5):
time.sleep(0.2)
df = download_csv(urls[selected_option], filenames[selected_option])
# Displaying the DataFrame
st.header(f"{selected_option} 資料")
st.dataframe(df)
# Column selection for visualization
x_col = st.selectbox("選擇類別欄位 (X 軸)", options=df.columns)
y_col = st.selectbox("選擇數值欄位 (Y 軸)", options=df.columns)
# Chart type selection
chart_type = st.radio("選擇圖表類型", ("圓餅圖", "柱狀圖"))
# Plotting the data based on user selection
if chart_type == "圓餅圖":
fig = px.pie(df, names=x_col, values=y_col, title=f"Pie Chart for {selected_option}")
elif chart_type == "柱狀圖":
fig = px.bar(df, x=x_col, y=y_col, title=f"Bar Chart for {selected_option}")
# Apply custom font to the plot
fig.update_layout(font_family="Taipei Sans TC Beta")
st.plotly_chart(fig)
|