pandalar: başka bir sütundaki değere göre her satır için jak kartı benzerliğini hesaplayın
Dec 15 2020
Aşağıdaki gibi, yalnızca daha fazla satır içeren bir veri çerçevem var:
import pandas as pd
data = {'First': ['First value', 'Second value','Third value'],
'Second': [['old','new','gold','door'], ['old','view','bold','door'],['new','view','world','window']]}
df = pd.DataFrame (data, columns = ['First','Second'])
Jak kart benzerliğini hesaplamak için bu parçayı çevrimiçi buldum (benim çözümüm değil):
def lexical_overlap(doc1, doc2):
words_doc1 = set(doc1)
words_doc2 = set(doc2)
intersection = words_doc1.intersection(words_doc2)
union = words_doc1.union(words_doc2)
return float(len(intersection)) / len(union) * 100
Sonuç olarak elde etmek istediğim şey, ölçünün İkinci sütunun her satırını doc olarak alması ve her çifti yinelemeli olarak karşılaştırması ve İlk sütundaki satır adıyla bir hesaplama çıkarması şuna benzer:
First value and Second value = 80
First value and Third value = 95
Second value and Third value = 90
Yanıtlar
AmitAmola Dec 15 2020 at 23:04
Pekala, bunu biraz şöyle yapardım
from itertools import combinations
for val in list(combinations(range(len(df)), 2)):
firstlist = df.iloc[val[0],1]
secondlist = df.iloc[val[1],1]
value = round(lexical_overlap(firstlist,secondlist),2)
print(f"{df.iloc[val[0],0]} and {df.iloc[val[1],0]}'s value is: {value}")
Çıktı:
First value and Second value's value is: 33.33
First value and Third value's value is: 14.29
Second value and Third value's value is: 14.29
1 QuangHoang Dec 15 2020 at 22:54
Verileriniz büyük olmadığından, biraz farklı bir yaklaşımla yayın yapmayı deneyebilirsiniz:
# dummy for each rows
s = pd.get_dummies(df.Second.explode()).sum(level=0).values
# pair-wise jaccard
([email protected])/(s|s[:,None,:]).sum(-1) * 100
Çıktı:
array([[100. , 33.33333333, 14.28571429],
[ 33.33333333, 100. , 14.28571429],
[ 14.28571429, 14.28571429, 100. ]])
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'