返回介绍

12.2 分析方法与过程

发布于 2024-01-28 21:41:24 字数 3086 浏览 0 评论 0 收藏 0

本案例的目标是对用户进行推荐,即以一定的方式将用户与物品(本书指网页)之间建立联系[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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文