12.2 分析方法与过程
本案例的目标是对用户进行推荐,即以一定的方式将用户与物品(本书指网页)之间建立联系[21]。为了更好地帮助用户从海量的数据中快速发现感兴趣的网页,在目前相对单一的推荐系统上进行补充,采用协同过滤算法进行推荐,其推荐原理如图12-3所示。
由于用户访问网站的数据记录很多,如果对数据不进行分类处理,对所有记录直接采用推荐系统进行推荐,这样会存在以下问题。①数据量太大意味着物品数与用户数很多,在模型构建用户与物品的稀疏矩阵时,出现设备内存空间不够的情况,并且模型计算需要消耗大量的时间。②用户区别很大,不同的用户关注的信息不一样,因此,即使能够得到推荐结果,其推荐效果也会不好。为了避免出现上述问题,需要进行分类处理与分析,如图12-4所示。正常的情况下,需要对用户的兴趣爱好以及需求进行分类。因为在用户访问记录中,没有记录用户访问网页时间的长短,因此不容易判断用户兴趣爱好。因此,本文根据用户浏览的网页信息进行分类处理,主要采用以下方法处理:以用户浏览网页的类型进行分类,然后对每个类型中的内容进行推荐。
表12-2 用户访问记录表
数据详见:demo/data/7law.sql
图12-3 推荐系统原理图
图12-4 数据处理分析图
采用上述的分析方法与思路,结合本例的原始数据以及分析目标,可获得整个分析的流程图,如图12-5所示。其分析过程主要包含以下内容。
图12-5 智能推荐系统整理流程图
从系统中获取用户访问网站的原始记录。
对数据进行多维度分析,包括用户访问内容,流失用户分析以及用户分类等分析。
对数据进行预处理,包含数据去重、数据变换和数据分类等处理过程。
以用户访问html后缀的网页为关键条件,对数据进行处理。
对比多种推荐算法进行推荐,通过模型评价,得到比较好的智能推荐模型。通过模型对样本数据进行预测,获得推荐结果。
12.2.1 数据抽取
因为本例是以协同过滤算法为主导,其他的推荐算法为辅,而协同过滤算法的特性就是通过历史数据找出相似的用户或者网页。因此,在数据抽取的过程中,尽可能选择大量的数据,这样就能降低推荐结果的随机性,提高推荐结果的准确性,能更好地发掘长尾网页中用户感兴趣的网页。
以用户的访问时间为条件,选取3个月内(2015-02-01~2015-04-29)用户的访问数据作为原始数据集。每个地区的用户访问习惯以及兴趣爱好存在差异性,本例抽取广州地区的用户访问数据进行分析,其数据量总计有837450条记录,其中包括用户号、访问时间、来源网站、访问页面、页面标题、来源网页、标签、网页类别和关键词等属性。
虽然837450条记录对于当今科学的“大数据”的概念而言,并不是特别大的数据量,但是这个数据量对于配置比较低的电脑(尤其是笔记本电脑)还是颇有压力的。因此,本章的处理过程,真正地、初步地体现了用Python处理大数据的味道。
本章的处理过程是:建立数据库→导入数据→搭建Python的数据库操作环境→对数据进行分析→建立模型。其中,用到的开源数据库为MariaDB 10.0.17(网站https://mariadb.org/en/可下载并自行安装,是MySQL的一个分支)。安装数据库后导入本章的数据原始文件7law.sql,就成功地配置好了数据库平台。
而在Python中,Pandas库本身可以利用read_sql()函数来读取数据库,但是它依赖于SQLAlchemy库,而SQLAlchemy又依赖于PyMySQL,所以需要先安装SQLAlchemy再安装SQLAlchemy,这样就可以用Pandas对数据库中的数据进行快速而便捷的分析工作了。安装的方法参考本书的第2章,这里不再赘述。
安装完成后,可以通过Python连接到数据库。为了方便处理数据,我们利用了Pandas。但要注意,Pandas在读取数据(不管是之前的csv、Excel或者现在的sql),都是将全部数据读入内存中,因此在数据量较大时是难以实现的。幸运的是,Pandas也提供了chunksize参数,可以让我们分块读取大数据文件。代码如代码清单12-1所示。
代码清单12-1 Python访问数据库
import pandas as pd from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset= utf8') sql = pd.read_sql('all_gzdata', engine, chunksize = 10000) '''用create_engine建立连接,连接地址的意思依次为“数据库格式(mysql)+程序名(pymysql)+账号密 码@地址端口/数据库名(test)”,最后指定编码为utf8; all_gzdata是表名,engine是连接数据的引擎,chunksize指定每次读取1万条记录。这时候sql是一个容 器,未真正读取数据。 '''
代码详见:demo/code/sql_value_counts.py
12.2.2 数据探索分析
对原始数据中的网页类型、点击次数和网页排名等各个维度进行分布分析,获得其内在的规律。并通过验证数据,解释其出现的结果可能的原因。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论