Skip to content

Commit

Permalink
fix bugs
Browse files Browse the repository at this point in the history
  • Loading branch information
Coder-Yu committed Dec 6, 2016
1 parent c363fd3 commit 70109b0
Show file tree
Hide file tree
Showing 7 changed files with 83 additions and 65 deletions.
2 changes: 1 addition & 1 deletion config/RSTE.conf
Expand Up @@ -3,7 +3,7 @@ social=../dataset/FilmTrust/trust.txt
ratings.setup=-columns 0 1 2
social.setup=-columns 0 1 2
recommender=RSTE
evaluation.setup=-cv 3
evaluation.setup=-ap 0.33
item.ranking=off -topN 10 -ignore -1
num.factors=10
num.max.iter=30
Expand Down
2 changes: 1 addition & 1 deletion data/rating.py
Expand Up @@ -8,7 +8,7 @@

class RatingDAO(object):
'data access control'
def __init__(self,config,trainingSet = None, testSet = None):
def __init__(self,config,trainingSet = list(), testSet = list()):
self.config = config
self.ratingConfig = LineConfig(config['ratings.setup'])
self.user = {} #used to store the order of users
Expand Down
2 changes: 1 addition & 1 deletion data/social.py
Expand Up @@ -6,7 +6,7 @@
from re import split

class SocialDAO(object):
def __init__(self,conf,relation):
def __init__(self,conf,relation=list()):
self.config = conf
self.user = {} #used to store the order of users
self.relation = relation
Expand Down
63 changes: 6 additions & 57 deletions main/RecQ.py
Expand Up @@ -4,7 +4,7 @@
from tool.file import FileIO
from evaluation.dataSplit import *
from multiprocessing import Process,Manager

from tool.file import FileIO
class RecQ(object):
def __init__(self,config):
self.trainingData = [] # training data
Expand All @@ -18,16 +18,16 @@ def __init__(self,config):
self.evaluation = LineConfig(config['evaluation.setup'])
if self.evaluation.contains('-testSet'):
#specify testSet
self.__loadDataSet(config['ratings'])
self.__loadDataSet(self.evaluation['-testSet'],bTest=True)
self.trainingData = FileIO.loadDataSet(config,config['ratings'])
self.testData = FileIO.loadDataSet(config,self.evaluation['-testSet'],bTest=True)
elif self.evaluation.contains('-ap'):
#auto partition
self.__loadDataSet(config['ratings'])
self.trainingData = FileIO.loadDataSet(config,config['ratings'])
self.trainingData,self.testData = DataSplit.\
dataSplit(self.trainingData,test_ratio=float(self.evaluation['-ap']))
elif self.evaluation.contains('-cv'):
#cross validation
self.__loadDataSet(config['ratings'])
self.trainingData = FileIO.loadDataSet(config,config['ratings'])
#self.trainingData,self.testData = DataSplit.crossValidation(self.trainingData,int(self.evaluation['-cv']))

else:
Expand All @@ -36,62 +36,11 @@ def __init__(self,config):

if config.contains('social'):
self.socialConfig = LineConfig(self.config['social.setup'])
self.__loadRelationship(self.config['social'])
self.relation = FileIO.loadRelationship(config,self.config['social'])


def __loadDataSet(self, file, bTest=False):
if not bTest:
print 'loading training data...'
else:
print 'loading test data...'
with open(file) as f:
ratings = f.readlines()
# ignore the headline
if self.ratingConfig.contains('-header'):
ratings = ratings[1:]
# order of the columns
order = self.ratingConfig['-columns'].strip().split()

for lineNo, line in enumerate(ratings):
items = split(' |,|\t', line.strip())
if len(order) < 3:
print 'The rating file is not in a correct format. Error: Line num %d' % lineNo
exit(-1)
try:
userId = items[int(order[0])]
itemId = items[int(order[1])]
rating = items[int(order[2])]
except ValueError:
print 'Error! Have you added the option -header to the rating.setup?'
exit(-1)
if not bTest:
self.trainingData.append([userId, itemId, float(rating)])
else:
self.testData.append([userId, itemId, float(rating)])

def __loadRelationship(self, filePath):
print 'load social data...'
with open(filePath) as f:
relations = f.readlines()
# ignore the headline
if self.socialConfig.contains('-header'):
relations = relations[1:]
# order of the columns
order = self.socialConfig['-columns'].strip().split()
if len(order) <= 2:
print 'The social file is not in a correct format.'
for lineNo,line in enumerate(relations):
items = split(' |,|\t', line.strip())
if len(order) < 2:
print 'The social file is not in a correct format. Error: Line num %d' % lineNo
exit(-1)
userId1 = items[int(order[0])]
userId2 = items[int(order[1])]
if len(order) < 3:
weight = 1
else:
weight = float(items[int(order[2])])
self.relation.append([userId1, userId2, weight])


def execute(self):
Expand Down
69 changes: 68 additions & 1 deletion tool/file.py
@@ -1,6 +1,7 @@
import os.path
from os import makedirs,remove
from re import compile,findall
from re import compile,findall,split
from config import LineConfig
class FileIO(object):
def __init__(self):
pass
Expand All @@ -26,6 +27,72 @@ def deleteFile(filePath):
if os.path.exists(filePath):
remove(filePath)

@staticmethod
def loadDataSet(conf, file, bTest=False):
trainingData = []
testData = []
ratingConfig = LineConfig(conf['ratings.setup'])
if not bTest:
print 'loading training data...'
else:
print 'loading test data...'
with open(file) as f:
ratings = f.readlines()
# ignore the headline
if ratingConfig.contains('-header'):
ratings = ratings[1:]
# order of the columns
order = ratingConfig['-columns'].strip().split()

for lineNo, line in enumerate(ratings):
items = split(' |,|\t', line.strip())
if len(order) < 3:
print 'The rating file is not in a correct format. Error: Line num %d' % lineNo
exit(-1)
try:
userId = items[int(order[0])]
itemId = items[int(order[1])]
rating = items[int(order[2])]
except ValueError:
print 'Error! Have you added the option -header to the rating.setup?'
exit(-1)
if not bTest:
trainingData.append([userId, itemId, float(rating)])
else:
testData.append([userId, itemId, float(rating)])
if not bTest:
return trainingData
else:
return testData

@staticmethod
def loadRelationship(conf, filePath):
socialConfig = LineConfig(conf['social.setup'])
relation = []
print 'load social data...'
with open(filePath) as f:
relations = f.readlines()
# ignore the headline
if socialConfig.contains('-header'):
relations = relations[1:]
# order of the columns
order = socialConfig['-columns'].strip().split()
if len(order) <= 2:
print 'The social file is not in a correct format.'
for lineNo, line in enumerate(relations):
items = split(' |,|\t', line.strip())
if len(order) < 2:
print 'The social file is not in a correct format. Error: Line num %d' % lineNo
exit(-1)
userId1 = items[int(order[0])]
userId2 = items[int(order[1])]
if len(order) < 3:
weight = 1
else:
weight = float(items[int(order[2])])
relation.append([userId1, userId2, weight])
return relation




8 changes: 5 additions & 3 deletions visual/display.py
Expand Up @@ -6,17 +6,19 @@
from tool.qmath import denormalize
from os.path import abspath
import webbrowser

from tool.file import FileIO
class Display(object):
def __init__(self,conf):
self.conf = conf
if not conf.contains('ratings') and not conf.contains('social'):
print 'The config file is not in the correct format!'
exit(-1)
if conf.contains('ratings'):
self.dao = RatingDAO(conf)
ratingData = FileIO.loadDataSet(conf,conf['ratings'])
self.dao = RatingDAO(conf,ratingData)
if conf.contains('social'):
self.sao = SocialDAO(conf)
relationData = FileIO.loadRelationship(conf,conf['social'])
self.sao = SocialDAO(conf,relationData)


def draw(self):
Expand Down
2 changes: 1 addition & 1 deletion visual/visualization/analysis.html
Expand Up @@ -2,7 +2,7 @@
<link rel='stylesheet' type='text/css' href='reportStyle.css'/></head>
<body><div class='reportTitle'><div class='in'>Data Analysis</div></div>
<div class='main'><div class='area1'>
<div class='title'><h3>Data Files</h3></div><div class='text'><b>Rating Data</b>: C:\Users\123\Documents\GitHub\RecQ\dataset\FilmTrust\trainset.txt<br><b>Social Data</b>: C:\Users\123\Documents\GitHub\RecQ\dataset\FilmTrust\testset.txt</div></div><div style='padding-top:20px'><center><img src='images/header2.png'/></center></div>
<div class='title'><h3>Data Files</h3></div><div class='text'><b>Rating Data</b>: C:\Users\Administrator\Desktop\RecQ\dataset\FilmTrust\trainset.txt<br><b>Social Data</b>: C:\Users\Administrator\Desktop\RecQ\dataset\FilmTrust\testset.txt</div></div><div style='padding-top:20px'><center><img src='images/header2.png'/></center></div>
<div class='area1'><div class='title'><h3>Rating Data</h3></div>
<div class='text'><b>Rating Scale</b>: 0.5 1.0 1.5 2.0 2.5 3.0 3.5 4.0</br><b>User Count</b>: 1494<br><b>Item Count</b>: 1994<br><b>Record Count</b>: 31851<br><b>Global Mean</b>: 3.105</div>
<center><div class='img'><img src='images/rh.png' width='640px' height='480px'/></div></center>
Expand Down

0 comments on commit 70109b0

Please sign in to comment.