Как удалить выбросы для данных логического фрейма данных с 1000 функций? - PullRequest
0 голосов
/ 26 февраля 2020

У меня есть датафрейм, который выглядит как ниже. u1 - идентификатор пользователя, а p1 - идентификатор элемента. Итак, если пользователю нравится itemID p1, то он равен 1. В противном случае он равен 0. Мой первый шаг - очистка данных для удаления выбросов.

enter image description here

Для удаления выбросов мой код ниже рассчитывает среднее значение для каждого столбца и установил порог 0,1 . Поэтому, если среднее значение меньше 0,1, удалите этот столбец или строку. На самом деле я имею в виду, что если пользователю понравились только 1 или 2 элемента из многих, то мы можем просто удалить таких пользователей. Аналогично для столбцов.

   df = df.drop(meanColums[meanColums< 0.1].index, axis=1)
   rows = df.select_dtypes([np.number]).index
   mean = df.mean(axis = 1)
   indexNames = rows[mean<0.1]
   df = df.drop(indexNames)

Но это пороговое значение может варьироваться в зависимости от количества пользователей и элементов. И это не очень хороший способ.

Я только что попробовал PCA, но достаточно ли это для двоичных данных?

from sklearn.decomposition import PCA
pcaup= PCA(n_components=2)
principalComponents = pcaup.fit_transform(pivot_table)
principalComponents 

principal_Df = pd.DataFrame(data = principalComponents, columns = ['principal component 1', 'principal component 2'])
principal_Df

print('Explained variation per principal component: {}'.format(pca_up.explained_variance_ratio_))
output : [0.33565108 0.20232585]

Может кто-нибудь предложить лучшую технику очистки для такого рода проблемы.?

...