Veri Analizi – E-ticaret Uygulaması
Merhaba VBO okuyucuları! Bu yazımda, e-ticaret örnek verisi üzerinden veri analizi uygulaması yapacağız. Bir önceki yazımda, CRM ve müşteri analitiği hakkında genel bilgiler verip sonraki yazılarımda örnekler uygulayacağımdan bahsetmiştim. Yazıya buradan ulaşabilirsiniz.
Python üzerinde yapacağımız uygulama için, Kaggle.com üzerinden indirdiğimiz e-ticaret verisini analiz edip, bazı çıkarımlarda bulunacağız. Veri analizi, aslında sorular sormakla başlar. Verideki her sütundan birçok soru çıkartılabilir ve cevabı bulunabilir. Bunu yaparken bazı istatistiksel yöntemlerden de destek alabiliriz; histogram grafikleri çizerek, sütunlar arasındaki korelasyona bakarak, boxplot grafiklerinden faydalanarak veri hakkında daha detaylı bilgilere sahip olabiliriz.
Uygulama için kullanacağımız veri setini bu linkten indirebilirsiniz.
Kaggle.com’da veri setleri hakkında özet bilgiler bulunuyor. Örneğin, indirdiğimiz veri 25.900 tekil sipariş kodu, 4.070 tekil stok kodu, 4.223 ürün içeriği içeriyor. Burada şu yorumlamaları yapabiliriz:
- Bir sipariş ortalama yaklaşık 6 ürün içermekte,
- Bazı ürünler birden fazla isme sahip,
- Sipariş tarihi görselinin dağılımına bakıldığında son dönemlere doğru bir artış gözlemlenmekte.
Bu verideki her sütun için aşağıdaki gibi birçok soru sorulabilir ve cevabı alınabilir.
- Tarih Bazında: Hangi tarihte en çok harcama yapılmış? Hangi müşteriler x tarihinde en yüksek tutarda alışveriş yapmıştır?
- Müşteri Bazında: En düşük alışveriş tutarına sahip müşteriler kimlerdir? x müşterisi hangi ülkelerden alışveriş yapımaktadır?
- Sipariş Bazında: Bir siparişte kaç farklı ürün bulunmaktadır?
- Ürün Bazında: En çok satılan ürünler hangileridir?
- Ülke Bazında: Hangi ülkeler daha fazla sipariş adetine & tutarına sahiptir?
Şimdi, veriyi Python ile okuyalım ve incelemeye devam edelim:
Verimizi yükledik:
data_1 = pd.read_csv('data.csv',encoding = 'unicode_escape') data_1.head()
Kullanacağımız bazı kütüphaneleri yüklüyoruz:
import pandas as pd import numpy as np import matplotlib.pyplot as plt import seaborn as sns
Veri tiplerini incelemek ve gerekirse dönüştürebilmek için aşağıdaki satırı uyguluyoruz:
data_1.dtypes
‘InvoiceDate’ sütununu sonraki hesaplamalarda kullanabilmek için object’ten datetime’a çeviriyoruz.
data_1['InvoiceDate'] = pd.to_datetime(data_1['InvoiceDate']) data_1.dtypes
Fiyatlarda indirim uygulanmış, kirli data vs. olabilir. Bundan kurtulmak için, fiyat ve miktarı 0’dan büyük olan siparişleri alıyoruz:
data_1 = data_1[(data_1['UnitPrice'] > 0) & (data_1['Quantity'] > 0)] data_1[data_1['UnitPrice'] == 0]
Numerik sütunlardaki verinin dağılımına şu şekilde bakabiliriz:
plt.subplots(figsize=(12,6)) sns.boxplot(data_1.UnitPrice) plt.show()
Müşteri bazında inceleme
Bir müşterinin ülke bazında kaç sipariş verdiğini şu şekilde bulabiliriz:
data_1.groupby(by=['CustomerID','Country'])['InvoiceNo'].count().head()
Bir siparişteki bir ürüne ödenen toplam fiyatı bulmak için, ‘UnitPrice’ ve ‘Quantity’ sütunlarını çarpıyoruz.
data_1['TotalPrice'] = data_1['UnitPrice']*data_1['Quantity'] data_1.head()
Bir müşterinin toplam harcamasını şu şekilde buluyoruz:
data_1.groupby(by=['CustomerID'], as_index=False)['TotalPrice'].sum().head()
Tarih bazında inceleme
Aylık bazda toplam ciroyu göstermek için öncelikle yıl-ay bazlı bir sütun oluşturuyoruz, sonrasında görselleştiriyoruz:
data_1['purch_month'] = data_1.InvoiceDate.dt.to_period('M').astype(str) order_per_month = data_1.groupby('purch_month', as_index=False).TotalPrice.sum() ax = sns.lineplot(x="purch_month", y="TotalPrice", data=order_per_month) ax.set_title('Orders per month')
Ülke bazında inceleme
Ülke bazında sipariş sayılarına bakmak ve görselleştirme adına şu işlemleri uygulayabiliriz:
data_2 = data_1.groupby('Country')['InvoiceNo'].count().sort_values(ascending=False)
data_2.plot('bar') plt.xlabel('Orders') plt.ylabel('Country') plt.title('OrdersperCountry') plt.show()
Ülkelerin toplam harcama tutarına göre aldıkları paya bakıyoruz.
data_grouped = data_1.groupby(by=['Country','purch_month'], as_index=False)['TotalPrice'].sum() data_grouped['percentage'] = data_grouped['TotalPrice']/data_grouped['TotalPrice'].sum() data_per = data_grouped.groupby(by=['Country'], as_index=False)['percentage'].sum().sort_values('percentage',ascending=False) data_per.head()
getiren ülke Hollanda. Burada trendlere bakarken Birleşik Krallık’ın ağırlığı fazla olduğundan, kendi yönünde analizleri saptırabilir. Bu yüzden ülke bazında trendleri yorumlamak daha doğru olabilir.
Satışlardan en çok payı alan ilk 2 ülkeyi filtreleyip, aylık satışlardaki trende bakıyoruz:
df = data_grouped[data_grouped['Country'].isin(['United Kingdom','Netherlands'])] plt.figure(figsize=(12,6)) sns.lineplot(data = df, x='purch_month',y='TotalPrice',err_style='bars', hue='Country')
Bu yazıda veri analizi uygulamalarıyla farklı sorulara cevaplar verdik. Tabii ki bu sorular daha arttırılabilir ve karmaşık hale gelebilir. Müşteri ve sipariş verisi üzerinde çalışmak genel olarak keyifli, ancak bazen de zorlayıcı olabiliyor. Doğru soruları sorabilmek ve verideki örüntüleri (pattern) takip edebilmek önemli. Sonrasında veri temizleme ve manipülasyonlar ile daha sağlıklı analiz & modellemeler yapılabilir. Yorumlarınız ve sorularınız için şimdiden teşekkürler.