よし、みんな。私の教授は、Python3 でループの助けを借りずにこの機能を実行する方法があると言っています。私はそれを見ていません。彼女は、zip、enumerate、readlines、および split(";") を使用することを推奨しています (すべてのレビューの後には「;」が続きます。2 つ続けてある場合は、そのレビュー担当者がその映画をレビューしていないことを意味します)。私がやっていることは、リストのmovMatリストで比較映画を探して、映画を読んでいることです。次に、それらを一般的なレビュアーと比較します。その後、ピアソンの計算を取得する必要があります。これには、現在の映画の一般的なレビュアー、ターゲット映画の値 (比較映画) の取得、一般的なレビュアーの値の平均、標準偏差、最後にピアソン R の取得が含まれます。相関。
def pCalc (movMat, movNumber, n)
indexes1 = [i for i,x in enumerate(movMat[movNumber][1].split(';')) if x == '1' or x == '2' or x == '3' or x == '4' or x == '5' ]
indexes2 = [i for i,x in enumerate(movMat[n][1].split(';')) if x == '1' or x == '2' or x == '3' or x == '4' or x == '5' ]
compare = list(set(indexes1).intersection(indexes2))
xi = []
for index, val in enumerate(movMat[movNumber][1].split(';')):
if index in compare:
xi.append(int(val))
average1 = sum(xi)/len(compare)
stdDev1 = statistics.stdev(xi)
yi = []
for index, val in enumerate(movMat[n][1].split(';')):
if index in compare:
yi.append(int(val))
average2 = sum(yi)/len(compare)
stdDev2 = statistics.stdev(yi)
r = 0
newSum = 0
for i in range(0, len(compare)):
newSum += ((xi[i]-average1)/stdDev1) * ((yi[i]-average2)/stdDev2)
r = (1/(len(compare)-1)) * newSum
入力例は次のとおりです。
このプログラムの主要部分は、引数呼び出し、ファイル内の行などを処理しますが、コマンド ライン引数 '1' の入力に対するサンプル出力は、次のようにトイ ストーリーを呼び出し、データベース内の他の映画と比較します。
Movie number: Movie 1|Toy Story (1995)
*** No. of rows (movies) in matrix = 1682
*** No. of columns (reviewers) = 943
Output shows r-value, movie no.|name, no. of ratings
compare movie is 1|Toy Story (1995)
no. of common reviewers 452
target avg 3.8783185840707963
compare avg 3.8783185840707963
target std 0.9278967014291252
compare std 0.9278967014291252
r 0.999999999999991
compare movie is 2|GoldenEye (1995)
no. of common reviewers 104
target avg 3.8653846153846154
compare avg 3.201923076923077
target std 0.9456871165874381
compare std 0.9177833965361495
r 0.22178411018797187
compare movie is 3|Four Rooms (1995)
no. of common reviewers 78
target avg 3.717948717948718
compare avg 2.9358974358974357
target std 0.9520645495064435
compare std 1.2096982943568881
r 0.1757942980351483
compare movie is 4|Get Shorty (1995)
no. of common reviewers 149
target avg 3.87248322147651
compare avg 3.530201342281879
target std 0.9247979370536794
compare std 0.9970025819307402
r 0.10313529410109303