基于Spark的信用卡逾期数据分析与可视化项目【大数据期末作业】
一、功能与要求
1、实现功能
(1)使用Spark SQL对原始数据集进行数据预处理
(2)使用Spark SQL对预处理后的数据进行分析和统计
(3)通过使用echarts.js组件将进行分析后的数据展示到前端页面中
2、项目要求
(1)项目中需要包含数据获取、数据清洗、数据分析统计、数据可视化看板展示等功能;
(2)使用工具:Visual Studio Code
使用技术:python语言,spark
3、提交作品
项目设计报告、项目源程序(项目工程目录及相关资源文件)、项目演示录屏。
4、项目组各成员工作分工
|
项目名称 |
成员 |
实现功能 |
|
信用卡逾期数据分析 与可视化项目 |
数据分析 |
|
|
数据可视化 |
||
|
数据采集 |
||
|
数据预处理 |
5、对题目的分析与理解
信用卡逾期问题一直是金融行业和个人信用管理中备受关注的议题。逾期情况不仅影响个人信用评级,还可能对金融机构的风险管理产生重大影响。了解逾期情况,尤其是分析导致逾期的因素,可以帮助金融机构更好地了解客户行为,改善信贷政策,降低不良贷款率,提高金融服务的质量。
本项目的目的在于分析信用卡逾期的情况,探究逾期和各种因素之间的关联,为金融机构提供洞见。具体目标包括:
- 年龄与逾期关系分析: 探究不同年龄段的人群中逾期率的变化,了解不同年龄层次的信用还款情况,为定向制定信贷政策提供依据。
- 逾期记录与逾期关系分析: 分析有逾期记录的人中,30-59天逾期和60-89天逾期的比例,深入了解逾期人群中短期和长期逾期的情况。
- 房产抵押与逾期关系分析: 探究有无房产抵押的人中逾期率的差异,了解房产抵押与信用还款情况的关系,为信贷政策的制定提供数据支持。
- 家属人数与逾期关系分析: 分析有无家属的人中逾期率的比例,探究家庭结构对逾期情况的影响,为个性化信贷服务提供依据。
- 月收入与逾期关系分析: 比较超过均值月收入和低于均值月收入人群的逾期情况,了解月收入对信用还款的影响,为信贷额度的确定提供数据支持。
二、方案设计
(一)系统总体设计
(1)系统总体架构设计

(2)系统模块设计
data_preprocessing.py:数据预处理模块
data_analysis.py:数据分析模块
data_web.py:数据可视化模块
|
字段名称 |
字段含义 |
|
SeriousDlqin2yrs |
是否逾期 |
|
RevolvingUtilizationOfUnsecuredLines |
信用卡和个人信贷额度的总余额 |
|
Age |
年龄 |
|
NumberOfTime30-59DaysPastDueNotWorse |
借款人逾期30-59天的次数 |
|
DebtRatio |
负债比率 |
|
MonthlyIncome |
月收入 |
|
NumberOfOpenCreditLinesAndLoans |
未偿还贷款数量 |
|
NumberOfTimes90DaysLate |
借款人逾期90天以上的次数 |
|
NumberRealEstateLoansOrLines |
房地产贷款的数量 |
|
NumberOfTime60-89DaysPastDueNotWorse |
借款人逾期60-89天的次数 |
|
NumberOfDependents |
家庭中的家属人数 |
三、项目的实现
1、系统开发环境
Linux: Ubuntu 22.04.3
Hadoop3.1.3
Python:3.6
Spark:2.4.0
Jupyter Notebook
Pyecharts
2、各模块功能实现
(1)年龄与是否逾期情况分析
# 共有逾期10026人,139974没有逾期,总人数150000
total_y = []
for i in range(2):
total_y.append(df.filter(df['y'] == i).count())
all_list.append(total_y)
# 年龄分析
df_age = df.select(df['age'],df['y'])
agenum = []
bin = [0,30,45,60,75,100]
# 统计各个年龄段的人口
for i in range(5):
agenum.append(df_age.filter(df['age'].between(bin[i],bin[i+1])).count())
all_list.append(agenum)
# 统计各个年龄段逾期与不逾期的数量
age_y = []
for i in range(5):
y0 = df_age.filter(df['age'].between(bin[i],bin[i+1])).\
filter(df['y']=='0').count()
y1 = df_age.filter(df['age'].between(bin[i],bin[i+1])).\
filter(df['y']=='1').count()
age_y.append([y0,y1])
all_list.append(age_y)



源码及详细文章获取请添加下方名片
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)