客户流失分析与预测
一、数据来源
https://www.kaggle.com/blastchar/telco-customer-churn
二、数据整理
1、导入函数包
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
2、导入数据并展示
data=pd.read_csv(r"D:\百度网盘\数据分析—实例\运营商客户流失分析与预测\WA_Fn-UseC_-Telco-Customer-Churn.csv")
# 查看数据集大小
data.shape
# 运行结果:(7043, 21)
# 设置查看列不省略
pd.set_option('display.max_columns',None)
# 查看前5条数据
data.head()
3、异常值检查
#查看性别有无异常值
pd.unique(data.gender)
#运行结果:array(['Female', 'Male'], dtype=object)
#查看年龄有无>120异常值
data.loc[data.tenure>120]
#运行结果:0 rows × 21 columns
# Null计数
pd.isnull(customerDF).sum()
4、数据类型查看及转换
data.info()
将‘TotalCharges’总消费额的数据类型转换为浮点型
data.TotalCharges.astype(float)
#输出结果:ValueError: could not convert string to float:
#强制转换
data.TotalCharges=data['TotalCharges'].convert_objects(convert_numeric=True)
#输出结果:AttributeError: 'Series' object has no attribute 'convert_objects'
#改用apply语句
data.TotalCharges=data['TotalCharges'].apply(pd.to_numeric, errors='coerce')
#转换结果查询
data.info()
5、查看转换后缺失值
#查看TotalCharges为NULL的信息
data[data.TotalCharges.isnull()]
6、修改数据
#将总消费额填充为月消费额
data.loc[:,'TotalCharges'].replace(to_replace=np.nan,value=data.loc[:,'MonthlyCharges'],inplace=True)
# 将‘tenure’入网时长从0修改为1
data.loc[:,'tenure'].replace(to_replace=0,value=1,inplace=True)
7、数据分析
data.describe()
三、数据展示
根据一般经验,将用户特征划分为用户属性、服务属性、合同属性,并从这三个维度进行可视化分析。
1、查看流失用户数量和占比。
#查看流失用户数量和占比
plt.figure(figsize=(6,6))
plt.pie(data['Churn'].value_counts(),labels=data['Churn'].value_counts().index,autopct='%0.2f%%',explode=(0.1,0))
plt.title('Churn(Yes/No) Ratio')
plt.show()
x=churnDf.index
y=churnDf['Churn']
plt.bar(x,y,width = 0.5,color = 'g')
plt.title('Churn(Yes/No) Num')
for a,b in zip(x,y):
plt.text(a,b+10,'%.0f' % b, ha='center', va= 'bottom')
plt.show()
2、用户属性分析
def barplot_percentages(feature,orient='v',axis_name="percentage of customers"):
ratios = pd.DataFrame()
g = (customerDF.groupby(feature)[<