一个完整的数据分析案例 | 用Python完成用户预测分析
概述:
数据集是基于开源数据集Bank Marketing Data Set 的分类预测,本数据集与葡萄牙银行机构的营销活动相关。
这些营销活动一般以电话为基础,银行的客服人员至少联系客户一次,以确认客户是否有意愿购买该银行的产品(定期存款),最终目标是预测客户是否会订购定存业务(变量y)。
数据说明
下载下来的数据是这样的,虽说是csv格式但是并非逗号分隔符,需要通过文本工具打开进行一下替换。
替换后打开结果:
以上表格字段说明,
序号 | 字段名 | 数据类型 | 描述 |
---|---|---|---|
1 | age | Int | 客户年龄 |
2 | job | String | 客户的职业 |
3 | marital | String | 婚姻状况 |
4 | education | String | 受教育水平 |
5 | default | String | 是否有违约记录 |
6 | balance | Int | 每年账户的平均余额 |
7 | housing | String | 是否有住房贷款 |
8 | loan | String | 是否有个人贷款 |
9 | contact | String | 与客户联系的沟通方式 |
10 | day | Int | 最后一次联系的时间(几号) |
11 | month | String | 最后一次联系的时间(月份) |
12 | duration | Int | 最后一次联系的交流时长 |
13 | campaign | Int | 在本次活动中,与该客户交流过的次数 |
14 | pdays | Int | 距离上次活动最后一次联系该客户,过去了多久(999表示没有联系过) |
15 | previous | Int | 在本次活动之前,与该客户交流过的次数 |
16 | poutcome | String | 上一次活动的结果 |
17 | y | Int | 预测客户是否会订购定期存款业务 |
本次实验采用了和鲸社区提供的数据集,分为了训练集与测试集,采用了18个属性(原17个属性+ID属性)。
数据处理
导入所需要的包并进行相关设置
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings# 相关设置
sns.set(style='darkgrid')
plt.rcParams['font.family']='SimHei'
plt.rcParams['axes.unicode_minus']=False
warnings.filterwarnings("ignore")
读取数据并查看相关信息
bank = pd.read_csv('./bank.csv')
# 查看数据文件详情
bank.info()
随机获取10条数据
bank.sample(10)
缺失值查看与判断
# 查看是都有缺失值,测试全部是0
bank.isnull().sum()
# 数据没有缺失值,但是有‘unknown’这也算缺失值,查看数据‘unknown’的百分比
bank.isin(['unknown']).mean()*100
通过查看数据集较好,基本不需要处理,unknow的我们需要简单处理一下。工作(job),教育(education)和沟通方式(contact)用众数填充,上一次沟通(poutcome)的结果因为缺失太多,把这一特征舍弃掉
bank.drop(['poutcome'],inplace=True,axis=1)
bank['job'].replace(['unknown'],bank['job'].mode(),inplace=True)
bank['education'].replace(['unknown'],bank['education'].mode(),inplace=True)
bank['contact'].replace(['unknown'],bank['contact'].mode(),inplace=True)
重复值判断与删除
bank.duplicated().any() # 如果存在可以删除重复值,但是判断之后返回False
描述分析
查看数据标签【y】的分布,使用seaborn中的countplot,countplot是seaborn库中分类图的一种,作用是使用条形显示每个分箱器中的观察计数。
# 查看数据标签的分布
sns.countplot(x='y',data=bank) # 或者sns.countplot(x=bank['y'])
可以发现数据分布还是很不平衡的,后边可以使用上采样解决样本不均衡问题。
查看购买和未购买用户的年龄分布,年龄分布我们采用seaborn中的FacetGrid类完成。
FacetGrid是seaborn库中的一个类,我们在初始化这个类时只需要给它传一个DataFrame的数据集即可。实例化这个类以后,我么就可以直接使用这个对象的方法map绘制需要的图形
g=sns.FacetGrid(data=bank,height=6,hue='y',palette='Spectral_r')
g=(g.map(sns.distplot,'age',bins=[20,30,40,50,60,70,80,90]).add_legend())
通过分析可以看出:两类客户的年龄分布差异不大
查看不同职业的购买比例
seaborn.catplot 是一个将分类图绘制到FacetGrid上图级别接口。
这个函数可以访问多个轴级功能,这些轴级功能通过不同的可视化图表展示数字和一个或多个分类变量的关系。kind
参数可以选择的轴级基础函数有:
分类散点图:
stripplot()
(withkind="strip"
; the default)swarmplot()
(withkind="swarm"
)
分类分布图:
boxplot()
(withkind="box"
)violinplot()
(withkind="violin"
)boxenplot()
(withkind="boxen"
)
分类估计图:
pointplot()
(withkind="point"
)barplot()
(withkind="bar"
)countplot()
(withkind="count"
)
sns.catplot(data=bank,x='job',kind='bar',y='y',) # 柱形图
plt.xticks(rotation=90)
退休人员和学生最青睐定期理财,其次是失业人员,蓝领定期理财的比率最低
# 查看婚姻状况与购买的关系
sns.catplot(data=bank,x='marital',kind='bar',y='y')
单身相比离异和已婚倾向于定期理财
# 查看学历和购买的关系
sns.catplot(data=bank,x='education',kind='bar',y='y')
sns.catplot(y='job', x='y', col='education',data=bank, ci=None,kind='bar',)
通过下图发现无论接受教育的程度如何,进行定期理财的人主要是退休人员和学生,其次是失业人员。随着教育程度的提高,管理人员、技术人员、行政人员、蓝领、企业家、自由职业者、事业人员越来越倾向接受定期理财。
查看违约和购买的关系
fig,ax=plt.subplots(1,3)
sns.catplot(data=bank,x='default',kind='bar',y='y',ax=ax[0])
sns.catplot(data=bank,x='housing',kind='bar',y='y',ax=ax[1])
sns.catplot(data=bank,x='loan',kind='bar',y='y',ax=ax[2])
没有违约的人倾向于定期理财,没有个人贷款的人倾向于定期理财, 没有房贷的人倾向于定期理财,
沟通方式和购买的关系
fig,ax=plt.subplots(1,2,figsize=(15,6))
sns.catplot(data=bank,x='contact',kind='bar',y='y',ci=None,ax=ax[0])
sns.catplot(data=bank,x='campaign',kind='bar',y='y',ci=None,aspect=2,ax=ax[1])
# 获取银行是否沟通过的数据,并且获取沟通时常进行展示
g=sns.FacetGrid(data=bank,height=6,hue='y')
g=(g.map(sns.distplot,'duration',bins=40).add_legend())
通过分析得出,移动电话客户确实可以促进客户的定期理财,但是也并不是沟通时长越长越好,而是定期理财在300分钟最能促进理财意愿的达成。
以上与大家分享的内容,如果需要学习教程、源码笔记的或者想学习交流,扫码加我拉你进群
一个完整的数据分析案例 | 用Python完成用户预测分析相关推荐
- python数据建模案例源代码_一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码)...
原标题:一个完整的数据分析案例 | 用Python建立客户流失预测模型(含源数据+代码) 来源:数据分析不是个事儿 作者:启方 原文: https://mp.weixin.qq.com/s/_20MN ...
- 数据分析案例之淘宝用户行为分析完整报告
一.项目背景 UserBehavior为淘宝用户行为的数据集,数据集包括了2017年11月25日至2017年12月3日之间,有大约82万随机用户的用户行为(行为包括点击pv,购买buy,加购物车cha ...
- 数据分析人必看,分享一个完整的数据分析流程
想入门数据分析应该怎么学?新手做数据分析有哪些好用的工具?会用 Excel 但是做分析总是没思路怎么办?做数据分析有哪些方法...... 以上这些问题,相信各位想入门数据分析的小伙伴们或多或少都会遇到 ...
- 【数据分析】利用机器学习算法进行预测分析(五):Prophet
时间序列预测中的机器学习方法(五):Prophet 本文是"时间序列预测中的机器学习方法"系列文章的第五篇,如果您有兴趣,可以先阅读前面的文章: [数据分析]利用机器学习算法进行预 ...
- 数据分析中,你认为用户行为分析最重要的点是什么
数据分析中,你认为用户行为分析最重要的点是什么 对着满屏的数据,来做用户行为分析,是不是茫然不知所措? 做用户行为分析首先要确定你的目标.目标是降低成本(比如做渠道分析,优化渠道),增加收入(比如分析 ...
- 数据分析实战之淘宝用户行为分析(3) -- 用户行为路径分析
数据分析实战之淘宝用户行为分析(3) -- 用户行为路径分析 淘宝行为分析Tableau可视化展示 数据分析实战之淘宝用户行为分析(5) - 数据分析报告 数据分析实战之淘宝用户行为分析(4) - 用 ...
- 从OA、ERP到大数据中心,一个完整的数据分析体系原来是这样
随着工业化和信息化的发展,传统企业公司的规模和体量都在迅速扩张,逐渐接触到运营和管理的天花板,粗放型管理带来了许多问题,精细化运营势在必行. 那么如果提高企业的运营管理效率.实现精细化运营呢?答案就是 ...
- 只需八步,做一个完整的数据分析
公众号后台回复"图书",了解更多号主新书内容作者:小熊妹来源:码工小熊 很多小伙伴不清楚做数据分析的流程,经常疑惑:到底做到什么程度才算是一个完整的分析?其实,数据分析是有标准模板 ...
- 一个完整的数据分析体系,该长啥样?
导读:很多同学抱怨:自己东做一点,西做一点,没有见过完整的数据分析体系是啥样?实际上早在10年前, 很多大型银行就已经建立了很完善的数据分析体系,只是因为行业特殊性,导致外人知道的不多.今天跟大家详细 ...
最新文章
- 在Ubuntu 14.04 64bit上安装python mongoDB模块
- JS自动刷新当前页面
- P1032 字串变换(bfs)
- firefox+android+平板,Firefox OS首款平板现身,“三头并进”追赶Android
- mysql 字段 as_mysql 字段as详解及实例代码
- java8新特性lambda表达式、函数式编程、方法引用和接口默认方法以及内部类访问外部变量
- mui中子页面标志html,MUI 图标筛选切换(父页面传值子页面)代码
- jquery ajax实例get,jQuery中ajax的get()方法用法实例
- 修改cas5成功html文件,手把手教Apereo CAS5.2.3 Server端 增量开发 自定义登录页,增加验证码,注册,修改密码等功能的方式...
- linux 字符设备和块设备的区别
- 淘淘商城第34讲——内容管理
- 移动通信原理B-------例题解答3
- 用计算机唱歌 丑八怪乐谱,抖音计算机乐谱有哪些?计算机歌曲乐谱汇总
- 【小程序源码】好玩多功能实用工具箱
- 驱动大师服务器获取信息失败,360驱动大师、鲁大师,连测硬件信息都不准,我拿什么信你们...
- 在 FlashGot 中调用 Axel 下载
- 网页视频播放器-插件
- 如何使用禅道集成钉钉
- 什么是高铁运营监测(转载)
- 毕业设计 STM32老人防摔倒报警系统 - 物联网 嵌入式 单片机