将Book-CrossingDataset书籍推荐算法中CVS格式测试数据集
导⼊到MySQL数据库
本⽂内容
最近看,研究推荐算法,书中的测试数据集是 提供的亚马逊⽤户对书籍评分的真实数据。推荐⼤家看本书,写得不错,⽴刻就能对推荐算法上⼿,甚⾄应⽤到你的项⽬中。
Book-Crossing Dataset 提供两种格式的数据集:和 ,问题是:
如果你有 UE 打开 cvs ⽂件,有乱码。⽆论如何转换编码,都不⾏~因为,这个⽂件是亚马逊通过程序持久化后,再导出来的。你还会发现,⽂件中有 html 标记,另外,关于⽤户名,书名等等信息,基本都是德⽂的(看域名就知道了)~
虽然,作者提供了加载测试数据集的 python 代码,不过不能导⼊到 MySQL 数据库中,其中,作者只是简单地按分号来分割字段内容(虽然推荐算法并不需要全部字段),可数据集中包含类似“ऩ”或“\“”这样的字符,不可能导⼊到 MySQL 数据库中~
你也许会问,作者都不导⼊到数据库,你为什么要导?因为,作者提供的推荐算法属于内存模型,也就是⼀次性把数据加载到内存,但之前,总还是要持久化吧~
因此,只能改造⼀下作者的 Python 代码~
Python
# -*- coding: utf-8 -*-
tor
import codecs
import string关于python的书
import os
import sys
import ConfigParser
from collections import OrderedDict
import re
class MysqlPythonFacotry(object):
"""
Python Class for connecting  with MySQL server.
"""
__instance = None
__host = None
__user = None
__password = None
__database = None
__session = None
__connection = None
def __init__(self, host='localhost', user='root', password='', database=''):        self.__host = host
self.__user = user
self.__password = password
self.__database = database
## End def __init__
def open(self):
try:
cnx = t(host=self.__host,\
user= self.__user,\
password= self.__password,\
database= self.__database)
self.__connection = cnx
self.__session = cnx.cursor()
tor.Error as e:
print('connect fails!{}'.format(e))
## End def open
def close(self):
self.__session.close()
self.__connection.close()
## End def close
def select(self, table, where=None, *args, **kwargs):        result = None
query = 'SELECT '
keys = args
values = tuple(kwargs.values())
l = len(keys) - 1
for i, key in enumerate(keys):
query += "`" + key + "`"
if i <; l:
query += ","
## End for keys
query += 'FROM %s' % table
if where:
query += " WHERE %s" % where
## End if where
self.__ute(query, values)
number_rows = self.__wcount
number_columns = len(self.__session.description)        result = self.__session.fetchall()
return result
## End def select
def update(self, table, where=None, *args, **kwargs):        try:
query = "UPDATE %s SET " % table
keys = kwargs.keys()
values = tuple(kwargs.values()) + tuple(args)
l = len(keys) - 1
for i, key in enumerate(keys):
query += "`" + key + "` = %s"
if i <; l:
query += ","
## End if i less than 1
## End for keys
query += " WHERE %s" % where
self.__ute(query, values)
self.__connectionmit()
# Obtain rows affected
update_rows = self.__wcount
tor.Error as e:
print(e.value)
return update_rows
## End function update
def insert(self, table, *args, **kwargs):
values = None
query = "INSERT INTO %s " % table
if kwargs:
keys = kwargs.keys()
values = tuple(kwargs.values())
query += "(" + ",".join(["`%s`"] * len(keys)) % tuple(keys) + ") VALUES (" + ",".join(["%s"] * len(values)) + ")"        elif args:
values = args
query += " VALUES(" + ",".join(["%s"] * len(values)) + ")"
self.__ute(query, values)
self.__connectionmit()

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。