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

发布于:2025-07-30 ⋅ 阅读:(29) ⋅ 点赞:(0)

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述


一、引言

  在电信行业,用户流失是一个关键问题,因为它直接影响到公司的收入和市场份额。通过分析用户流失的原因,我们可以制定有效的策略来减少流失率,提高用户满意度和忠诚度。本文将使用 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

四、数据预处理

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

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 用户流失率

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

# 用户流失率
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 不同性别用户流失率

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

# 不同性别用户流失率
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 不同合同类型用户流失率

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

# 不同合同类型用户流失率
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 用户入网时间与流失率

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

# 用户入网时间与流失率
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 月度费用与流失率

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

# 月度费用与流失率
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 总费用与流失率

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

# 总费用与流失率
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 不同付款方式用户流失率

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

# 不同付款方式用户流失率
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 不同互联网服务类型用户流失率

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

# 不同互联网服务类型用户流失率
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="不同互联网服务类型用户流失率"))
)

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

六、组合大屏

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

# 组合大屏
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. 增强互联网服务:为用户提供高质量的互联网服务,特别是光纤互联网服务,以提高用户忠诚度。

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



网站公告

今日签到

点亮在社区的每一天
去签到