基于python分析广告投放转化情况
该数据为网上公开脱敏数据,从广告展示到最终付费转化的全过程。
文章目录
- 前言
- 一、提出问题
- 二、理解数据
- 三、清洗数据并建立模型
- 第一种
- 问题一,转化率是否与性别有关系?
- 问题二, 转化率是否与年龄段有关?
- 问题三, 转化率是否与爱好有关?
- 问题四, 展示次数、点击次数、咨询次数和付费次数的相关性怎样?
- 第二种
- 1.选择子集对应列
- 2.列名重命名
- 3.重复值处理
- 4.空值处理
- 5.一致化处理
- 6.排序
- 7.异常值处理-看看描述性统计
- 8.对兴趣列进行特征提取
- 9.对年龄进行特征提取
- 10.建立模型
- 四、结论
前言
数据来源:
kaggle
广告转化率、付费率、哪些广告转化率高,哪些特征的用户转化率高、哪些广告转化率高但付费率低,进而优化广告的投放策略。
数据分析流程步骤:
1.提出问题–>2.理解数据–>3.清洗数据并建立模型–>结论
一、提出问题
二、理解数据
三、清洗数据并建立模型
数据处理流程:
选择子集对应列–>列名重命名–>重复值处理–>空值处理–>一致化处理–>排序–>异常值处理–>特征工程–>建立模型
好的废话不多说,先上结果(这是第一种结果呈现的方式):
第一种
问题一,转化率是否与性别有关系?
问题二, 转化率是否与年龄段有关?
问题三, 转化率是否与爱好有关?
问题四, 展示次数、点击次数、咨询次数和付费次数的相关性怎样?
第二种
以下是第二种结果呈现的方式
1.选择子集对应列
import pandas as pddata = pd.read_csv(r'data.csv',sep=',',header='infer')
# 选择子集(对应列)
choose_column_name= data[['ad_id','age','gender','interest','Impressions','Clicks','Spent','Total_Conversion','Approved_Conversion']]
choose_column_name.head(10)
2.列名重命名
rename_column = {"ad_id" : "广告ID","age" : "年龄","gender" : "性别","interest" : "兴趣","Impressions" : "展示次数","Clicks" : "点击次数","Spent" : "花费","Total_Conversion" : "咨询次数","Approved_Conversion" : "付费次数",
}
choose_column_name.rename(columns = rename_column,inplace = True)
choose_column_name.head(10)
3.重复值处理
choose_column_name.drop_duplicates().count()
操作后没有发现由重复值。
4.空值处理
choose_column_name.isnull().count()
没有空值所以不需要处理
5.一致化处理
choose_column_name.dtypes
类型不用处理
6.排序
choose_column_name.sort_values(by ="花费",ascending = True)
对花费排序,没有发现异常值
7.异常值处理-看看描述性统计
choose_column_name.describe()
没有发现类似花费是负数等异常值
8.对兴趣列进行特征提取
interest_df = pd.DataFrame()
interest_df = pd.get_dummies(choose_column_name['兴趣'],prefix = 'interest')
interest_df.head()
choose_column_name = pd.concat([choose_column_name,interest_df],axis = 1)
choose_column_name.head()
9.对年龄进行特征提取
age_df = pd.DataFrame()
age_df = pd.get_dummies(choose_column_name['年龄'],prefix = 'Age')
age_df.head()
choose_column_name = pd.concat([choose_column_name,age_df],axis = 1)
choose_column_name.head()
10.建立模型
展示次数
# 建立模型
# 展示次数
# choose_column_name["展示次数"].sum()
"{0} {1} {2}".format("展现量:",choose_column_name["展示次数"].sum(),"(次)")
# 点击次数
# choose_column_name["点击次数"].sum()
"{0} {1} {2}".format("点击次数:",choose_column_name["点击次数"].sum(),"(次)")
# 咨询次数
# choose_column_name["咨询次数"].sum()
"{0} {1} {2}".format("咨询次数:",choose_column_name["咨询次数"].sum(),"(次)")
# 付费次数
# choose_column_name["付费次数"].sum()
"{0} {1:d} {2}".format("付费次数:",choose_column_name["付费次数"].sum(),"(次)")
# 获客成本
# choose_column_name["花费"].sum()
"{} {:n} {}".format("获客成本:",choose_column_name["花费"].sum(),"(美金)")
# 点击转化率
"{} {:%} {}".format("点击转化率:",choose_column_name["点击次数"].sum()/choose_column_name["展示次数"].sum(),"")
# 付费转化率
"{} {:%} {}".format("付费转化率:",choose_column_name["付费次数"].sum()/choose_column_name["咨询次数"].sum(),"")
choose_column_name_gender = choose_column_name.groupby('性别')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_gender
choose_column_name_gender['点击转化率'] = choose_column_name_gender['点击次数']/choose_column_name_gender['展示次数']
choose_column_name_gender['咨询转化率'] = choose_column_name_gender['咨询次数']/choose_column_name_gender['点击次数']
choose_column_name_gender['付费转化率'] = choose_column_name_gender['付费次数']/choose_column_name_gender['咨询次数']
choose_column_name_gender
转化率是否与性别有关系?
%matplotlib inline
from matplotlib import pyplot as pltax1 = plt.subplot(1,3,1)
ax2 = plt.subplot(1,3,2)
ax3 = plt.subplot(1,3,3)choose_column_name_gender.plot.bar(y='点击转化率',ax=ax1,figsize=(12,8),color=['#F8D800','#0396FF'])
choose_column_name_gender.plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF'])
choose_column_name_gender.plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF'])
ax1.set_xticklabels(choose_column_name_gender.index,rotation=0)
ax2.set_xticklabels(choose_column_name_gender.index,rotation=0)
ax3.set_xticklabels(choose_column_name_gender.index,rotation=0)
plt.show()
其中女性的点击转化率更高,男性的咨询转化率、付费转化率高于女性。
choose_column_name_gender.info()
choose_column_name_age = choose_column_name.groupby('年龄')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_age
-----------------------------
choose_column_name_age['点击转化率'] = choose_column_name_age['点击次数']/choose_column_name_age['展示次数']
choose_column_name_age['咨询转化率'] = choose_column_name_age['咨询次数']/choose_column_name_age['点击次数']
choose_column_name_age['付费转化率'] = choose_column_name_age['付费次数']/choose_column_name_age['咨询次数']
choose_column_name_age.sort_values(by = '付费转化率',ascending = False) #True
import matplotlib.pyplot as pltax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)choose_column_name_age.sort_values(by = '点击转化率',ascending = False).plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_age.sort_values(by = '咨询转化率',ascending = False).plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_age.sort_values(by = '付费转化率',ascending = False).plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])ax1.set_xticklabels(choose_column_name_age.sort_values(by = '点击转化率',ascending = False).index,rotation=0)
ax2.set_xticklabels(choose_column_name_age.sort_values(by = '咨询转化率',ascending = False).index,rotation=0)
ax3.set_xticklabels(choose_column_name_age.sort_values(by = '付费转化率',ascending = False).index,rotation=0)plt.show()
年龄段30-34点击转化率是最低的,但是咨询转化率和付费转化率是最高的。
年龄段30-34点击转化率是否与爱好有关?
# 那么年龄段30-34点击转化率是否与爱好有关?
import matplotlib.pyplot as plt
ax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)choose_column_name_nianqinren = choose_column_name[ choose_column_name['年龄'] == '30-34']
choose_column_name_nianqinren = choose_column_name_nianqinren.groupby('兴趣')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_nianqinren['点击转化率'] = choose_column_name_nianqinren['点击次数']/choose_column_name_nianqinren['展示次数']
choose_column_name_nianqinren['咨询转化率'] = choose_column_name_nianqinren['咨询次数']/choose_column_name_nianqinren['点击次数']
choose_column_name_nianqinren['付费转化率'] = choose_column_name_nianqinren['付费次数']/choose_column_name_nianqinren['咨询次数']
# 转化率后十的爱好
# choose_column_name_nianqinren.sort_values(by ="付费转化率",ascending = True).head(10)choose_column_name_nianqinren.sort_values(by=['点击转化率']).plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_nianqinren.sort_values(by=['咨询转化率']).plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_nianqinren.sort_values(by=['付费转化率']).plot.bar(y='付费转化率',ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])ax1.set_xticklabels(choose_column_name_nianqinren.sort_values(by=['点击转化率']).index,rotation=0)
ax2.set_xticklabels(choose_column_name_nianqinren.sort_values(by=['咨询转化率']).index,rotation=0)
ax3.set_xticklabels(choose_column_name_nianqinren.sort_values(by=['付费转化率']).index,rotation=0)plt.show()
转化率是否与爱好有关?
choose_column_name_hobby = choose_column_name.groupby('兴趣')[['展示次数','点击次数','咨询次数','付费次数','花费']].sum()
choose_column_name_hobby['点击转化率'] = choose_column_name_hobby['点击次数']/choose_column_name_hobby['展示次数']
choose_column_name_hobby['咨询转化率'] = choose_column_name_hobby['咨询次数']/choose_column_name_hobby['点击次数']
choose_column_name_hobby['付费转化率'] = choose_column_name_hobby['付费次数']/choose_column_name_hobby['咨询次数']
# 转化率后十的爱好
choose_column_name_hobby.sort_values(by ="付费转化率",ascending = True).head(10) #False
# 付费转化率前十的爱好
choose_column_name_hobby.sort_values(by ="付费转化率",ascending = False).head(10) #False
import matplotlib.pyplot as pltax1 = plt.subplot(3,1,1)
ax2 = plt.subplot(3,1,2)
ax3 = plt.subplot(3,1,3)choose_column_name_hobby.sort_values(by=['点击转化率'],ascending = False).plot.bar(y='点击转化率',ax=ax1,figsize=(12,10),color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_hobby.sort_values(by=['咨询转化率'],ascending = False).plot.bar(y='咨询转化率',ax=ax2,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])
choose_column_name_hobby.sort_values(by ="付费转化率",ascending = False).plot.bar(y='付费转化率',figsize=(12,10),ax=ax3,color=['#F8D800','#0396FF','#EA5455','#32CCBC'])ax1.set_xticklabels(choose_column_name_hobby.sort_values(by=['点击转化率'],ascending = False).index,rotation=0)
ax2.set_xticklabels(choose_column_name_hobby.sort_values(by=['咨询转化率'],ascending = False).index,rotation=0)
ax3.set_xticklabels(choose_column_name_hobby.sort_values(by ="付费转化率",ascending = False).index,rotation=0)plt.show()# choose_column_name_hobby['点击转化率'].sort_values(ascending = False)
不同爱好之间付费转化率差距极大,兴趣ID为65、102、31的付费转化率比较高,
兴趣ID为104,105,108的付费转化率低于平均值。
相关性分析
import numpy as np
import matplotlib.pyplot as plt
import random
import statsmodels.formula.api as smffig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("展示次数与点击次数之间的相关性")# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。# 画散点图。
ax1.scatter(choose_column_name['展示次数'], choose_column_name['点击次数'])
# 横轴名称。
ax1.set_xlabel("展示次数")
# 纵轴名称。
ax1.set_ylabel("点击次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()
fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("点击次数与付费次数之间的相关性")# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。# 画散点图。
ax1.scatter(choose_column_name['点击次数'], choose_column_name['付费次数'])
# 横轴名称。
ax1.set_xlabel("点击次数")
# 纵轴名称。
ax1.set_ylabel("付费次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()
fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("点击次数与咨询次数之间的相关性")# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。# 画散点图。
ax1.scatter(choose_column_name['点击次数'], choose_column_name['咨询次数'])
# 横轴名称。
ax1.set_xlabel("点击次数")
# 纵轴名称。
ax1.set_ylabel("咨询次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()
fig = plt.figure()
# 画图区域分成1行1列。选择第一块区域。
ax1 = fig.add_subplot(1,1, 1)
# 标题
ax1.set_title("咨询次数与付费次数之间的相关性")# RANDOM_X = np.array(random_x) # 散点图的横轴。
# RANDOM_Y = np.array(random_y) # 散点图的纵轴。# RANDOM_X = choose_column_name['展示次数'] # 散点图的横轴。
# RANDOM_Y = choose_column_name['点击次数'] # 散点图的纵轴。# 画散点图。
ax1.scatter(choose_column_name['咨询次数'], choose_column_name['付费次数'])
# 横轴名称。
ax1.set_xlabel("咨询次数")
# 纵轴名称。
ax1.set_ylabel("付费次数")
#------------------------------------------------
# 数据量。
# SIZE = 600
# 纵轴数据。np.linspace 返回一个一维数组,SIZE指定数组长度。
# 数组最小值是-6,最大值是6。所有元素间隔相等。整个数组是
# 个等差数列。
# Y = np.linspace(-6, 6, SIZE)
# # 横轴数据。
# X = np.linspace(-2, 3, SIZE)
# ax1.plot(choose_column_name['展示次数'], choose_column_name['点击次数'])
#------------------------------------------------
plt.show()
方式二
import pandas as pd
import matplotlib.pyplot as pltimport statsmodels.formula.api as smf#read file
df = choose_column_name[['点击次数','咨询次数']]
# print(df)#Draw a scatter diagram
plt.figure(figsize=(8, 6))
plt.scatter(df['点击次数'], df['咨询次数'],label='data')
plt.legend(loc='best')#The univariate linear regression model is established
result = smf.ols(r'咨询次数~点击次数',data=df).fit()
# print(result.params)
# print(result.summary())#Draw a fitting diagram.
y_fitted = result.fittedvalues
a = plt.subplots(figsize=(8,6))
plt.plot(df['点击次数'], df['咨询次数'], 'r-',label='OLS')
# plt.plot(df['点击次数'], df['咨询次数'], 'o', label='data')
plt.legend(loc='best')
plt.show()
四、结论
数据呈现的结果和方式,在于人,而不是工具,工具只是帮助你更好的实现这个过程。
基于python分析广告投放转化情况相关推荐
- 基于Python分析深圳程序员工资有多高?
基于Python分析深圳程序员工资有多高? 概述 前言 统计结果 爬虫技术分析 爬虫代码实现 爬虫分析实现 后记 前言 多图预警.多图预警.多图预警.校招季,毕业也多,跳槽也多.我们的职业发展还是要顺 ...
- 运营分析:用七种维度来分析广告投放效果
运营分析 随着互联网的飞速发展,各种网络产品应运而生,如电商网站,移动应用,视频媒体,新媒体等等.网络广告也成为了一种主要的广告形式.而网络广告的形式具有复杂和多样化的特点. 在网络营销中,运营人员经 ...
- 腾讯广点通广告投放-转化归因API回传接口对接踩坑指南
对于腾讯广点通广告平台的文档,实在是忍不住要吐槽一番.本来接收到回传接口文档,看到给的PDF文档没有备注说明,但是看到回传方式,挺简单的.以为一下就能搞定了,但是对接下来才发现,各个字段根本不知道什么 ...
- 基于python分析航空公司客户价值《数据挖掘》 课程实验报告
一.实验目的 1)了解K-Means 聚类算法在客户价值分析实例中的应用. 2)利用pandas快速实现数据z-score(标准差)标准化以及用scikit-learn 的聚类库实现K-Means聚类 ...
- python商品销售情况数据分析_用python分析小红书销售情况
一.分析目的 本文将通过对小红书销售表3万余条数据的分析,找到影响销售额的因素. 二.理解数据 先看下数据集字段基本信息 import pandas as pd import numpy as np ...
- 基于Python分析金庸小说里的主角,原来他才是真正的主角!
粉丝独白 说起武侠小说,不得不提中国武侠小说三大宗师--金庸.梁羽生.古龙,从上世纪七八十年×××始,大量的武侠经典出现在荧幕之中.三位大师的文字作品几乎都读过,在学习Python和数据分析后又发现了 ...
- 基于Python分析气象数据教程-1
前言 本笔记介绍了如何使用 Python.pandas 和 SciPy 对天气数据进行基本分析. 它不包含对气象科学的贡献,但说明了如何生成简单的图和基本模型来拟合一些真实的物理观测. 一.相关库引入 ...
- python 语音转文字_基于python将音频文件转化为文本输出
实验目的:学习利用python进行音频转文本文件 实验环境:已正确安装python3.5 1.需要安装的第三方库 (1)安装speechrecognition speechrecognition集合了 ...
- 神策广告投放(用户行为)分析经验总结
神策广告投放(用户行为)分析 为什么要进行用户行为分析(用户运营) 注意:神策的数据结构是user event(用户事件结构),该结构的核心点就是event(用户行为事件),神策都是以用户触发某个 ...
最新文章
- 阿里巴巴开源容器镜像加速技术
- 微信生态中,「电商」如何借“运营工具”,抢占 4.5 亿流量红利?
- c++-initializer_list
- jsp form提交到后台中文乱码_JSP与servlet之间的数据传递
- C++多继承与虚继承
- jquery-尺寸相关
- 结构设计模式 - 代理设计模式
- 防碰撞算法c语言,RFID防碰撞 二进制树形搜索算法 C语言实现
- 面试官:设计一个对外的接口,需要考虑那些安全问题?我有点懵...
- 移动端页面适配方案(viewport)
- 医院信息化服务器配置,医院信息化建设方案(完整).doc
- PS透明婚纱抠图(超详细)
- 关于SCN引起DBLINK的问题解决方法说明--打补丁
- 数字电路加法器 基本原理(一)
- 【概率论与数理统计】1.5 独立性
- 微信网页图片预览问题
- SV环境搭建基础知识整合①
- Hack微信,不一样的安全视角
- 如何配合RestTemplate优雅的记录请求以及返回的信息
- 云呐|固定资产管理系统的主要功能有哪些