我正在使用书籍crossing Data-set,它有一个文件,该文件给出了用户X对书籍Y的评分,但是很多条目包含值0,这意味着用户X喜欢书籍Y,但没有给出评分。我使用的是协作过滤,因此这0个条目对我来说是个问题,好像取0一样,它们会降低本书的总体评价。
我是数据科学领域的新手,有人可以帮助您解决这个问题吗?
我能想到的是用用户的平均书评来代替0评等,但是我再也没有任何理由支持我的想法。
最佳答案
ISBN代码非常混乱,包含许多不正确的ISBN,并且不统一。
这里只是几个例子:
"User-ID";"ISBN";"Book-Rating"
"11676";" 9022906116";"7"
"11676";"\"0432534220\"";"6"
"11676";"\"2842053052\"";"7"
"11676";"0 7336 1053 6";"0"
"11676";"0=965044153";"7"
"11676";"0000000000";"9"
"11676";"00000000000";"8"
"146859";"01402.9182(PB";"7"
"158509";"0672=630155(P";"0"
"194500";"(THEWINDMILLP";"0"
所以我建议先清理一下:
df.ISBN = df.ISBN.str.replace(r'[^\w\d]+', '')
然后计算平均评分:
avg_ratings = df.groupby('ISBN')['Book-Rating'].mean().round().astype(np.int8)
最后将这些书的平均评分设为零:
df.loc[df['Book-Rating'] == 0, 'Book-Rating'] = df.loc[df['Book-Rating'] == 0, 'ISBN'].map(avg_ratings)
更新:
从Pandas 0.20.1 the .ix indexer is deprecated, in favor of the more strict .iloc and .loc indexers开始。
关于python - 如何处理书籍交叉数据集中的0个条目,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40012035/