系列文章目录

1.用python进行分析的用户流失预测实操,以电信行业为例

2.用python进行分析电信行业的用户流失预测(二)–数据可视化

3.用python进行分析电信行业的用户流失预测(三)—数据预处理

4.用python进行分析电信行业的用户流失预测(四)—构建模型

前言

这篇文章紧跟用python进行分析的用户流失预测实操,以电信行业为例的后续内容,聚焦可视化操作。
本篇为第二篇文章教程。

四、数据可视化呈现

1、查看流失客户占比

##数据可视化分析
# #1,查看流失客户占比--画饼图参数
churnvalue=telcon['Churn'].value_counts()
labels=telcon['Churn'].value_counts().index
rcParams['figure.figsize']=6,9
explode = (0.1,0)   # 将某一块分割出来,值越大分割出的间隙越大
sizes = [telcon['Churn'].value_counts()]
fig = plt.figure(figsize=(8, 4))
ax1 = fig.subplots()
ax1.pie(sizes, explode=explode, labels=labels,
        autopct='%1.1f%%', # 数值保留固定小数位
        shadow=True,  # 显示阴影
        wedgeprops = {'linewidth': 3}  # 设置边框宽度
)
plt.title("流失客户占比情况")
plt.show()

在这里插入图片描述
由图中结果可以看出,流失客户占整体客户的26.5%。

2、性别、老年人、配偶、亲属对流客户流失率的影响

plt.figure(figsize=(10,10))
plt.subplot(2,2,1)
gender=sns.countplot(x='gender',hue='Churn',data=telcon,palette='Set2')   #palette参数表示设置颜色,设置为主颜色paste12
plt.xlabel('gender')
plt.title('Churn by Gender')

plt.subplot(2,2,2)
seniorcitizen=sns.countplot(x='SeniorCitizen',hue='Churn',data=telcon,palette='Set2')
plt.xlabel('Senior Citizen')
plt.title('Churn by Senior Citizen')

plt.subplot(2,2,3)
partner=sns.countplot(x='Partner',hue='Churn',data=telcon,palette='Set2')
plt.xlabel('Partner')
plt.title('Churn by SPartner')

plt.subplot(2,2,4)
dependents=sns.countplot(x='Dependents',hue='Churn',data=telcon,palette='Set2')
plt.xlabel('dependents')
plt.title('Churn by Dependents')
plt.show()

在这里插入图片描述
配偶、亲属占比结果

可以看出,男性与女性用户之间的流失情况基本没有差异,而在老年用户中流失占比明显比非老年用户更高,在所有数据中未婚与已婚人数基本持平,但未婚中流失人数比已婚中的流失人数高出了快一倍,从经济独立情况来看,经济未独立的用户流失率要远远高于经济独立的用户。

3、提取特征

charges=telcon.iloc[:,1:20]
# #对特征进行编码
# #离散特征的编码分为两种情况:
# #1.离散特征的取值之间没有太大意义,比如color:[red,blue],那么就使用one-hot编码
# #2.离散特征的取值有大小意义,比如size:[X,XL,XXL],那么就使用数值的映射【X:1,XL:2,XXL:3】
corrdf=charges.apply(lambda x:pd.factorize(x)[0])
print(corrdf.head())

在这里插入图片描述

4、构造相关性矩阵

charges=telcon.iloc[:,1:20]
corrdf=charges.apply(lambda x:pd.factorize(x)[0])
corr=corrdf.corr()
#显示所有列
pd.set_option('display.max_columns', None)
#显示所有行
pd.set_option('display.max_rows', None)
print(corr)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5、使用热地图显示相关系数

charges=telcon.iloc[:,1:20]
corrdf=charges.apply(lambda x:pd.factorize(x)[0])
corr=corrdf.corr()
# '''
# heatmap 使用热力图展示系数矩阵情况
# linewidths 热力图矩阵之间的间隔大小
# annot  设定是否显示每个色块系数值
# '''
plt.figure(figsize=(30,20))
ax=sns.heatmap(corr,xticklabels=corr.columns,yticklabels=corr.columns,linewidths=0.2,cmap='YlGnBu',annot=True)
plt.show()

在这里插入图片描述
结论:

从上图可以看出,互联网服务、网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影之间存在较强的相关性,多线业务和电话服务之间也有很强的相关性,并且都呈强正相关关系。

6、使用one-hot编码

tel_dummies=pd.get_dummies(telcon.iloc[:, 1:21])
print(tel_dummies.head())

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

7、电信用户是否流失与各变量之间的相关性

plt.figure(figsize=(15,8))
tel_dummies.corr()['Churn'].sort_values(ascending=False).plot(kind='bar')
plt.title('correlations between Churn and variables')
plt.show()

在这里插入图片描述

由图上可以看出,变量gender 和 PhoneService 处于图形中间,其值接近于 0 ,这两个变量对电信客户流失预测影响非常小,可以直接舍弃。

8、网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视、网络电影和无互联网服务对客户流失率的影响

covariable=['OnlineSecurity','OnlineBackup','DeviceProtection','TechSupport','StreamingTV','StreamingMovies']
plt.figure(figsize=(17,10))
for i,item in enumerate(covariable):
      plt.subplot(2,3,(i+1))
      ax=sns.countplot(x=item,hue='Churn',data=telcon,palette='Set2',order=['Yes','No','No internet service'])
      plt.xlabel(str(item))
      plt.title('Churn by'+str(item))
      i=i+1
plt.show()
#

在这里插入图片描述
由上图可以看出,在网络安全服务、在线备份业务、设备保护业务、技术支持服务、网络电视和网络电影六个变量中,没有互联网服务的客户流失率值是相同的,都是相对较低。

这可能是因为以上六个因素只有在客户使用互联网服务时才会影响客户的决策,这六个因素不会对不使用互联网服务的客户决定是否流失产生推论效应。

9、签订合同方式对客户流失率的影响

ax=sns.barplot(x='Contract',y='Churn',data=telcon,palette='Set2',order=['Month-to-month','One year','Two year'])
# seaborn 的 barplot() 利用矩阵条的高度反映数值变量的集中趋势,bar plot 展示的是某种变量分布的平均值,
# 当需要精确观察每类变量的分布趋势,boxplot 与 violinplot 往往是更好的选择。
plt.title('Churn by Contract type')
plt.show()

在这里插入图片描述
由图上可以看出,签订合同方式对客户流失率影响为:按月签订 > 按一年签订 > 按两年签订,这可能表明,设定长期合同对留住现有客户更有效。

10、付款方式对客户流失率的影响

plt.figure(figsize=(10,5))
ax=sns.barplot(x='PaymentMethod',y='Churn',data=telcon,palette='Set2',order=['Bank transfer (automatic)','Credit card (automatic)','Electronic check','Mailed check'])
plt.title('Churn by PaymentMethod type')
plt.show()

在这里插入图片描述

由图上可以看出,在四种支付方式中,使用Electronic check的用户流流失率最高,其他三种支付方式基本持平,因此可以推断电子账单在设计上影响用户体验。

经过阅读学习上述数据可视化分析的内容,我想大家对于所给数据集中的数据所带来的价值思考及相关流程分析,有了很多的收获。其主要是通过分析数据更具有代表性的关键特征,经过数据预处理,得到理想化状态的数据集内容,进行多角度的数据相关性研究。就到这里了吧!!感觉小命都快没了。
在这里插入图片描述

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐