[打卡] 新闻推荐预测

  • 任务1:比赛报名与数据读取
    • 步骤1:在报名比赛
    • 步骤2:下载比赛数据集,DataA1121.md内为文件链接。
    • 步骤3:理解文件逻辑,并使用Pandas读取数据集。
%matplotlib inline
import pandas as pd
import numpy as np

import matplotlib.pyplot as plt
import seaborn as sns
plt.rc('font', family='SimHei', size=13)

import os,gc,re,warnings,sys
warnings.filterwarnings("ignore")
  • 任务2:比赛数据分析
    • 步骤1:用户属性分析,使用可视化图表分析以下内容
      • 训练集和测试集中分别有多少用户?
      • 用户城市分布有什么规律?
      • 平均每个用户会点击多少个文章?
      • 点击来源与文章点击次数是否存在关联?
    • 步骤2:用户行为分析,使用可视化图表分析以下内容
      • 用户点击行为从时间戳上,能够判断连续点击?
      • 用户在查看文章时,文章的之间是否存在相似性?
      • 用户在查看文章时,点击来源和文章类型是否存在关联?
    • 步骤3:文章内容分析,使用可视化图表分析以下内容
      • 文章字数与点击次数是否存在关联
      • 文章嵌入的向量是否可以用来计算文章相似度,尝试聚类并进行降维可视化
      • 文章创建的时间与文章点击的时间是否存在关联?
    • 参考资料:零基础入门推荐系统【数据分析】Task2-天池实验室-实时在线的数据分析协作工具,享受免费计算资源

你可以自己撰写代码,完成自己的数据分析,如下是一些分析结论样例:

trn_click = pd.read_csv('train_click_log.csv')
#trn_click = pd.read_csv(path+'train_click_log.csv', names=['user_id','item_id','click_time','click_environment','click_deviceGroup','click_os','click_country','click_region','click_referrer_type'])
item_df = pd.read_csv('articles.csv')
item_df = item_df.rename(columns={'article_id': 'click_article_id'})  #重命名,方便后续match
item_emb_df = pd.read_csv('articles_emb.csv')

#####test
tst_click = pd.read_csv('testA_click_log.csv')
print('读取数据完成!')
# 对每个用户的点击时间戳进行排序
trn_click['rank'] = trn_click.groupby(['user_id'])['click_timestamp'].rank(ascending=False).astype(int)
tst_click['rank'] = tst_click.groupby(['user_id'])['click_timestamp'].rank(ascending=False).astype(int)
#计算用户点击文章的次数,并添加新的一列count
trn_click['click_cnts'] = trn_click.groupby(['user_id'])['click_timestamp'].transform('count')
tst_click['click_cnts'] = tst_click.groupby(['user_id'])['click_timestamp'].transform('count')

用户点击日志文件_训练集

trn_click = trn_click.merge(item_df, how='left', on=['click_article_id'])
trn_click.head()

[打卡] 新闻推荐预测_第1张图片

#用户点击日志信息
trn_click.info 

[打卡] 新闻推荐预测_第2张图片

 

trn_click.describe()

[打卡] 新闻推荐预测_第3张图片

#训练集中的用户数量为20w
trn_click.user_id.nunique()
#20

 

#训练集中的用户数量为20w
trn_click.groupby('user_id')['click_article_id'].count().min()  # 训练集里面每个用户至少点击了两篇文章
plt.figure()
plt.figure(figsize=(15, 20))
i = 1
for col in ['click_article_id', 'click_timestamp', 'click_environment', 'click_deviceGroup', 'click_os', 'click_country', 
            'click_region', 'click_referrer_type', 'rank', 'click_cnts']:
    plot_envs = plt.subplot(5, 2, i)
    i += 1
    v = trn_click[col].value_counts().reset_index()[:10]
    fig = sns.barplot(x=v['index'], y=v[col])
    for item in fig.get_xticklabels():
        item.set_rotation(90)
    plt.title(col)
plt.tight_layout()
plt.show()

[打卡] 新闻推荐预测_第4张图片

注:此处click_cnts直方图表示的是每篇文章对应用户的点击次数累计图

也可以以用户角度分析,画出每个用户点击文章次数的直方图

 

你可能感兴趣的:(python,numpy,pandas)