Spaces:
Sleeping
Sleeping
File size: 5,041 Bytes
5cd3413 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# 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)
|