第十一章——电子商务网站用户行为分析及服务推荐

本文通过Python访问数据库,对电子商务网站用户行为进行分析,包括网页类型统计、知识类型内部统计、异常数据检查等。数据主要来自法律咨询服务网站,详细分析了不同页面的访问情况,并对用户浏览次数进行了分布分析。最后,文章介绍了如何构建模型并计算推荐服务的准确率、召回率和F1指标。
摘要由CSDN通过智能技术生成

 前言:代码来源于python数据分析与挖掘实战(第2版)代码老旧,有些微更改

mysql版本是5.7.26

在mysql文件下找到my.ini文件,在mysqld下加入

max_allowed_packet = 640M

 用管理员身份打开命令提示符,重启mysql

net stop mysql

net start mysql

检查是否可以

在navicat下建test库,右键test,运行sql文件

导入sql文件,点击开始,运行无错误即可

运行有错误应该是mysql版本问题,8.0版本下会错误,其他版本没试过,建议在上面的版本下运行。 

代码一:python访问数据库

import pandas as pd
from sqlalchemy import create_engine

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

代码二:网页类型统计

counts = [ i['fullURLId'].value_counts() for i in sql] #按次10000存取,逐块统计
counts = counts.copy()
counts = pd.concat(counts).groupby(level=0).sum() #合并统计结果,把相同的统计项合并(即按index分组并求和)
counts = counts.reset_index() #重新设置index,将原来的index作为counts的一列。
counts.columns = ['index', 'num'] #重新设置列名,主要是第二列,默认为0
counts['type'] = counts['index'].str.extract('(\d{3})') #提取前三个数字作为类别id
counts_ = counts[['type', 'num']].groupby('type').sum() #按类别合并
counts_.sort_values('num', ascending = False) #降序排列
counts_['percentage'] = (counts_['num']/counts_['num'].sum())*100
print(counts_)

代码三:知识类型内部统计

#统计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()

engine = create_engine('mysql+pymysql://root:102011@localhost/test?charset=utf8')
sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)

counts2 = [count107(i) for i in sql] #逐块统计
counts2 = pd.concat(counts2).groupby(level=0).sum() #合并统计结果
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())*100
res107.reset_index(inplace = True)
print(res107)

代码四:统计带“?”的数据

def countquestion(i):  # 自定义统计函数
    j = i[['fullURLId']][i['fullURL'].str.contains('\?')].copy()  # 找出类别包含107的网址
    return j

#engine = create_engine('mysql+pymysql://root:123456@127.0.0.1:3306/test?charset=utf8')
sql = pd.read_sql('all_gzdata', engine, chunksize = 10000)

counts3 = [countquestion(i)['fullURLId'].value_counts() for i in sql]
counts3 = pd.concat(counts3).groupby(level=0).sum()
print(counts3)

# 求各个类型的占比并保存数据
df1 =  pd.DataFrame(counts3)
df1['perc'] = df1['fullURLId']/df1['fullURLId'].sum()*100
df1.sort_values(by='f
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值