import pandas as pd
import numpy as np
data = pd.DataFrame({'one': [4, np.nan, 2, np.nan],
'two': [np.nan, 4, np.nan, 5],
'three':[5, np.nan, 2, np.nan],
'four':[3, 4, np.nan, 3],
'five':[5, np.nan, 1, np.nan],
'six':[np.nan, 5, np.nan, 5],
'seven':[np.nan, np.nan, np.nan,4]},
index = list('ABCD'))
data
|
five |
four |
one |
seven |
six |
three |
two |
| A |
5.0 |
3.0 |
4.0 |
NaN |
NaN |
5.0 |
NaN |
| B |
NaN |
4.0 |
NaN |
NaN |
5.0 |
NaN |
4.0 |
| C |
1.0 |
NaN |
2.0 |
NaN |
NaN |
2.0 |
NaN |
| D |
NaN |
3.0 |
NaN |
4.0 |
5.0 |
NaN |
5.0 |
data_center = data.apply(lambda x: x - x.mean(), axis = 1)
data_center
|
five |
four |
one |
seven |
six |
three |
two |
| A |
0.750000 |
-1.250000 |
-0.250000 |
NaN |
NaN |
0.750000 |
NaN |
| B |
NaN |
-0.333333 |
NaN |
NaN |
0.666667 |
NaN |
-0.333333 |
| C |
-0.666667 |
NaN |
0.333333 |
NaN |
NaN |
0.333333 |
NaN |
| D |
NaN |
-1.250000 |
NaN |
-0.25 |
0.750000 |
NaN |
0.750000 |
from sklearn.metrics.pairwise import cosine_similarity
sim_AB = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1),
data_center.loc['B', :].fillna(0).values.reshape(1, -1))
sim_AB
array([[0.30772873]])
sim_AC = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1),
data_center.loc['C', :].fillna(0).values.reshape(1, -1))
sim_AC
array([[-0.24618298]])
sim_AD = cosine_similarity(data_center.loc['A', :].fillna(0).values.reshape(1, -1),
data_center.loc['D', :].fillna(0).values.reshape(1, -1))
sim_AD
array([[0.56818182]])
(sim_AD*data.loc['D', 'two'] + sim_AB*data.loc['B', 'two'])/(sim_AD + sim_AB)
array([[4.64867562]])