# mengimpor seluruh library import pandas as pd import matplotlib.pyplot as plt import seaborn as sns import streamlit as st from babel.numbers import format_currency sns.set(style='dark') # create_daily_orders() digunakan untuk menyiapkan daily_orders def create_orders_daily(df): create_orders_daily = df.resample(rule='M', on='order_approved_at').agg({ "order_id": "nunique", "price": "sum" }) create_orders_daily.index = create_orders_daily.index.strftime( '%Y-%m-%d') # mengubah format order date menjadi nama bulan create_orders_daily = create_orders_daily.reset_index() create_orders_daily.rename(columns={ "order_id": "order_count", "price": "revenue" }, inplace=True) return create_orders_daily # create_sum_order() untuk menyiapkan sum_orders def create_sum_order(df): sum_order = df.groupby("product_category_name").product_id.nunique( ).sort_values(ascending=False).reset_index() return sum_order # create_state() digunakan untuk menyiapkan state def create_state(df): state = df.groupby( by="customer_city").product_id.nunique().reset_index() return state # create_order_status() digunakan untuk menyiapkan order_statuse def create_order_status(df): order_status = df.groupby( by="order_status").product_id.nunique().reset_index() return order_status # Menyimpan berkas data dari google colba. all_dataset = pd.read_csv("all_dataset.csv") # Filter untuk kolom order_approved_at dan order_status datetime_columns = ["order_approved_at", "order_status"] all_dataset.sort_values(by="order_approved_at", inplace=True) all_dataset.reset_index(inplace=True) all_dataset_index = all_dataset.set_index('order_approved_at') for column in datetime_columns: all_dataset[column] = pd.to_datetime(all_dataset['order_approved_at']) # membuat filter dengan widget date input serta menambahkan logo perusahaan pada sidebar min_date = all_dataset["order_approved_at"].min() max_date = all_dataset["order_approved_at"].max() with st.sidebar: # Menambahkan logo perusahaan st.title("Toko Kita") st.image("https://raw.githubusercontent.com/MuhamdIlyas/ProjectDicodingDataScience/a773b6e2b6b6b1a890c7ccf635de83fc9b487de2/erica-zhou-IHpUgFDn7zU-unsplash.jpg", width=None, use_column_width=None) # https://unsplash.com/photos/IHpUgFDn7zU # Mengambil start_date & end_date dari date_input start_date, end_date = st.date_input( label='Rentang Waktu', min_value=min_date, max_value=max_date, value=[min_date, max_date] ) # start_date dan end_date di atas akan digunakan untuk memfilter all_dataset. Data yang telah difilter ini selanjutnya akan disimpan dalam main_dataset main_dataset = all_dataset[(all_dataset["order_approved_at"] >= str(start_date)) & (all_dataset["order_approved_at"] <= str(end_date))] daily_order = create_orders_daily(main_dataset) sum_order = create_sum_order(main_dataset) state = create_state(main_dataset) order_status = create_order_status(main_dataset) # rfm_df = create_rfm_df(main_dataset) # Menambahkan Header st.header('Toko Kita Dashboard :sparkles:') # menampilkan informasi total order dan revenue dalam bentuk metric() yang ditampilkan menggunakan layout columns() st.subheader('Daily Orders') col1, col2 = st.columns(2) with col1: total_orders = daily_order.order_count.sum() st.metric("Total orders", value=total_orders) with col2: total_revenue = format_currency( daily_order.revenue.sum(), "AUD", locale='es_CO') st.metric("Total Revenue", value=total_revenue) # Perfoma penjualan fig, ax = plt.subplots(figsize=(16, 8)) ax.plot( daily_order["order_approved_at"].values, daily_order["order_count"].values, marker='o', linewidth=2, color="#90CAF9" ) ax.tick_params(axis='y', labelsize=20) ax.tick_params(axis='x', labelsize=15, rotation=45) st.pyplot(fig) # Menampilkan 5 produk paling laris dan paling sedikit terjual melalui sebuah visualisasi data st.subheader("Best & Worst Performing Product") fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(35, 15)) colors = ["#90CAF9", "#D3D3D3", "#D3D3D3", "#D3D3D3", "#D3D3D3"] sns.barplot(x="product_id", y="product_category_name", data=sum_order.head(5), palette=colors, ax=ax[0]) ax[0].set_ylabel(None) ax[0].set_xlabel(None, fontsize=30) ax[0].set_title("Best Performing Product", loc="center", fontsize=50) ax[0].tick_params(axis='y', labelsize=35) ax[0].tick_params(axis='x', labelsize=30) sns.barplot(x="product_id", y="product_category_name", data=sum_order.sort_values( by="product_id", ascending=True).head(5), palette=colors, ax=ax[1]) ax[1].set_ylabel(None) ax[1].set_xlabel(None, fontsize=30) ax[1].invert_xaxis() ax[1].yaxis.set_label_position("right") ax[1].yaxis.tick_right() ax[1].set_title("Worst Performing Product", loc="center", fontsize=50) ax[1].tick_params(axis='y', labelsize=35) ax[1].tick_params(axis='x', labelsize=30) st.pyplot(fig)