Как рассчитать среднее и стандартное отклонение матрицы сходства? - PullRequest
3 голосов
/ 17 июня 2019

Я работаю с файлами CSV, и у меня есть код, который вычисляет сходство между документами. Пост 1 предоставляет код и детали данных, а вывод выглядит следующим образом:

data.csv выглядит так:

idx         messages
112  I have a car and it is blue
114  I have a bike and it is red
115  I don't have any car
117  I don't have any bike

Вывод:

    id     112    114    115    117
    id                             
    112  100.0   78.0   51.0   50.0
    114   78.0  100.0   47.0   54.0
    115   51.0   47.0  100.0   83.0
    117   50.0   54.0   83.0  100.0

Теперь я хотел бы вычислить среднее и стандартное отклонение нижней треугольника матрицы подобия (поскольку верхняя и нижняя части похожи) без данных идентичности (100,0).

Я попытался использовать встроенное среднее значение панды и стандартное значение как:

df_std = df.std()
df_Mean = df.mean()

Но при этом учитываются все данные в выводе, такие как тождество и верхний треугольник.

Я хотел бы знать, есть ли способ, которым я могу вычислить среднее и стандартное отклонение, как я упоминал.

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Используйте numpy.tril с k=-1 и сделайте 0s np.nan:

import numpy as np

ltri = np.tril(df.values, -1)
ltri = ltri[np.nonzero(ltri)]

Выход:

array([[ 0.,  0.,  0.,  0.],
       [78.,  0.,  0.,  0.],
       [51., 47.,  0.,  0.],
       [50., 54., 83.,  0.]])

А теперь вы можете сделать ltri.std(), ltri.mean():

ltri.std(), ltri.mean()
# (14.361406616345072, 60.5)
1 голос
/ 17 июня 2019

Вы можете сделать это, маскируя все нежелательные значения как np.nan

df.values[np.triu_indices_from(df.values,0)]=np.nan
df.mean()
112    59.666667
114    50.500000
115    83.000000
117          NaN
dtype: float64
df.std()
112    15.885003
114     4.949747
115          NaN
117          NaN
dtype: float64

После маски значение

df
      112   114   115  117
112   NaN   NaN   NaN  NaN
114  78.0   NaN   NaN  NaN
115  51.0  47.0   NaN  NaN
117  50.0  54.0  83.0  NaN
...