Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
@@ -5,10 +5,10 @@ import matplotlib.font_manager as fm
|
|
5 |
import matplotlib as mpl
|
6 |
import plotly.express as px
|
7 |
|
8 |
-
#
|
9 |
-
st.title("
|
10 |
|
11 |
-
#
|
12 |
@st.cache_resource
|
13 |
def load_font():
|
14 |
font_url = "https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download"
|
@@ -20,17 +20,17 @@ def load_font():
|
|
20 |
|
21 |
load_font()
|
22 |
|
23 |
-
#
|
24 |
@st.cache_data
|
25 |
def fetch_and_clean_data(selected_dataset):
|
26 |
-
if selected_dataset == '
|
27 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_L_1.csv"
|
28 |
-
elif selected_dataset == '
|
29 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_O_2.csv"
|
30 |
-
elif selected_dataset == '
|
31 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_L_6.csv"
|
32 |
else:
|
33 |
-
return pd.DataFrame() # 返回空的 DataFrame
|
34 |
|
35 |
response = requests.get(url)
|
36 |
with open("data.csv", "wb") as file:
|
@@ -39,46 +39,50 @@ def fetch_and_clean_data(selected_dataset):
|
|
39 |
|
40 |
return df
|
41 |
|
42 |
-
#
|
43 |
selected_dataset = st.selectbox(
|
44 |
-
"
|
45 |
-
['
|
46 |
)
|
47 |
|
48 |
-
#
|
49 |
if selected_dataset:
|
50 |
df = fetch_and_clean_data(selected_dataset)
|
51 |
|
52 |
if not df.empty:
|
53 |
-
#
|
54 |
-
|
|
|
|
|
|
|
|
|
55 |
column_options = [
|
56 |
'範疇一排放量(噸CO2e)',
|
57 |
'範疇二排放量(噸CO2e)',
|
58 |
'範疇三排放量(噸CO2e)',
|
59 |
'溫室氣體排放密集度(公噸CO2e/百萬元營業額)'
|
60 |
]
|
61 |
-
elif selected_dataset == '
|
62 |
column_options = [
|
63 |
'使用率(再生能源/總能源)',
|
64 |
'取得驗證'
|
65 |
]
|
66 |
-
elif selected_dataset == '
|
67 |
column_options = [
|
68 |
'董事席次(含獨立董事)(席)',
|
69 |
'獨立董事席次(席)',
|
70 |
'女性董事席次及比率-席',
|
71 |
'女性董事席次及比率-比率',
|
72 |
-
'
|
73 |
-
'
|
74 |
]
|
75 |
|
76 |
-
#
|
77 |
available_columns = [col for col in column_options if col in df.columns]
|
78 |
-
selected_column = st.selectbox("
|
79 |
|
80 |
-
#
|
81 |
-
if st.button("
|
82 |
# 将比例转换为浮点数
|
83 |
def convert_to_float(value):
|
84 |
try:
|
@@ -88,24 +92,24 @@ if selected_dataset:
|
|
88 |
|
89 |
df[selected_column] = df[selected_column].apply(convert_to_float)
|
90 |
|
91 |
-
#
|
92 |
df_filtered = df[df[selected_column].fillna(0) > 0]
|
93 |
|
94 |
if not df_filtered.empty:
|
95 |
-
#
|
96 |
-
st.write("###
|
97 |
st.dataframe(df_filtered)
|
98 |
|
99 |
-
#
|
100 |
-
st.write(f"###
|
101 |
-
fig_pie = px.pie(df_filtered, names='
|
102 |
st.plotly_chart(fig_pie)
|
103 |
|
104 |
-
#
|
105 |
-
st.write(f"###
|
106 |
-
fig_bar = px.bar(df_filtered, x='
|
107 |
st.plotly_chart(fig_bar)
|
108 |
else:
|
109 |
-
st.write(f"
|
110 |
else:
|
111 |
-
st.write("
|
|
|
5 |
import matplotlib as mpl
|
6 |
import plotly.express as px
|
7 |
|
8 |
+
# 设置页面标题
|
9 |
+
st.title("温室气体排放、能源管理与董事会资料分析")
|
10 |
|
11 |
+
# 下载并设置自定义字体
|
12 |
@st.cache_resource
|
13 |
def load_font():
|
14 |
font_url = "https://drive.google.com/uc?id=1eGAsTN1HBpJAkeVM57_C7ccp7hbgSz3_&export=download"
|
|
|
20 |
|
21 |
load_font()
|
22 |
|
23 |
+
# 抓取并处理数据
|
24 |
@st.cache_data
|
25 |
def fetch_and_clean_data(selected_dataset):
|
26 |
+
if selected_dataset == '温室气体排放资料集':
|
27 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_L_1.csv"
|
28 |
+
elif selected_dataset == '能源管理资料集':
|
29 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_O_2.csv"
|
30 |
+
elif selected_dataset == '董事会资料集':
|
31 |
url = "https://mopsfin.twse.com.tw/opendata/t187ap46_L_6.csv"
|
32 |
else:
|
33 |
+
return pd.DataFrame() # 返回空的 DataFrame 如果没有选择数据集
|
34 |
|
35 |
response = requests.get(url)
|
36 |
with open("data.csv", "wb") as file:
|
|
|
39 |
|
40 |
return df
|
41 |
|
42 |
+
# 创建下拉式菜单让用户选择数据集
|
43 |
selected_dataset = st.selectbox(
|
44 |
+
"选择要分析的资料集",
|
45 |
+
['温室气体排放资料集', '能源管理资料集', '董事会资料集']
|
46 |
)
|
47 |
|
48 |
+
# 当选择数据集后,自动显示对应的数据集内容
|
49 |
if selected_dataset:
|
50 |
df = fetch_and_clean_data(selected_dataset)
|
51 |
|
52 |
if not df.empty:
|
53 |
+
# 显示数据集内容
|
54 |
+
st.write("### 资料集内容")
|
55 |
+
st.dataframe(df)
|
56 |
+
|
57 |
+
# 根据所选数据集设置可选字段
|
58 |
+
if selected_dataset == '温室气体排放资料集':
|
59 |
column_options = [
|
60 |
'範疇一排放量(噸CO2e)',
|
61 |
'範疇二排放量(噸CO2e)',
|
62 |
'範疇三排放量(噸CO2e)',
|
63 |
'溫室氣體排放密集度(公噸CO2e/百萬元營業額)'
|
64 |
]
|
65 |
+
elif selected_dataset == '能源管理资料集':
|
66 |
column_options = [
|
67 |
'使用率(再生能源/總能源)',
|
68 |
'取得驗證'
|
69 |
]
|
70 |
+
elif selected_dataset == '董事会资料集':
|
71 |
column_options = [
|
72 |
'董事席次(含獨立董事)(席)',
|
73 |
'獨立董事席次(席)',
|
74 |
'女性董事席次及比率-席',
|
75 |
'女性董事席次及比率-比率',
|
76 |
+
'董事出席董事会出席率',
|
77 |
+
'董事进修时数符合进修要点比率'
|
78 |
]
|
79 |
|
80 |
+
# 只显示在数据集内存在的字段
|
81 |
available_columns = [col for col in column_options if col in df.columns]
|
82 |
+
selected_column = st.selectbox("选择要绘制的字段", available_columns)
|
83 |
|
84 |
+
# 创建生成图表按钮
|
85 |
+
if st.button("生成图表"):
|
86 |
# 将比例转换为浮点数
|
87 |
def convert_to_float(value):
|
88 |
try:
|
|
|
92 |
|
93 |
df[selected_column] = df[selected_column].apply(convert_to_float)
|
94 |
|
95 |
+
# 过滤掉零值或空值的数据
|
96 |
df_filtered = df[df[selected_column].fillna(0) > 0]
|
97 |
|
98 |
if not df_filtered.empty:
|
99 |
+
# 显示数据表
|
100 |
+
st.write("### 资料集内容(过滤后的数据)")
|
101 |
st.dataframe(df_filtered)
|
102 |
|
103 |
+
# 绘制圆饼图
|
104 |
+
st.write(f"### 圆饼图:各公司基于{selected_column}的分布")
|
105 |
+
fig_pie = px.pie(df_filtered, names='公司名称', values=selected_column)
|
106 |
st.plotly_chart(fig_pie)
|
107 |
|
108 |
+
# 绘制长条图
|
109 |
+
st.write(f"### 长条图:各公司基于{selected_column}的分布")
|
110 |
+
fig_bar = px.bar(df_filtered, x='公司名称', y=selected_column)
|
111 |
st.plotly_chart(fig_bar)
|
112 |
else:
|
113 |
+
st.write(f"选择的字段 '{selected_column}' 无有效数据来生成图表。")
|
114 |
else:
|
115 |
+
st.write("选择的数据集中无有效数据或数据集未正确抓取。")
|