零基础入门推荐系统 - 新闻推荐 - 实操2

news2024/11/16 11:28:49

内容导航:

  • 零基础入门推荐系统 - 新闻推荐 - 实操2
    • 比赛数据分析:
      • 用户属性分析:
        • 训练集和测试集中分别有多少用户?
        • 用户城市分布有什么规律?
        • 平均每个用户会点击多少个文章?
        • 点击来源与文章点击次数是否存在关联?
      • 用户行为分析:


零基础入门推荐系统 - 新闻推荐 - 实操2

比赛数据分析:

用户属性分析:

训练集和测试集中分别有多少用户?

def count_user_number(data): 
    number = len(data.user_id.unique())
    return number


print(count_user_number(train_clicks))
print(count_user_number(test_clicks))

在这里插入图片描述

  • 小结:

可以看出训练集中共有200000个用户, 测试集中共有50000个用户.

用户城市分布有什么规律?

对训练集和测试集分别对用户的城市进行柱形图绘制, 查看其特点.

test_clicks.groupby('click_country')['user_id'].nunique().sort_values(ascending=False)

在这里插入图片描述

发现测试集中用户主要都是城市1的. 因为数据差距太大, 我们把城市1的数据去除, 看一下其余城市的分布情况, 对齐进行可视化操作.

test_clicks.groupby('click_country')['user_id'].nunique().sort_values(ascending=False)[1:].plot(kind='bar')
plt.show()

在这里插入图片描述

同时, 看一下训练集的用户的城市分布情况:

train_clicks.groupby('click_country')['user_id'].nunique().sort_values(ascending=False)

在这里插入图片描述
同样的, 发现训练集和测试集用户的城市整体的分布差不多, 而且都是城市1的用户的数量远远大于其他城市用户的数量.

我们接下来看一下, 把城市1的数据去除, 看一下训练集其余城市的分布情况.

train_clicks.groupby('click_country')['user_id'].nunique().sort_values(ascending=False)[1:].plot(kind='bar')
plt.show()

在这里插入图片描述

  • 小结:

可以看出整体数据集的用户的城市主要分布在城市1, 城市10和城市11.

平均每个用户会点击多少个文章?

整体来看的话,

# 计算训练集中点击文章不重复数 
train_article_click_num = len(train_clicks.click_article_id.unique())
# 计算训练集中用户数
train_user_num = len(train_clicks.user_id.unique())
# 计算训练集中平均每个用户会点击多少个文章
train_avg_article_per_user = train_article_click_num / train_user_num 
train_avg_article_per_user

可以得到 0.15558的结果. 也就是说, 大多数用户点击文章偏少.

我们再来进一步看一下点击不同数量文章的用户数:

train_df = pd.DataFrame(train_clicks.groupby('user_id')['click_article_id'].nunique().reset_index())
train_df.groupby('click_article_id')['user_id'].nunique().sort_index()

在这里插入图片描述

train_df.groupby('click_article_id')['user_id'].nunique().sort_index().plot(kind='line')

在这里插入图片描述
因为整体用户点击数量超过50, 就基本是极少数用户了, 我们可以进一步分析一下大众用户的一个点击文章的一个分布.

train_df2 = pd.DataFrame(train_df.groupby('click_article_id')['user_id'].nunique().sort_index().head(50).reset_index())

plt.bar(train_df2.click_article_id, train_df2.user_id)
plt.show()

在这里插入图片描述

将上面关于该部分的代码进行函数封装, 相关函数如下:

# 编写计算每个用户平均点击文章数(绝对数)的函数
def avg_article_num_per_user(data): 
    # 计算数据集中点击文章不重复数 
    article_click_num = len(data.click_article_id.unique())
    # 计算数据集中用户数
    user_num = len(data.user_id.unique())
    # 计算数据集中平均每个用户会点击多少个文章
    avg_article_per_user = article_click_num / user_num 
    return avg_article_per_user


avg_article_num_per_user(train_clicks)
avg_article_num_per_user(test_clicks)

在这里插入图片描述

def plt_user_article_num(data): 
    df = pd.DataFrame(data.groupby('user_id')['click_article_id'].nunique().reset_index())
    print(df)
    plt.subplot(211)
    df.groupby('click_article_id')['user_id'].nunique().sort_index().plot(kind='line')
    plt.show()
    df2 = pd.DataFrame(df.groupby('click_article_id')['user_id'].nunique().sort_index().head(50).reset_index())
    plt.subplot(212)
    plt.bar(df2.click_article_id, df2.user_id)
    plt.show()


plt_user_article_num(test_clicks)

测试集绘制如下:

在这里插入图片描述
可以看出大部分用户点击文章数量处于2~10之间. 所以, 如何精准的给用户推送这相对精准的新闻也是事关重要的.

对于测试集来看, 整体用户点击文章数量分布一致, 但是测试集存在一部分大量的用户仅仅点击文章数量为1. 这也相对于训练集来说, 两者的不同.

综上来说, 数据集中大部分用户点击文章数量处于1~10之间. 训练集中用户最少的点击文章数是2, 而测试集里面用户最少的点击文章数是1.

点击来源与文章点击次数是否存在关联?

df = train_clicks.groupby('click_referrer_type')['click_article_id'].nunique().sort_index().reset_index() 
print(df)
plt.bar(df.click_referrer_type, df.click_article_id)

在这里插入图片描述
在这里插入图片描述

df = test_clicks.groupby('click_referrer_type')['click_article_id'].nunique().sort_index().reset_index() 
print(df)
plt.bar(df.click_referrer_type, df.click_article_id)

在这里插入图片描述
在这里插入图片描述

  • 小结

可以看出数据集中, 点击来源与文章点击次数存在一定的关系, 而且点击来源1, 点击来源2, 和点击来源5这三类文章点击次数是最多的, 用户点击文章次数也是最多的. 所以, 这三类的来源是用户着重关注的.

用户行为分析:

#为了更好的可视化,这里把时间进行归一化操作
from sklearn.preprocessing import MinMaxScaler
mm = MinMaxScaler()
user_click_merge['click_timestamp'] = mm.fit_transform(user_click_merge[['click_timestamp']])
user_click_merge['created_at_ts'] = mm.fit_transform(user_click_merge[['created_at_ts']])

user_click_merge = user_click_merge.sort_values('click_timestamp')

def mean_diff_time_func(df, col):
    df = pd.DataFrame(df, columns={col})
    df['time_shift1'] = df[col].shift(1).fillna(0)
    df['diff_time'] = abs(df[col] - df['time_shift1'])
    return df['diff_time'].mean()


# 点击时间差的平均值
mean_diff_click_time = user_click_merge.groupby('user_id')['click_timestamp', 'created_at_ts'].apply(lambda x: mean_diff_time_func(x, 'click_timestamp'))

plt.plot(sorted(mean_diff_click_time.values, reverse=True))

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【车载开发系列】UDS诊断---读取周期标识符($0x2A)

【车载开发系列】UDS诊断—读取周期标识符($0x2A) UDS诊断---读取周期标识符($0x2A)【车载开发系列】UDS诊断---读取周期标识符($0x2A)一.概念定义二.报文格式1)请求报文2)初始响应3…

[附源码]计算机毕业设计课程在线测评系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

打破信息壁垒,提升业务水平,纷享销客CRM带给木链科技不一样的体验

步入数字化时代,企业业务模式和员工工作方式日新月异,传统协作方式很显然已经难以适应当前的需求,企业亟需一种新的面向信息化的协作方式,以提高工作效率,提升业务水平。 这样的挑战也发生在工业互联网安全企业&#…

Oracle一次获取多个序列值

Oracle一次获取多个序列值SQL 语句一次获取多个序列值获取序列中的多个值connect by level 生成多行数据JDBC 一次获取多个序列值MyBatis 一次获取多个序列值SQL 语句一次获取多个序列值 获取序列中的多个值 创建序列 CREATE SEQUENCE test_user_seq;获取一个序列值 SELECT…

Linux系统(Centos 7)配置DNS客户端

配置DNS客户端 DNS 客户端的配置非常简单,假设本地首选DNS服务器的IP地址为192.168.10.1,备用DNS 服务器的IP地址为192.168.10.2,则 DNS客户端的设置如下。 配置Windows 客户端 打开“Intermet 协议(TCP/IP)”属性对话框&a…

8_3、Java基本语法之线程的生命周期与同步

一、线程的生命周期 JDK中用Thread.State类定义了线程的几种状态 要想实现多线程,必须在主线程中创建新的线程对象。Java语言使用Thread类 及其子类的对象来表示线程,在它的一个完整的生命周期中通常要经历如下的五种状态: 新建: …

基于ARIMA、SVM、随机森林销售的时间序列预测

如今DT(数据技术)时代,数据变得越来越重要,其核心应用“预测”也成为互联网行业以及产业变革的重要力量。最近我们被客户要求撰写关于销售时间序列预测的研究报告,包括一些图形和统计输出。对于零售行业来说&#xff0…

Elsevier(爱思唯尔)LaTex 模板详细说明

Elsevier 模板的使用 官方网站提供的 Latex Instructions,Elsevier 模板下载地址:elsarticle-template.zip [ 如果不了解文档类的作用,可以参考:documentclass ] Elsevier 提供了 3 种自定义的文档类: elsarticle…

大厂软件测试流程完整版

目 1.概述 1.1目的 有效的保证软件质量; 有效的制定不同测试类型(软件系统测试、音频主观性测试、Field Trial、专项测试、自动化测试、性能测试、用户体验测试)的软件测试计划; 按照计划进行测试,发现软件中存在…

Session | web应用的session机制、session的实现原理

目录 一:web应用的session机制 二:session的实现原理 一:web应用的session机制 (1)什么是会话? ①会话对应的英语单词:session ②用户打开浏览器,进行一系列操作,然后…

[附源码]计算机毕业设计楼盘销售管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

session,cookie,token详解

session,cookie,token详解 1.session 1.1 session的作用是什么 session的作用是用于保存每个用户的专用信息;当用户访问时,服务器都会为每个用户分配唯一的Session ID,而且当访问其他程序时可以从用户的session中取出该用户的数据为用户服务。…

将 Cpar 文件导入 2019 版的 Carsim 后,无法打开 video+plot 是什么问题?

大家在进行联合仿真的过程中,首先要将你的 Carsim 右上角的锁打开! 解锁之后要明确仿真动画(video)和图像(plot)只有在联合仿真运行完了之后才会有,这个时候需要点击 Simulink 模型界面那个绿色…

Elasticsearch 基本操作

👉 Elasticsearch 基本操作 💎 1  RESTful REST 指的是一组架构约束条件和原则。满足这些约束条件和原则的应用程序或设计就是 RESTful。Web 应用程序最重要的 REST 原则是,客户端和服务器之间的交互在请求之间是无状态的。从客户端到服务器…

基于改进量子粒子群算法的电力系统经济调度(Matlab代码实现)

💥💥💥💞💞💞欢迎来到本博客❤️❤️❤️💥💥💥 🎉作者研究:🏅🏅🏅本科计算机专业,研究生电气学硕…

【CUDA学习笔记】OneFlow公众号CUDA算子优化文章学习笔记

1 CUDA学习资料合集 【OneFlow】岁末年初,为你打包了一份技术合订本 2 GPU概念介绍 《GPU的硬件结构与执行原理 —— 开源100天,OneFlow送上“百天大礼包”:深度学习框架如何进行性能优化 》 2.1 内存模型 2.1.1 Bank介绍 《GPU硬件结构…

微信小程序开发笔记 进阶篇④——getPhoneNumber 获取用户手机号码(小程序云)

文章目录一、前言二、前端代码wxml三、前端代码js四、云函数五、程序流程一、前言 大部分微信小程序开发者都会有这样的需求:获取小程序用户的手机号码。但是,因为小程序用户的手机号码属于重要信息,为了安全,所以需要如下一系列较…

transforms的二十二个方法(transforms用法非常详细)

变换是常见的图像变换,其可以适应连接在一起的ComposeComposeCompose, 此外,还有torchvision.transforms.functionaltorchvision.transforms.functionaltorchvision.transforms.functional模块,功能转换可以对转换进行细粒度控制,…

Redis - 数据概念与操作

1.Redis数据类型 Redis存储的是key-value结构的数据,其中key是字符串类型,value有5种数据类型: (1)字符串 string 如:“hello,world” (2)列表 list 如:a b c d a &…

【Jmeter】接口测试工具常用配置

目录 一、简介 二、安装和配置 三、Jmeter常用组件 四、编写一个HTTP接口脚本 五、断言 一、简介 JMeter,一个100%的纯Java桌面应用,由Apache组织的开放源代码项目,它是接口功能、自动化、性 能测试的工具。具有高可扩展性、…