424
|
1 |
import M2 ._
|
389
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
2 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
3 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
4 |
// first test
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
5 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
6 |
val ls1_urban = List(("1", "a"), ("2", "a"), ("1", "c"), ("2", "a"), ("1", "c"))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
7 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
8 |
val m_urban = groupById(ls1_urban, Map())
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
9 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
10 |
assert(m_urban.getOrElse("1", Nil).count(_ == "c") == 2)
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
11 |
assert(m_urban.getOrElse("1", Nil).count(_ == "a") == 1)
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
12 |
assert(m_urban.getOrElse("2", Nil) == List("a", "a"))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
13 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
14 |
// second test
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
15 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
16 |
def urban_gb(ratings: List[(String, String)]) =
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
17 |
ratings.groupBy(_._1).view.mapValues(_.map(_._2).toSet).toMap
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
18 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
19 |
def urban_gb2(ratings: List[(String, String)]) =
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
20 |
ratings.groupBy(_._1).view.mapValues(_.map(_._2)).toMap
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
21 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
22 |
def urban_ck(ratings: List[(String, String)]) =
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
23 |
urban_gb(ratings) == groupById(ratings, Map()).view.mapValues(_.toSet).toMap
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
24 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
25 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
26 |
val ls2_urban = List(("1", "a"), ("1", "b"), ("2", "x"), ("3", "a"), ("2", "y"), ("3", "c"))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
27 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
28 |
assert(urban_ck(ls2_urban))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
29 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
30 |
// thrird test
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
31 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
32 |
val ls3_urban = (11 to 1000 by 5).map(_.toString).toList
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
33 |
val ls4_urban = ls3_urban zip ls3_urban.tail
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
34 |
val ls5_urban = ls4_urban ::: ls4_urban.reverse
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
35 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
36 |
assert(urban_ck(ls5_urban))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
37 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
38 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
39 |
/*
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
40 |
import io.Source
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
41 |
import scala.util._
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
42 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
43 |
def urban_get_csv_file(name: String) : List[String] = {
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
44 |
val csv = Source.fromFile(name)
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
45 |
csv.mkString.split("\n").toList.drop(1)
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
46 |
}
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
47 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
48 |
def urban_process_ratings(lines: List[String]) : List[(String, String)] = {
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
49 |
for (cols <- lines.map(_.split(",").toList);
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
50 |
if (cols(2).toFloat >= 4)) yield (cols(0), cols(1))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
51 |
}
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
52 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
53 |
val urban_ratings = urban_process_ratings(urban_get_csv_file("ratings.csv").take(1000))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
54 |
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
55 |
assert(urban_ck(urban_ratings))
|
Christian Urban <christian.urban@kcl.ac.uk>
parents:
diff
changeset
|
56 |
*/
|