该数据为网上公开脱敏数据,从广告展示到最终付费转化的全过程。

文章目录

  • 前言
  • 一、提出问题
  • 二、理解数据
  • 三、清洗数据并建立模型
    • 第一种
    • 问题一,转化率是否与性别有关系?
    • 问题二, 转化率是否与年龄段有关?
    • 问题三, 转化率是否与爱好有关?
    • 问题四, 展示次数、点击次数、咨询次数和付费次数的相关性怎样?
    • 第二种
    • 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分析广告投放转化情况相关推荐

  1. 基于Python分析深圳程序员工资有多高?

    基于Python分析深圳程序员工资有多高? 概述 前言 统计结果 爬虫技术分析 爬虫代码实现 爬虫分析实现 后记 前言 多图预警.多图预警.多图预警.校招季,毕业也多,跳槽也多.我们的职业发展还是要顺 ...

  2. 运营分析:用七种维度来分析广告投放效果

    运营分析 随着互联网的飞速发展,各种网络产品应运而生,如电商网站,移动应用,视频媒体,新媒体等等.网络广告也成为了一种主要的广告形式.而网络广告的形式具有复杂和多样化的特点. 在网络营销中,运营人员经 ...

  3. 腾讯广点通广告投放-转化归因API回传接口对接踩坑指南

    对于腾讯广点通广告平台的文档,实在是忍不住要吐槽一番.本来接收到回传接口文档,看到给的PDF文档没有备注说明,但是看到回传方式,挺简单的.以为一下就能搞定了,但是对接下来才发现,各个字段根本不知道什么 ...

  4. 基于python分析航空公司客户价值《数据挖掘》 课程实验报告

    一.实验目的 1)了解K-Means 聚类算法在客户价值分析实例中的应用. 2)利用pandas快速实现数据z-score(标准差)标准化以及用scikit-learn 的聚类库实现K-Means聚类 ...

  5. python商品销售情况数据分析_用python分析小红书销售情况

    一.分析目的 本文将通过对小红书销售表3万余条数据的分析,找到影响销售额的因素. 二.理解数据 先看下数据集字段基本信息 import pandas as pd import numpy as np ...

  6. 基于Python分析金庸小说里的主角,原来他才是真正的主角!

    粉丝独白 说起武侠小说,不得不提中国武侠小说三大宗师--金庸.梁羽生.古龙,从上世纪七八十年×××始,大量的武侠经典出现在荧幕之中.三位大师的文字作品几乎都读过,在学习Python和数据分析后又发现了 ...

  7. 基于Python分析气象数据教程-1

    前言 本笔记介绍了如何使用 Python.pandas 和 SciPy 对天气数据进行基本分析. 它不包含对气象科学的贡献,但说明了如何生成简单的图和基本模型来拟合一些真实的物理观测. 一.相关库引入 ...

  8. python 语音转文字_基于python将音频文件转化为文本输出

    实验目的:学习利用python进行音频转文本文件 实验环境:已正确安装python3.5 1.需要安装的第三方库 (1)安装speechrecognition speechrecognition集合了 ...

  9. 神策广告投放(用户行为)分析经验总结

    神策广告投放(用户行为)分析 为什么要进行用户行为分析(用户运营) ​ 注意:神策的数据结构是user event(用户事件结构),该结构的核心点就是event(用户行为事件),神策都是以用户触发某个 ...

最新文章

  1. 阿里巴巴开源容器镜像加速技术
  2. 微信生态中,「电商」如何借“运营工具”,抢占 4.5 亿流量红利?
  3. c++-initializer_list
  4. jsp form提交到后台中文乱码_JSP与servlet之间的数据传递
  5. C++多继承与虚继承
  6. jquery-尺寸相关
  7. 结构设计模式 - 代理设计模式
  8. 防碰撞算法c语言,RFID防碰撞 二进制树形搜索算法 C语言实现
  9. 面试官:设计一个对外的接口,需要考虑那些安全问题?我有点懵...
  10. 移动端页面适配方案(viewport)
  11. 医院信息化服务器配置,医院信息化建设方案(完整).doc
  12. PS透明婚纱抠图(超详细)
  13. 关于SCN引起DBLINK的问题解决方法说明--打补丁
  14. 数字电路加法器 基本原理(一)
  15. 【概率论与数理统计】1.5 独立性
  16. 微信网页图片预览问题
  17. SV环境搭建基础知识整合①
  18. Hack微信,不一样的安全视角
  19. 如何配合RestTemplate优雅的记录请求以及返回的信息
  20. 云呐|固定资产管理系统的主要功能有哪些

热门文章

  1. 文件格式FAT、FAT32、exFAT之间有什么区别?
  2. 人人都是产品经理总结 第六章
  3. 通过强弱软虚四种引用进一步了解垃圾回收机制
  4. webservice客户端命名空间
  5. office2013零售版转vol版
  6. English Names of Ordinary Chinese Food 常见中国食品英语名称
  7. hp 1007打印机加粉
  8. 复合函数的导数及证明
  9. 数据结构 顺序表La和Lb合并
  10. DIV+CSS解决IE6,IE7,IE8,FF兼容问题