因为本例是以协同过滤算法为主导,其他的推荐算法为辅。而协同过滤算法的特性就是通过历史数据找出相似的用户或者网页。因此,在数据抽取的过程中,尽可能选择大量的数据,这样就能降低推荐结果的随机性,提高推荐结果的准确性,能更好地发掘长尾网页中用户感兴趣的网页。[br][br] 以用户的访问时间为条件,选取 3 个月内(2020-02-01 至 2020-04-29)用户的访问数据作为原始数据集。每个地区的用户访问习惯以及兴趣爱好存在差异性,本例抽取广州地区的用户访问数据进行分析,其数据量总计有 837 450 条记录,其中包括用户号、访问时间、来源网站、访问页面、页面标题、来源网页、标签、网页类别和关键词等属性。[br][br] 虽然 837 450 条记录对当今科学的“大数据”的概念而言,并不是特别大的数据量,但是这个数据量对配置比较低的计算机(尤其是便携式计算机)还是颇有压力的。本任务的处理过程是:建立数据库→导入数据→搭建 Python 的数据库操作环境→对数据进行分析→建立模型。其中,用到的开源数据库为 MariaDB 10.0.17(可下载自行安装,是MySQL 的一个分支)。安装数据库后导入本任务的数据原始文件 71aw.sql,就成功地配置好了数据库平台。[br][br] 而在 Python 中,Pandas 库本身可以利用 read_sql()函数来读取数据库,但是它依赖于SQLAlchemy 库,而 SQLAlchemy 又依赖于 PyMySQL,所以需要先安装 SQLAlchemy 再安装SQLAlchemy,这样就可以用 Pandas 对数据库中的数据进行快速而便捷地分析了。[br][br] 安装完成后,可以通过 Python 连接到数据库。为了方便处理数据,我们利用了 Pandas。但要注意,Pandas 在读取数据(不管是之前的 csv、Excel 或者现在的 sql),都是将全部数据读入内存中,在数据量较大时是难以实现的。因此,Pandas 提供了 chunksize #数,可以让我们分块读取大数据文件。[br][br] 代码清单 1:Python 访问数据库。
import pandas as pd [br][br] from sqlalchemy import create_engine [br][br] engine = create_engine ('mysql+pymysql://root:123456@127.0.0.1:3306/test?char se t= utf8')[br][br] sql = pd.read sql(* all gzdata',engine,chunksize = 10000)[br][br] 用 create_engine 建立连接,连接地址的意思依次为数据库格式(mysql)+程序名(pymysql)+账号密码@地址端口 /数据库名(test),最后指定编码为 utf8;[br][br] all_gzdata 是表名,engine 是连接数据的引擎,chunksize 指定每次读取 1 万条记录。这时候 sql 是一个容器,未真正读取数据。