wiwaaw commited on
Commit
5cd3413
·
1 Parent(s): ea23343

Upload 5 files

Browse files
.gitattributes CHANGED
@@ -33,3 +33,5 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ all_dataset.csv filter=lfs diff=lfs merge=lfs -text
37
+ erica-zhou-IHpUgFDn7zU-unsplash.jpg filter=lfs diff=lfs merge=lfs -text
ProjectAkhir.py ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # mengimpor seluruh library
2
+ import pandas as pd
3
+ import matplotlib.pyplot as plt
4
+ import seaborn as sns
5
+ import streamlit as st
6
+ from babel.numbers import format_currency
7
+ sns.set(style='dark')
8
+
9
+ # create_daily_orders() digunakan untuk menyiapkan daily_orders
10
+
11
+
12
+ def create_orders_daily(df):
13
+ create_orders_daily = df.resample(rule='M', on='order_approved_at').agg({
14
+ "order_id": "nunique",
15
+ "price": "sum"
16
+ })
17
+ create_orders_daily.index = create_orders_daily.index.strftime(
18
+ '%Y-%m-%d') # mengubah format order date menjadi nama bulan
19
+ create_orders_daily = create_orders_daily.reset_index()
20
+ create_orders_daily.rename(columns={
21
+ "order_id": "order_count",
22
+ "price": "revenue"
23
+ }, inplace=True)
24
+
25
+ return create_orders_daily
26
+
27
+
28
+ # create_sum_order() untuk menyiapkan sum_orders
29
+ def create_sum_order(df):
30
+ sum_order = df.groupby("product_category_name").product_id.nunique(
31
+ ).sort_values(ascending=False).reset_index()
32
+ return sum_order
33
+
34
+
35
+ # create_state() digunakan untuk menyiapkan state
36
+ def create_state(df):
37
+ state = df.groupby(
38
+ by="customer_city").product_id.nunique().reset_index()
39
+
40
+ return state
41
+
42
+ # create_order_status() digunakan untuk menyiapkan order_statuse
43
+
44
+
45
+ def create_order_status(df):
46
+ order_status = df.groupby(
47
+ by="order_status").product_id.nunique().reset_index()
48
+
49
+ return order_status
50
+
51
+
52
+ # Menyimpan berkas data dari google colba.
53
+ all_dataset = pd.read_csv("all_dataset.csv")
54
+
55
+ # Filter untuk kolom order_approved_at dan order_status
56
+ datetime_columns = ["order_approved_at", "order_status"]
57
+ all_dataset.sort_values(by="order_approved_at", inplace=True)
58
+ all_dataset.reset_index(inplace=True)
59
+
60
+ all_dataset_index = all_dataset.set_index('order_approved_at')
61
+
62
+ for column in datetime_columns:
63
+ all_dataset[column] = pd.to_datetime(all_dataset['order_approved_at'])
64
+
65
+ # membuat filter dengan widget date input serta menambahkan logo perusahaan pada sidebar
66
+ min_date = all_dataset["order_approved_at"].min()
67
+ max_date = all_dataset["order_approved_at"].max()
68
+
69
+ with st.sidebar:
70
+ # Menambahkan logo perusahaan
71
+ st.title("Toko Kita")
72
+ st.image("https://raw.githubusercontent.com/MuhamdIlyas/ProjectDicodingDataScience/a773b6e2b6b6b1a890c7ccf635de83fc9b487de2/erica-zhou-IHpUgFDn7zU-unsplash.jpg",
73
+ width=None, use_column_width=None)
74
+ # https://unsplash.com/photos/IHpUgFDn7zU
75
+
76
+ # Mengambil start_date & end_date dari date_input
77
+ start_date, end_date = st.date_input(
78
+ label='Rentang Waktu', min_value=min_date,
79
+ max_value=max_date,
80
+ value=[min_date, max_date]
81
+ )
82
+
83
+ # start_date dan end_date di atas akan digunakan untuk memfilter all_dataset. Data yang telah difilter ini selanjutnya akan disimpan dalam main_dataset
84
+ main_dataset = all_dataset[(all_dataset["order_approved_at"] >= str(start_date)) &
85
+ (all_dataset["order_approved_at"] <= str(end_date))]
86
+
87
+ daily_order = create_orders_daily(main_dataset)
88
+ sum_order = create_sum_order(main_dataset)
89
+ state = create_state(main_dataset)
90
+ order_status = create_order_status(main_dataset)
91
+ # rfm_df = create_rfm_df(main_dataset)
92
+
93
+ # Menambahkan Header
94
+ st.header('Toko Kita Dashboard :sparkles:')
95
+
96
+ # menampilkan informasi total order dan revenue dalam bentuk metric() yang ditampilkan menggunakan layout columns()
97
+ st.subheader('Daily Orders')
98
+
99
+ col1, col2 = st.columns(2)
100
+
101
+ with col1:
102
+ total_orders = daily_order.order_count.sum()
103
+ st.metric("Total orders", value=total_orders)
104
+
105
+ with col2:
106
+ total_revenue = format_currency(
107
+ daily_order.revenue.sum(), "AUD", locale='es_CO')
108
+ st.metric("Total Revenue", value=total_revenue)
109
+
110
+ # Perfoma penjualan
111
+ fig, ax = plt.subplots(figsize=(16, 8))
112
+ ax.plot(
113
+ daily_order["order_approved_at"].values,
114
+ daily_order["order_count"].values,
115
+ marker='o',
116
+ linewidth=2,
117
+ color="#90CAF9"
118
+ )
119
+ ax.tick_params(axis='y', labelsize=20)
120
+ ax.tick_params(axis='x', labelsize=15, rotation=45)
121
+
122
+ st.pyplot(fig)
123
+
124
+ # Menampilkan 5 produk paling laris dan paling sedikit terjual melalui sebuah visualisasi data
125
+ st.subheader("Best & Worst Performing Product")
126
+
127
+ fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(35, 15))
128
+
129
+ colors = ["#90CAF9", "#D3D3D3", "#D3D3D3", "#D3D3D3", "#D3D3D3"]
130
+
131
+ sns.barplot(x="product_id", y="product_category_name",
132
+ data=sum_order.head(5), palette=colors, ax=ax[0])
133
+ ax[0].set_ylabel(None)
134
+ ax[0].set_xlabel(None, fontsize=30)
135
+ ax[0].set_title("Best Performing Product", loc="center", fontsize=50)
136
+ ax[0].tick_params(axis='y', labelsize=35)
137
+ ax[0].tick_params(axis='x', labelsize=30)
138
+
139
+ sns.barplot(x="product_id", y="product_category_name", data=sum_order.sort_values(
140
+ by="product_id", ascending=True).head(5), palette=colors, ax=ax[1])
141
+ ax[1].set_ylabel(None)
142
+ ax[1].set_xlabel(None, fontsize=30)
143
+ ax[1].invert_xaxis()
144
+ ax[1].yaxis.set_label_position("right")
145
+ ax[1].yaxis.tick_right()
146
+ ax[1].set_title("Worst Performing Product", loc="center", fontsize=50)
147
+ ax[1].tick_params(axis='y', labelsize=35)
148
+ ax[1].tick_params(axis='x', labelsize=30)
149
+
150
+ st.pyplot(fig)
Proyek_Tugas_Akhir.ipynb ADDED
The diff for this file is too large to render. See raw diff
 
all_dataset.csv ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:fcedf26d8a0e8103cca6d3d89cfc389797674eede60cd042b7713d96c01f47e3
3
+ size 50361516
erica-zhou-IHpUgFDn7zU-unsplash.jpg ADDED

Git LFS Details

  • SHA256: e933bd84bf830e96faf9bfe0bdb69bc2f879d020cb12d4cb4e9a96ec74250fb7
  • Pointer size: 132 Bytes
  • Size of remote file: 1.44 MB
requirements.txt ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ pandas==2.1.1
2
+ matplotlib==3.2.2
3
+ seaborn==0.11.2
4
+ streamlit==1.3.0
5
+ babel==2.13.0