当前位置:网站首页>统计偏科最严重的前100名学生
统计偏科最严重的前100名学生
2022-08-02 14:05:00 【大学生爱编程】
object Demo31Student {
def main(args: Array[String]): Unit = {
//偏科评估的标准: 方差
//1、读取分数
val lines: List[String] = Source.fromFile("data/score.txt").getLines().toList
//2、切分数据
val scoreArr: List[Array[String]] = lines.map(line => line.split(","))
//3、过滤脏数据
val scoreFilter: List[Array[String]] = scoreArr.filter(arr => arr.length == 3)
//4、取出学号和分数
val idAndScore: List[(String, Int)] = scoreFilter.map {
case Array(id: String, _, sco: String) =>
(id, sco.toInt)
}
//5、按照学号分组
val groupBy: Map[String, List[(String, Int)]] = idAndScore.groupBy(kv => kv._1)
//计算方差
val std: List[(String, Double, List[(String, Int)])] = groupBy.map {
case (id: String, list: List[(String, Int)]) =>
//一个学生所有的分数
val scores: List[Int] = list.map { case (_, sco: Int) => sco }
// 计算方差
//1、计算总数 2、计算平均值 3、计算方差
//科目数
val N: Double = scores.length.toDouble
//平均数
val avg: Double = scores.sum / N
//计算方差
val std: Double = scores.map((sco: Int) => (sco - avg) * (sco - avg)).sum / N
(id, std, list)
}.toList
//按照方差排序,取前100
val sortByStd: List[(String, Double, List[(String, Int)])] = std.sortBy(kv => -kv._2)
//取前100
val top10: List[(String, Double, List[(String, Int)])] = sortByStd.take(100)
top10.foreach(println)
}
}
边栏推荐
猜你喜欢
随机推荐
run yolov5
A little thought about password encryption
c语言三子棋详解!!! (电脑智能下棋)(附上完整代码)
Raj delivery notes - separation 第08 speak, speaking, reading and writing
C语言日记 6 基本输入/输出
鼠标右键菜单栏太长如何减少
初识c语言指针
C语言初级—从键盘接收一个整形并逆序输出
Kubernetes介绍
绕过正则实现SQL注入
binlog与iptables防nmap扫描
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十二章)
liunx下mysql遇到的简单问题
宝塔搭建DM企业建站系统源码实测
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十四章)
宝塔搭建PHP自适应懒人网址导航源码实测
华为防火墙
redis delay queue
drf routing component Routers
【c】大学生在校学习c语言常见代码