电信运营商用户流失分析

数据集来源:

Telco Customer Churn | KaggleFocused customer retention programshttps://www.kaggle.com/datasets/blastchar/telco-customer-churn下载得到一个excel文件WA_Fn-UseC_-Telco-Customer-Churn.csv,打开excel看一下

 有21列,7000+行,这个数据量不大,用sql可以做

熟悉一下表格内容,看一下每列的数据类型,有没有明显异常的列,比如很多的0,或者有负数或者格子为空没有数据的情况。

(我粗粗拉了下表,没感到有明显异常的列)

这个案例用到的sql语句和tableau操作都是最基础的

首先是SQL部分,对数据进行一个简单的处理:

首先是建库建表:

#创建数据库
DROP DATABASE IF EXISTS Telco_Customer_Churn;
CREATE DATABASE Telco_Customer_Churn;
USE Telco_Customer_Churn;
#建表
DROP TABLE IF EXISTS customer_details;
CREATE TABLE customer_details(
	customerID VARCHAR(30) ,
	gender VARCHAR(30),
	SeniorCitizen VARCHAR(30) ,
	Partner VARCHAR(30) ,
	Dependents VARCHAR(30) ,
	tenure INT,
	PhoneService VARCHAR(30),
	MultipleLines VARCHAR(30),
	InternetService VARCHAR(50),
	OnlineSecurity VARCHAR(50),
	OnlineBackup VARCHAR(50),
	DeviceProtection VARCHAR(50),
	TechSupport VARCHAR(50),
	StreamingTV VARCHAR(50),
	StreamingMovies VARCHAR(50),
	Contract VARCHAR(50),
	PaperlessBilling VARCHAR(30),
	PaymentMethod VARCHAR(50),
	MonthlyCharges FLOAT,
	TotalCharges varchar(50),
	Churn VARCHAR(30));

在这里,大家可能会奇怪,我为什么把TotalCharges的数据类型定义为字符串类型?

是这样的,在最开始的时候我也是把TotalCharges的数据类型定义为Float类型的,但是在我导入数据的时候出现了‘warning’

‘Data truncated for column 'TotalCharges' at row XXX’

出现这种warning一般都是因为数据类型不适合或者是数据长度小了。

所以我试着把数据类型改成Varchar(50),然后warning就没有了。

但是这里的TotalCharges的数据类型肯定应该是浮点型,之后我们再通过sql语句改过来!

大家不要着急,慢慢往后看哈!

然后是导入数据:

LOAD DATA INFILE 'WA_Fn-UseC_-Telco-Customer-Churn.csv'
INTO TABLE customer_details
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
IGNORE 1 ROWS

这里有一个注意事项,我们的excel表,最好是放在Data下面,这样导入比较顺利。可以通过修改配置,使得可以导入其它文件夹的表,但是我就直接放在Data下面了。

就是这个Data文件夹:

 点开这个Data文件夹可以看到新建的文件夹

你发现这个文件夹和我们前面建的数据库是一个名字,我想你应该想到了,我们在建库的时候就同时创建了这么一个文件夹,之后在该数据库下的操作也都默认是在这个文件夹下。

因此我们需要把下载的excel表WA_Fn-UseC_-Telco-Customer-Churn.csv移动到这个文件夹下面

 这样就可以很顺利地通过load infile 语句把数据导入mysql啦!

 

展示下部分数据:

 之后对数据进行检查,包括检查数据集大小、数据类型是否合理、有无空值、有无异常值

#查看数据集大小
SELECT COUNT(*) FROM customer_details;  #有7043行数据

#查看数据类型
DESCRIBE customer_details;

在之前我们说过啦,为了导入数据不出现Warning,我们把TotalCharges的数据类型定义为了varcharI(50),但是它的数据类型正确的应该是Float

(数据类型也关系着我们后面用Tableau绘图,比如如果是字符串类型,肯定就没办法画趋势线了!)

所以,我们需要修改数据类型

#修改TotalCharges的数据类型为float
ALTER TABLE customer_details MODIFY TotalCharges FLOAT;
#检查是否存在重复的数据
SELECT * FROM customer_details 
GROUP BY customerID, gender, SeniorCitizen, Partner, Dependents, tenure, Phoneservice, Multiplelines, Internetservice, Onlinesecurity, Onlinebackup, Deviceprotection, Techsupport, Streamingtv, Streamingmovies,
Contract, Paperlessbilling, Paymentmethod, MonthlyCharges, TotalCharges, Churn
HAVING COUNT(*)>1;

运行的结果是

返回只有表头,没有数据,这就是说没有重复的数据。

(如果有重复的数据,需要先设置一个自增长列,然后去重,这个以后遇到了我会再写一篇)

#查找缺失值
SELECT  COUNT(customerID),COUNT(gender),COUNT(SeniorCitizen),COUNT(Partner),COUNT(Dependents),
	COUNT(tenure),COUNT(Phoneservice),COUNT(Multiplelines),COUNT(Internetservice),
	COUNT(Onlinesecurity),COUNT(Onlinebackup),COUNT(Deviceprotection),COUNT(Techsupport),
	COUNT(Streamingtv),COUNT(Streamingmovies),COUNT(Contract),COUNT(Paperlessbilling),
	COUNT(Paymentmethod),COUNT(MonthlyCharges),COUNT(TotalCharges),COUNT(Churn)
FROM customer_details;
#返回得到各列的数据都为7043个,说明没有缺失值

 

#查找异常值
#将TotalCharge(总消费额)按照升序排列
SELECT * FROM customer_details
ORDER BY TotalCharges ASC;
#发现有的行出现了,总消费额TotalCharge为0,但是月消费MonthlyCharge不为0的情况
#经过观察发现这些用户的入网时长tenure为0,推测为本月刚入网用户,因此其tenure修改为1,总消费额改为月消费额
UPDATE customer_details SET tenure = 1,TotalCharges = MonthlyCharges
WHERE tenure =0;

嗯,进行到这里,我们的数据就处理完了。这个文件的数据处理很简单,都是最基本的语句。

接下来就是对数据进行业务分析。

本数据集有21列,内容分别为

我们分析的主要方式,就是通过可视化,分析最后一列数据(Churn)与前面的20列数据的关系。

接下来就是把SQL和tableaul链接起来,利用tableau进行可视化展示。

这里用到的tableau很简单,直接把对应的数据拖到column和row里面就可以啦

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值