基于泰坦尼克号生还数据进行 Spark 分析

基于泰坦尼克号生还数据进行 Spark 分析

在这篇博客中,我们将展示如何使用 Apache Spark 分析著名的泰坦尼克号数据集。通过这篇教程,您将学习如何处理数据、分析乘客的生还情况,并生成有价值的统计信息。

数据解析

• PassengerId : 乘客编号。
• Survived : 是否存活,0表示未能存活,1表示存活。
• Pclass : 描述乘客所属的等级,总共分为三等,用1、2、3来描述:1表示高等;2表示中等;3表示低等。
• Name : 乘客姓名。
• Sex : 乘客性别。
• Age : 乘客年龄。
• SibSp : 与乘客同行的兄弟姐妹(Siblings)和配偶(Spouse)数目。
• Parch : 与乘客同行的家长(Parents)和孩子(Children)数目。
• Ticket : 乘客登船所使用的船票编号。
• Fare : 乘客上船的花费。
• Cabin : 乘客所住的船舱。
• Embarked : 乘客上船时的港口,C表示Cherbourg;Q表示Queenstown;S表示Southampton。

在这里插入图片描述

环境设置

首先,我们需要设置 Spark 环境并创建 SparkSession 对象。以下是代码片段:

    val conf = new SparkConf().setMaster("local[*]").setAppName("practice1")val spark = SparkSession.builder().config(conf).getOrCreate()// 导入隐式转换相关依赖import spark.implicits._// 读取 CSV 文件生成 DataFrame 对象val df = spark.read.format("csv").option("header", "true").option("mode", "DROPMALFORMED").load("titanic.csv")

数据预处理

在分析之前,我们需要对数据进行预处理,包括数据类型转换和缺失值处理。

修改字段数据类型

我们将字段转换为适当的数据类型:

    val md_df = df.withColumn("Pclass", df("Pclass").cast(IntegerType)).withColumn("Survived", df("Survived").cast(IntegerType)).withColumn("Age", df("Age").cast(DoubleType)).withColumn("SibSp", df("SibSp").cast(IntegerType)).withColumn("Parch", df("Parch").cast(IntegerType)).withColumn("Fare", df("Fare").cast(DoubleType))

删除不必要的字段

删除不需要的字段,以简化数据集:

    val df1 = md_df.drop("PassengerId").drop("Name").drop("Ticket").drop("Cabin")

处理缺失值

统计缺失值,并填充缺失数据:

    val columns: Array[String] = df1.columnsval missing_cnt: Array[Long] = columns.map(field => df1.select(col(field)).where(col(field).isNull).count())val tuples: Array[(Long, String)] = missing_cnt.zip(columns)val result_df: DataFrame = spark.sparkContext.parallelize(tuples).toDF("missing_cnt", "column_name")result_df.show()

在这里插入图片描述

    def meanAge(dataFrame: DataFrame): Double = {dataFrame.select("Age").na.drop().agg(round(mean("Age"), 0)).first().getDouble(0)}val df2 = df1.na.fill(Map("Age" -> meanAge(df1), "Embarked" -> "S"))df2.show()

在这里插入图片描述

数据分析

1. 生还人数统计

统计生还人数,并保存结果:

    val survived_count: DataFrame = df2.groupBy("Survived").count()survived_count.show()survived_count.coalesce(1).write.option("header", "true").csv("output/practice1/survived_count.csv")

在这里插入图片描述

2. 不同上船港口生还情况

val survived_embark = df2.groupBy("Embarked", "Survived").count()
survived_embark.show()
survived_embark.coalesce(1).write.option("header", "true").csv("data/practice1survived_embark.csv")

在这里插入图片描述

3. 存活/未存活的男女数量及比例

val survived_sex_count = df2.groupBy("Sex", "Survived").count()
val survived_sex_percent = survived_sex_count.withColumn("percent", format_number(col("count").divide(functions.sum("count").over()).multiply(100), 5))
survived_sex_percent.show()
survived_sex_percent.coalesce(1).write.option("header", "true").csv("data/practice1/survived_sex_percent.csv")

在这里插入图片描述

4. 不同级别乘客生还人数和占总生还人数的比例

val survived_df = df2.filter(col("Survived") === 1)
val pclass_survived_count = survived_df.groupBy("Pclass").count()
val pclass_survived_percent = pclass_survived_count.withColumn("percent", format_number(col("count").divide(functions.sum("count").over()).multiply(100), 5))
pclass_survived_percent.show()
pclass_survived_percent.coalesce(1).write.option("header", "true").csv("data/practice1/pclass_survived_percent.csv")

在这里插入图片描述

5. 有无同行父母/孩子的生还情况

val df4 = df2.withColumn("Parch_label", when(df2("Parch") > 0, 1).otherwise(0))
val parch_survived_count = df4.groupBy("Parch_label", "Survived").count()
parch_survived_count.show()
parch_survived_count.coalesce(1).write.option("header", "true").csv("data/practice1/parch_survived_count.csv")

在这里插入图片描述

6. 按照年龄分类的生还情况

val df3 = survived_df.withColumn("Age_label", when(df2("Age") <= 18, "minor").when(df2("Age") > 18 && df2("Age") <= 35, "young").when(df2("Age") > 35 && df2("Age") <= 55, "middle").otherwise("older"))
val age_survived = df3.groupBy("Age_label", "Survived").count()
age_survived.show()
age_survived.coalesce(1).write.option("header", "true").csv("data/practice1/age_survived.csv")

在这里插入图片描述

7. 提取乘客等级和上船费用信息

val sef = Seq("Pclass", "Fare")
val df5 = df2.select(sef.head, sef.tail: _*)
df5.show(5)
df5.coalesce(1).write.option("header", "true").csv("data/practice1/pclass_fare.csv")

在这里插入图片描述

总结

通过上述步骤,我们使用 Spark 对泰坦尼克号数据进行了全面的分析,从数据预处理到统计分析。希望这篇博客能帮助您更好地理解如何使用 Spark 进行数据处理和分析。

如有遇到问题可以找小编沟通交流哦。另外小编帮忙辅导大课作业,学生毕设等。不限于MapReduce, MySQL, python,java,大数据,模型训练等。 hadoop hdfs yarn spark Django flask flink kafka flume datax sqoop seatunnel echart可视化 机器学习等
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/43450.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

快速排序[原理,C++实现,注意事项,时间复杂度分析]

模板&#xff1a; //本模板来自ACwing void quick_sort(int q[],int l,int r) {if(l>r) return;int xq[lr>>1],il-1,jr1;while(i<j){do i;while(q[i]<x);do j--;while(q[j]>x); if(i<j) swap(q[i],q[j]);}quick_sort(q,l,j);quick_sort(q,j1,r); };原理&…

江苏高防服务器都有哪些优势?

江苏高防服务器所针对的应用群体是不同的&#xff0c;高防服务器与普通服务器的应用效果和功能上是有着很大的差别&#xff0c;所以企业与用户在进行挑选高防服务器时&#xff0c;会更加看重服务器的质量与服务效果&#xff0c;本文就来聊一下江苏高防服务器的优势有哪些吧&…

1509.三次操作后最大值与最小值的最小差

1.题目描述 给你一个数组 nums 。 每次操作你可以选择 nums 中的任意一个元素并将它改成 任意值 。 在 执行最多三次移动后 &#xff0c;返回 nums 中最大值与最小值的最小差值。 示例 1&#xff1a; 输入&#xff1a;nums [5,3,2,4] 输出&#xff1a;0 解释&#xff1a;我们最…

字典操作(获取类操作、添加更新类操作、字典删除类操作)

字典数据获取类操作 keys() 用来获取字典中所有的 key, 保存到一个列表中&#xff0c;并以 dict_keys类型返回 stu {name: Tom, age: 23, gender: male, address: BeiJing} ks stu.keys() print(ks)values() 用来获取字典中所有的 value &#xff0c;保存到一个列表中&#…

注册中心组成结构和基本原理解析

假如你正在设计和开发一个分布式服务系统&#xff0c;系统中存在一批能够独立运行的服务&#xff0c;而在部署上也采用了集群模式以防止出现单点故障。显然&#xff0c;对于一个完整的业务系统而言&#xff0c;这些服务之间需要相互调用并形成复杂的访问链路&#xff0c;一种可…

Casual decoder 和prefix decoder 区别

Causal Decoder&#xff08;因果解码器&#xff09;和Prefix Decoder&#xff08;前缀解码器&#xff09;是两种不同的语言模型架构&#xff0c;它们在处理文本生成任务时采用不同的注意力机制。 Causal Decoder是一种自回归模型&#xff0c;它在生成文本时只能依赖于已经生成…

mysql面试题 Day5

1 什么是事务&#xff1f; 事务是指 多个数据库操作组成一个逻辑执行单元&#xff0c;满足ACID四个条件。 A是指原子性&#xff0c;事务保证操作要么全部完成&#xff0c;要么全部不完成&#xff0c;不会出现部分完成的情况&#xff1b; C是指一致性&#xff0c;事务执行后&…

C++ 定时器触发

c定时器&#xff0c;能够定时触发&#xff0c;即每隔一段固定时间执行一下函数 #include <iostream> #include <thread> #include <chrono> #include <signal.h> #include <time.h> #include <cstring> #include <glog/logging.h>#…

SQL Server解决Float字段使用ISNULL时报错

SQL Server解决Float字段使用ISNULL时报错 一、前言1.报错内容2.解决案例 一、前言 1.报错内容 > [42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]从数据类型 varchar 转换为 float 时出错。 (8114)。这个错误通常是由于SQL Server在执行ISNULL函数时遇到…

防抖和节流使用场景

防抖&#xff08;Debounce&#xff09;和节流&#xff08;Throttle&#xff09;是两种常用的性能优化技术&#xff0c;用于限制某些高频率执行的函数的调用次数&#xff0c;从而优化性能和用户体验。它们的主要区别在于控制函数执行频率的策略不同。 防抖&#xff08;Debounce…

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过

Mini-L-CTF-2022 minispringboot Thymeleaf模板注入 spel的绕过 就是一个低版本的Thymeleaf注入 漏洞点 public class MainController {GetMapping({"/{language}"})public String test(PathVariable(name "language") String language, RequestParam(…

codesys多段直线电机跨电机控制

1. 电机描述 在X轴上有多段直线电机&#xff0c;如下图有9个&#xff0c;从X1到X9. 2.codesys程序结构 程序名称&#xff1a;Pou_two_motors 动作名称&#xff1a;ACT_move 把这个程序搞到任务配置里面 通过ethercat总线命名一下这些电机&#xff0c;方便调用。 3.程序内容 P…

油烟监测仪:守护厨房,让蓝天白云成为常态

夏日炎炎&#xff0c;白天的酷暑让人们更加向往夜晚的凉爽与惬意。在这样的季节里&#xff0c;品尝各式烧烤、小龙虾&#xff0c;再搭配一杯冰镇啤酒&#xff0c;成为了许多市民夜晚消遣的不二选择。然而&#xff0c;随之而来的餐饮油烟问题也进入了高发阶段&#xff0c;对周边…

智能锁赛博化,凯迪仕携全球顶尖科技亮相建博会!

7月8日&#xff0c;作为大家居建材行业全球规模第一大展&#xff0c;2024中国建博会&#xff08;广州&#xff09;在广交会展馆正式拉开序幕。据官方数据显示&#xff0c;本届展会展出规模展览总规模近40万平方米&#xff0c;建筑装饰领域各细分题材的一线品牌几乎全部参展。 其…

构建安全稳定的应用:SpringSecurity实用指南

以下是关于构建安全稳定的应用&#xff1a;Spring Security 实用指南的详细介绍&#xff1a; 一、Spring Security 概述 Spring Security 是一个功能强大且高度可定制的安全框架&#xff0c;旨在为 Java 应用程序提供全面的安全解决方案。它涵盖了认证&#xff08;Authenticati…

循环练习题

思路&#xff1a; 代码&#xff1a; public static void main(String[] args) {double sum0;for (int i1;i<100;i){if (i%2!0){sum1.0/i;}else {sum-1.0/i;}}System.out.println(sum);} 结果为&#xff1a;

Java 方法中的参数:灵活应用与技巧

Java 方法的参数是在方法定义中声明的变量&#xff0c;用于接收调用者传递的数据。参数可以是基本数据类型&#xff08;如整数、浮点数&#xff09;、对象引用或者特定类型&#xff08;如数组、枚举&#xff09;。方法可以根据参数的类型和数量来执行不同的逻辑&#xff0c;通过…

vscode取消未使用变量的提示(爆红)

目前项目正在使用ts&#xff08;TypeScript&#xff09;&#xff0c;可以在 tsconfig.json 文件中调整编译选项 在你的项目中找到并打开 tsconfig.json 文件&#xff0c;将noUnusedLocals和noUnusedParameters设置为false&#xff0c;关闭vscode重新打开项目即可 {"comp…

Mysql 高性能索引

引言 索引是一种用于快速查询和检索数据的数据结构&#xff0c;其本质可以看成是一种排序好的数据结构。 常见的索引类型包括B-Tree索引、哈希索引、空间数据索引&#xff08;R-Tree&#xff09;、全文索引。 索引的类型 在MySQL中&#xff0c;索引是在 存储引擎层 而不是服…

js打印出堆栈

在JavaScript中&#xff0c;直接获取并打印完整的调用堆栈&#xff08;stack trace&#xff09;并不像在一些其他语言中那样直接。不过&#xff0c;有几种方法可以实现类似的功能&#xff0c;具体取决于你的需求和运行环境&#xff08;如浏览器环境或Node.js环境&#xff09;。…