心脏病数据集Spark-Scala分析
目录
前言
随着心脏病患者的逐年增加,我们运用有效的知识来分析统计心脏病与各数据指标的关系,来减少患有心脏病的风险
提示:以下是本篇文章正文内容,下面案例可供参考
一、Sprak是什么?

spark官网Apache Spark™ - Unified Engine for large-scale data analytics
Spark是一种快速、通用、可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校AMPLab,2010年开源,2013年6月成为Apache孵化项目,2014年2月成为Apache顶级项目。目前,Spark生态系统已经发展成为一个包含多个子项目的集合,其中包含SparkSQL、SparkStreaming、GraphX、MLlib等子项目,Spark是基于内存计算的大数据并行计算框架。Spark基于内存计算,提高了在大数据环境下数据处理的实时性,同时保证了高容错性和高可伸缩性,允许用户将Spark部署在大量廉价硬件之上,形成集群。Spark得到了众多大数据公司的支持,这些公司包括Hortonworks、IBM、Intel、Cloudera、MapR、Pivotal、百度、阿里、腾讯、京东、携程、优酷土豆。当前百度的Spark已应用于凤巢、大搜索、直达号、百度大数据等业务;阿里利用GraphX构建了大规模的图计算和图挖掘系统,实现了很多生产系统的推荐算法;腾讯Spark集群达到8000台的规模,是当前已知的世界上最大的Spark集群。
————————————
二、Scala介绍与安装
1.Scala介绍
Scala是一门多范式的、纯粹的面向对象、函数式编程语言。由于Scala文件(.scala)可被编译成Java字节码,所以scala程序可以由JVM加载并运行。
由于Scala编译后得到Java字节码,所以Scala和Java本质上是一个东西,Scala和Java类可以相互调用。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings('ignore')
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
2.Windows安装Scala
1.将scala-2.11.12.zip解压到某个路径
2.配置SCALA_HOME和path环境变量
验证是否部署成功:

出现下面一串说明安装成功
三.IDEA创建普通的scala项目
1.安装scala插件
运行idea,选择file -> settings...

四.准备数据集
1.数据来源
数据来源与网址:Find Open Datasets and Machine Learning Projects | Kaggle
2.数据指标
数据指标特征

五.编写统计分析代码
1.建一个包便于观察

2.导入需要的包
代码中导入需要用到的包

3.编写统计代码,分析数据相关性
1.Age_agg
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Age_agg {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("Spark").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
// 统计年龄大于50的所有数据
val countAgeOver50 = df.filter(col("age") > 50).count()
// 统计年龄大于50且target为1的数据
val countAgeOver50AndTarget1 = df.filter(col("age") > 50 && col("target") === 1).count()
// 计算年龄大于50且target为1的概率
val ageOver50AndTarget1Prob = countAgeOver50AndTarget1.toDouble / countAgeOver50 * 100
// 选择需要显示的列,并过滤数据
val filteredDf = df.select("age","trestbps", "chol", "thalach", "target")
.filter(col("age") > 50 && col("target") === 1)
// 打印结果
println(s"年龄大于50的数据有 $countAgeOver50 条。")
println(s"年龄大于50且target为1(即患有心脏病)的数据有 $countAgeOver50AndTarget1 条,概率约为 $ageOver50AndTarget1Prob%。")
println("显示其中五个指标观察为:age,trestbps, chol, thalach, target")
filteredDf.show()
}
}
运行结果1
运行结果2
2.AgeMax_thalach
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object AgeMax_thalach {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("Spa").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
// 过滤出 age 大于 50 且 target 为 1 的行,并选择属性为 thalach(心率) 的所有列
val filteredDF = df.filter(col("age") > 50 && col("target") === 1).orderBy(col("thalach").desc)
// 打印患有心脏病年龄大于50的患者的较高心率的前20行结果
filteredDF.show()
}
}
运行结果
3. Agg_chol
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Agg_chol {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("S").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
// 过滤出 target 值为 1 的行,统计 chol 列的平均值
val avgChol = df.filter(col("target") === 1).agg(avg(col("chol")))
// 打印所有患者胆固醇平均值
println("所有患病者的胆固醇指标平均值是: " + avgChol.first().getDouble(0))
}
}
运行结果

4.Max_chol
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Max_chol {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("YourApp").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
// df.show()
// 过滤出 target 值为 1 的行(患有心脏病的患者)
val filteredDF = df.filter(col("target") === 1)
// 按照 chol 列降序排序,并获取第一行数据
val highestCholRow = filteredDF.orderBy(col("chol").desc).first()
println(highestCholRow)
//打印出胆固醇最高的患者的所有信息
}
}
运行结果

5.cp_chance
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object cp_chance {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("Spar").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
val countHeartDisease = df.filter(col("target") === 1).count()
val countCpAndHeartDisease = df.filter(col("target") === 1 && col("cp") =!= 0).count()
// 计算患有心脏病的人群中患有胸痛的比例
val cpChance = countCpAndHeartDisease.toDouble / countHeartDisease * 100
// 打印结果
println(s"在数据集中患有心脏病的人有 $countHeartDisease 人。")
println(s"在患有心脏病的人群中,患有胸痛的人占比约为 $cpChance%。")
}
}
运行结果

6.Max_trestbps
package lzzy.com.heart
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object Max_trestbps {
def main(args: Array[String]): Unit = {
val spark = SparkSession.builder.appName("Sp").master("local[*]").getOrCreate()
val df = spark.read.format("csv")
.option("header", "true")
.load("数据集/heart.csv")
// 过滤出 target 值为 1 且 trestbps 列不为空的行,并按照 trestbps(静息血压) 列进行降序排序
val filteredDF = df.filter(col("target") === 1 && col("trestbps").isNotNull).orderBy(col("trestbps").desc)
// 打印患有心脏病患者中静息血压降序排序显示20行
filteredDF.show()
}
}
运行结果

总结
经过对心脏病数据集的分析统计,我们得出以下总结:
1. 年龄大于50的数据:根据数据集中的年龄字段,我们发现共有 705 条数据的年龄大于50。
2. 年龄大于50且目标为1的数据:在年龄大于50的数据中,我们筛选出符合目标为1的数据,发现共有 311 条数据满足这个条件。
3. 年龄大于50且目标为1的概率:根据统计结果,年龄大于50且目标为1的数据占年龄大于50的数据的比例约为 44%。这意味着年龄大于50的人群中,有一定比例的人患有心脏病。
4. 选择的列名和数据:根据需求,我们选择了 trestbps(静息血压)、chol(胆固醇水平)、thalach(最大心率)和 target(心脏病情况)这四列进行分析,并且筛选出符合年龄大于50且目标为1的数据进行显示。
通过以上分析,我们可以更好地了解了年龄大于50的人群中患有心脏病的情况,并对相关指标进行了统计和展示。这些分析结果可以为进一步的研究和决策提供有价值的信息。