| 128 |      1 | // Part 2 about Alcohol-Consumption Worldwide
 | 
|  |      2 | //============================================
 | 
|  |      3 | 
 | 
|  |      4 | object CW6b {
 | 
|  |      5 | 
 | 
|  |      6 | import io.Source
 | 
|  |      7 | import scala.util._
 | 
|  |      8 | 
 | 
|  |      9 | def get_csv_page(url: String) : List[String] = 
 | 
|  |     10 |   Source.fromURL(url)("ISO-8859-1").getLines.toList
 | 
|  |     11 | 
 | 
|  |     12 | def get_csv_file(file: String) : List[String] = 
 | 
|  |     13 |   Source.fromFile(file)("ISO-8859-1").getLines.toList
 | 
|  |     14 | 
 | 
|  |     15 | 
 | 
|  |     16 | val url_alcohol = 
 | 
|  |     17 |   "https://raw.githubusercontent.com/fivethirtyeight/data/master/alcohol-consumption/drinks.csv"
 | 
|  |     18 | 
 | 
|  |     19 | val file_population = 
 | 
|  |     20 |   "population.csv"
 | 
|  |     21 | 
 | 
|  |     22 | get_csv_page(url_alcohol)
 | 
|  |     23 | get_csv_file(file_population)
 | 
|  |     24 | 
 | 
|  |     25 | get_csv_page(url_alcohol).size
 | 
|  |     26 | get_csv_file(file_population).size
 | 
|  |     27 | 
 | 
|  |     28 | val alcs = get_csv_page(url_alcohol)
 | 
|  |     29 | val pops = get_csv_file(file_population)
 | 
|  |     30 | 
 | 
|  |     31 | def process_alcs(lines: List[String]) : List[(String, Double)] =
 | 
|  |     32 |   for (l <- lines) yield {
 | 
|  |     33 |     val entries = l.split(",").toList 
 | 
|  |     34 |     (entries(0), entries(4).toDouble) 
 | 
|  |     35 |   }
 | 
|  |     36 | 
 | 
|  |     37 | def process_pops(lines: List[String]) : Map[String, Long] =
 | 
|  |     38 |   (for (l <- lines) yield {
 | 
|  |     39 |     val entries = l.split(",").toList 
 | 
|  |     40 |     (entries(0), entries(1).toLong)
 | 
|  |     41 |   }).toMap
 | 
|  |     42 | 
 | 
|  |     43 | 
 | 
| 152 |     44 | process_alcs(alcs.drop(1))(1)
 | 
|  |     45 | process_pops(pops.drop(1))("Albania")
 | 
|  |     46 | 
 | 
| 128 |     47 | def sorted_country_consumption() : List[(String, Long)] = {
 | 
|  |     48 |   val alcs2 = process_alcs(alcs.drop(1))
 | 
|  |     49 |   val pops2 = process_pops(pops.drop(1))
 | 
|  |     50 |   val cons_list = 
 | 
|  |     51 |     for ((cname, cons) <- alcs2; 
 | 
|  |     52 | 	 if pops2.isDefinedAt(cname)) yield (cname, (cons * pops2(cname)).toLong)
 | 
|  |     53 |   cons_list.sortBy(_._2).reverse
 | 
|  |     54 | }
 | 
|  |     55 | 
 | 
|  |     56 | sorted_country_consumption().take(10)
 | 
|  |     57 | sorted_country_consumption().size
 | 
|  |     58 | 
 | 
|  |     59 | def percentage(n: Int) : (Long, Long, Double) = {
 | 
|  |     60 |   val cons_list = sorted_country_consumption()
 | 
|  |     61 |   val sum_n = cons_list.take(n).map(_._2).sum
 | 
|  |     62 |   val sum_all = cons_list.map(_._2).sum
 | 
|  |     63 |   val perc = (sum_n.toDouble / sum_all.toDouble) * 100.0
 | 
|  |     64 |   (sum_all, sum_n, perc)
 | 
|  |     65 | }
 | 
|  |     66 | 
 | 
|  |     67 | 
 | 
|  |     68 | percentage(10)
 | 
|  |     69 | percentage(164)
 | 
|  |     70 | 
 | 
|  |     71 | }
 |