本项目测试数据来源于搜狗实验室。搜狗实验室提供约一个月的搜狗搜索引擎的部分网页查询需求及用户单击情况的网页查询日志数据集合。该数据共分成三部分:迷你版(样例数据,376 KB)、精简版(一天数据,63 MB)和完整版(1.9 GB)。本书使用精简版数据进行分析演示。
将随书附赠的测试数据压缩包解压后,使用notepad++工具打开其中的文件SogouQ.reduced,前10条数据显示如图3-1所示。
图3-1 精简版测试数据前10条
数据字段从左到右分别为:访问时间、用户ID、搜索关键词、结果URL在返回结果中的排名、用户单击的顺序号、用户单击的URL。其中,用户ID是根据用户使用浏览器访问搜索引擎时的Cookie信息自动赋值的,即使用同一浏览器输入的不同查询对应同一个用户ID。
在实际生产环境中,上述数据存放于服务器的日志文件中(可能有多台服务器多个日志文件,本书以两台服务器,每台服务器中有一个日志文件为应用场景进行讲解),用于记录用户的搜索行为。日志文件中数据的产生场景描述如下:
(1)用户在搜索引擎网页中输入搜索词并单击搜索按钮。
(2)网页显示出适合搜索结果的多个网页链接,并按照相关性及网页权重进行排名显示。
(3)用户每单击一次网页链接,服务器就在日志文件中添加一条用户行为数据。
上述行为数据对应的数据库表字段设计如表3-1所示,后续将按照该表的设计进行数据存储与分析。
表3-1 数据库表的字段及其含义
为什么要进行数据预处理?
对测试数据进行预处理,操作步骤如下:
01 单击Notepad++工具栏的【显示所有字符】按钮,将数据文件中的空格与Tab制表符等特殊字符显示出来,如图3-2所示。
图3-2 显示数据的特殊字符
数据文件中显示的横向箭头代表Tab制表符(\t),垂直居中的点号代表空格,LF代表回车符(\n)。可以看到,该数据文件中的字段分隔符既有制表符又有空格。
02 将数据文件SogouQ.reduced的编码改为UTF-8,然后保存。
03 将文件SogouQ.reduced上传到Linux服务器。
04 进入数据文件所在目录,执行以下命令,将文件中的制表符和空格全部替换为英文逗号:
$ sed -i "s/\t/,/g" SogouQ.reduced $ sed -i "s/ /,/g" SogouQ.reduced
替换后的数据前10条如图3-3所示。
图3-3 替换特殊字符后的数据