天池中代码已公开,本人重新实现一边并附解析,适合新手。

淘宝用户行为数据-探索性分析

①读取数据信息

import pandas as pd
import warnings
warnings.filterwarnings("ignore")
df1=pd.read_csv('E:\\数据\\新人赛\\tianchi_mobile_recommend_train_item.csv')
df0=pd.read_csv('E:\\数据\\新人赛\\tianchi_mobile_recommend_train_user.csv')
df0.head()  #查看数据前5条,大体浏览数据。数据共有6列。

②查看数据信息,并规范数据

df0.info(null_counts=True)  #由于数据较多,参数中设置null_counts=True可以完整显示空值情况。这里可以看到user_geohash列数据存在空值。

df0.drop_duplicates(inplace=True)      #删除数据中的重复值,参数inplace=True在原表修改
df0=df0.drop(['user_geohash'],axis=1)   #直接删除user_geohash列

df0.info(null_counts=True)#再次查看数据信息

③数据一致性转换

beh_type={1:'pv',2:'favor',3:'cart',4:'buy'}  # 建立一个字典。分别以1,2,3,4代表点击,收藏,加入购物车,购买

def set_beh_type(x):
    return beh_type[x]
df0['behavior_type']=df0['behavior_type'].apply(set_beh_type) #将behavior_type一列中的数字转为字典中字符串内容

df0['date']=df0['time'].apply(lambda x:x.split(' ')[0])
df0['time']=df0['time'].apply(lambda x:x.split(' ')[1])  #重新创建两列将时间与日期分离

④分析用户行为

beh_count=df0['behavior_type'].value_counts()
beh_count   #分别查看四种行为的人数

# 从点击到收藏/加购的转化率为 7.6%
print("点击-->购物车+收藏(转化率):",(beh_count['cart']+beh_count['favor'])/beh_count['pv'])

# 从点击到购买的转化率仅为 1.4%
print("点击-->购买(转化率):",beh_count['buy']/beh_count['pv'])

# 分析平台用户使用情况
# 有过购买行为的用户占总用户数的比例为88.86%
buy_count=df0[df0['behavior_type']=='buy']
user_count=df0.drop_duplicates('user_id').count()
(buy_count.drop_duplicates('user_id').count()/user_count)[:1]

# 用户的在这一个月的时间内复购率为91.44%
re_buycount=buy_count.groupby('user_id').count()
(re_buycount[re_buycount['behavior_type']>=2].count()/buy_count.drop_duplicates('user_id').count())[:1]

⑤用户行为可视化

import matplotlib.pyplot as plt
plt.figure(figsize=(12,12))
plt.rcParams['font.sans-serif']=['SimHei']

pv_df=df0[df0['behavior_type']=='pv'].groupby('date').count().iloc[:,:1].rename(columns={'user_id':'count_pv'},inplace=False)#点击量

user_df=df0[df0['behavior_type']=='pv'].groupby(['date','user_id']).count().iloc[:,:1].reset_index()

user_df=user_df.groupby('date').count().iloc[:,:1].rename(columns={'user_id':'count_uv'},inplace=False)

pv_df.plot(kind='line',xticks=range(0,31),title='每日访问量',rot=90,use_index=True)   # rot逆时针旋转
user_df.plot(kind='line',title='独立访问量',xticks=range(0,31),rot=90,use_index=True)

# 用户日活跃时间段
plt.figure(figsize=(12,12))
dpv=df0[df0['behavior_type']=='pv'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'pv'},inplace=False)
dcart=df0[df0['behavior_type']=='cart'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'cart'},inplace=False)
dfavor=df0[df0['behavior_type']=='favor'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'favor'},inplace=False)
dbuy=df0[df0['behavior_type']=='buy'].groupby('time').count().iloc[:,:1].rename(columns={'user_id':'buy'},inplace=False)
daily_df=pd.concat([dcart,dfavor,dbuy],axis=1)
daily_df.plot(kind='line',use_index = True,xticks=range(0,25),rot=90)
dpv.plot(kind='line',use_index = True,xticks=range(0,25),rot=90)
plt.show()

⑥使用RFM模型分析用户价值
# RFM模型的介绍https://www.zhihu.com/question/49439948?sort=created
# 先确定R,F值如何计算(根据业务知识),由于这里缺少金额值,所以不计算Mdf0_buy=df0[df0['behavior_type']=='buy']
df0_buy['date']=df0_buy['date'].apply(pd.to_datetime) #将数据转化为datetime格式
df0_buy.head()

#计算R值
df0_buyr=df0_buy[['user_id','date']]
r=df0_buyr.groupby('user_id').max().reset_index()  #计算最近一次购买的日期
r['R']=(pd.to_datetime('2014-12-19')-r['date']).dt.days   #计算最近一次购买的日期与12月19日相差天数
r.head()

# 计算F值(购买频率)
f=df0_buyr.groupby('user_id').count().reset_index().rename(columns={"date":"F"},inplace=False)
f.head()

# 按照设定的值对R和F进行分箱
rf['R_score'] = pd.cut(rf['R'],bins = [0,5,9,18,31],labels=[4,3,2,1],right=True).astype(float)
rf['F_score'] = pd.cut(rf['F'],bins = [0,1,2,3,82],labels=[1,2,3,4],right=True).astype(float)
rf['R>mean?']=(rf['R_score']>rf['R_score'].mean())*1
rf['F>mean?']=(rf['F_score']>rf['F_score'].mean())*1
rf.head()

rf['user_type']=rf['R>mean?']*10+rf['F>mean?']
def set_value(x):
    value_set={11:"重要价值用户",10:"重要发展用户",1:"重要保持用户",0:"重要挽留用户"}
    return value_set[x]
rf['user_type']=rf['user_type'].apply(set_value)
user_type=rf['user_type'].value_counts().reset_index()
user_type.head()

1.1天池学习赛新人赛代码实现及解析相关推荐

  1. 天池新人赛之新浪微博互动预测

    最近参加了天池上的新人赛,把比赛的流程走了一遍,收获挺大.现把比赛思路简单记录一下,欢迎大家一起来讨论交流. 1. 对训练数据进行简单分析 拿到数据集,先对整个数据集做个简要分析,比如数据量大小.每种 ...

  2. NLP学习实践天池新人赛打卡第一天

    NLP学习实践天池新人赛打卡第一天 Task1 赛题理解 学习目标 赛题数据 数据标签 评测指标 数据读取 解题思路 Task1 赛题理解 赛题名称:零基础入门NLP之新闻文本分类 赛题目标:通过这道 ...

  3. python数据分析-杭州市地铁站人流量【数据源---阿里云天池新人赛】

    python数据分析-杭州市地铁站人流量[数据源-阿里云天池新人赛] 前言 天池新人实战赛是针对数据新人开设的实战练习专场,以经典赛题作为学习场景,提供详尽入门教程,手把手教你学习数据挖掘.天池希望新 ...

  4. 天池学习赛:工业蒸汽量预测5——特征优化

    上一篇<天池学习赛:工业蒸汽量预测4--模型验证> 目录 1 特征优化的方法 1.1 合成特征 1.2 特征变换 1.3 用决策树创造新特征 1.4 特征组合 2 赛题特征优化代码 1 特 ...

  5. 天池学习赛:工业蒸汽量预测4——模型验证

    上一篇<天池学习赛:工业蒸汽量预测3--模型训练>中已经是使用了几种机器学习的模型,接下来将介绍一些模型的评价方法. 目录 1 模型评估的方法 2 模型调参 3 赛题模型验证与调参 3.1 ...

  6. 天池学习赛:工业蒸汽量预测2——特征工程

    上一篇<天池学习赛:工业蒸汽量预测1--数据探索> 目录 1.特征工程 1.1 预处理 1.2 特征处理 1.3 特征降维 1.3.1 特征选择 1.3.2 线性降维 2.赛题代码 3 结 ...

  7. 天池学习赛:工业蒸汽量预测1——数据探索

    目录 0.赛题介绍 1.数据分析知识 2.代码实现 0.赛题介绍 火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能.在这一系列的能量转化中, ...

  8. 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)

    阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...

  9. 阿里天池学习赛-金融风控-贷款违约预测

    阿里天池学习赛-金融风控-贷款违约预测 1 赛题理解 1.1 赛题数据 1.2 评测标准 2 探索性分析(EDA) 2.1 初窥数据 2.2 查看缺失值占比 2.3 数值型变量 2.3.1 数据分布 ...

最新文章

  1. 学习canvas 过程中的几点总结
  2. 阿帕奇搭建文件服务器,关于LINUX文件服务器简单搭建---NFS与APACHE服务
  3. 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)
  4. 第一百二十九天 how can I坚持
  5. java中File的使用
  6. cad图标注释大全_CAD源泉插件快捷键使用教程(全集)
  7. 设计模式 里氏替换原则
  8. Java-常见的工具类-字符串
  9. python的opencv库_python环境下安装opencv库的方法
  10. TimeSpan asp.net中时间的运算
  11. 多智能体强化学习(二) MAPPO算法详解
  12. 深度学习之图像分类(七)--ResNet网络结构
  13. 多元函数微分学的几何应用
  14. css radial-gradient绘制渐变背景
  15. 培训三天敏捷我懂了这些
  16. 身高体重排序-华为OD
  17. java程序计算鸡兔同笼_.请编写一个Java程序,能够计算鸡兔同笼问题,已知笼中共有9个头和26只脚,要求计算出该笼中有几只兔子几...
  18. 华农acm:scau9505 射穿多少
  19. python实现工具exe自动化
  20. 学会使用debug模式调试代码

热门文章

  1. java详细学习路线及路线图
  2. ZPPFM 支付平台资金管理:在支付宝开放平台创建应用查询支付宝商家账户余额
  3. 微信小程序springboot服装企业人事管理系统
  4. linux学习路线-韦东山:史上最全嵌入式Linux学习路线图
  5. 使用java开发MQTT客户端接收消息
  6. 华为防火墙查看日志命令_(完整word版)华为USG防火墙运维命令大全,推荐文档
  7. 【JAVA】Java的boolean 和 int互相转换 ——Java的true、false和1、0之间的相互转化
  8. Leetcode 第152场周赛5174:健身计划评估
  9. 鸿蒙os将用在哪款机型,4月份正式开始,鸿蒙OS即将推送,14款荣耀机型在列,太感动了!...
  10. 实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。