TATA: Online Retail Dataset#

Analisis Kinerja Bisnis dan Perencanaan Strategis:#

Toko ritel online telah mempekerjakan Anda sebagai konsultan untuk menganalisis data mereka dan memberikan wawasan kepada CEO dan CMO. Manajemen ingin mengidentifikasi faktor-faktor utama yang berkontribusi pada pendapatan dan merencanakan secara strategis untuk tahun depan. Mereka ingin melihat metrik dari perspektif operasional dan pemasaran serta mencari bimbingan tentang area yang berperforma baik. Mereka juga ingin melihat metrik berbasis demografi. Pertemuan dengan CEO dan CMO dijadwalkan bulan depan, dan Anda perlu menyediakan analisis dan wawasan untuk mengevaluasi kinerja bisnis saat ini dan menyarankan metrik untuk ekspansi. Sebagai konsultan yang bertugas menganalisis data toko ritel online, peran Anda sangat penting dalam memahami dan mengoptimalkan generasi pendapatan perusahaan. Anda akan menyelam lebih dalam ke dalam data yang tersedia untuk mengungkap wawasan yang akan membimbing keputusan strategis perusahaan untuk tahun mendatang. Tujuan utamanya adalah untuk mengidentifikasi pendorong utama pertumbuhan pendapatan, baik dari perspektif operasional maupun pemasaran.

By FRIDHA MEGANTARA PUTRA#

import pandas as pd
import plotly.express as px
import matplotlib.pyplot as plt
df = pd.read_csv('Online Retail Data Set.csv', encoding='ISO-8859-1')
df
InvoiceNo StockCode Description Quantity InvoiceDate UnitPrice CustomerID Country
0 536365 85123A WHITE HANGING HEART T-LIGHT HOLDER 6 01-12-2010 08:26 2.55 17850.0 United Kingdom
1 536365 71053 WHITE METAL LANTERN 6 01-12-2010 08:26 3.39 17850.0 United Kingdom
2 536365 84406B CREAM CUPID HEARTS COAT HANGER 8 01-12-2010 08:26 2.75 17850.0 United Kingdom
3 536365 84029G KNITTED UNION FLAG HOT WATER BOTTLE 6 01-12-2010 08:26 3.39 17850.0 United Kingdom
4 536365 84029E RED WOOLLY HOTTIE WHITE HEART. 6 01-12-2010 08:26 3.39 17850.0 United Kingdom
... ... ... ... ... ... ... ... ...
541904 581587 22613 PACK OF 20 SPACEBOY NAPKINS 12 09-12-2011 12:50 0.85 12680.0 France
541905 581587 22899 CHILDREN'S APRON DOLLY GIRL 6 09-12-2011 12:50 2.10 12680.0 France
541906 581587 23254 CHILDRENS CUTLERY DOLLY GIRL 4 09-12-2011 12:50 4.15 12680.0 France
541907 581587 23255 CHILDRENS CUTLERY CIRCUS PARADE 4 09-12-2011 12:50 4.15 12680.0 France
541908 581587 22138 BAKING SET 9 PIECE RETROSPOT 3 09-12-2011 12:50 4.95 12680.0 France

541909 rows × 8 columns

df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 541909 entries, 0 to 541908
Data columns (total 8 columns):
 #   Column       Non-Null Count   Dtype  
---  ------       --------------   -----  
 0   InvoiceNo    541909 non-null  object 
 1   StockCode    541909 non-null  object 
 2   Description  540455 non-null  object 
 3   Quantity     541909 non-null  int64  
 4   InvoiceDate  541909 non-null  object 
 5   UnitPrice    541909 non-null  float64
 6   CustomerID   406829 non-null  float64
 7   Country      541909 non-null  object 
dtypes: float64(2), int64(1), object(5)
memory usage: 33.1+ MB

penghasilan perbulan setiap tahun#

df['InvoiceDate'] = pd.to_datetime(df['InvoiceDate'], format='%d-%m-%Y %H:%M')

# Menghitung pendapatan untuk setiap transaksi
df['TotalRevenue'] = df['Quantity'] * df['UnitPrice']

# Ekstrak tahun dan bulan dari InvoiceDate
df['Year'] = df['InvoiceDate'].dt.year
df['Month'] = df['InvoiceDate'].dt.month

# Mengelompokkan berdasarkan tahun dan bulan, kemudian menghitung total pendapatan
monthly_revenue = df.groupby(['Year', 'Month'])['TotalRevenue'].sum().reset_index()

# Plotting dengan Matplotlib
fig, ax = plt.subplots(figsize=(10, 6))

for year in monthly_revenue['Year'].unique():
    data = monthly_revenue[monthly_revenue['Year'] == year]
    ax.plot(data['Month'], data['TotalRevenue'], label=str(year))

ax.set_title('Penghasilan per Bulan Setiap Tahun')
ax.set_xlabel('Bulan')
ax.set_ylabel('Pendapatan')
ax.legend(title='Tahun')
plt.show()
_images/7ef54e8df5fbf0d1037c5379ce9a2ba5daddc0be866b2c733c82a48ba8ad4798.png
print(monthly_revenue)
    Year  Month  TotalRevenue
0   2010     12    748957.020
1   2011      1    560000.260
2   2011      2    498062.650
3   2011      3    683267.080
4   2011      4    493207.121
5   2011      5    723333.510
6   2011      6    691123.120
7   2011      7    681300.111
8   2011      8    682680.510
9   2011      9   1019687.622
10  2011     10   1070704.670
11  2011     11   1461756.250
12  2011     12    433668.010

negara dengan penghasilan terbanyak selama satu tahun#

import matplotlib.pyplot as plt

df['Revenue'] = df['Quantity'] * df['UnitPrice']
revenue_by_country = df.groupby('Country')['Revenue'].sum().sort_values(ascending=False)
# Plotting
fig, ax = plt.subplots(figsize=(12, 6))
revenue_by_country.plot(kind='bar', ax=ax, color='skyblue')

# Menambahkan label dan judul
ax.set_xlabel('Negara')
ax.set_ylabel('Total Pendapatan')
ax.set_title('Total Pendapatan per Negara')

plt.xticks(rotation=45, ha='right')  # Memutar label sumbu x untuk memperbaiki tampilan
plt.tight_layout()  # Menyusun layout agar lebih rapi
plt.show()
_images/b58fcbe3d9614256eca743294ba422d545e7b71a1f90ac643e5db3a0ee954d2f.png
import matplotlib.pyplot as plt
import geopandas as gpd
from mpl_toolkits.axes_grid1 import make_axes_locatable

# Load data negara
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))

# Gabungkan data pendapatan dengan data negara
world = world.merge(revenue_by_country, how='left', left_on='name', right_on='Country')

# Plotting peta
fig, ax = plt.subplots(1, 1, figsize=(15, 10))
divider = make_axes_locatable(ax)
cax = divider.append_axes("right", size="5%", pad=0.1)
world.plot(column='Revenue', cmap='plasma', linewidth=0.8, ax=ax, edgecolor='0.8', legend=True, cax=cax,
           legend_kwds={'label': "Total Pendapatan", 'orientation': "vertical", 'ticks': range(0, int(world['Revenue'].max()), int(world['Revenue'].max()/10))})
ax.set_title('Total Pendapatan per Negara', fontsize=20)
ax.set_axis_off()
plt.show()
C:\Users\asus\AppData\Local\Temp\ipykernel_8960\1208171051.py:6: FutureWarning: The geopandas.dataset module is deprecated and will be removed in GeoPandas 1.0. You can get the original 'naturalearth_lowres' data from https://www.naturalearthdata.com/downloads/110m-cultural-vectors/.
  world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
_images/162f9982c48ce710cd3db9f0644afea30b19e542a591b8be6d991eac7292dffd.png

jenis barang yang paling banyak terjual di setiap negara#

# Menghitung pendapatan untuk setiap transaksi
df['Revenue'] = df['Quantity'] * df['UnitPrice']

# Mengelompokkan berdasarkan negara dan deskripsi barang, kemudian menghitung total penjualan
popular_items_by_country = df.groupby(['Country', 'Description'])['Quantity'].sum().reset_index()

# Mengambil deskripsi barang yang paling laku di setiap negara dengan jumlah terbanyak
popular_items_by_country = popular_items_by_country.loc[popular_items_by_country.groupby('Country')['Quantity'].idxmax()]

# Plotting
fig, ax = plt.subplots(figsize=(15, 10))

for country, data in popular_items_by_country.groupby('Country'):
    ax.bar(country, data['Quantity'], label=data['Description'].values[0])

# Menambahkan label dan judul
ax.set_xlabel('Negara')
ax.set_ylabel('Jumlah Barang Terjual')
ax.set_title('Barang yang Paling banyak terjual di Setiap Negara')
ax.legend(title='Deskripsi Barang', bbox_to_anchor=(1, 1), loc='upper left')

plt.xticks(rotation=45, ha='right')  # Memutar label sumbu x untuk memperbaiki tampilan
plt.tight_layout()  # Menyusun layout agar lebih rapi
plt.show()
_images/554e173feca7b17703cfd0dcf851eaaf74bff6f68fee8d4e7d8e18b2e3c7c45e.png