我已经开发了该程序,我遇到了问题

时间:2017-09-15 16:03:07

标签: python pandas csv pandas-groupby

首先我使用pandas制作一个userid movieiD表 代码在

之下
import pandas as pd

movie = pd.read_csv('ActionsOnly.csv')

movie_pivot = movie.pivot_table(index='userId', columns='movieId', values='rating', fill_value=0.0)

movie_pivot.to_csv('ActionsOnly1.csv')

现在我有一个用户电影表并存储在csv。

现在我正在尝试拍摄电影电影的相似度值 因为我正在使用代码

import math
def cosine_similarity(v1,v2):
    "compute cosine similarity of v1 to v2: (v1 dot v2)/{||v1||*||v2||)"
    sumxx, sumxy, sumyy = 0, 0, 0
    for i in range(len(v1)):
        x = v1[i]; y = v2[i]
        sumxx += x*x
        sumyy += y*y
        sumxy += x*y

    return sumxy/(math.sqrt(sumxx)*math.sqrt(sumyy))
def get_values():
    itemList = []
    maxLengthList= input("Enter the number of items:\n")
    while len(itemList) < int(maxLengthList):
        item = input("Enter your Item to the List: ")
        itemList.append(float(item))
    return itemList


def c_main():
    print("\nEnter the values for the first user \n")
    user1 = get_values()

    print("\nEnter the values for the second user \n")
    user2 = get_values()

    print("\nThe cosine similarity value is", round(cosine_similarity(user1,user2),3))

找到电影的相似度并存储在电影电影栏目中 即。

          movieid1      movieid2      movieid3
movieid1    1               0.45        0.56
movieid2   0.45                1
movieid3   0.56                            1

我想从ActionsOnly.csv中提取包含userid和movieId表的值,并将值放在上面的余弦相似度中,结果将存储在上面的电影电影列表中..整个值将被放置只有...... 所以,我面临错误,我不知道 用于制作movie-movie.csv表我正在使用以下代码

将pandas导入为pd

movie = pd.read_csv('ActionsOnly.csv')

movie_pivot = movie.pivot_table(index='movieId', columns='movieId', values='rating', fill_value=0.0)

movie_pivot.to_csv('Movie_Similarity_Only1.csv')

这里运行代码我遇到错误 这些是

line 615, in _get_level_number
    'level number' % level)
ValueError: The name movieId occurs multiple times, use a level number

During handling of the above exception, another exception occurred:

line 5, in <module>
    movie_pivot = movie.pivot_table(index='movieId', columns='movieId', values='rating', fill_value=0.0)
line 142, in pivot_table
    table = agged.unstack(to_unstack)
line 3954, in unstack
    return unstack(self, level, fill_value)
line 449, in unstack
    return _unstack_multiple(obj, level)
 line 296, in _unstack_multiple
    clocs = [index._get_level_number(i) for i in clocs]
line 296, in <listcomp>
    clocs = [index._get_level_number(i) for i in clocs]
line 619, in _get_level_number
    raise KeyError('Level %s not found' % str(level))
KeyError: 'Level movieId not found'

这些是错误,我想应用上面的cosine similarity逻辑来获取将插入此影片电影表中的值。

1 个答案:

答案 0 :(得分:0)

您可以尝试旋转表格。这可能会提供您需要的格式。

考虑您提供的信息ActionsOnly.csv

userId,movieId,rating
18,9,3
32,204,4
49,2817,1
62,160438,4
70,667,5
73,1599,1
73,4441,3
73,4614,3.5
73,86142,4
95,4636,2
103,71,1
118,3769,4
150,4866,2

你想知道用户对5中哪部电影的评价。

userId是索引列,movieId成为标题行,rating决定值。如果没有值,则会显示NaNNot A Number

movie_pivot = movie.pivot_table(index='userId', columns='movieId', values='rating')

要将Pandas中的文件保存为CSV,有一个简单的命令to_csv

所以

movie_pivot.to_csv('ActionsOnly_pivot.csv')

将保存到csv。

所以你需要的完整代码是:

import pandas as pd

movie = pd.read_csv('movies.csv')

movie_pivot = movie.pivot_table(index='userId', columns='movieId', values='rating')

movie_pivot.to_csv('movies_pivot.csv')

我也强烈建议阅读有关大熊猫的内容,这非常容易和合乎逻辑:)