接之前的item-cf算法,又了解了一下numpy,pandas等内容后,有了更简单方便的求item-cf的思路,但是有个问题,由于数据量的关系,速度非常慢,下面这个方法虽然代码很简单,但在实际运行过程中非常慢。。。。
代码如下
from pandas import Series,DataFrame
import pandas as pd
import numpy as np
import pymysql
import codecs
db=pymysql.connect("localhost","root","","douban")
cursor=db.cursor()
sql="select distinct bookID,uri,rating from comments;"
cursor.execute(sql)
data=cursor.fetchall()
db.close()
frame=DataFrame()
for item in data:
frame.loc[item[1],item[0]]=item[2]
print(item)
print('all data in')
__=frame.fillna(0,inplace=True)
corr=frame.corr()
print('finished counting')
corr.to_csv('testDemo.csv')
print('finished saving')
主要变化是依靠DataFrame动态扩张的特性,直接从数据库读取数据写入frame
然后使用DataFrame的corr()函数直接求相关系数。
就是这样,最后输出testDemo.csv就是一个各书籍间的相关系数列表。
但是由于非常慢,所以目前还未得到结果。