From d7e9bc5b6012b7d3fae2ecd4f33b9de45a5b4366 Mon Sep 17 00:00:00 2001 From: VirtualTests1 Date: Fri, 17 Apr 2026 18:53:58 +0800 Subject: [PATCH 1/2] =?UTF-8?q?refactor(dashboard):=20=E4=BC=98=E5=8C=96?= =?UTF-8?q?=E6=95=B0=E6=8D=AE=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91=E5=92=8C?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E8=B7=AF=E5=BE=84=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 简化数据过滤条件判断,使用更清晰的逻辑结构 - 使用相对路径处理CSV文件读取,提高代码可移植性 - 修复变量命名冲突问题(region -> region_sales) - 添加.gitignore和requirements.txt文件 --- .gitignore | 1 + dashboard.py | 45 +++++++++++++++++++-------------------------- requirements.txt | 3 +++ 3 files changed, 23 insertions(+), 26 deletions(-) create mode 100644 .gitignore create mode 100644 requirements.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a63050 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__/dashboard.cpython-311.pyc diff --git a/dashboard.py b/dashboard.py index aa8c90b..e3b90d3 100644 --- a/dashboard.py +++ b/dashboard.py @@ -12,8 +12,9 @@ st.markdown('',unsafe_allow_html=True) -os.chdir(r"C:\\STUDY\\PROGRAMS\\PYTHON\\DMDW_Project") -df = pd.read_csv("SuperStoreDataSet.csv", encoding="ISO-8859-1") +script_dir = os.path.dirname(__file__) +csv_path = os.path.join(script_dir, "SuperStoreDataSet.csv") +df = pd.read_csv(csv_path, encoding="ISO-8859-1") col1,col2 = st.columns((2)) @@ -37,7 +38,7 @@ #CREATE FOR REGION st.sidebar.header("CHOOSE YOUR FILTER: ") -region = st.sidebar.multiselect("CHOOSE YOU REGION",df["Region"].unique()) +region = st.sidebar.multiselect("CHOOSE YOU REGION", df["Region"].unique()) if not region: df2 = df.copy() @@ -46,35 +47,27 @@ #CREATE FOR STATE -state = st.sidebar.multiselect("CHOOSE YOUR STATE" ,df2["State"].unique()) +state = st.sidebar.multiselect("CHOOSE YOUR STATE", df2["State"].unique()) if not state: df3 = df2.copy() else: - df3=df[df["State"].isin(state)] + df3 = df2[df2["State"].isin(state)] #CREATE FOR CITY -city = st.sidebar.multiselect("CHOOSE YOUR CITY" ,df2["City"].unique()) +city = st.sidebar.multiselect("CHOOSE YOUR CITY", df3["City"].unique()) #FILTER THE DATA BASED ON REGION, STATE AND CITY +filtered_df = df.copy() -if not region and not state and not city: - filtered_df = df -elif not state and not city: - filtereddf = df[df["Region"].isin(region)] - -elif not region and not state: - filtered_df = df[df["State"].isin(state)] -elif state and city: - filtered_df = df3[df["State"].isin(state) & df3["City"].isin(city)] -elif region and city: - filtered_df = df3[df["Region"].isin(region) & df3["City"].isin(city)] -elif region & state: - filtered_df = df3[df["Region"].isin(region) & df3["State"].isin(state)] -elif city: - filtered_df = df3[df3["City"].isin(city)] -else: - filtered_df = df3[df3["Region"].isin(region) & df3["State"].isin(state) & df["City"].isin(city)] +if region: + filtered_df = filtered_df[filtered_df["Region"].isin(region)] + +if state: + filtered_df = filtered_df[filtered_df["State"].isin(state)] + +if city: + filtered_df = filtered_df[filtered_df["City"].isin(city)] category_df =filtered_df.groupby(by=["Category"],as_index =False )["Sales"].sum() @@ -99,9 +92,9 @@ with cl2: with st.expander("REGION VIEWDATA"): - region = filtered_df.groupby(by = "Region", as_index = False)["Sales"].sum() - st.write(region.style.background_gradient(cmap="Oranges")) - csv = region.to_csv(index = False).encode('utf-8') + region_sales = filtered_df.groupby(by = "Region", as_index = False)["Sales"].sum() + st.write(region_sales.style.background_gradient(cmap="Oranges")) + csv = region_sales.to_csv(index = False).encode('utf-8') st.download_button("Download Data", data = csv, file_name = "Region.csv", mime = "text/csv",help = 'CLICK HERE TO DOWNLOAD CSV FILE') diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..ceefa5e --- /dev/null +++ b/requirements.txt @@ -0,0 +1,3 @@ +streamlit>=1.20.0 +plotly>=5.10.0 +pandas>=1.4.0 From bb6082675f1f3f2ab632cc371e5da006fb3a6054 Mon Sep 17 00:00:00 2001 From: VirtualTests1 Date: Fri, 17 Apr 2026 19:20:44 +0800 Subject: [PATCH 2/2] =?UTF-8?q?fix:=20=E5=A4=84=E7=90=86=E8=AE=A2=E5=8D=95?= =?UTF-8?q?=E6=97=A5=E6=9C=9F=E8=A7=A3=E6=9E=90=E9=94=99=E8=AF=AF=E5=B9=B6?= =?UTF-8?q?=E6=94=AF=E6=8C=81=E5=A4=9A=E7=A7=8D=E6=97=A5=E6=9C=9F=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加错误处理和多种日期格式支持来解析订单日期字段,避免因格式不匹配导致的解析错误 --- dashboard.py | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/dashboard.py b/dashboard.py index e3b90d3..b1fc1f8 100644 --- a/dashboard.py +++ b/dashboard.py @@ -18,7 +18,18 @@ col1,col2 = st.columns((2)) -df["Order Date"] = pd.to_datetime(df["Order Date"]) +order_date_str = df["Order Date"].copy() +df["Order Date"] = pd.to_datetime(order_date_str, errors='coerce') + +date_formats = ['%m/%d/%Y', '%m-%d-%Y', '%m/%d/%y', '%m-%d-%y'] +for fmt in date_formats: + na_mask = df["Order Date"].isna() + if na_mask.any(): + df.loc[na_mask, "Order Date"] = pd.to_datetime( + order_date_str[na_mask], + format=fmt, + errors='coerce' + ) #GETTING THE MIN AND MAX DATE startDate = pd.to_datetime(df["Order Date"]).min()