企业级大数据应用实践:电信客户流失分析系统从Spark数据处理到可视化展示

一、个人简介

💖💖作者:计算机编程果茶熊
💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
计算机毕业设计选题
💕💕文末获取源码联系计算机编程果茶熊

二、系统介绍

大数据框架:Hadoop+Spark(Hive需要定制修改)
开发语言:Java+Python(两个版本都支持)
数据库:MySQL
后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery
基于大数据的电信客户流失数据分析系统是一套完整的企业级数据分析解决方案,采用Hadoop+Spark大数据技术架构,实现对电信行业客户流失数据的深度挖掘和智能分析。系统后端基于Python Django框架构建,前端采用Vue+ElementUI+Echarts技术栈,提供直观的数据可视化展示界面。系统核心功能涵盖电信客户流失数据管理、大屏可视化展示、合约分析、业务分析、总体分析、分群分析和特征分析等多个维度,通过Spark SQL进行大规模数据处理,结合Pandas、NumPy等数据科学库实现复杂的统计分析和预测建模。系统支持海量客户数据的实时处理和批量分析,能够帮助电信企业及时发现客户流失规律,识别高风险客户群体,为制定精准的客户挽留策略提供数据支撑,具有较强的实用价值和技术示范意义。

三、基于大数据的电信客户流失数据分析系统-视频解说

企业级大数据应用实践:电信客户流失分析系统从Spark数据处理到可视化展示

四、基于大数据的电信客户流失数据分析系统-功能展示

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

五、基于大数据的电信客户流失数据分析系统-代码展示



from pyspark.sql import SparkSession
from pyspark.sql.functions import col, when, count, avg, sum, desc, asc
from pyspark.ml.feature import VectorAssembler
from pyspark.ml.clustering import KMeans
import pandas as pd
import numpy as np

spark = SparkSession.builder.appName("TelecomChurnAnalysis").getOrCreate()

def customer_churn_analysis(data_path):
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    total_customers = df.count()
    churned_customers = df.filter(col("churn") == 1).count()
    churn_rate = churned_customers / total_customers
    gender_churn = df.groupBy("gender").agg(
        count("*").alias("total"),
        sum("churn").alias("churned")
    ).withColumn("churn_rate", col("churned") / col("total"))
    age_group_churn = df.withColumn("age_group", 
        when(col("age") < 30, "Young")
        .when(col("age") < 50, "Middle")
        .otherwise("Senior")
    ).groupBy("age_group").agg(
        count("*").alias("total"),
        sum("churn").alias("churned"),
        avg("monthly_charges").alias("avg_monthly_charges")
    ).withColumn("churn_rate", col("churned") / col("total"))
    contract_analysis = df.groupBy("contract_type").agg(
        count("*").alias("customer_count"),
        sum("churn").alias("churned_count"),
        avg("total_charges").alias("avg_total_charges")
    ).withColumn("churn_rate", col("churned_count") / col("customer_count"))
    service_usage_churn = df.groupBy("internet_service").agg(
        count("*").alias("total_customers"),
        sum("churn").alias("churned_customers"),
        avg("monthly_charges").alias("avg_charges")
    ).withColumn("churn_percentage", col("churned_customers") / col("total_customers") * 100)
    high_risk_customers = df.filter(
        (col("contract_type") == "Month-to-month") & 
        (col("monthly_charges") > 70) & 
        (col("tenure") < 12)
    ).select("customer_id", "monthly_charges", "tenure", "total_charges")
    result_data = {
        "overall_churn_rate": churn_rate,
        "total_customers": total_customers,
        "churned_customers": churned_customers,
        "gender_analysis": gender_churn.collect(),
        "age_group_analysis": age_group_churn.collect(),
        "contract_analysis": contract_analysis.collect(),
        "service_analysis": service_usage_churn.collect(),
        "high_risk_count": high_risk_customers.count()
    }
    return result_data

def customer_segmentation_analysis(data_path):
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    feature_cols = ["tenure", "monthly_charges", "total_charges"]
    assembler = VectorAssembler(inputCols=feature_cols, outputCol="features")
    df_features = assembler.transform(df)
    kmeans = KMeans(k=4, featuresCol="features", predictionCol="segment")
    model = kmeans.fit(df_features)
    segmented_df = model.transform(df_features)
    segment_stats = segmented_df.groupBy("segment").agg(
        count("*").alias("customer_count"),
        avg("tenure").alias("avg_tenure"),
        avg("monthly_charges").alias("avg_monthly_charges"),
        avg("total_charges").alias("avg_total_charges"),
        sum("churn").alias("churned_customers")
    ).withColumn("churn_rate", col("churned_customers") / col("customer_count"))
    segment_service_analysis = segmented_df.groupBy("segment", "internet_service").agg(
        count("*").alias("service_count"),
        avg("monthly_charges").alias("avg_service_charges")
    )
    high_value_segments = segment_stats.filter(
        (col("avg_monthly_charges") > 60) & 
        (col("churn_rate") < 0.2)
    ).select("segment", "customer_count", "avg_monthly_charges", "churn_rate")
    at_risk_segments = segment_stats.filter(
        col("churn_rate") > 0.3
    ).orderBy(desc("churn_rate"))
    segment_contract_preference = segmented_df.groupBy("segment", "contract_type").agg(
        count("*").alias("contract_count")
    ).orderBy("segment", desc("contract_count"))
    segmentation_results = {
        "segment_statistics": segment_stats.collect(),
        "segment_service_analysis": segment_service_analysis.collect(),
        "high_value_segments": high_value_segments.collect(),
        "at_risk_segments": at_risk_segments.collect(),
        "contract_preferences": segment_contract_preference.collect(),
        "total_segments": 4
    }
    return segmentation_results

def business_performance_analysis(data_path):
    df = spark.read.csv(data_path, header=True, inferSchema=True)
    monthly_revenue = df.groupBy("signup_month").agg(
        sum("monthly_charges").alias("total_monthly_revenue"),
        count("*").alias("new_customers"),
        sum("churn").alias("churned_customers")
    ).withColumn("net_customer_growth", col("new_customers") - col("churned_customers"))
    service_revenue_analysis = df.groupBy("internet_service").agg(
        sum("monthly_charges").alias("service_revenue"),
        count("*").alias("service_customers"),
        avg("monthly_charges").alias("avg_service_charge"),
        sum("churn").alias("service_churned")
    ).withColumn("revenue_per_customer", col("service_revenue") / col("service_customers"))
    contract_profitability = df.groupBy("contract_type").agg(
        sum("total_charges").alias("total_contract_revenue"),
        count("*").alias("contract_customers"),
        avg("tenure").alias("avg_contract_tenure"),
        sum("churn").alias("contract_churned")
    ).withColumn("customer_lifetime_value", col("total_contract_revenue") / col("contract_customers"))
    payment_method_analysis = df.groupBy("payment_method").agg(
        count("*").alias("payment_customers"),
        sum("monthly_charges").alias("payment_revenue"),
        sum("churn").alias("payment_churned"),
        avg("total_charges").alias("avg_customer_value")
    ).withColumn("churn_rate", col("payment_churned") / col("payment_customers"))
    senior_citizen_business = df.filter(col("senior_citizen") == 1).agg(
        count("*").alias("senior_customers"),
        sum("monthly_charges").alias("senior_revenue"),
        avg("monthly_charges").alias("avg_senior_charge"),
        sum("churn").alias("senior_churned")
    ).withColumn("senior_churn_rate", col("senior_churned") / col("senior_customers"))
    dependents_impact = df.groupBy("dependents").agg(
        count("*").alias("dependent_customers"),
        sum("total_charges").alias("dependent_revenue"),
        avg("tenure").alias("avg_dependent_tenure"),
        sum("churn").alias("dependent_churned")
    ).withColumn("dependent_churn_rate", col("dependent_churned") / col("dependent_customers"))
    business_metrics = {
        "monthly_performance": monthly_revenue.collect(),
        "service_revenue": service_revenue_analysis.collect(),
        "contract_profitability": contract_profitability.collect(),
        "payment_analysis": payment_method_analysis.collect(),
        "senior_business": senior_citizen_business.collect(),
        "dependents_impact": dependents_impact.collect(),
        "total_revenue": df.agg(sum("total_charges")).collect()[0][0]
    }
    return business_metrics

六、基于大数据的电信客户流失数据分析系统-文档展示

在这里插入图片描述

七、END

💛💛想说的话:感谢大家的关注与支持!
💜💜
网站实战项目
安卓/小程序实战项目
大数据实战项目
计算机毕业设计选题
💕💕文末获取源码联系计算机编程果茶熊

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值