Selamun aleyküm arkadaşlar, Veri Madenciliği’nde kullanılan market sepet analizi olarak da bilinen birliktelik kuralları ile ilgili örnekleri inceliyorum. Weka ve RapidMiner gibi hazır veri madenciliği programları ile çeşitli veri setleri üzerinde denemeler yaptıktan sonra Python’da gözlemlemek amacı ile biraz araştırdım. Bir kaç örnek buldum ve kendi sistemimde çalıştırdım. Örneklerle beraber verilen .csv uzantılı veri setleri çalışıyor fakat benim kendi veri setim maalesef çalışmadı. Şunu belirtmek isterim ki kendi veri setimi örneklerdeki veri setine uygun hale getirdim. (virgüllerle ayrılmış değerler haline getirdim.)
Kullandığım örneklerden birisi şu adreste: https://medium.com/@ekrem.hatipoglu/machine-learning-association-rule-mining-birliktelik-kural-çıkarımı-apriori-algorithm-4326b8f224c3
Adresteki örnek veri seti: https://drive.google.com/file/d/1GOesjZbSxCj7EnnV5CMVhDWpKCZKNdki/view?usp=sharing
Örneğin kodları:
# csv dosyalarını okumak için
import pandas as pd
# csv dosyamızı okuduk.
data = pd.read_csv('store.csv',header=None)
# Veriyi [['MILK','Bread'] , ['TEA','JAM'], ...] şekline getirdik
t = []
for i in range(0,len(data)):
t.append(str(data.values[i][0]).split(","))
# apriori sınıfı import ettik
from apyori import apriori
# apriori sınıfından bir nesne tanımladık ve ilişki bulma işlemini başlattık.
result = list(apriori(t,min_support=0.01,min_confidence=0.2,min_lift=3))
# Sonucu konsola bastık
for i in range(0,len(result)):
print(result[i].items)
Kendi veri setimi isterseniz indirerek deneyebilirsiniz: store2.csv
Kendi veri setimle kodlardaki minimum destek, minimum güven ve lift değerlerini değiştirip çalıştırdığımda hiç bir sonuç almadım. Çıktı boş görünüyordu. Ben de t listesinin içeriğini print() ile çeşitli denemelerle yazdırınca orjinal veri setinde görünmemesine karşın benim veri setimde ‘nan’ ifadeler gördüm.
Şöyle ki veri setimdeki satırlar arasında en çok değer içeren satır 19 tane veri barındırıyor. Mesela diğer satırlardan birinde 10 tane veri var ise geriye kalan 9 veri alanı nan ile doldurulmuş bunu farkettim. Orjinal veri setinde yaptığım print() denemelerinde böyle birşey görmedim. Ben de bu durumu aşmak için şöyle bir kod yazdım;
# csv dosyalarını okumak için
import pandas as pd
# csv dosyamızı okuduk.
data = pd.read_csv('store3.csv',header=None)
# Veriyi [['MILK','Bread'] , ['TEA','JAM'], ...] şekline getirdik
t = []
tmp = []
#print(len(data.values[0][:]))
""" ORJİNAL KOD [+]
for i in range(0,len(data)):
t.append(str(data.values[i][0]).split(","))
ORJİNAL KOD [-] """
#print(len(data.values[47][:]))
""" BENİM DEĞİŞTİRDİĞİM KISIM [+] <<<<<<<<<<<<<<<< """
for i in range(0,len(data)):
uzunluk = len(data.values[i][:])
tmp.clear()
for j in range(0,uzunluk):
if not(pd.isnull(data.values[i][j])):
tmp.append(data.values[i][j])
#print(tmp)
""" BENİM DEĞİŞTİRDİĞİM KISIM [-] <<<<<<<<<<<<<<< """
t.append(tmp)
# apriori sınıfı import ettik
from apyori import apriori
# apriori sınıfından bir nesne tanımladık ve ilişki bulma işlemini başlattık.
result = list(apriori(t,min_support=0.01,min_confidence=0.2,min_lift=0.5))
# Sonucu konsola bastık
for i in range(0,len(result)):
print(result[i].items)
Belirttiğim kısımda şunu yapmaya çalıştım, her satırda nan olmayan verileri okuyup liste haline getirdim ve her satırın sonunda oluşturduğum listeyi t listesine append ile ekledim. Bu işlemin sonucunda çıktı alabildim.
Lafı uzettığımın farkındayım tek seferde derdimi anlatabilmek adına adım adım ne yaptığımı anlattım. Neden nan değerlerle karşılaştım bunu merak ediyorum. Bilgilerinizden istifade etmek istiyorum. Saygılar…