基于Spark技术的银行客户数据分析

简介: 基于Spark技术的银行客户数据分析

1. 实验室名称:

大数据实验教学系统

2. 实验项目名称:

案例:银行客户数据分析

一、业务场景

某银行积累有大量客户数据,现希望大数据分析团队使用Spark技术对这些数据进行分析,以期获得有价值的信息。

二、数据集说明

本案例用到的数据集说明如下:

  数据集文件:/data/dataset/bank-full.csv

  该数据集包含银行客户信息,其中部分字段的说明如下:

字段 定义
age 客户年龄
job 职业
marital 婚姻状况
education 受教育程度
balance 银行账户余额

三、操作步骤

阶段一、启动HDFS、Spark集群服务和zeppelin服务器

1、启动HDFS集群

  在Linux终端窗口下,输入以下命令,启动HDFS集群:

1.  $ start-dfs.sh

2、启动Spark集群

  在Linux终端窗口下,输入以下命令,启动Spark集群:

1.  $ cd /opt/spark
2.  $ ./sbin/start-all.sh

3、启动zeppelin服务器

  在Linux终端窗口下,输入以下命令,启动zeppelin服务器:

1.  $ zeppelin-daemon.sh start

4、验证以上进程是否已启动

  在Linux终端窗口下,输入以下命令,查看启动的服务进程:

1.  $ jps

如果显示以下6个进程,则说明各项服务启动正常,可以继续下一阶段。

1.  2288 NameNode
2.  2402 DataNode
3.  2603 SecondaryNameNode
4.  2769 Master
5.  2891 Worker
6.  2984 ZeppelinServer

阶段二、准备案例中用到的数据集

1、将本案例要用到的数据集上传到HDFS文件系统的”/data/dataset/“目录下。在Linux终端窗口下,输入以下命令:

1.  $ hdfs dfs -mkdir -p /data/dataset
2.  $ hdfs dfs -put /data/dataset/bank-full.csv /data/dataset/

2、在Linux终端窗口下,输入以下命令,查看HDFS上是否已经上传了该数据集:

1.  $ hdfs dfs -ls /data/dataset/

这时应该看到数据集文件bank-full.csv已经上传到了HDFS的”/data/dataset/“目录下。

阶段三、对数据集进行探索和分析

1、新建一个zeppelin notebook文件,并命名为bank_project。

  2、加载数据集到RDD。在notebook单元格中,输入以下代码,加载数据集到RDD:

1.  val filePath = "/data/dataset/bank-full.csv"      // 定义要加载数据集的hdfs路径
2.  val bankText = sc.textFile(filePath)              // 读取数据集到rdd
3.       
4.  bankText.cache   // 缓存rdd

同时按下Shift+Enter键,执行以上代码。

3、对数据集进行简单探索。在notebook单元格中,输入以下代码:

1.  bankText.take(2).foreach(println)

同时按下Shift+Enter键,执行以上代码,输出内容如下:

“age”;”job”;”marital”;”education”;”default”;”balance”;”housing”;”loan”;”contact”;”day”;”month”;”duration”;”campaign”;”pdays”;”previous”;”poutcome”;”y”
58;”management”;”married”;”tertiary”;”no”;2143;”yes”;”no”;”unknown”;5;”may”;261;1;-1;0;”unknown”;”no”

由以上输出内容可以看出,原始的数据集中带有标题行。另外,除了我们关注的5个字段外,实际还包括了其他更多的字段。

4、数据提炼。我们需要对原始数据集进行处理,去掉标题行,并只提取所需要的5个字段。在notebook单元格中,输入以下代码:

1.  // 定义case class类
2.  case class Bank(age:Integer,job:String,marital:String,education:String,balance:Integer)
3.       
4.  // 拆分每一行,过滤掉第一行(以age开头的标题行),并映射到 Bank case class
5.  val bank = bankText.map(s => s.split(";")).filter(s => s(0) != "\"age\"").map(s => 
6.         Bank(s(0).replaceAll("\"","").replaceAll(" ", "").toInt,
7.              s(1).replaceAll("\"",""),
8.              s(2).replaceAll("\"",""),
9.              s(3).replaceAll("\"",""),
10.             s(5).replaceAll("\"","").toInt)
11.     )

同时按下Shift+Enter键,执行以上代码,输出内容如下:

defined class Bank
bank: org.apache.spark.rdd.RDD[Bank] = MapPartitionsRDD[4] at map at :36

由以上输出内容可以看出,经过转换以后,RDD中的内容变量了Bank类型的对象。

5、将band RDD转换为DataFrame。在notebook单元格中,输入以下代码:

1.  val bankDF = bank.toDF()

同时按下Shift+Enter键,执行以上代码,输出内容如下:

bankDF: org.apache.spark.sql.DataFrame = [age: int, job: string … 3 more fields]

由以上输出内容可以看出,经过转换以后,我们获得了一个名为bankDF的DataFrame。

6、查看bankDF的数据和格式。在notebook单元格中,输入以下代码:

1.  bankDF.show

同时按下Shift+Enter键,执行以上代码,输出内容如下:

由以上输出内容可以看出,在使用show方法显示DataFrame时,默认只显示前20行记录。

7、注册临时表,使用SQL进行查询。在notebook单元格中,输入以下代码:

1.  bankDF.createOrReplaceTempView("bank_tb")

同时按下Shift+Enter键,执行以上代码,创建一个名为”bank_tb”的临时视图。


8、查看年龄小于30岁的客户信息。在notebook单元格中,输入以下代码:

1.  spark.sql("select * from bank_tb where age<30").show

同时按下Shift+Enter键,执行以上代码,,输出内容如下:


ce352b58e6df4b6981ccfe8ae868397d.png

9、输出DataFrame的Schema模式信息。在notebook单元格中,输入以下代码:

1.  bankDF.printSchema

同时按下Shift+Enter键,执行以上代码,,输出内容如下:

root
 |— age: integer (nullable = true)
 |— job: string (nullable = true)
 |— marital: string (nullable = true)
 |— education: string (nullable = true)
 |— balance: integer (nullable = true)

由以上输出内容可以看出,在转换为DataFrame时,Spark SQL自动推断数据类型,其中age和balance字段为integer整型,其他字段为string字符串类型。

10、查看不同年龄段的客户人数。在notebook单元格中,输入以下代码:

1.  spark.sql("""select age,count(age) as total_ages 
2.             from bank_tb
3.             where age<30
4.             group by age
5.             order by age""").show

同时按下Shift+Enter键,执行以上代码,输出内容如下:

2ae1ae5790dc49798439caeadb0d2e88.png

11、查看不同年龄段的客户人数,并可视化展示。在notebook单元格中,输入以下代码:


1.  %sql
2.  select age,count(age) as total_ages 
3.  from bank_tb
4.  where age<30
5.  group by age
6.  order by age

同时按下Shift+Enter键,执行以上代码,输出内容如下:


369aa1ab35d84bed8cfc563696282d03.png


注意,在执行可视化时,一定要在单元格中的第一行指定”%sql”。在生成的可视化图上,将鼠标放在不同的比例部分,会出现相应的数字。

12、根据婚姻状况的不同显示对应的年龄分布,并可视化展示。在notebook单元格中,输入以下代码:

1.  %sql
2.  select age, count(1) 
3.  from bank_tb 
4.  where marital="${marital=single,single(未婚)|divorced(离婚)|married(已婚)}" 
5.  group by age 
6.  order by age

同时按下Shift+Enter键,执行以上代码,输出内容如下:


43e9edfd22c144a0aa9de4b37c8398c2.png

注意,在执行可视化时,一定要在单元格中的第一行指定”%sql”。在生成的可视化图上,可单击下拉框右侧的三角按钮选择婚姻类别,动态查看相应的结果。

阶段四、自行练习

1、使用本案例的数据集,查询客户中每种婚姻状况对应的人数,并可视化呈现。

2、使用本案例的数据集,查询不同年龄段客户的平均存款余额,并可高化呈现。


ecc6f2a78e7d4fff85d5a7f5a6b516a9.png


f4e9f2c190cd4b9e85d6c910ab2a805d.png



ee0f1944e0f2419db839658c1b98e487.png

相关文章
|
1月前
|
人工智能 数据可视化 数据挖掘
【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】
【python】Python航空公司客户价值数据分析(代码+论文)【独一无二】
337 1
|
3月前
|
数据采集 数据可视化 数据挖掘
数据分析案例-汽车客户信息数据可视化分析
数据分析案例-汽车客户信息数据可视化分析
148 0
|
1月前
|
分布式计算 Hadoop 大数据
大数据技术与Python:结合Spark和Hadoop进行分布式计算
【4月更文挑战第12天】本文介绍了大数据技术及其4V特性,阐述了Hadoop和Spark在大数据处理中的作用。Hadoop提供分布式文件系统和MapReduce,Spark则为内存计算提供快速处理能力。通过Python结合Spark和Hadoop,可在分布式环境中进行数据处理和分析。文章详细讲解了如何配置Python环境、安装Spark和Hadoop,以及使用Python编写和提交代码到集群进行计算。掌握这些技能有助于应对大数据挑战。
|
1月前
|
机器学习/深度学习 数据采集 数据可视化
Python中的数据分析与可视化技术探索
数据分析与可视化在当今信息化时代扮演着愈发重要的角色。Python作为一种强大的编程语言,提供了丰富的库和工具,使得数据分析与可视化变得更加高效和灵活。本文将探讨Python中常用的数据分析与可视化技术,包括数据准备、数据分析和可视化展示等方面,并结合实例演示其应用,帮助读者更好地理解和运用这些技术。
|
3月前
|
机器学习/深度学习 数据可视化 数据挖掘
Python技术应用:数据分析与可视化的利器
【2月更文挑战第7天】在当今信息爆炸的时代,数据分析和可视化已经成为各行业的核心竞争力。Python作为一种简洁、高效的编程语言,为数据分析带来了全新的可能性。本文将介绍Python在数据分析和可视化领域的应用,探讨其在实际工作中的重要性和价值。
27 2
|
17天前
|
存储 分布式计算 搜索推荐
【专栏】数据之海,分布式计算、数据存储与管理、数据分析与挖掘成为关键技术
【4月更文挑战第27天】在大数据时代,数据量爆炸性增长、类型多样及处理速度需求提升带来挑战。分布式计算、数据存储与管理、数据分析与挖掘成为关键技术,如Hadoop、Spark、HDFS、NoSQL等。实际应用包括互联网搜索、推荐系统、金融科技、智能城市等领域,大规模数据处理发挥关键作用,持续推动创新与奇迹。
|
14天前
|
存储 监控 NoSQL
MongoDB实时数据分析与流处理的技术探讨
【4月更文挑战第30天】MongoDB支持实时数据分析与流处理,其灵活数据模型适合非结构化数据存储。通过BSON格式、高性能查询和聚合管道,MongoDB满足实时分析需求。变更数据流功能提供实时事件处理,可用于跨实例数据同步和复杂事件处理。在电商等场景中,MongoDB可实现实时销售监控、用户行为分析及异常检测。结合流处理框架,助力企业做出明智决策。
|
25天前
|
分布式计算 数据挖掘 Hadoop
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(下)
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(下)
43 1
|
25天前
|
消息中间件 数据挖掘 Kafka
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
《区块链公链数据分析简易速速上手小册》第5章:高级数据分析技术(2024 最新版)(上)
46 1
|
2月前
|
数据采集 数据可视化 数据挖掘
Python中的数据分析与可视化技术应用
在当今信息爆炸的时代,数据分析和可视化技术成为了各行各业不可或缺的工具。本文将介绍Python语言在数据分析和可视化领域的应用,包括常用的数据处理库、数据可视化库以及实际案例分析,帮助读者更好地理解和运用Python进行数据分析与可视化。