You are currently viewing Data Science bagi Pemula | #1 Melakukan Analisa Produk Menggunakan Pemrograman Python

Data Science bagi Pemula | #1 Melakukan Analisa Produk Menggunakan Pemrograman Python

Analisa Produk Menggunakan Pemograman Python – Hallo teman–teman apa kabar? mudah-mudahan selalu diberikan kesehatan ya. Pada Artikel kali ini kita membahas tutorial cara melakukan analisa data Produk Menggunakan Pemograman PYTHON. Pada Praktikum kali ini kita menggunakan Aplikasi Google Colab untuk menganalisa data Produk tersebut. Sedangkan Untuk Datasetnya kita menggunakan data OnlineRetail.xlxs yang dapat di download pada Link Berikut

Baca Juga: Data Science bagi Pemula | #2 Melakukan Analisa Data Kasus Covid19 Menggunakan Pemrograman Python

Adapun Penjelasan setiap koding dan penjelasan Lengkap tentang hasil/output dari Analisa Data Produk dan Penjualan dapat teman-teman lihat pada Video Youtube kami ini.

ANALISA DATA PRODUCT MENGGUNAKAN PYTHON

Pertama – tama panggillah Library yang dibutuhkan pada tahapan analisa ini seperti Library untuk menampilkan tabel dan Grafik Analisa

%matplotlib inline

import matplotlib.pyplot as plt
import pandas as pd

Sekarang kita panggil dataset yang kita butuhkan dan simpan dataset tersebut kedalam sebuah variabel

df = pd.read_excel(io='/content/drive/MyDrive/Dataset/UAS/Online Retail.xlsx', sheet_name='Online Retail')

Sekarang kita lihat Jumlah data dan Jumlah Kolom yang ada pada dataset ini

df.shape

Lalu kita lihat 5 data pertama dari dataset ini

df.head()

Quantity Distribution

Sekarang kita lihat distribusi data Qiantity Product 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()

Selanjutnya kita lihat Informasi dan Deskripsi dari Kolom Quantity ini

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

Kita Gunakan Fungsi Filter untuk lihat Jumlah data dari data Product yang Quantity-nya hanya besar dari 0

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

Update data pada Variabel dataset tersebut berdasarkan hasil Filter data yang besar dari 0

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

Time-series Number of Orders

Sekarang kita akan melakukan filter data berdasarkan Waktu Penjualan Product tersebut. Kemudian data ini kita simpan ke dalam Variabel baru (Di Group berdasarkan Bulan (M))

monthly_orders_df = df.set_index('InvoiceDate')['InvoiceNo'].resample('M').nunique()

Kita lihat Informasi sebaran data Product berdasarkan Jumlah Product dan Waktu Penjualan ke dalam Grafik

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()

Selanjutnya kita Filter Data Product berdasarkan tanggal penjualan yang setelah tanggal “2011-12-01” sampai saat ini

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

Kita lihat Tanggal paling Min dan Max dari Variabel data Product yang besar dari tanggal “2011-12-01”

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

Sekarang kita cek data Product yang berada pada tanggal “2011-12-01” Kebawah

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

Kita simpan data ini ke dalam sebuah Variabel baru untuk dilakukan Proses analisa Product kita

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

Kita lakukan Grouping terhadap data yang telah kita filter ini dan tampilkan data tersebut dan Group berdasarkan Bulan (M)

monthly_orders_df = df.set_index('InvoiceDate')['InvoiceNo'].resample('M').nunique()
monthly_orders_df

Sekarang kita lihat sebaran terdapat data yang telah kita Filter ini ke dalam Grafik

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()

Time-series Revenue

Sekarang kita akan menghitung dan Menganalisa Keuntungan Product berdasarkan Waktu. Jadi pertama – tama kita hitung dulu Total Penjualan Product

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

Selanjutnya Filter dan Hitung data tersebut berdasarkan Tanggal yang di Group berdasarkan Bulan setiap Penjualan Product

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

Lalu liat Sebaran dari Penjualan Product tersebut ke dalam Grafik

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()

Time-series Repeat Customers

Sekarang kita akan lihat data Customer yang melakukan Pembelian Berulang tiap Waktunya. Pertama – tama kita Group data tersebut berdasarkan Nomor dan Tanggal Invoice lalu hitung Total Pembelian Product tersebut

invoice_customer_df = df.groupby(
    by=['InvoiceNo', 'InvoiceDate']
).agg({
    'Sales': sum,
    'CustomerID': max,
    'Country': max,
}).reset_index()

Kita lihat Informasi Variabel data yang telah kita Group tersebut

invoice_customer_df.head()

Sekarang kita Group lagi data tersebut untuk melihat banyaknya Transaksi Unik tiap Bulannya

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

monthly_repeat_customers_df

Kita lihat banyaknya Transaksi Keseluruhan data tersebut berdasarkan Bulan dan Customer

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

Sekarang kita lihat persentasi Pencapaian Product yang dibeli berulang oleh Customer berdasarkan Bulan

monthly_repeat_percentage = monthly_repeat_customers_df/monthly_unique_customers_df*100.0
monthly_repeat_percentage

Lalu lita lihat perbandingan antara data keseluruhan Constumer dengan banyaknya Pembelian Oleh Customer yang sama atau berulang

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()

Revenue from Repeat Customers

Sekarang menghitung dan menganalisa banyaknya Keuntungan yang didapat dari Pembelian Customer yang berulang. Pertama – tama kita lakukan Grouping terhadap data tersebut

monthly_rev_repeat_customers_df = invoice_customer_df.set_index('InvoiceDate').groupby([
    pd.Grouper(freq='M'), 'CustomerID'
]).filter(lambda x: len(x) > 1).resample('M').sum()['Sales']

Lalu kita hitung persentase setiap Product yang terjual oleh Consumen yang sama

monthly_rev_perc_repeat_customers_df = monthly_rev_repeat_customers_df/monthly_revenue_df * 100.0
monthly_rev_repeat_customers_df

Sekarang kita lihat perbandingan antara Keuntungan Seluruh Product dengan Keuntungan yang dihasilkan Oleh Customer berulang

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()

Popular Items Over Time

Sekarang kita lihat Product yang Populer dari Waktu ke waktu. Pertama – tama kita lakukan Filter terhadap Product kita dari waktu ke waktu

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

Selanjutnya Ranking setiap product yang Populer tersebut berdasarkan Total Penjualan

# 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

Lalu kita ambil 5 Product Populer untuk sebagai acuan terhadap Penjualan Product tersebut dari waktu ke waktu

# 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

Kita ubah tampilan Perbandingan tersebut menjadi tabel sehingga lebih mudah untuk melakukan analisa terhadap product tersebut

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

Lakukan Perbandingan terhadap ke 5 Product tersebut ke dalam Grafik

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()

Sekian materi tentang Analisa Produk Menggunakan Pemograman PYTHON. Untuk Project lengkapnya dapat didownload pada link ((GITHUB)) kami ini.

Leave a Reply