机器学习之电子商务网站用户行为分析及服务推荐案例

news/2024/5/10 3:11:03/文章来源:https://blog.csdn.net/atuo200/article/details/106824477

项目概述

本项目案例根据某法律咨询服务网站的用户浏览记录,把用户划分为训练集的用户和测试集的用户,再根据找出相应用户的浏览记录划分为训练集数据和测试集数据。训练集用于后续构建用户物品矩阵,再根据用户物品矩阵构建物品相似度矩阵(根据杰卡德相似系数公式计算物品相似度);测试集用于根据用户浏览记录给用户推荐用户可能感兴趣的网页,在计算推荐结果准确度的时候需要根据测试集构建用户浏览字典(键:ip,值:url(列表))

案例的代码已经托管到码云仓库,可自行进行下载:https://gitee.com/atuo-200/recommend_code

案例用的的数据文件已经上传至百度云(单个文件超过100m push不上码云):
数据在:https://pan.baidu.com/s/1m8kfgOZSZNftye_hDjxmSA
提取码:g9t7

案例用到的数据文件中的字段含义如下:
在这里插入图片描述

案例代码

案例代码如下,代码上已经附上相应的注释

data_explore.py(用于数据探索,独立的一个模块)

import pandas as pd
import re"""数据探索模块"""data = pd.read_csv("data/all_gzdata.csv",encoding="gb18030")
#查看前5条数据
print(data.head())
#查看数据有哪些列
print(data.columns)
#查看有多少条数据
print(data.shape)
#查看网址类型
print(data["fullURLId"])
#网址类型统计:统计每种网址类型的数量
print("-----------------------")
urlId=['101','199','107','301','102','106','103']
count=[]
for pattern in urlId:index=[sum(re.search(pattern,i)!=None for i in data.loc[:,'fullURLId'].apply(str))][0]count.append(index)
urlId_count={'urlId':urlId,'count':count}
urlId_count=pd.DataFrame(urlId_count)print(urlId_count)
print("-----------------------")
# 用户点击次数统计
# pd.value_counts()  属于高级方法,返回一个 Series ,其索引值为唯一值,其值为频率,按其计数的降序排列
res = data.loc[:, 'realIP'].value_counts()  # 对 IP 进行统计:每个 IP 点击了多少次
res1 = res.value_counts()  # 对点击次数的 IP 统计:例如点击了 2 次的 ip 有多少个
IP_count = pd.DataFrame({'a_IP': list(res1.index), 'count': list(res1)})
IP_total = sum(IP_count.iloc[:, 1])#IP_count.ix[:, 'pers'] = [index / IP_total for index in IP_count.ix[:, 1]]
IP_count['pers'] = IP_count.iloc[:, 1] / sum(IP_count.iloc[:, 1])
print(IP_count.head())print("-----------------------")
#统计网页点击率的排名情况
res2=data.loc[:,'fullURL'].value_counts()
URL_Frame=pd.DataFrame({'a_URL':list(res2.index),'count':list(res2)})
print(URL_Frame.head())print("-----------------------")
#对网页的点击次数进行统计
res3=data.loc[:,'fullURL'].value_counts()
res4=res3.value_counts()
URL_count=pd.DataFrame({'a_URL':list(res4.index),'count':list(res4)})
URL_total=sum(URL_count.iloc[:,1])
URL_count.loc[:,'pers']=[index/URL_total for index in URL_count.iloc[:,1]]
print(URL_count.head())

data_process.py(用于数据预处理,对数据进行相应的抽取、删减、转换,构建用户物品列表)

import pandas as pddef data_process(file='data/all_gzdata.csv', encoding='GB18030'):data = pd.read_csv(file, encoding=encoding)# 去除非html网址;data = data.loc[data['fullURL'].str.contains('\.html'), :]# 去除咨询发布成功页面data = data[data['pageTitle'].str.contains('咨询发布成功')==False]# 去除中间类型网页(带有midques_关键字);data[~data['fullURL'].str.contains('midques_')]# 对带?的网址进行截取还原index1 = data['fullURL'].str.contains('\?')data.loc[index1, 'fullURL'] = data.loc[index1, 'fullURL'].str.replace('\?.*', '')# 去除律师的行为记录(通过法律快车-律师助手判断);data = data[data['pageTitle'].str.contains('法律快车-律师助手')==False]# 去除不是本网址的数据(网址不包含lawtime关键字)data = data[data['fullURL'].str.contains('lawtime')]# 去除重复数据(同一时间同一用户,访问相同网页)。data.drop_duplicates(inplace=True)# 对翻页网址进行还原index2 = data['fullURL'].str.contains('\d_\d+\.html')data.loc[index2, 'fullURL'] = data.loc[index2, 'fullURL'].str.replace('_\d+\.html', '.html')# 取出婚姻类型数据,取其中的ip和url字段index3 = data['fullURL'].str.contains('hunyin')data_hunyin = data.loc[index3, ['realIP', 'fullURL']]#再去重,有必要(翻页网址还原后又出现了重复数据)data_hunyin.drop_duplicates(inplace=True)#类型转换data_hunyin.loc[:, "realIP"] = data_hunyin.loc[:,"realIP"].apply(str)return data_hunyin

data_split.py(导入数据预处理后的数据(用户物品列表),用于数据集的划分)

from data_process import data_process
from random import sample
data = data_process()   # 导入经过清洗后的婚姻数据集def trainTestSplit(data=data, n=2):ipCount = data['realIP'].value_counts()      # 统计每个用户的网页浏览数# 找出浏览网页数在2次以上的用户IP# 为什么要删除只有一次浏览记录的用户记录?因为该用户如果用于测试集不能验证推荐准确度,用于训练集无意义,这是增大计算成本reaIP = ipCount[ipCount > n].indexipTrain = sample(list(reaIP), int(len(reaIP)*0.8))       # 训练集用户(80%的ip用作训练训练集)ipTest = [i for i in list(reaIP) if i not in ipTrain]    # 测试集用户(20%的ip用作训练训练集)index_tr = [i in ipTrain for i in data['realIP']]   # 训练用户浏览记录索引,返回True或Falseindex_te = [i in ipTest for i in data['realIP']]    # 测试用户浏览记录索引,返回True或Falseprint(index_tr)dataTrain = data[index_tr]     # 训练集数据(后续用于构建用户物品矩阵)dataTest = data[index_te]      # 测试集数据(后续用于推荐)return dataTrain, dataTest

jaccard.py(计算杰卡德相似系数的公式封装)

import numpy as npdef jaccard_func(data=None):te = -(data-1)              # 将用户物品矩阵的值反转dot1 = np.dot(data.T, data)  # 任意两网址同时被浏览次数(交集)dot2 = np.dot(te.T, data)    # 任意两个网址中只有一个被浏览的次数dot3 = dot2.T+dot2          # 任意两个网址中至少一个被浏览的次数(并集)cor = dot1/(dot1+dot3)      # 根据杰卡德相似系数公式,计算杰卡德相似系数for i in range(len(cor)):   # 将对角线值处理为零cor[i, i] = 0return cor

main.py(程序的主入口)

from data_split import trainTestSplit
import pandas as pd
from jaccard import jaccard_funcdata_tr, data_te = trainTestSplit()
def main():# 取出训练集用户的IP与浏览网址ipTrain = list(set(data_tr['realIP']))urlTrain = list(set(data_tr['fullURL']))#构建用户物品矩阵构建te = pd.DataFrame(0, index=ipTrain, columns=urlTrain)for i in data_tr.index:te.loc[data_tr.loc[i, 'realIP'], data_tr.loc[i, 'fullURL']] = 1#构建物品相似度矩阵cor = jaccard_func(te)cor = pd.DataFrame(cor, index=urlTrain, columns=urlTrain)#构建测试集用户网址浏览字典ipTest = list(set(data_te['realIP']))print(len(ipTest))dic_te = {ip: list(data_te.loc[data_te['realIP'] == ip, 'fullURL']) for ip in ipTest}print(len(dic_te))#构建推荐矩阵#开始推荐,rem第一列为测试集用户IP,第二列为已浏览过网址,第三列为相应推荐网址,第四列为推荐是否有效rem = pd.DataFrame(index=range(len(data_te)), columns=['IP', 'url', 'rec', 'T/F'])rem['IP'] = list(data_te['realIP'])rem['url'] = list(data_te['fullURL'])for i in rem.index:if rem.loc[i, 'url'] in urlTrain:rem.loc[i, 'rec'] = urlTrain[cor.loc[rem.loc[i, 'url'], :].argmax()]         # 推荐的网址rem.loc[i, 'T/F'] = rem.loc[i, 'rec'] in dic_te[rem.loc[i, 'IP']]   # 判定推荐是否准确#计算推荐准确度,根据测试集用户网址浏览字典p_rec = sum(rem['T/F'] == True)/(len(rem) - sum(rem['T/F'] == 'NAN'))return p_recp_rec = main()
print(p_rec)

运行结果如下
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_853178.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

源码网站模板下载

需要的自费下载哦 有用 !! 超值 附上下载地址:https://download.csdn.net/download/qq_42312466/21762068

一步步教你为网站开发Android客户端

#友盟杯#一步步教你为网站开发Android客户端 楼主 发表于 2011-11-29 10:30:10|查看: 10907|回复: 225本帖最后由 liupeinye 于 2011-11-30 10:37 编辑 本文参与:友盟—安卓巴士Android开发原创教程大赛本文面向Android初级开发者,有一定的Java和Android…

倾情分享:Android 开发者们不要错过的网站宝藏~

从事 Android 开发多年,攒了很多宝贵网站,分享给大家。 涵盖了系统、API、语言、开发工具、以及各种官方学习平台,不求面面俱到,只求无私分享! 期望给各位 Android ROM 开发者、App 开发者带来最全最官方的学习资料&am…

如何在新浪云上传自己的网站(静态展示)

欢迎加入前端交流群交流知识获取视频资料:749539640 最近有小伙伴问我怎么在新浪云上传自己的本地页面;大家看教程吧! 第一步:肯定是去注册账号了(需要先注册微博账号,只能使用微博账号登录) 注册地址:点击…

网站引导功能实现

欢迎加入前端交流群交流知识获取视频资料:749539640 背景:发布了新网站,需要引导用户操作或者发布了新功能需要展示给用户 实现:借助driver.js 第三方类库实现 demo:样式如下图 实现方式:点击查看示例代码 …

网站发布

文章目录IIS简介网站发布发布网站到本地IIS简介 iis(Internet Information Services),译为互联网信息服务,由微软公司提出的基于运行windows的基本服务。现在IIS都内置在windows系统中一起发行。IIS意味着你能发布网页,并且有ASP&#xff08…

WEB网站与WEB应用程序的区别

WEB网站 每个页面(.ashx)生成一个独立的程序,一个页面出错不会对其他页面有影响没有命名空间,因为每个文件会生成一个dll文件,不会在文件内产生全名冲突网站中每个页面(aspx,ashx)都生成对应的程序集,名称是随机的,当…

常见的反爬虫技术有哪些?如何防止别人爬自己的网站?

搜索引擎可以通过爬虫抓取网页信息,同时也有很多企业通过爬虫获取其他平台的信息用于数据分析或者内容优化,但是对于自身网站有些页面或者信息并不希望被爬虫抓取,那我们如何来实现反爬虫技术呢?如何防止别人爬自己的网站呢&#…

研究生应该常去的网站

研究生应当常去的网站 1. 小木虫( http://emuch.net/ ) 推荐理由:里边有不少学术科研用得到的资料,且全部为免费的。 2. 国家自然科学基金( http://www.nsfc.gov.cn/Portal0/default40.htm ) 推荐理由&…

iOS开发学习的网站

----------------------------------------------------------------------------------------------------------------------------- 以下转自:http://blog.csdn.net/xietao3/article/details/9300583 http://forums.toucharcade.com/这个是大家公认的&#xff0c…

Foundation框架 - 快速创建跨平台的网站页面原型

转自 :http://ikeepu.com/bar/10417219 整个一周都在揪心的猫事中度过。从十月底到现在的这段日子里,倒是越发懂得珍惜每天中片刻的宁静时光。有时会怀疑家里是否有时空漩涡一类的东西,不然钟表怎么会走的那么快,一点儿也不愿停下…

web音乐系统 javaweb音乐网站 低仿网易云音乐网站项目 期末课设 课设项目

在一筹莫展的搞期末课设时,看到了这个up主的项目,简直是神仙下凡!!! 视频链接:https://www.bilibili.com/video/BV1i4411K7g4/?spm_id_from333.788.b_636f6d6d656e74.4 我进群之后有不会的,u…

模仿天猫,京东等购物网站的随屏滚动导航

首先把html基本代码写好&#xff0c; index.html页面 <!DOCTYPE html> <html> <head lang"en"><meta charset"UTF-8"><title>随屏滚动导航</title><link rel"stylesheet" href"./css/style.css&quo…

国内多家视频下载网站关闭:或为暂避风头

国内多家视频下载网站关闭&#xff1a;或为暂避风头 02013-04-27 08:02 | 来源&#xff1a;现代快报 视频下载网站 关闭 大中小人人影视关站页面(新浪科技配图) 昨天是第十三个世界知识产权日&#xff0c;它由世界知识产权组织从2001年开始设立。这一原本并不十分著名的主题日&…

【一文入门】Git常用命令集锦--分支操作和版本管理篇

前言 Git 是一种分布式版本控制系统&#xff0c;可以帮助团队协作开发、管理和维护代码&#xff0c;提高代码质量和效率&#xff0c;掌握常用版本管理命令可以帮助我们更好地管理代码变更和历史记录。下面我将介绍开发中常用的一些Git分支操作和版本管理命令 1 分支操作 1.1 …

Java开发者必去的技术网站

<script type"text/javascript">function StorePage(){ddocument;td.selection?(d.selection.type!None?d.selection.createRange().text:):(d.getSelection?d.getSelection():);void(keyitwindow.open(http://www.365key.com/storeit.aspx?tescape(d.titl…

大型互联网网站架构心得

大型互联网网站架构心得之一&#xff1a;分 转自 &#xff1a; 朱晔 ID&#xff1a;LoveCherry http://blog.csdn.net/LoveCherry/archive/2008/06/19/2564096.aspx 我们知道&#xff0c;对于一个大型网站来说&#xff0c;可伸缩性是非常重要的&#xff0c;怎么样在纵向和横向…

我国公布整治互联网低俗之风第二批曝光网站名单

2009-01-08 17:04:08 来源: 中新网(北京) 网友评论 843 条 点击查看 核心提示&#xff1a;中国互联网协会互联网违法和不良信息举报中心8日公布全国整治互联网低俗之风第二批曝光网站名单。 中新网1月8日电 中国互联网协会互联网违法和不良信息举报中心今日发布公告&#xff…

剖析SNS网站的现状,预测其发展趋势

-------导读------------1、SNS的由来和价值2、SNS区别与BBS和社区网站3、点评目前SNS网站的现状和价值取向4、SNS的盈利模式5、未来SNS的发展趋势 1、SNS的由来和价值 在谈SNS之前我们先认清一下SNS的几个概念&#xff1a; SNS定义&#xff1a;Social Network Software&#…

网站图片防盗链:初级策略

哪个站长也不想自己的带宽白白像流入黑洞一般&#xff0c;被盗链流量所淹没&#xff0c;所以大致采取一些方法&#xff0c;或多或少减少这种盗链成本&#xff0c;下面介绍一种初级策略&#xff1a; 1、我们先举了例子&#xff0c;下面的图片我是在blog中引用www.souapp.com&am…