YU-XI commited on
Commit
53a40bd
·
verified ·
1 Parent(s): 083c525

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +37 -33
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
- if selected_dataset == '溫室氣體排放資料集':
 
 
 
 
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("選擇要繪製的欄位", available_columns)
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"### 圓餅圖:各公司基於{selected_column}的分佈")
101
- fig_pie = px.pie(df_filtered, names='公司名稱', values=selected_column)
102
  st.plotly_chart(fig_pie)
103
 
104
- # 繪製長條圖
105
- st.write(f"### 長條圖:各公司基於{selected_column}的分佈")
106
- fig_bar = px.bar(df_filtered, x='公司名稱', y=selected_column)
107
  st.plotly_chart(fig_bar)
108
  else:
109
- st.write(f"選擇的欄位 '{selected_column}' 無有效數據來生成圖表。")
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("选择的数据集中无有效数据或数据集未正确抓取。")