当前位置:网站首页>统计偏科最严重的前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)
}
}
边栏推荐
猜你喜欢
随机推荐
Creating seven NiuYun Flask project complete and let cloud
[VCU] Detailed S19 file (S-record)
verilog学习|《Verilog数字系统设计教程》夏宇闻 第三版思考题答案(第十四章)
C语言日记 1“Hello world“
原码、补码、反码
数据的表示方法和转换(二进制、八进制、十进制、十六进制)
C语言初级—数组元素的增删改查
Unit 13 Mixing in View Base Classes
ng-style:动态控制样式
Flask request application context source code analysis
【Camera2】由Camera2 特性想到的有关MED(多场景设备互动)的场景Idea
uniapp小程序禁止遮罩弹窗下的页面滚动的完美解决办法
C语言——断言assert的使用
十分钟带你入门Nodejs
HBuilderX 核心插件安装提示:“插件XXX下载失败,请检查网络”问题的解决办法
run yolov5
C语言一维数组练习——将m个元素移动到数组尾部
Unit 12 associated serialization
mysql
[ROS] (05) ROS Communication - Node, Nodes & Master