pp / app.py
panchefukui's picture
Upload app.py
65cceca verified
Raw
History Blame Contribute Delete
2.02 kB
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from io import BytesIO
import requests
import streamlit as st
import matplotlib
zhfont = matplotlib.font_manager.FontProperties(fname='./SourceHanSansTW-Regular.otf')
"""
# 資料視覺化
(可補敘述).....
"""
def visualization(df):
st.subheader("📈 自動產生的視覺化圖表")
# 畫圖(使用前兩欄為例)
#====以下是一個測試範例, 改成你自己的畫圖流程====
if df.select_dtypes(include='number').shape[1] >= 2:
df.iloc[:, :2].plot(kind='line')
plt.title("前兩欄數值折線圖", fontproperties=zhfont)
plt.xlabel("Index")
plt.ylabel("Value")
plt.tight_layout()
else:
st.warning("資料中至少需要兩個數值欄位才能繪圖。")
#=====================================
# 圖片轉成 BytesIO 再顯示
buf = BytesIO()
plt.savefig(buf, format="png")
st.image(buf)
plt.close()
# 🚀 選擇資料輸入方式
option = st.radio("選擇資料來源:", ["上傳 CSV 檔", "輸入 CSV 網址"])
# 📂 檔案上傳
if option == "上傳 CSV 檔":
uploaded_file = st.file_uploader("請選擇一個 CSV 檔案", type=["csv"])
if uploaded_file is not None:
try:
data = pd.read_csv(uploaded_file)
st.success("✅ 成功讀取檔案")
st.write(data.head())
visualization(data)
except Exception as e:
st.error(f"❌ 無法讀取檔案:{e}")
# 🌐 網址讀取
else:
url = st.text_input("請輸入 CSV 檔案網址(例如 raw GitHub link)")
if url:
try:
response = requests.get(url)
response.raise_for_status()
data = pd.read_csv(BytesIO(response.content))
st.success("✅ 成功從網址載入資料")
st.write(data.head())
visualization(data)
except Exception as e:
st.error(f"❌ 無法讀取網址資料:{e}")