💖💖作者:计算机编程小央姐 💙💙个人简介:曾长期从事计算机专业培训教学,本人也热爱上课教学,语言擅长Java、微信小程序、Python、Golang、安卓Android等,开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我! 💛💛想说的话:感谢大家的关注与支持! 💜💜
💕💕文末获取源码
@TOC
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统功能介绍
基于大数据的电信客户流失数据分析系统以 Hadoop 与 Spark 为核心技术支撑,整合 HDFS 分布式存储、Hive 数据仓库及 Echarts 可视化工具,专注于电信行业客户流失问题的深度分析。系统采用大数据框架处理海量客户数据,通过 Spark SQL 实现高效的数据查询与计算,能够从客户流失总体概览、用户人口属性、客户账户及合约、客户业务办理、客户分群与价值五个核心维度展开分析。后端依托大数据技术栈完成数据清洗、转换与建模,前端利用 Echarts 构建直观的可视化图表,清晰呈现不同在网时长、消费金额、合同类型等因素与客户流失的关联关系,帮助使用者快速把握客户流失规律,为后续制定留存策略提供数据支撑,整体系统设计贴合电信行业实际业务场景,操作流程简洁,适合作为计算机专业大数据方向的毕业设计项目。
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统技术介绍
大数据框架:Hadoop+Spark(本次没用Hive,支持定制) 开发语言:Python+Java(两个版本都支持) 后端框架:Django+Spring Boot(Spring+SpringMVC+Mybatis)(两个版本都支持) 前端:Vue+ElementUI+Echarts+HTML+CSS+JavaScript+jQuery 详细技术点:Hadoop、HDFS、Spark、Spark SQL、Pandas、NumPy 数据库:MySQL
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统背景意义
当下电信行业竞争越来越激烈,各家运营商都在想办法留住客户,毕竟客户是业务发展的基础。很多电信企业面对海量的客户数据,不知道该怎么从中找出可能流失的客户,也没法清楚了解哪些因素会导致客户离开。以前可能靠人工分析少量数据,但现在客户数据量越来越大,包含消费记录、合约信息、业务办理情况等各种内容,人工处理不仅效率低,还容易漏掉关键信息。而且客户流失往往不是突然发生的,可能在某个时间段或者满足某些条件时就有迹象了,要是不能及时发现这些迹象,等客户真的流失了再补救就晚了。在这样的情况下,用大数据技术来分析电信客户流失问题就很有必要,能更好地处理海量数据,找出潜在的流失规律,这也是我选择这个课题的主要背景。这个选题首先能帮我把大学学的大数据知识用起来,像 Hadoop、Spark 这些技术,以前只是理论学习,通过做这个系统,能实际操作分布式存储和数据计算,提升自己的技术应用能力,对完成毕业设计来说是个很好的实践机会。从实际应用角度看,系统能给电信企业提供一些简单的客户流失分析思路,比如通过分析不同合同类型客户的流失情况,让企业大概知道长期合同对留存客户的作用,或者了解高消费客户的流失倾向,帮助企业更有针对性地关注这类客户。不过毕竟这只是个毕业设计,功能和性能可能没法和企业实际使用的系统比,但至少能为相关分析工作提供一个基础框架,要是后续有机会优化,还能进一步提升它的实用性,整体来说,这个课题既有学习价值,也有一定的实际参考意义。
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统演示视频
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统演示图片
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-系统部分代码
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import static org.apache.spark.sql.functions.
;
public class TelecomChurnAnalysis {
public static void main(String[] args) {
SparkSession spark = SparkSession.builder()
.appName("TelecomChurnAnalysis")
.master("local[
]")
.enableHiveSupport ()
.getOrCreate ();
// 1. 客户总体流失率分析核心处理函数
public static Dataset calculateOverallChurnRate(SparkSession spark, String tableName) {
Dataset churnData = spark.sql("SELECT Churn, COUNT(
) AS total FROM " + tableName + " GROUP BY Churn");
long totalCustomers = churnData.agg(sum("total")).head().getLong(0);
Dataset churnRate = churnData.withColumn ("churn_rate",
when (col ("Churn").equalTo ("Yes"), col ("total").divide (totalCustomers).multiply (100))
.otherwise (lit (0.0)))
.select (col ("Churn"), col ("total"), round (col ("churn_rate"), 2).alias ("churn_rate_percent"));
churnRate.createOrReplaceTempView ("overall_churn_result");
return churnRate;
}
// 2. 不同合同类型客户流失率分析核心处理函数
public static Dataset analyzeChurnByContractType(SparkSession spark, String tableName) {
Dataset contractChurnData = spark.sql("SELECT Contract, Churn, COUNT(
) AS customer_count FROM " + tableName + " GROUP BY Contract, Churn");
Dataset contractTotal = contractChurnData.groupBy("Contract").agg(sum("customer_count").alias("total_per_contract"));
Dataset contractChurnRate = contractChurnData.join (contractTotal, "Contract")
.withColumn ("churn_rate",
when (col ("Churn").equalTo ("Yes"), col ("customer_count").divide (col ("total_per_contract")).multiply (100))
.otherwise (lit (0.0)))
.select (col ("Contract"), col ("Churn"), col ("customer_count"), col ("total_per_contract"),
round (col ("churn_rate"), 2).alias ("churn_rate_percent"))
.orderBy (col ("churn_rate_percent").desc ());
contractChurnRate.createOrReplaceTempView ("contract_churn_result");
return contractChurnRate;
}
// 3. 基于 LTM 模型的客户分群核心处理函数
public static Dataset segmentCustomersByLTM(SparkSession spark, String tableName) {
Dataset ltmData = spark.sql ("SELECT tenure, Contract, MonthlyCharges, customerID FROM" + tableName)
.withColumn ("tenure_segment",
when (col ("tenure").leq (12), "0-12 个月")
.when (col ("tenure").leq (24), "13-24 个月")
.when (col ("tenure").leq (36), "25-36 个月")
.otherwise ("36 个月以上"))
.withColumn ("contract_type_score",
when (col ("Contract").equalTo ("Two year"), 3)
.when (col ("Contract").equalTo ("One year"), 2)
.otherwise (1))
.withColumn ("monthly_charge_segment",
when (col ("MonthlyCharges").leq (30), "低消费")
.when (col ("MonthlyCharges").leq (60), "中消费")
.otherwise ("高消费"))
.withColumn ("ltm_segment",
concat (col ("tenure_segment"), lit ("-"), col ("monthly_charge_segment"), lit ("-"),
when (col ("contract_type_score").equalTo (3), "长期合约")
.when (col ("contract_type_score").equalTo (2), "中期合约")
.otherwise ("短期合约")));
Dataset customerSegment = ltmData.groupBy("ltm_segment").agg(
count("customerID").alias("segment_count"),
avg("tenure").alias("avg_tenure"),
avg("MonthlyCharges").alias("avg_monthly_charge")
).orderBy(col("segment_count").desc());
customerSegment.createOrReplaceTempView("ltm_customer_segment");
return customerSegment;
}
spark.stop();
}
}
【spark+hadoop大数据毕设】基于大数据的电信客户流失数据分析系统-结语
💟💟如果大家有任何疑虑,欢迎在下方位置详细交流。