1.1天池学习赛新人赛代码实现及解析
天池中代码已公开,本人重新实现一边并附解析,适合新手。
淘宝用户行为数据-探索性分析
①读取数据信息
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. 对训练数据进行简单分析 拿到数据集,先对整个数据集做个简要分析,比如数据量大小.每种 ...
- NLP学习实践天池新人赛打卡第一天
NLP学习实践天池新人赛打卡第一天 Task1 赛题理解 学习目标 赛题数据 数据标签 评测指标 数据读取 解题思路 Task1 赛题理解 赛题名称:零基础入门NLP之新闻文本分类 赛题目标:通过这道 ...
- python数据分析-杭州市地铁站人流量【数据源---阿里云天池新人赛】
python数据分析-杭州市地铁站人流量[数据源-阿里云天池新人赛] 前言 天池新人实战赛是针对数据新人开设的实战练习专场,以经典赛题作为学习场景,提供详尽入门教程,手把手教你学习数据挖掘.天池希望新 ...
- 天池学习赛:工业蒸汽量预测5——特征优化
上一篇<天池学习赛:工业蒸汽量预测4--模型验证> 目录 1 特征优化的方法 1.1 合成特征 1.2 特征变换 1.3 用决策树创造新特征 1.4 特征组合 2 赛题特征优化代码 1 特 ...
- 天池学习赛:工业蒸汽量预测4——模型验证
上一篇<天池学习赛:工业蒸汽量预测3--模型训练>中已经是使用了几种机器学习的模型,接下来将介绍一些模型的评价方法. 目录 1 模型评估的方法 2 模型调参 3 赛题模型验证与调参 3.1 ...
- 天池学习赛:工业蒸汽量预测2——特征工程
上一篇<天池学习赛:工业蒸汽量预测1--数据探索> 目录 1.特征工程 1.1 预处理 1.2 特征处理 1.3 特征降维 1.3.1 特征选择 1.3.2 线性降维 2.赛题代码 3 结 ...
- 天池学习赛:工业蒸汽量预测1——数据探索
目录 0.赛题介绍 1.数据分析知识 2.代码实现 0.赛题介绍 火力发电的基本原理是:燃料在燃烧时加热水生成蒸汽,蒸汽压力推动汽轮机旋转,然后汽轮机带动发电机旋转,产生电能.在这一系列的能量转化中, ...
- 阿里云天池学习赛-零基础入门数据分析-学术前沿趋势分析(task1)
阿里云天池学习赛零基础入门数据分析-学术前沿趋势分析 前言 一.赛题描述及数据说明 1:数据集的格式如下: 2:数据集格式举例: 二.task1论文数量统计(数据统计任务):统计2019年全年,计算机 ...
- 阿里天池学习赛-金融风控-贷款违约预测
阿里天池学习赛-金融风控-贷款违约预测 1 赛题理解 1.1 赛题数据 1.2 评测标准 2 探索性分析(EDA) 2.1 初窥数据 2.2 查看缺失值占比 2.3 数值型变量 2.3.1 数据分布 ...
最新文章
- 学习canvas 过程中的几点总结
- 阿帕奇搭建文件服务器,关于LINUX文件服务器简单搭建---NFS与APACHE服务
- 深度探索C++ 对象模型(7)-Data member的布局(无继承、继承无多态、继承多态、多层继承)
- 第一百二十九天 how can I坚持
- java中File的使用
- cad图标注释大全_CAD源泉插件快捷键使用教程(全集)
- 设计模式 里氏替换原则
- Java-常见的工具类-字符串
- python的opencv库_python环境下安装opencv库的方法
- TimeSpan asp.net中时间的运算
- 多智能体强化学习(二) MAPPO算法详解
- 深度学习之图像分类(七)--ResNet网络结构
- 多元函数微分学的几何应用
- css radial-gradient绘制渐变背景
- 培训三天敏捷我懂了这些
- 身高体重排序-华为OD
- java程序计算鸡兔同笼_.请编写一个Java程序,能够计算鸡兔同笼问题,已知笼中共有9个头和26只脚,要求计算出该笼中有几只兔子几...
- 华农acm:scau9505 射穿多少
- python实现工具exe自动化
- 学会使用debug模式调试代码
热门文章
- java详细学习路线及路线图
- ZPPFM 支付平台资金管理:在支付宝开放平台创建应用查询支付宝商家账户余额
- 微信小程序springboot服装企业人事管理系统
- linux学习路线-韦东山:史上最全嵌入式Linux学习路线图
- 使用java开发MQTT客户端接收消息
- 华为防火墙查看日志命令_(完整word版)华为USG防火墙运维命令大全,推荐文档
- 【JAVA】Java的boolean 和 int互相转换 ——Java的true、false和1、0之间的相互转化
- Leetcode 第152场周赛5174:健身计划评估
- 鸿蒙os将用在哪款机型,4月份正式开始,鸿蒙OS即将推送,14款荣耀机型在列,太感动了!...
- 实现设置上月、本月电表读数,显示上月、本月电表读数,计算并显示本月用电数。