概述:

数据集是基于开源数据集Bank Marketing Data Set 的分类预测,本数据集与葡萄牙银行机构的营销活动相关。

这些营销活动一般以电话为基础,银行的客服人员至少联系客户一次,以确认客户是否有意愿购买该银行的产品(定期存款),最终目标是预测客户是否会订购定存业务(变量y)。

python可以预测大数据吗 python预测数据的方法_Python

数据说明

下载下来的数据是这样的,虽说是csv格式但是并非逗号分隔符,需要通过文本工具打开进行一下替换。

python可以预测大数据吗 python预测数据的方法_python_02

替换后打开结果:

python可以预测大数据吗 python预测数据的方法_python_03

以上表格字段说明,

序号

字段名

数据类型

描述

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属性)。

python可以预测大数据吗 python预测数据的方法_python_04

数据处理

导入所需要的包并进行相关设置

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)

python可以预测大数据吗 python预测数据的方法_数据分析_05

缺失值查看与判断

# 查看是都有缺失值,测试全部是0
bank.isnull().sum()
# 数据没有缺失值,但是有‘unknown’这也算缺失值,查看数据‘unknown’的百分比
bank.isin(['unknown']).mean()*100

python可以预测大数据吗 python预测数据的方法_数据分析_06

通过查看数据集较好,基本不需要处理,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'])

python可以预测大数据吗 python预测数据的方法_Python_07

可以发现数据分布还是很不平衡的,后边可以使用上采样解决样本不均衡问题。

查看购买和未购买用户的年龄分布,年龄分布我们采用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())

python可以预测大数据吗 python预测数据的方法_python_08

通过分析可以看出:两类客户的年龄分布差异不大

查看不同职业的购买比例

seaborn.catplot 是一个将分类图绘制到FacetGrid上图级别接口。

这个函数可以访问多个轴级功能,这些轴级功能通过不同的可视化图表展示数字和一个或多个分类变量的关系。kind 参数可以选择的轴级基础函数有:

分类散点图:

  • stripplot() (with kind="strip"; the default)
  • swarmplot() (with kind="swarm")

分类分布图:

  • boxplot() (with kind="box")
  • violinplot() (with kind="violin")
  • boxenplot() (with kind="boxen")

分类估计图:

  • pointplot() (with kind="point")
  • barplot() (with kind="bar")
  • countplot() (with kind="count")
sns.catplot(data=bank,x='job',kind='bar',y='y',) # 柱形图
plt.xticks(rotation=90)

python可以预测大数据吗 python预测数据的方法_python_09

退休人员和学生最青睐定期理财,其次是失业人员,蓝领定期理财的比率最低

# 查看婚姻状况与购买的关系
sns.catplot(data=bank,x='marital',kind='bar',y='y')

python可以预测大数据吗 python预测数据的方法_python_10

单身相比离异和已婚倾向于定期理财

# 查看学历和购买的关系
sns.catplot(data=bank,x='education',kind='bar',y='y')
sns.catplot(y='job', x='y', col='education',
            data=bank, ci=None,kind='bar',)

通过下图发现无论接受教育的程度如何,进行定期理财的人主要是退休人员和学生,其次是失业人员。随着教育程度的提高,管理人员、技术人员、行政人员、蓝领、企业家、自由职业者、事业人员越来越倾向接受定期理财。

python可以预测大数据吗 python预测数据的方法_数据挖掘_11

查看违约和购买的关系

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])

python可以预测大数据吗 python预测数据的方法_数据分析_12

没有违约的人倾向于定期理财,没有个人贷款的人倾向于定期理财, 没有房贷的人倾向于定期理财,

沟通方式和购买的关系

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])

python可以预测大数据吗 python预测数据的方法_python可以预测大数据吗_13

# 获取银行是否沟通过的数据,并且获取沟通时常进行展示
g=sns.FacetGrid(data=bank,height=6,hue='y')
g=(g.map(sns.distplot,'duration',bins=40).add_legend())

python可以预测大数据吗 python预测数据的方法_Python_14

通过分析得出,移动电话客户确实可以促进客户的定期理财,但是也并不是沟通时长越长越好,而是定期理财在300分钟最能促进理财意愿的达成。