Skip to content

Commit

Permalink
Add files via upload
Browse files Browse the repository at this point in the history
  • Loading branch information
oguzerdo authored Jul 6, 2022
1 parent af10cfd commit 150e51d
Showing 1 changed file with 83 additions and 0 deletions.
83 changes: 83 additions & 0 deletions 02_ParetoAnalysis.py
Original file line number Diff line number Diff line change
@@ -0,0 1,83 @@
'''
Dünya nüfusunun 20%si toplam zenginliğin 80%'ini oluşturuyor.
Satılan ürünlerin 20%si toplam kârlılığın 80%'ini oluşturuyor.
Sizin bir şirketiniz yok mu?
Muhtelemen siz de
Kıyafetlerinizin 20 %’sini giyiyor,
Arkadaşlarınızın sadece 'si ile buluşuyorsunuz.
Ama özetle
sonuçların �'i, nedenlerin 'sinden kaynaklanıyor.
sayılara takılmayalım;
etkinin büyük bir kısmını, özel bir azınlık oluşturur.
'''

import pandas as pd
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('display.float_format', lambda x: '%.2f' % x)
pd.set_option('display.width', 500)

# 2010-2011 yılı içerisindeki veriler
df_ = pd.read_excel("datasets/online_retail_II.xlsx", sheet_name="Year 2010-2011")

df = df_.copy()
df.head()
df.dropna(inplace=True)
df.shape


df = df[~df["Invoice"].str.contains("C", na=False)]
df = df[df["Price"] > 0]
df = df[df["Quantity"] > 0]
df["TotalPrice"] = df["Quantity"] * df["Price"]
df.describe().T


dataframe = df.copy()
# Müşteri özelinde toplam harcamaları bulalım.
dataframe = dataframe.groupby("Customer ID").agg({'TotalPrice': "sum"})

# TotalPrice'a göre azalan bir şekilde sıralayalım.
dataframe = dataframe.sort_values('TotalPrice', ascending=False)
dataframe.head()
# index sorununu düzeltelim.
dataframe.reset_index(inplace=True)

# Kümülatif toplamları alalım.
dataframe['CumSum'] = dataframe['TotalPrice'].cumsum()

dataframe[0:15]

# Eşik değeri belirleme, toplam gelirin % kaçını merak ediyoruz?
threshold = dataframe['TotalPrice'].sum() * 0.8
threshold
target_df = dataframe[dataframe['CumSum'] <= threshold]

# �'e hitap eden kişiler ne kadar
target_df.shape

# �'e hitap eden kişiler % ne kadarlık bir kesim
round(target_df.shape[0] / dataframe.shape[0],2)


def pareto_analysis(dataframe, id_, price_col, percentile=0.8):
dataframe = dataframe.groupby(id_).agg({price_col: "sum"})
dataframe = dataframe.sort_values(price_col, ascending=False)
dataframe.reset_index(inplace=True)
dataframe['CumSum'] = dataframe[price_col].cumsum()
threshold = dataframe[price_col].sum() * percentile
target_df = dataframe[dataframe['CumSum'] <= threshold]
print("Toplam Kazanç:", dataframe[price_col].sum())
print(f"Toplam kazancın %{100 * percentile} kısmı", target_df.shape[0], "kullanıcıdan gelmekte.")
print(f"Toplam kazancın %{100 * percentile} 'ini getiren kullanıcılar, tüm kitlenin % {round((target_df.shape[0] * 100 / dataframe.shape[0]),2)} kesimini oluşturmakta.")


pareto_analysis(df, "Customer ID", 'TotalPrice', percentile=0.75)

0 comments on commit 150e51d

Please sign in to comment.