Pemrograman Python Sederhana untuk Analisis Data Penjualan

reezky Illmawati
Qasir
Published in
9 min readOct 1, 2022

Pada era digital saat ini, data merupakan suatu yang sangat penting jika data tersebut dapat diproses, dianalisis, dan digunakan secara efisien. Data adalah salah satu aset untuk mendukung rencana strategis bisnis di masa depan.

Profesi dibidang data seperti Data Analyst dan Data Scientist memiliki peran kunci di ekosistem bisnis dan teknologi yang berkembang pesat ini.

The U.S. Bureau of Labor Statistics melihat adanya pertumbuhan yang pesat di bidang ilmu data dan memperkirakan jumlah pekerjaan akan meningkat sekitar 28% hingga 2026. Angka 28% diperkirakan adalah 11,5 juta pekerjaan baru.

Analisis data atau data analytics adalah proses mengumpulkan, menyusun, dan menarik informasi dari kumpulan data untuk mengoptimalkan proses serta meningkatkan efisiensi bisnis atau sistem secara keseluruhan dalam meningkatkan pendapatan perusahaan. Profesi Data Analyst bertanggung jawab untuk memahami korelasi dan pola interpretasi yang terkandung di dalam data-data dengan cara menganalisis data-data menggunakan teknologi khusus untuk menghasilkan informasi-informasi yang bermanfaat bagi pihak perusahaan. Profesi ini berperan penting dikarenakan dapat membantu kegiatan bisnis di perusahaan untuk membuat keputusan yang akurat, berbasis data, dan dipertanggungjawabkan.

Berikut skills yang harus dimiliki oleh profesi Data Analyst sebagai berikut :

  1. Mengumpulkan data berdasarkan permintaan tertentu dari perusahaan.
  2. Pre-processing terhadap data yang dikumpulkan untuk memastikan data bebas dari kesalahan.
  3. Memahami parameter kumpulan data (jenis data, bagaimana hal itu dapat diurutkan).
  4. Menafsirkan data dan menganalisis cara-cara memecahkan masalah bisnis.
  5. Memahami bagaimana cara menarik kesimpulan dari hasil analisis data.
  6. Memiliki skill expert dalam menggunakan tools seperti Excel, Google Analytics, Tableau, dan SQL.
  7. Menguasai istilah bisnis, SQL, Excel, membuat laporan dan tools pembuat infografik atau grafik yang menarik.

Data Scientist menggunakan teknologi seperti machine learning dan predictive analysis untuk mengumpulkan data dan mengolah big data yang akan digunakan dalam memprediksi customer behavior sehingga dapat meningkatkan pendapatan bisnis. Dari big data, Data Scientist mencari pola dan membuat algoritma dan model sehingga bisnis dapat menggunakan data yang dikumpulkan dan menginterpretasikannya untuk skenario yang berbeda. Pembuatan algoritma dan model memerlukan keahlian matematika dan bahasa pemrograman.

Berikut skills yang harus dimiliki oleh profesi Data Scientist sebagai berikut :

  1. Membersihkan dan mengumpulkan data berkualitas dalam melatih algoritma dan melakukan data scrubbing untuk memodifikasi atau menghapus data yang tidak lengkap, tidak akurat, atau berulang dalam database.
  2. Mengidentifikasi pola tersembunyi dalam kumpulan data.
  3. Melakukan analisis statistik menggunakan algoritma pembelajaran mesin (Machine Learning) seperti natural language processing, regresi logistik, KNN, dll.
  4. Membangun dan melatih pemodelan machine learning dengan menggunakan tools seperti Tensorflow untuk otomatisasi dan menyederhanakan proses sehari-hari.
  5. Menyempurnakan metrik bisnis dengan mengembangkan dan menguji hipotesis.

Python adalah bahasa pemrograman yang digunakan untuk membersihkan data, membuat visualisasi, dan membangun model dalam data. Bahasa pemrograman Python sangat fleksibel dan dapat digunakan untuk menganalisis data karena bahasa tersebut, menyediakan opsi pemilihan penggunaan OOPs atau scripting, tidak perlu re-compile kode sumber, dan dapat digabungkan dengan bahasa lain untuk mengoptimalkan tujuan.

Kemudahan penggunaan bahasa Python dan kesederhanaan sintaksis (tata kalimat bahasa yang membentuk sebuah kalimat) menjadi alasan utama Python banyak digunakan dalam data science. Kemudahan ini membuat Python bisa digunakan oleh orang-orang yang tidak memiliki latar belakang teknik. Sementara itu, penggunaan Python dalam data science lebih sesuai untuk pembuatan prototipe.

Penggunaan Python pada penulisan ini menggunakan Google Colab (https://colab.research.google.com/ ) karena Google Colabs memudahkan dalam menjalankan kode Python yang disimpan dari Google Drive tanpa melakukan proses instalasi. Sedangkan untuk data set yang digunakan menggunakan data kaggle (https://www.kaggle.com/) dengan data set (Online Retail II UCI).

Berikut langkah-langkah dalam melakukan analisis data.

  1. Menghubungkan Google Drive yang menyimpan data set.
from google.colab import drive
import os
drive.mount('/content/gdrive')

2. Mengecek file data set di Google Drive sudah terhubung.

# CHECK JIKA FILE SUDAH TERHUBUNGos.path.isfile('/content/gdrive/MyDrive/DataScience/online_retail_II.csv')

3. Mendefinisikan Library yang dibutuhkan untuk membaca data dan menampilkan Tabel dan Grafik.

# library untuk membaca data set
import pandas as pd
# library untuk menampilkan tabel dan grafik
import matplotlib.pyplot as plt

4. Mendefinisikan data set yang digunakan untuk disimpan pada variabel data frame (df).

df = pd.read_csv('/content/gdrive/MyDrive/DataScience/online_retail_II.csv')

5. Menampilkan 10 baris data pertama pada data frame.

df.head(10)

6. Menampilkan jumlah data dan jumlah kolom yang tersedia pada data set.

df.shape

Menghasilkan 1067371 baris data dengan 8 kolom.

7. Menampilkan data distribusi quantity product pada data set dalam bentuk grafik untuk menganalisis banyaknya produk yang terjual pada data set tersebut.

ax = df['Quantity'].plot.box(
showfliers=False,
grid=True,
figsize=(10, 7)
)
ax.set_ylabel('Order Quantity')
ax.set_title('Quantity Distribution')
plt.suptitle("")
plt.show()

Data produk yang banyak terjual berada pada range antara 0 sampe 20. Tetapi terdapat hasil minus dari produk yang terjual pada range antara -10 sampai -5.

8. Menampilkan deskripsi data dari Kolom Quantity.

pd.DataFrame(df['Quantity'].describe())

9. Melakukan filtering terhadap data set dengan Quantity yang menghasilkan produk terjual > 0.

df.loc[df['Quantity'] > 0].shape

10. Mengupdate data set dengan Quantity yang menghasilkan produk terjual > 0.

df = df.loc[df['Quantity'] > 0]
df

11. Filtering data berdasarkan Waktu Penjualan Product dari kolom Invoice Date dan Invoice.

df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'])monthly_orders_df = df.set_index('InvoiceDate')['Invoice'].resample('M').nunique()monthly_orders_df

11. Menampilkan Data Product kedalam bentuk grafik berdasarkan Jumlah Product dan Waktu Penjualan.

ax = pd.DataFrame(monthly_orders_df.values).plot(
grid=True,
figsize=(10,7),
legend=False
)
ax.set_xlabel('date')
ax.set_ylabel('number of orders/invoices')
ax.set_title('Total Number of Orders Over Time')
plt.xticks(
range(len(monthly_orders_df.index)),
[x.strftime('%m.%Y') for x in monthly_orders_df.index],
rotation=45
)
plt.show()

12. Memfilter Data Product berdasarkan Tanggal Penjualan dari Tanggal “2011–12–01” pada kolom invoice date sampai tanggal yang berlaku hari ini.

invoice_dates = df.loc[
df['InvoiceDate'] >= '2011-12-01',
'InvoiceDate'
]
invoice_dates

13. Menampilkan Data Product dari tanggal terbesar dan tanggal terkecil dari kolom invoice date.

print('Min date: %s\nMax date: %s' % (invoice_dates.min(), invoice_dates.max()))

14. Menampilkan jumlah data Product yang kurang dari tanggal “2011–12–01”.

df.loc[df['InvoiceDate'] < '2011-12-01'].shape

15. Menyimpan data produk pada sebuah variabel untuk dilakukan proses analisa produk dengan tanggal kurang dari “2011–12–01” .

df = df.loc[df['InvoiceDate'] < '2011-12-01']monthly_orders_df = df.set_index('InvoiceDate')['Invoice'].resample('M').nunique()monthly_orders_df

16. Menampilkan data penjualan ke dalam bentuk grafik dengan tanggal kurang dari “2011–12–01”.

ax = pd.DataFrame(monthly_orders_df.values).plot(
grid=True,
figsize=(10,7),
legend=False
)
ax.set_xlabel('date')
ax.set_ylabel('number of orders')
ax.set_title('Total Number of Orders Over Time')
ax.set_ylim([0, max(monthly_orders_df.values)+500])plt.xticks(
range(len(monthly_orders_df.index)),
[x.strftime('%m.%Y') for x in monthly_orders_df.index],
rotation=45
)
plt.show()

17. Menghitung dan menganalisa keuntungan total penjualan dari perkalian hasil kolom quantity dan kolom price.

df['Sales'] = df['Quantity'] * df['Price']

18. Memfilter hasil keutungan penjualan berdasarkan tanggal penjualan dan total penjualan pada setiap bulan.

monthly_revenue_df = df.set_index('InvoiceDate')['Sales'].resample('M').sum()monthly_revenue_df

19. Menampilkan hasil penjualan tersebut kedalam bentuk grafik berdasarkan tanggal dan total penjualan.

ax = pd.DataFrame(monthly_revenue_df.values).plot(
grid=True,
figsize=(10,7),
legend=False
)
ax.set_xlabel('date')
ax.set_ylabel('sales')
ax.set_title('Total Revenue Over Time')
ax.set_ylim([0, max(monthly_revenue_df.values)+100000])plt.xticks(
range(len(monthly_revenue_df.index)),
[x.strftime('%m.%Y') for x in monthly_revenue_df.index],
rotation=45
)
plt.show()

20. Menganalisis data customer yang melakukan pembelian produk berulang kali dengan menghitung total pembelian produk tersebut dari kolom sales, customer ID, dan country.

invoice_customer_df = df.groupby(
by=['Invoice', 'InvoiceDate']
).agg({
'Sales': sum,
'Customer ID': max,
'Country': max,
}).reset_index()
invoice_customer_df.head()

21. Menampilkan data customer yang membeli produk berulang kali disetiap bulannya.

monthly_repeat_customers_df = invoice_customer_df.set_index('InvoiceDate').groupby([
pd.Grouper(freq='M'), 'Customer ID'
]).filter(lambda x: len(x) > 1).resample('M').nunique()['Customer ID']
monthly_repeat_customers_df

22. Menampilkan banyaknya Transaksi Unik yang dilakukan oleh customer di setiap bulan berdasarkan kolom invoice date dan customer ID.

monthly_unique_customers_df = df.set_index('InvoiceDate')['Customer ID'].resample('M').nunique()
monthly_unique_customers_df

23. Menampilkan presentase pencapaian produk yang sudah dibeli berulang kali oleh customer di setiap bulannya.

monthly_repeat_percentage = monthly_repeat_customers_df/monthly_unique_customers_df*100.0
monthly_repeat_percentage

24. Menampilkan grafik dari total pembalian produk yang sama atau berulang oleh customer berdasarkan data dari data customer yang membeli produk berulang kali disetiap bulannya, banyaknya Transaksi Unik yang dilakukan oleh customer di setiap bulan, dan presentase pencapaian produk yang sudah dibeli berulang kali oleh customer disetiap bulannya.

ax = pd.DataFrame(monthly_repeat_customers_df.values).plot(
figsize=(10,7)
)
pd.DataFrame(monthly_unique_customers_df.values).plot(
ax=ax,
grid=True
)
ax2 = pd.DataFrame(monthly_repeat_percentage.values).plot.bar(
ax=ax,
grid=True,
secondary_y=True,
color='green',
alpha=0.2
)
ax.set_xlabel('date')
ax.set_ylabel('number of customers')
ax.set_title('Number of All vs. Repeat Customers Over Time')
ax2.set_ylabel('percentage (%)')ax.legend(['Repeat Customers', 'All Customers'])
ax2.legend(['Percentage of Repeat'], loc='upper right')
ax.set_ylim([0, monthly_unique_customers_df.values.max()+100])
ax2.set_ylim([0, 100])
plt.xticks(
range(len(monthly_repeat_customers_df.index)),
[x.strftime('%m.%Y') for x in monthly_repeat_customers_df.index],
rotation=45
)
plt.show()

25. Menganalisa keutungan di peroleh dari pembelian produk secara berulang yang dilakukan oleh customer.

monthly_rev_repeat_customers_df = invoice_customer_df.set_index('InvoiceDate').groupby([
pd.Grouper(freq='M'), 'Customer ID'
]).filter(lambda x: len(x) > 1).resample('M').sum()['Sales']
monthly_rev_perc_repeat_customers_df = monthly_rev_repeat_customers_df/monthly_revenue_df * 100.0
monthly_rev_repeat_customers_df

26. Menampilkan informasi total keuntungan dari setiap penjualan produk berulang ke dalam bentuk grafik.

ax = pd.DataFrame(monthly_revenue_df.values).plot(figsize=(12,9))pd.DataFrame(monthly_rev_repeat_customers_df.values).plot(
ax=ax,
grid=True,
)
ax.set_xlabel('date')
ax.set_ylabel('sales')
ax.set_title('Total Revenue vs. Revenue from Repeat Customers')
ax.legend(['Total Revenue', 'Repeat Customer Revenue'])ax.set_ylim([0, max(monthly_revenue_df.values)+100000])ax2 = ax.twinx()pd.DataFrame(monthly_rev_perc_repeat_customers_df.values).plot(
ax=ax2,
kind='bar',
color='g',
alpha=0.2
)
ax2.set_ylim([0, max(monthly_rev_perc_repeat_customers_df.values)+30])
ax2.set_ylabel('percentage (%)')
ax2.legend(['Repeat Revenue Percentage'])
ax2.set_xticklabels([
x.strftime('%m.%Y') for x in monthly_rev_perc_repeat_customers_df.index
])
plt.show()

27. Menampilkan jumlah dari produk yang paling sering dibeli oleh customer dengan menjumlahkan total quantity produk yang difilter berdasarkan invoice date dan jumlah stok barang.

date_item_df = pd.DataFrame(
df.set_index('InvoiceDate').groupby([
pd.Grouper(freq='M'), 'StockCode'
])['Quantity'].sum()
)
date_item_df

28. Menampilkan data setiap produk yang terjual banyak di akhir bulan yang dilakukan filtering terhadap quantity produk dan tanggal item ‘2011–11–30’.

# Rank items by the last month sales
last_month_sorted_df = date_item_df.loc['2011-11-30'].sort_values(
by='Quantity', ascending=False
).reset_index()
last_month_sorted_df

29. Menampilkan 5 produk terpoluler dengan stok code ‘23084’, ‘84826’, ‘22197’, ‘22086’, ‘85099B’ yang difilter berdasarkan data invoice date.

# Regroup for top 5 items
date_item_df = pd.DataFrame(
df.loc[
df['StockCode'].isin(['23084', '84826', '22197', '22086', '85099B'])
].set_index('InvoiceDate').groupby([
pd.Grouper(freq='M'), 'StockCode'
])['Quantity'].sum()
)
date_item_df

30. Menampilkan informasi ke dalam bentuk tabel untuk memudahkan proses analisa produk yang memiliki total penjualan terbanyak.

trending_itmes_df = date_item_df.reset_index().pivot('InvoiceDate','StockCode').fillna(0)

trending_itmes_df = trending_itmes_df.reset_index()
trending_itmes_df = trending_itmes_df.set_index('InvoiceDate')
trending_itmes_df.columns = trending_itmes_df.columns.droplevel(0)

trending_itmes_df

31. Menampilkan informasi tersebut ke dalam bentuk grafik agar memudahkan proses analisa produk terbanyak.

ax = pd.DataFrame(trending_itmes_df.values).plot(
figsize=(10,7),
grid=True,
)
ax.set_ylabel('number of purchases')
ax.set_xlabel('date')
ax.set_title('Item Trends over Time')
ax.legend(trending_itmes_df.columns, loc='upper left')plt.xticks(
range(len(trending_itmes_df.index)),
[x.strftime('%m.%Y') for x in trending_itmes_df.index],
rotation=45
)
plt.show()

Kesimpulan

Bahasa pemrograman Python merupakan salah satu bahasa pemrograman tingkat tinggi yang dapat digunakan untuk melakukan analisis data. Penggunaan tools tersebut cukup mudah di implementasikan menggunakan Google Colabs karena tidak membutuhkan resource lebih untuk menjalankan program Python yang dikembangkan saat melakukan analisis data. Oleh karena itu, profesi Data Analyst dan Data Scientist membutuhkan skills lebih dalam melakukan interpretasi data agar lebih mudah dipahami untuk menganalisa bisnis dalam perusahaan.

Referensi

https://www.cakeresume.com/resources/perbedaan-data-analyst-dan-data-scientist?locale=id

https://www.dqlab.id/ini-dia-perbedaan-data-scientist-data-analyst-data-engineer

https://digitalbisa.id/artikel/kenali-perbedaan-data-scientist-data-analyst-dan-data-engineer-QvVFU

https://dqlab.id/intip-kualifikasi-role-data-analyst-serta-tugasnya-sehari-hari

https://algorit.ma/blog/belajar-apa-itu-python/

https://www.stoodnt.com/blog/data-engineer-vs-data-scientist/

https://blogbelajar.id/data-science-bagi-pemula-1-melakukan-analisa-produk-menggunakan-pemrograman-python/

--

--