Add analyze data functions
This commit is contained in:
@@ -106,6 +106,72 @@ object Main {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Calculate the mean, median, mode, range and midrange of the data
|
||||||
|
def calculateData(filePath: String): Unit = {
|
||||||
|
var data = List[Double]()
|
||||||
|
val bufferedSource = io.Source.fromFile(filePath)
|
||||||
|
for (line <- bufferedSource.getLines.drop(1)) {
|
||||||
|
val cols = line.split(",").map(_.trim)
|
||||||
|
data = data :+ cols(2).toDouble
|
||||||
|
}
|
||||||
|
bufferedSource.close
|
||||||
|
|
||||||
|
// Calculate the mean
|
||||||
|
val mean = data.sum / data.length
|
||||||
|
println(s"Mean: $mean")
|
||||||
|
|
||||||
|
// Calculate the median
|
||||||
|
val median = {
|
||||||
|
val (lower, upper) = data.sortWith(_ < _).splitAt(data.length / 2)
|
||||||
|
if (data.length % 2 == 0) (lower.last + upper.head) / 2.0
|
||||||
|
else upper.head
|
||||||
|
}
|
||||||
|
println(s"Median: $median")
|
||||||
|
|
||||||
|
// Calculate the mode
|
||||||
|
val mode = data
|
||||||
|
.groupBy(identity)
|
||||||
|
.view
|
||||||
|
.mapValues(_.size)
|
||||||
|
.maxBy(_._2)
|
||||||
|
._1
|
||||||
|
println(s"Mode: $mode")
|
||||||
|
|
||||||
|
// Calculate the range
|
||||||
|
val range = data.max - data.min
|
||||||
|
println(s"Range: $range")
|
||||||
|
|
||||||
|
// Calculate the midrange
|
||||||
|
val midrange = (data.max + data.min) / 2
|
||||||
|
println(s"Midrange: $midrange")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Analyze the data
|
||||||
|
def analyzeData(): Unit = {
|
||||||
|
print(
|
||||||
|
"Enter source to analyze:\n1) Wind\n2) Hydro\n3) Nuclear\n4) All\n5) Exit\n"
|
||||||
|
)
|
||||||
|
val choice = readLine()
|
||||||
|
choice match {
|
||||||
|
case "1" =>
|
||||||
|
println("Analyzing wind data...")
|
||||||
|
calculateData("wind.csv")
|
||||||
|
case "2" =>
|
||||||
|
println("Analyzing hydro data...")
|
||||||
|
calculateData("hydro.csv")
|
||||||
|
case "3" =>
|
||||||
|
println("Analyzing nuclear data...")
|
||||||
|
calculateData("nuclear.csv")
|
||||||
|
case "4" =>
|
||||||
|
println("Analyzing all data...")
|
||||||
|
calculateData("data.csv")
|
||||||
|
case "5" =>
|
||||||
|
return
|
||||||
|
case _ =>
|
||||||
|
println("Invalid choice")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Main function
|
// Main function
|
||||||
def main(args: Array[String]): Unit = {
|
def main(args: Array[String]): Unit = {
|
||||||
while (true) {
|
while (true) {
|
||||||
@@ -129,7 +195,7 @@ object Main {
|
|||||||
case "3" =>
|
case "3" =>
|
||||||
readData("data.csv")
|
readData("data.csv")
|
||||||
case "4" =>
|
case "4" =>
|
||||||
println("Analyzing data...")
|
analyzeData()
|
||||||
case "5" =>
|
case "5" =>
|
||||||
println("Exiting...")
|
println("Exiting...")
|
||||||
System.exit(0)
|
System.exit(0)
|
||||||
|
|||||||
Reference in New Issue
Block a user