Я действительно старался изо всех сил, чтобы найти решение моей проблемы.Учитывая, что у меня есть 2 клиента с несколькими атрибутами, как указано ниже;
cust1 = [4.0, 75.0, 2.0, 155.0, 58.0, 3.0, 7.0, 4.0, 0.0, 4.0, 0.0, 1.0, 1.0, nan, 2.0, 1.0, 3.0, 0.0, 0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0, nan, 13.0, 8260.0, 41.5, 91.0, 65.0, 4.8, 5.7, 7.4, 4.2, 301.0, 31.0, 91.0, 10.0, 196.0, 121.0, 139.0, 4.7, 10.0, 54.0, 72.0, 1.1, 225.0, 42.0, 0.69, 104.0, nan, 59.3, 13.0, 41.5, 100.0, 31.1, 65.0, 4.8, 139.0, 4.7, 11.0, 57.0, nan, nan, nan, nan, 11.0, 1.4, 138.0, 2.7, 9.0, 2.0, 1.0, nan, 2.0, 2.0, 2.0, 2.0, 2.0, 3.0, 1.0, 2.0, nan, 5.0, 5.0, 5.0, 3.0, 3.0, 2.0, 3.0, 3.0, 3.0, 1.0, 2.0, 3.0, 4.0, 2.0, 2.0, 2.0, 5.0, 5.0, 5.0, 5.0, 1.0, 2.0, 1.0, 1.0, 2.0, 2.0, 0.0, 2.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 2.0, 2.0, 1.0, 2.0, 1.0, 0.0, 1.0, 0.0, 0.0, 2.0, 1.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 0.0, 0.0, 1.0, 1.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
cust2 = [4.0, 78.0, 2.0, 160.0, 62.0, 3.0, 5.0, 3.0, 0.0, 6.0, 0.0, 1.0, 1.0, nan, 24.0, 0.0, 2.0, 0.0, 0.0, 2.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, nan, 11.4, 7620.0, 35.4, 92.0, 106.0, 5.2, 5.4, 7.2, 4.5, 206.0, 40.0, 23.0, 6.0, 169.0, 102.0, 137.0, 6.0, 9.2, 76.0, 38.0, 3.5, 927.0, 83.0, 0.66, 84.0, nan, 64.2, 11.4, 35.4, 100.0, 32.2, 106.0, 5.2, 137.0, 6.0, 10.0, 62.6, nan, nan, nan, nan, 23.0, 1.5, 138.0, 3.4, 9.0, 2.0, 1.0, nan, 2.0, 2.0, 2.0, 2.0, 1.0, 4.0, 1.0, 2.0, nan, 5.0, 5.0, 4.0, 3.0, 3.0, 1.0, 3.0, 3.0, 3.0, 2.0, 2.0, 4.0, 5.0, 2.0, 3.0, 2.0, 5.0, 5.0, 5.0, 4.0, 1.0, 3.0, 1.0, 1.0, 2.0, 2.0, 0.0, 2.0, 0.0, 1.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 2.0, 3.0, 0.0, 3.0, 1.0, 0.0, 1.0, 3.0, 0.0, 2.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 1.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 2.0, 2.0, 0.0, 2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.0, 2.0, 0.0, 0.0, 0.0, 0.0, 2.0, 0.0, 1.0, 0.0, 0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
Я хочу найти сходство между этими клиентами.Проблема в том, что, как вы видите, данные содержат пропущенные значения.Я хочу учитывать, что атрибуты с пропущенными значениями являются максимально возможным расстоянием.Я использую Python для этого проекта.Я устал от cosine_distance, distance.euclidean.Ни один из них не обрабатывает пропущенные значения.
Мои данные содержат более 200 таких клиентов.Моя общая цель - найти 5 самых похожих клиентов.
from sklearn.metrics.pairwise import cosine_similarity
from scipy.spatial import distance
import numpy as np
simillist =[]
hepsi = []
dfyeni = df.apply(pd.to_numeric, errors = 'coerce')
dfyeni[np.isnan(dfyeni)] = 0
simi = cosine_similarity(dfyeni) #calculate similarity for the whole dataframe
for rowsira, row in df.iterrows():
for y in df.columns:
if df.iloc[rowsira,y] == "?":
simillist = simi[rowsira] #retrieve similarity of customer with ? to other customers
yenilist = sorted(range(len(simillist)),key = lambda k: simillist[k]) #retrieve indexes from biggest
hepsi = []
for i in range(5): #similarity count 5 olduğunu varsayıyorum
z = i+1 #en büyük her zaman 1 olduğu için
closeindex = yenilist[z] #en yüksek similarity'nin index değerini çekiyorum
for hnd in range(len(yenilist)):
if df.iloc[closeindex,y] != "?" or np.isnan(df.iloc[closeindex,y])== False:
continue
else:
closeindex = closeindex+1
closeatr = df.iloc[closeindex, y]
hepsi.append(closeatr)