一、个人简介
- 💖💖作者:计算机编程果茶熊
- 💙💙个人简介:曾长期从事计算机专业培训教学,担任过编程老师,同时本人也热爱上课教学,擅长Java、微信小程序、Python、Golang、安卓Android等多个IT方向。会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。平常喜欢分享一些自己开发中遇到的问题的解决办法,也喜欢交流技术,大家有技术代码这一块的问题可以问我!
- 💛💛想说的话:感谢大家的关注与支持!
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 计算机毕业设计选题
- 💕💕文末获取源码联系计算机编程果茶熊
二、系统介绍
- 大数据框架:Hadoop+Spark(Hive需要定制修改)
- 开发语言:Java+Python(两个版本都支持)
- 数据库:MySQL
- 后端框架:SpringBoot(Spring+SpringMVC+Mybatis)+Django(两个版本都支持)
- 前端:Vue+Echarts+HTML+CSS+JavaScript+jQuery 基于大数据的用户贷款行为数据分析系统是一套专门针对金融机构用户贷款行为进行深度分析的综合性大数据处理平台。该系统采用Python作为主要开发语言,结合Django Web框架构建后端服务,通过Hadoop分布式文件系统(HDFS)实现海量数据的可靠存储,利用Spark计算引擎进行高效的数据处理和分析。系统前端采用Vue框架配合ElementUI组件库打造现代化的用户界面,通过Echarts图表库实现丰富的数据可视化效果。核心功能模块涵盖用户贷款行为数据管理、收入年龄关联性分析、职业工作状态统计分析、贷款模型效果评估、地理位置分布分析、用户画像生成以及综合性可视化大屏展示。系统运用Spark SQL进行结构化数据查询,结合Pandas和NumPy进行数据预处理和统计计算,通过MySQL数据库存储分析结果和配置信息。整个系统架构充分体现了大数据技术在金融数据分析领域的实际应用价值,为金融机构的风险控制和业务决策提供了有力的技术支撑。
三、基于大数据的用户贷款行为数据分析系统-视频解说
还在为大数据项目发愁?用户贷款行为数据分析系统:Python+Django+Spark完美技术组合解决你的烦恼
四、基于大数据的用户贷款行为数据分析系统-功能展示
五、基于大数据的用户贷款行为数据分析系统-代码展示
from pyspark.sql import SparkSession
from pyspark.sql.functions import col, count, avg, sum, max, min, desc, asc, when
from pyspark.sql.types import StructType, StructField, StringType, IntegerType, DoubleType
import pandas as pd
import numpy as np
from django.http import JsonResponse
from django.views import View
import json
spark = SparkSession.builder.appName("LoanBehaviorAnalysis").config("spark.sql.adaptive.enabled", "true").config("spark.sql.adaptive.coalescePartitions.enabled", "true").getOrCreate()
class IncomeAgeAnalysisView(View):
def get(self, request):
loan_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/loan_analysis").option("dbtable", "user_loan_data").option("user", "root").option("password", "password").load()
age_groups = loan_df.withColumn("age_group", when(col("age") < 25, "18-24").when((col("age") >= 25) & (col("age") < 35), "25-34").when((col("age") >= 35) & (col("age") < 45), "35-44").when((col("age") >= 45) & (col("age") < 55), "45-54").otherwise("55+"))
income_age_stats = age_groups.groupBy("age_group").agg(avg("monthly_income").alias("avg_income"), count("user_id").alias("user_count"), avg("loan_amount").alias("avg_loan_amount"), sum("loan_amount").alias("total_loan_amount"))
income_age_correlation = age_groups.groupBy("age_group").agg(avg("monthly_income").alias("avg_income")).orderBy(desc("avg_income"))
high_income_users = age_groups.filter(col("monthly_income") > 15000).groupBy("age_group").agg(count("user_id").alias("high_income_count"))
loan_approval_rate = age_groups.groupBy("age_group").agg((sum(when(col("loan_status") == "approved", 1).otherwise(0)) / count("*") * 100).alias("approval_rate"))
risk_assessment = age_groups.groupBy("age_group").agg(avg("credit_score").alias("avg_credit_score"), (sum(when(col("overdue_days") > 30, 1).otherwise(0)) / count("*") * 100).alias("overdue_rate"))
income_distribution = age_groups.groupBy("age_group", "income_level").agg(count("user_id").alias("count")).orderBy("age_group", "income_level")
age_income_trend = age_groups.select("age", "monthly_income", "loan_amount").orderBy("age")
correlation_coefficient = age_income_trend.stat.corr("age", "monthly_income")
final_result = income_age_stats.join(income_age_correlation, "age_group", "left").join(high_income_users, "age_group", "left").join(loan_approval_rate, "age_group", "left").join(risk_assessment, "age_group", "left")
pandas_result = final_result.toPandas()
pandas_result['high_income_count'] = pandas_result['high_income_count'].fillna(0)
pandas_result['correlation_score'] = correlation_coefficient
response_data = {
'age_income_analysis': pandas_result.to_dict('records'),
'income_distribution': income_distribution.toPandas().to_dict('records'),
'correlation_coefficient': correlation_coefficient,
'trend_data': age_income_trend.limit(1000).toPandas().to_dict('records')
}
return JsonResponse(response_data, safe=False)
class OccupationAnalysisView(View):
def get(self, request):
loan_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/loan_analysis").option("dbtable", "user_loan_data").option("user", "root").option("password", "password").load()
occupation_stats = loan_df.groupBy("occupation").agg(count("user_id").alias("total_users"), avg("monthly_income").alias("avg_income"), avg("loan_amount").alias("avg_loan_amount"), avg("credit_score").alias("avg_credit_score"))
work_experience_analysis = loan_df.groupBy("occupation").agg(avg("work_experience").alias("avg_work_exp"), max("work_experience").alias("max_work_exp"), min("work_experience").alias("min_work_exp"))
occupation_risk_profile = loan_df.groupBy("occupation").agg((sum(when(col("loan_status") == "approved", 1).otherwise(0)) / count("*") * 100).alias("approval_rate"), (sum(when(col("overdue_days") > 0, 1).otherwise(0)) / count("*") * 100).alias("default_rate"), avg("overdue_days").alias("avg_overdue_days"))
high_risk_occupations = occupation_risk_profile.filter(col("default_rate") > 15).orderBy(desc("default_rate"))
occupation_income_segments = loan_df.groupBy("occupation").agg((sum(when(col("monthly_income") < 5000, 1).otherwise(0))).alias("low_income_count"), (sum(when((col("monthly_income") >= 5000) & (col("monthly_income") < 15000), 1).otherwise(0))).alias("mid_income_count"), (sum(when(col("monthly_income") >= 15000, 1).otherwise(0))).alias("high_income_count"))
loan_purpose_by_occupation = loan_df.groupBy("occupation", "loan_purpose").agg(count("user_id").alias("purpose_count")).orderBy("occupation", desc("purpose_count"))
employment_stability = loan_df.filter(col("work_experience") > 0).groupBy("occupation").agg(avg("work_experience").alias("stability_score"), (sum(when(col("work_experience") > 5, 1).otherwise(0)) / count("*") * 100).alias("stable_employment_rate"))
occupation_performance = occupation_stats.join(work_experience_analysis, "occupation", "left").join(occupation_risk_profile, "occupation", "left").join(occupation_income_segments, "occupation", "left").join(employment_stability, "occupation", "left")
top_occupations = occupation_performance.orderBy(desc("total_users")).limit(10)
pandas_occupation_data = occupation_performance.toPandas()
pandas_purpose_data = loan_purpose_by_occupation.toPandas()
pandas_risk_data = high_risk_occupations.toPandas()
response_data = {
'occupation_analysis': pandas_occupation_data.to_dict('records'),
'top_occupations': top_occupations.toPandas().to_dict('records'),
'loan_purpose_distribution': pandas_purpose_data.to_dict('records'),
'high_risk_occupations': pandas_risk_data.to_dict('records'),
'employment_stability_metrics': employment_stability.toPandas().to_dict('records')
}
return JsonResponse(response_data, safe=False)
class UserProfileAnalysisView(View):
def get(self, request):
loan_df = spark.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/loan_analysis").option("dbtable", "user_loan_data").option("user", "root").option("password", "password").load()
user_segments = loan_df.withColumn("income_segment", when(col("monthly_income") < 5000, "低收入").when((col("monthly_income") >= 5000) & (col("monthly_income") < 15000), "中等收入").otherwise("高收入")).withColumn("age_segment", when(col("age") < 30, "年轻用户").when((col("age") >= 30) & (col("age") < 50), "中年用户").otherwise("中老年用户")).withColumn("credit_segment", when(col("credit_score") < 600, "信用较差").when((col("credit_score") >= 600) & (col("credit_score") < 750), "信用良好").otherwise("信用优秀"))
comprehensive_profile = user_segments.groupBy("income_segment", "age_segment", "credit_segment").agg(count("user_id").alias("segment_count"), avg("loan_amount").alias("avg_loan_amount"), avg("monthly_income").alias("avg_income"), (sum(when(col("loan_status") == "approved", 1).otherwise(0)) / count("*") * 100).alias("approval_rate"))
high_value_users = user_segments.filter((col("monthly_income") > 20000) & (col("credit_score") > 700)).groupBy("occupation", "age_segment").agg(count("user_id").alias("high_value_count"), avg("loan_amount").alias("avg_high_value_loan"))
risk_user_identification = user_segments.filter((col("credit_score") < 600) | (col("overdue_days") > 30)).groupBy("income_segment", "occupation").agg(count("user_id").alias("risk_user_count"), avg("overdue_days").alias("avg_overdue"), avg("credit_score").alias("avg_risk_score"))
user_behavior_patterns = user_segments.groupBy("age_segment", "income_segment").agg(avg("loan_frequency").alias("avg_loan_frequency"), avg("repayment_amount").alias("avg_repayment"), (sum(when(col("early_repayment") == 1, 1).otherwise(0)) / count("*") * 100).alias("early_repay_rate"))
loyalty_analysis = user_segments.groupBy("credit_segment", "income_segment").agg(avg("customer_tenure").alias("avg_tenure"), count("user_id").alias("customer_count"), (sum(when(col("repeat_customer") == 1, 1).otherwise(0)) / count("*") * 100).alias("loyalty_rate"))
geographic_profile = user_segments.groupBy("province", "income_segment").agg(count("user_id").alias("regional_count"), avg("monthly_income").alias("regional_avg_income")).orderBy("province", desc("regional_count"))
user_lifecycle_stage = user_segments.withColumn("lifecycle_stage", when(col("customer_tenure") < 12, "新客户").when((col("customer_tenure") >= 12) & (col("customer_tenure") < 36), "成长客户").otherwise("成熟客户")).groupBy("lifecycle_stage", "credit_segment").agg(count("user_id").alias("stage_count"), avg("loan_amount").alias("stage_avg_loan"))
final_profile_data = comprehensive_profile.toPandas()
high_value_data = high_value_users.toPandas()
risk_data = risk_user_identification.toPandas()
behavior_data = user_behavior_patterns.toPandas()
loyalty_data = loyalty_analysis.toPandas()
geographic_data = geographic_profile.toPandas()
lifecycle_data = user_lifecycle_stage.toPandas()
response_data = {
'user_comprehensive_profile': final_profile_data.to_dict('records'),
'high_value_users': high_value_data.to_dict('records'),
'risk_users': risk_data.to_dict('records'),
'behavior_patterns': behavior_data.to_dict('records'),
'loyalty_analysis': loyalty_data.to_dict('records'),
'geographic_distribution': geographic_data.to_dict('records'),
'lifecycle_analysis': lifecycle_data.to_dict('records')
}
return JsonResponse(response_data, safe=False)
六、基于大数据的用户贷款行为数据分析系统-文档展示
七、END
- 💛💛想说的话:感谢大家的关注与支持!
- 💜💜
- 网站实战项目
- 安卓/小程序实战项目
- 大数据实战项目
- 计算机毕业设计选题
- 💕💕文末获取源码联系计算机编程果茶熊