《Python数据分析与挖掘实战》第12章——电子商务网站用户行为分析及服务推荐(协同推荐)数据探索分析篇①1 背景与目标分析2.数据探索分析

news/2024/5/21 19:38:36/文章来源:https://blog.csdn.net/marraybug/article/details/118226872

文章目录

  • 1 背景与目标分析

  • 2.数据探索分析

    • 2.1 网页类型分析

      • 2.1.1 统计各个网页类型所占的比例

      • 2.1.2 网页107类型中的内部统计

      • 2.1.3 统计带"?"问号网址类型统计

      • 2.1.4 统计199类型中的具体类型占比

      • 2.1.5 统计瞎逛用户中各个类型占比

    • 2.2 点击次数分析

      • 2.2.1 统计点击次数

      • 2.2.2 点击次数与用户数量关系

      • 2.2.3 统计1~7次数及7次以上的点击数

      • 2.2.4 浏览一次的用户行为分析

    • 2.3 网页排名

      • 2.3.1 网页点击率排名表

      • 2.3.2 获取网页点击排名数筛选出点击次数>50的有html结尾的网址

      • 2.3.3 翻页网页统计,对浏览网页翻页的情况进行统计

《Python数据分析与挖掘实战》的实战部分的第12章的数据——《电子商务网站用户行为分析及服务推荐》。

用一种方法解决问题,然后再结合别人的分析思路,优化自己的解决方案。(sql数据可能导入不全)

旨在补充原文中的细节代码,并给出文中涉及到的内容的完整代码。

在作者所给代码的基础上增加的内容包括:

1)原书中所分析的内容中缺少的代码

2)实现了协同过滤推荐结果展示;

3)实现了按照流行度推荐以及随机推荐;

1 背景与目标分析

  • 目标 分析某网站的用户访问记录,然后分析网页相关主题,分析用户网上访问行为;借助用户的访问记录,发现用户的访问习惯,对不同用户进行相关服务页面的推荐。

  • 实质:推荐算法。

2.数据探索分析

  • 读取数据

    import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:@localhost/wangye?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)'''用create_engine建立连接,连接地址的意思依次为“数据库格式(mysql)+程序名(pymysql)+账号密码@地址端口/数据库名(test)”,最后指定编码为utf8;all_gzdata是表名,engine是连接数据的引擎,chunksize指定每次读取1万条记录。这时候sql是一个容器,未真正读取数据。'''

2.1 网页类型分析

2.1.1 统计各个网页类型所占的比例

  • 统计fullURLId的数量

    counts = [ i['fullURLId'].value_counts() for i in sql] #按次10000存取,逐块统计counts = pd.concat(counts).groupby(level=0).sum() #合并统计结果,把相同的统计项合并(即按index分组并求和)counts = counts.reset_index() #重新设置index,将原来的index作为counts的一列。counts.columns = ['index', 'num'] #重新设置列名,主要是第二列,默认为0counts

在这里插入图片描述

  • 提取前3个数字做网页类别

    counts['type'] = counts['index'].str.extract('(\d{3})') #提取前三个数字作为类别idcounts

0903125628634.png\)

  • 按类别合并

    counts_ = counts[['type', 'num']].groupby('type').sum() #按类别合并counts_.sort_values('num', ascending = False) #降序排列counts_['percentage'] = (counts_['num']/counts_['num'].sum())*100counts_.to_excel('./tmp/1_1_3type_counts.xlsx')counts_

在这里插入图片描述

  • 各网页类型中小类别占比

    # 每个大类别下面小类别占比a = counts.set_index(['type'])b = counts.groupby('type').sum()print(b)c = pd.merge(a,b,left_index=True,right_index=True)print(c)

在这里插入图片描述 添加网页类型百分比

    c['persentage'] = (c['num_x']/c['num_y'])*100del c['num_y']c.rename(columns={'num_x':'num'},inplace=True)c

在这里插入图片描述

2.1.2 网页107类型中的内部统计

  • 统计各类型的数量

    import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:@localhost/wangye?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)#统计107类别的情况def count107(i): #自定义统计函数j = i[['fullURL']][i['fullURLId'].str.contains('107')].copy() #找出类别包含107的网址j['type'] = None #添加空列j['type'][j['fullURL'].str.contains('info/.+?/')] = u'知识首页' #info以/结尾j['type'][j['fullURL'].str.contains('info/.+?/.+?')] = u'知识列表页'j['type'][j['fullURL'].str.contains('/\d+?_*\d+?\.html')] = u'知识内容页'return j['type'].value_counts()counts2 = [count107(i) for i in sql] #逐块统计counts2 = pd.concat(counts2).groupby(level=0).sum() #合并统计结果counts2.to_excel('./tmp/1_4type107.xlsx')print(counts2)

在这里插入图片描述

  • 百分比

    #计算各个部分的占比res107 = pd.DataFrame(counts2)# res107.reset_index(inplace=True)res107.index.name= u'107类型'res107.rename(columns={'type':'num'},inplace=True)res107[u'百分比'] = (res107['num']/res107['num'].sum())*100res107.reset_index(inplace = True)#保存的表名命名格式为“1_1_k+此表功能名称”,此表表示生成的第3张表格,功能为type107,计算知识类型各个小类型所占比例res107.to_excel('1_1_3type107.xlsx')res107

在这里插入图片描述

2.1.3 统计带"?"问号网址类型统计

2.1.4 统计199类型中的具体类型占比

2.1.5 统计瞎逛用户中各个类型占比

2.2 点击次数分析

目标:点击次数分析:统计分析原始数据用户浏览网页次数(以“真实IP”区分)的情况

2.2.1 统计点击次数

    import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:@localhost/wangye?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)#统计点击次数c = [i['realIP'].value_counts() for i in sql] #分块统计各个IP的出现次数count3 = pd.concat(c).groupby(level = 0).sum() #合并统计结果,level=0表示按index分组count_df = pd.DataFrame(count3) #Series转为DataFramecount3=count_dfcount3[1]=1 # 添加1列全为1print(count3.head())

在这里插入图片描述

2.2.2 点击次数与用户数量关系

    realIP_sum=count3['realIP'].sum()print(realIP_sum)count3= count3.groupby('realIP').sum()##统计各个“不同点击次数”分别出现的次数# 也可以使用counts1_['realIP'].value_counts()功能print(count3.head())count3.columns=[u'用户数']count3.index.name = u'点击次数'print(count3.head())

在这里插入图片描述

  • 用户点击次数所占百分比

    count3[u'用户百分比'] = count3[u'用户数']/count3[u'用户数'].sum()*100count3[u'点击记录百分比'] = count3[u'用户数']*count3.index/realIP_sum*100count3.sort_index(inplace = True)c=count3.iloc[:7,]c=c.Tc

在这里插入图片描述

2.2.3 统计1~7次数及7次以上的点击数

    c.insert(0,u'总计',[count3[u'用户数'].sum(),100,100])c[u'7次以上'] = c.iloc[:,0]- c.iloc[:,1:].sum(1)c.to_excel('./tmp/2_2_2clickTimes.xlsx')c

在这里插入图片描述

  • 转置表格,并将所有输出保留两位小数

    d = c.Tformat = lambda x: '%.2f' % x  # 也可以使用d.round(4)d = d.applymap(format)d.T

在这里插入图片描述 从上表中可以看出大约80%的用户(不超过3次)只提供了大约30%的浏览量(几乎满足二八定律)。在数据中,点击次数最大值为23861次,对其进行分析,发现是律师的浏览信息(通过律师助手进行判断)。下表是对浏览次数达到7次以上的情况进行的分析,可以从中看出大部分用户浏览8到100次。

  • 分析浏览次数7次以上的用户

    # 分析浏览次数7次以上的数据times = counts1_.index[7:]bins = [7,100,1000,50000]cats = pd.cut(times,bins,right=True,labels=['8~100','101~1000','1000以上'])e = cats.value_counts()e = DataFrame(e, columns =[u'用户数'])e.index.name = u'点击次数'e[u'用户数'] = np.nane.ix[u'8~100',u'用户数'] = a.loc[8:100,:][u'用户数'].sum()e.ix['101~1000',u'用户数'] = a.loc[101:1000,:][u'用户数'].sum()e.ix['1000以上',u'用户数'] = a.loc[1001:,:][u'用户数'].sum()e.sort_values(by=u'用户数',ascending=False,inplace = True)e.reset_index(inplace=True) e

在这里插入图片描述

2.2.4 浏览一次的用户行为分析

    # 获取浏览一次的所有数据f = count_df[count_df['realIP']==1] # [i['realIP'].value_counts() for i in sql]del f[1]f.columns = [u'点击次数']f.index.name 

在这里插入图片描述

    import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:@localhost/wangye?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)# g = [pd.merge(f,i[['fullURLId','fullURL','realIP']],right_on = 'realIP',left_index=True,how ='left') for i in sql]g = [i[['fullURLId','fullURL','realIP']] for i in sql]g = pd.concat(g)h = pd.merge(f,g,right_on = 'realIP',left_index=True,how ='left')h.head()

在这里插入图片描述

  • 浏览一次的用户的网页类型ID分析

    # 浏览一次的用户的网页类型ID分析i = h['fullURLId'].value_counts()i = pd.DataFrame(i)print(i)i.rename(columns={'fullURLId':u'个数'},inplace=True)i.index.name = u'网页类型ID'i[u'百分比'] = i[u'个数']/i[u'个数'].sum()*100#保存的表名命名格式为“1_2_k此表功能名称”,此表表示生成的第2张表格,功能为typeID:浏览一次的用户的网页类型ID分析i.to_excel('./tmp/2_3_4typeID.xlsx')

在这里插入图片描述

  • 提取个数大一百的类型

    j=i[i[u'个数']>100]j.loc[u'其他',u'个数'] = i[i[u'个数']<=100][u'个数'].sum()j.loc[u'其他',u'百分比'] = i[i[u'个数']<100][u'百分比'].sum()j# 浏览一次的用户中浏览的网页类型ID

在这里插入图片描述 针对浏览次数为一次的用户进行分析,其结果如上图所示。其中,问题咨询页占比74%,知识页占比16%,而且这些记录基本上全是通过搜索引擎进人的。 由此可以猜测两种可能:

  1. 用户为流失用户,在问题咨询与知识页面上没有找到相关的需要。

  2. 用户找到其需要的信息,因此直接退出。综合这些情况,可以将这些点击一次的用户行为定义为网页的跳出率。为了降低网页的跳出率,需要对这些网页进行针对用户的个性化推荐,帮助用户发现其感兴趣或者需要的网页。

  • 用户点击1次所浏览网页统计(点击数大于100次的)

    # 点击1次用户浏览网页统计(点击数大于100次的)k = pd.DataFrame(h['fullURL'].value_counts())k.index.name = u'网址'k.columns = [u'点击数']m = k[k[u'点击数'] > 100]m.loc[u'其他',u'点击数'] = k[k[u'点击数']<=100][u'点击数'].sum()m[u'百分比'] = m[u'点击数']/k[u'点击数'].sum()#保存的表名命名格式为“1_2_k此表功能名称”,此表表示生成的第3张表格,功能为lookMorethan100:点击1次用户浏览网页统计(点击数大于100次的)m.to_excel('./tmp/2_3_5lookMorethan100.xlsx')m

在这里插入图片描述 结论:排名靠前的都是知识与咨询页面,因此可以猜测大量用户的关注都在知识或咨询页面上。

2.3 网页排名

2.3.1 网页点击率排名表

    import pandas as pdfrom sqlalchemy import create_engineengine = create_engine('mysql+pymysql://root:@localhost/wangye?charset=utf8')sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)# g = [pd.merge(f,i[['fullURLId','fullURL','realIP']],right_on = 'realIP',left_index=True,how ='left') for i in sql]def clickfreq(i): #自定义统计函数j = i[['fullURL','fullURLId','realIP']][i['fullURL'].str.contains('\.html')]return jcounts1 = [clickfreq(i) for i in sql] #counts1 = pd.concat(counts1)counts1_ = counts1['fullURL'].value_counts()counts1_ = pd.DataFrame(counts1_)counts1_.columns = [u'点击次数']counts1_.index.name = u'网址'a = counts1_.sort_values(u'点击次数',ascending=False).iloc[:20,:]a

在这里插入图片描述

2.3.2 获取网页点击排名数筛选出点击次数>50的有html结尾的网址

    b = counts1_.reset_index()c = b[b[u'点击次数']>50][b[u'网址'].str.contains('/\d+?_*\d+?\.html')]c.set_index(u'网址',inplace=True)c.sort_index(inplace = True)# savetosql(c, 'count355')# 并保存到数据库中c

在这里插入图片描述

2.3.3 翻页网页统计,对浏览网页翻页的情况进行统计

  • 获取网址中以http://与.html中间的主体部分,即去掉翻页的内容

    # 获取网址中以http://与.html中间的主体部分,即去掉翻页的内容,即去掉尾部"_d"import reimport numpy as nppattern = re.compile('http://(.*\d+?)_\w+_\w+\.html$|http://(.*\d+?)_\w+\.html$|http://(.*\w+?).html$',re.S)c['websitemain'] = np.nanfor i in range(len(c)):items = re.findall(pattern, c.index[i])if len(items)== 0:temp = np.nanelse:for j in items[0]:if j !='':temp = jc.iloc[i,1] = tempc

在这里插入图片描述

  • 获取所有网页主体的网页数

    d = c['websitemain'].value_counts()d = pd.DataFrame(d)d

在这里插入图片描述

  • 统计网页主体出现次数为不少于二次的,即存在翻页的网址

    # 统计网页主体出现次数为不少于二次的,即存在翻页的网址e = d[d['websitemain']>=2]e.columns=['Times']#记录某网页及子网页出现的次数e.index.name='websitemain'# 主网页e['num'] = np.arange(1,len(e)+1) f = pd.merge(c,e,left_on='websitemain',right_index=True,how='right')f.sort_index(inplace=True)f['per'] = np.nanf# 相同num的网页是拥有同一网页主体

在这里插入图片描述

  • 统计翻子页的点击率与上一页网页点击率的比重

    # 统计翻子页的点击率与上一页网页点击率的比重(注意:用此处这个方法对网页翻页后序号有10页及以上的合适def getper(x):x.sort_index(inplace=True) #必须先排序将网页xfor i in range(len(x)-1):x.iloc[i+1,-1] = x.iloc[i+1,0]/x.iloc[i,0]return x    result = pd.DataFrame([]) # 用一个空表格记录值for i in range(1,f['num'].max()+1):#count36['num'].max()+1k= getper(f[f['num'] == i])result = pd.concat([result,k])# 每次进行一次操作时
    f['Times'].value_counts() # 由统计结果看,只有一个主网址出现过10次及以上,该数据采用上述方法会出问题,因此,在结果中将其剔除后观察剩余数据

在这里插入图片描述

    flipPageResult = result[result['Times']<10]#保存的表名命名格式为“1_3_k此表功能名称”,是此小节生成的第1张表格,功能为flipPageResult:统计翻子页的点击率与上一页网页点击率的比重flipPageResult.to_excel('./tmp/3_flipPageResult.xlsx')flipPageResult

在这里插入图片描述

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

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

相关文章

《Python数据分析与挖掘实战》第12章——电子商务网站用户行为分析及服务推荐(协同推荐)数据探索分析篇①1 背景与目标分析2.数据探索分析

文章目录 1 背景与目标分析 2.数据探索分析 2.1 网页类型分析 2.1.1 统计各个网页类型所占的比例 2.1.2 网页107类型中的内部统计 2.1.3 统计带"?"问号网址类型统计 2.1.4 统计199类型中的具体类型占比 2.1.5 统计瞎逛用户中各个类型占比 2.2 点击次数分析 …

如何设置SharePoint 2013 的根网站集下的“更改此术语的目标页面”

起因&#xff1a; 首先看问题截图Figure 1&#xff0c;在术语驱动的页面中设置更改此术语的目标页面&#xff0c;会被警告“该URL 不指向某个页面”&#xff0c;原因是我所找到的这个目标页面是一个非aspx结尾的URL链接。 Figure 1无法更改此术语的目标页面 而整个需要添加目标…

一个网站大概多少钱_做一个网站到底要多少钱?

做一个网站要多少钱&#xff0c;我只能说这个太泛了&#xff0c;主要影响到价格因素的是网站的复杂度&#xff0c;例如&#xff0c;如果你只是单纯做个企业官网单纯的展示企业信息以及企业的产品信息&#xff0c;那价格就很低&#xff0c;如果你要做一个功能全面的线上商城或者…

css3网站代码 html5_如何成为HTML5开发高手?

现在随着各个企业和公司对于人才的需求&#xff0c;HTML5开发工程师岗位的HTML5已经不是单指HTML5本身了&#xff0c;而是泛指HTML5、CSS3、JavaScript等前端开发技术。零基础想要转行做HTML5开发工程师的朋友需要注意这一点&#xff0c;很多零基础的初学者在学习的时候都想要成…

什么时候用转发什么时候用重定向_网站建设中什么时候用H标签?

大家好&#xff0c;我是吉礻羊。网站建设后期H标签的全称为heading标签&#xff0c;它也是所有标签中分得最细的一种&#xff0c;一共有6种&#xff0c;分别从H1到H6&#xff0c;主要就是针对性地强调某个关键词。6种不同大小的标签&#xff0c;表示6种不同的重视程度。H1到H6表…

钓鱼网站有服务器吗,网络钓鱼网站也有客服了?!

窃取Office 365凭据的网络钓鱼网站添加了实时支持&#xff0c;以增加受害者上当的可能性。但事情并不总是按照网络罪犯的意图进行&#xff0c;他们的虚张声势被研究人员发现了。实时聊天支持在欺诈世界中并不是什么新鲜事&#xff0c;它在勒索软件业务中很受网络犯罪团体的欢迎…

荷露叮咚wp建站系列视频课程.3WordPress功能菜单介绍

安装后的WordPress在E:\xampp\apps\wordpress\htdocs(历史版本有在E:\xampp\htdocs目录下的情况)&#xff0c;将E:\xampp\apps\wordpress\htdocs目录下的wordpress文件夹拷至E:\xampp\htdocs目录也是可以的。 常用功能&#xff08;按常规操作先后顺序&#xff09;&#xff1a; …

必选项:你的网站易于阅读吗?

当我们设计网站时&#xff0c;我们在想什么&#xff1f;——设计引人注目吗&#xff1f;便于理解吗&#xff1f;有品牌关联吗&#xff1f;……其实最先需要思考的是&#xff0c;文字可以被容易阅读吗&#xff1f;微软估值高达340亿美元&#xff0c;拥有着一支由设计师、研究员、…

Java裸写爬虫技术,运用多线程技术,高效爬取某个医疗机构网站数据

最近喜欢上了数据的庞大的感觉&#xff0c;就爬取了一下某个医疗机构网站医疗数据&#xff0c;由于数据量庞大&#xff0c;只爬取了江西省的各个市的各个医院的各个科室的各个科室。中各种信息。其中用的持久层技术是hibernate框架&#xff0c;和用到一些ioc技术。话不多说&…

【标准文件免费下载】国家标准和行业标准 良心网站推荐

【标准文件免费下载】国家标准和行业标准 良心网站推荐一、写在前面的话二、 良心网站推荐&#xff0c;是重点啦&#xff01;其它几个下载标准的网站&#xff1a;查询标准过期/现行/废止状态 网站&#xff1a;三、小啊呜有话说叮嘟&#xff01;这里是小啊呜的学习课程资料整理。…

【最强白嫖指南】课代表来啦:35个免费宝藏网站,你居然还不知道?!

【最强白嫖指南】课代表来啦&#xff1a;35个免费宝藏网站&#xff0c;你居然还不知道&#xff1f;&#xff01;一、写在前面的话二、重磅&#xff01;35个免费宝藏网站分享1、 照片2、 图标3、 矢量图/免抠PNG/PSD模板4、 壁纸5、 视频6、 音频7、字体8、 PPT模板三、小啊呜有…

linux环境建站环境amp,CentOS6.5服务器配置建站环境详细流程

CentOS6.5服务器配置建站环境详细流程php以前的Win主机上挂了十几个WordPress网站&#xff0c;客户广泛反映后台操做已经慢到不行。因而我租了一台新的云主机&#xff0c;此次下决心要搞定Linux 主机了&#xff0c;一样的配置&#xff0c;Linux跑WordPress确定要快很多&#xf…

网站建设公司不挣钱的原因,精辟

2019独角兽企业重金招聘Python工程师标准>>> 先说说网站建设这行的特点&#xff1a;这行处于生态链的最下游&#xff0c;利润低&#xff0c;成本却高&#xff0c;而且还是每年升高&#xff0c;因为主要是人力成本&#xff0c;回款困难&#xff0c;还要求每月持续有新…

国外最流行的几个外包接活网站 简要介绍

国外主要外包接活站点&#xff1a; No.1 Freelancer.com &#xff08;旧称GAF – GetAFreelancer&#xff09;: 国外访问人数最多&#xff0c;更新速度最快的外包平台。详细介绍 No.2 Elance : 国外比较成熟的三大业务外包平台之一&#xff0c;外包项目类型以软件和网站为主。当…

学习中收藏的网站

2019独角兽企业重金招聘Python工程师标准>>> 1.linux目录的简介 http://www.linuxidc.com/Linux/2016-08/134701.htm 2.adminlte的简单教程 http://11140372.blog.51cto.com/11130372/1907097、 3.接口页面 www.eolinker.com 4.jpa的简单操作 http://www.cnblogs.co…

建设网站内链是网站优化的重要环节

首先要熟悉什么是网站内部链接&#xff08;也称内链&#xff09;&#xff1f;简单来说即是网站建设中各个页面的相互链接和引航。做好官网内链的优化建设&#xff0c;可以提升顾客的体验&#xff0c;提高公司站点的排名竞争力。内链的作用在网站优化公司中的地位是越来越高了。…

查询网站ip地址

查询网站ip地址 还在考试&#xff0c;越到考试越不想学习&#xff0c;考了两门嗨了两天&#xff0c;一字没看&#xff0c;有点空虚。感觉还是每天要看点东西&#xff0c;最近不是特别想搞算法这块&#xff0c;想搞点其它的&#xff0c;所以最近看看网络编程这块。也算是填补一…

微软正式发布Azure Storage上的静态网站

微软正式宣布了Azure Storage上的静态网站&#xff0c;提供了从托管在Azure Storage上的HTML、CSS和JavaScript文件提供内容的能力。静态网站包含内容固定的Web页面&#xff0c;同时仍然允许利用JavaScript等客户端代码来创建丰富的用户体验。 有了这个新功能&#xff0c;继用于…

常用网站地址

2019独角兽企业重金招聘Python工程师标准>>> 1、w3school 在线教程 http://www.w3school.com.cn/ 2、SuperSlide 特效展示banner图 http://www.superslide2.com/ 3、Git教程 - 廖雪峰的官方网站 https://www.liaoxuefeng.com/wiki/896043488029600 4、登录 - Apple …

使用HTTP构建一个网站

使用原生的HTTP API 我们构建这样的文件结构&#xff1a; var http require("http"); var fs require("fs"); var server http.createServer(function (req, res) {console.log("***"req.url"***");if (req.method "GET&qu…