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..222801a 100644 --- a/dashboard.py +++ b/dashboard.py @@ -12,12 +12,24 @@ 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)) -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() @@ -37,7 +49,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 +58,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 +103,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') @@ -156,9 +160,11 @@ #CREATE A SCATTER PLOT data1 = px.scatter(filtered_df, x = "Sales", y = "Profit", size = "Quantity") -data1['layout'].update(title="RALATIONSHIP BETWEEN SALES AND PROFITS USING SCATTER PLOT!!", - titlefont = dict(size=20),xaxis = dict(title="Sales",titlefont=dict(size=19)), - yaxis = dict(title = "Profit", titlefont = dict(size=19))) +data1['layout'].update( + title=dict(text="RELATIONSHIP BETWEEN SALES AND PROFITS USING SCATTER PLOT!!", font=dict(size=20)), + xaxis=dict(title=dict(text="Sales", font=dict(size=19))), + yaxis=dict(title=dict(text="Profit", font=dict(size=19))) +) st.plotly_chart(data1,use_container_width=True) with st.expander("View Data"): 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