【数据可视化】电信用户流失数据可视化分析:Python + Pyecharts 炫酷大屏(含完整数据、代码)

🧑 博主简介:曾任某智慧城市类企业算法总监,CSDN / 稀土掘金 等平台人工智能领域优质创作者。
目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。


一、引言

在电信行业,用户流失是一个关键问题,因为它直接影响到公司的收入和市场份额。通过分析用户流失的原因,我们可以制定有效的策略来减少流失率,提高用户满意度和忠诚度。本文将使用 Python 和 Pyecharts 对电信用户流失数据进行可视化分析,并构建一个炫酷的组合大屏。

二、数据集介绍

数据集包含以下字段:

  • customerID:用户ID
  • gender:性别
  • SeniorCitizen:是否是老年人(1代表是)
  • Partner:是否有配偶(Yes or No)
  • Dependents:是否经济独立(Yes or No)
  • tenure:用户入网时间
  • PhoneService:是否开通电话业务(Yes or No)
  • MultipleLines:是否开通多条电话业务(Yes、No or No phoneservice)
  • InternetService:是否开通互联网服务(No、DSL数字网络或fiber optic光线网络)
  • OnlineSecurity:是否开通网络安全服务(Yes、No or No internetservice)
  • OnlineBackup:是否开通在线备份服务(Yes、No or No internetservice)
  • DeviceProtection:是否开通设备保护服务(Yes、No or No internetservice)
  • TechSupport:是否开通技术支持业务(Yes、No or No internetservice)
  • StreamingTV:是否开通网络电视(Yes、No or No internetservice)
  • StreamingMovies:是否开通网络电影(Yes、No or No internetservice)
  • Contract:合同签订方式(按月、按年或者两年)
  • PaperlessBilling:是否开通电子账单(Yes or No)
  • PaymentMethod:付款方式(bank transfer、credit card、electronic check、mailed check)
  • MonthlyCharges:月度费用
  • TotalCharges:总费用
  • Churn:是否流失(Yes or No)

三、环境准备

在开始之前,请确保安装了以下库:

复制代码
pip install pandas pyecharts

四、数据预处理

我们首先读取数据,并进行必要的清洗和转换。

python 复制代码
import pandas as pd
from pyecharts import options as opts
from pyecharts.charts import *
from pyecharts.globals import ThemeType
from pyecharts.commons.utils import JsCode

# 读取数据
df = pd.read_csv("WA_Fn-UseC_-Telco-Customer-Churn.csv")

# 将列名转换为中文
df.columns = [
    '用户ID', '性别', '是否老年人', '是否有配偶', '是否经济独立', '用户入网时间',
    '是否开通电话业务', '是否开通多条电话业务', '是否开通互联网服务', '是否开通网络安全服务',
    '是否开通在线备份服务', '是否开通设备保护服务', '是否开通技术支持业务', '是否开通网络电视',
    '是否开通网络电影', '合同签订方式', '是否开通电子账单', '付款方式', '月度费用',
    '总费用', '是否流失'
]

# 将总费用列转换为浮点型
df['总费用'] = pd.to_numeric(df['总费用'], errors='coerce').fillna(0)

# 将是否流失列转换为数值型
df['是否流失'] = df['是否流失'].map({'Yes': 1, 'No': 0})

五、可视化分析

接下来,我们将从多个角度对数据进行可视化分析。

5.1 用户流失率

我们首先查看整体的用户流失率。

ini 复制代码
# 用户流失率
churn_rate = df['是否流失'].mean() * 100

# 绘制饼图
pie = (
    Pie(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add("", [("未流失", 100 - churn_rate), ("流失", churn_rate)])
    .set_global_opts(title_opts=opts.TitleOpts(title="用户流失率"))
    .set_series_opts(label_opts=opts.LabelOpts(formatter="{b}: {c} ({d}%)"))
)

分析: 从饼图中可以看到,约 26.5% 的用户已经流失,这是一个值得关注的问题。

5.2 不同性别用户流失率

接下来,我们查看不同性别的用户流失率。

less 复制代码
# 不同性别用户流失率
gender_churn = df.groupby('性别')['是否流失'].mean().reset_index()

# 绘制柱状图
bar_gender = (
    Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(gender_churn['性别'].tolist())
    .add_yaxis("流失率", gender_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="不同性别用户流失率"))
)

分析: 从柱状图中可以看到,女性用户的流失率略高于男性用户。

5.3 不同合同类型用户流失率

我们再看看不同合同类型对用户流失率的影响。

less 复制代码
# 不同合同类型用户流失率
contract_churn = df.groupby('合同签订方式')['是否流失'].mean().reset_index()

# 绘制柱状图
bar_contract = (
    Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(contract_churn['合同签订方式'].tolist())
    .add_yaxis("流失率", contract_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="不同合同类型用户流失率"))
)

分析: 从柱状图中可以看到,按月签约的用户流失率最高,而两年签约的用户流失率最低。

5.4 用户入网时间与流失率

接下来,我们查看用户入网时间与流失率的关系。

less 复制代码
# 用户入网时间与流失率
tenure_churn = df.groupby('用户入网时间')['是否流失'].mean().reset_index()

# 绘制折线图
line_tenure = (
    Line(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(tenure_churn['用户入网时间'].tolist())
    .add_yaxis("流失率", tenure_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="用户入网时间与流失率"))
)

分析: 从折线图中可以看到,用户入网时间越短,流失率越高。特别是入网时间在 20 个月以内的用户,流失率较高。

5.5 月度费用与流失率

我们再看看月度费用对用户流失率的影响。

less 复制代码
# 月度费用与流失率
monthly_charges_churn = df.groupby(pd.cut(df['月度费用'], bins=10))['是否流失'].mean().reset_index()

# 绘制折线图
line_monthly = (
    Line(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(monthly_charges_churn['月度费用'].astype(str).tolist())
    .add_yaxis("流失率", monthly_charges_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="月度费用与流失率"))
)

分析: 从折线图中可以看到,月度费用高于110,流失率会降低。特别是月度费用在 70-100 元之间的用户,流失率较高。

5.6 总费用与流失率

我们再看看总费用对用户流失率的影响。

less 复制代码
# 总费用与流失率
total_charges_churn = df.groupby(pd.cut(df['总费用'], bins=10))['是否流失'].mean().reset_index()

# 绘制折线图
line_total = (
    Line(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(total_charges_churn['总费用'].astype(str).tolist())
    .add_yaxis("流失率", total_charges_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="总费用与流失率"))
)

分析: 从折线图中可以看到,总费用较低的用户流失率较高,而总费用较高的用户流失率较低。

5.7 不同付款方式用户流失率

我们再看看不同付款方式对用户流失率的影响。

less 复制代码
# 不同付款方式用户流失率
payment_churn = df.groupby('付款方式')['是否流失'].mean().reset_index()

# 绘制柱状图
bar_payment = (
    Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(payment_churn['付款方式'].tolist())
    .add_yaxis("流失率", payment_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="不同付款方式用户流失率"))
)

分析: 从柱状图中可以看到,使用电子支票付款的用户流失率最高,而使用银行转账付款的用户流失率最低。

5.8 不同互联网服务类型用户流失率

最后,我们看看不同互联网服务类型对用户流失率的影响。

less 复制代码
# 不同互联网服务类型用户流失率
internet_churn = df.groupby('是否开通互联网服务')['是否流失'].mean().reset_index()

# 绘制柱状图
bar_internet = (
    Bar(init_opts=opts.InitOpts(theme='dark', bg_color='#000'))
    .add_xaxis(internet_churn['是否开通互联网服务'].tolist())
    .add_yaxis("流失率", internet_churn['是否流失'].round(2).tolist())
    .set_global_opts(title_opts=opts.TitleOpts(title="不同互联网服务类型用户流失率"))
)

分析: 从柱状图中可以看到,未开通互联网服务的用户流失率最高,而开通光纤互联网服务的用户流失率最低。

六、组合大屏

最后,我们将所有图表组合成一个炫酷的大屏。

scss 复制代码
# 组合大屏
page = Page(layout=Page.DraggablePageLayout)
page.add(pie, bar_gender, bar_contract, line_tenure, line_monthly, line_total, bar_payment, bar_internet)
page.render("telecom_churn_dashboard.html")
print("✅ 已生成 telecom_churn_dashboard.html")

七、总结

通过上述可视化分析,我们可以清晰地看到电信用户流失的多个关键因素:

  • 用户入网时间:入网时间越短,流失率越高。
  • 月度费用:月度费用70-100元之间,流失率高,当月度费用高于110元时,流失率大幅度降低。
  • 总费用:总费用较低的用户流失率较高。
  • 合同类型:按月签约的用户流失率最高,而两年签约的用户流失率最低。
  • 付款方式:使用电子支票付款的用户流失率最高,而使用银行转账付款的用户流失率最低。
  • 互联网服务类型:未开通互联网服务的用户流失率最高,而开通光纤互联网服务的用户流失率最低。

基于这些分析结果,我们可以制定以下策略来降低用户流失率:

  1. 优化合同策略:鼓励用户签订长期合同,如两年合同,以降低流失率。
  2. 调整费用结构:对于新用户,提供优惠的月度费用和总费用套餐,以吸引他们入网并长期使用。
  3. 改善付款方式:提供更多的付款方式选择,特别是银行转账和信用卡支付,以提高用户满意度。
  4. 增强互联网服务:为用户提供高质量的互联网服务,特别是光纤互联网服务,以提高用户忠诚度。

希望这篇文章能帮助你更好地理解和分析电信用户流失数据。为后续的客户的流失预测奠定基础,如果你有任何问题或建议,欢迎在评论区留言!🎉


如果您在人工智能领域遇到技术难题,或是需要专业支持,无论是技术咨询、项目开发还是个性化解决方案,我都可以为您提供专业服务,如有需要可站内私信或添加下方VX名片(ID:xf982831907)

期待与您一起交流,共同探索AI的更多可能!

相关推荐
德育处主任11 小时前
p5.js 从零开始创建 3D 模型,createModel入门指南
前端·数据可视化·canvas
德育处主任11 小时前
p5.js 三角形triangle的用法
前端·数据可视化·canvas
云天徽上17 小时前
【数据可视化】🌩️ 北京密云区2025年7月暴雨深度分析:Python + Pyecharts 炫酷大屏可视化(包含完整数据、代码)
数据可视化
云天徽上1 天前
【数据可视化】全球不同年龄段身高数据可视化分析:Python + Pyecharts 炫酷大屏
数据可视化
德育处主任1 天前
p5.js 正方形square的基础用法
前端·数据可视化·canvas
德育处主任1 天前
p5.js 矩形rect绘制教程
前端·数据可视化·canvas
敲敲敲敲暴你脑袋3 天前
Cesium绘制3D热力山丘图
数据可视化·canvas·cesium
德育处主任3 天前
p5.js 四边形(quad)的基础用法
前端·数据可视化·canvas
叫我:松哥3 天前
基于网络爬虫的在线医疗咨询数据爬取与医疗服务分析系统,技术采用django+朴素贝叶斯算法+boostrap+echart可视化
人工智能·爬虫·python·算法·django·数据可视化·朴素贝叶斯