Add graphing code for bandwidth by version (13634).
[tor-metrics-tasks.git] / task-6232 / plot-entropy.R
blob1f4182441dad1ad0f37c5abf3bb34e58fcba95f1
1 library(ggplot2)
2 library(reshape)
3 library(scales)
5 d <- read.csv("entropy.csv", header = FALSE,
6   col.names = c("validafter", "all", "max_all", "exit", "max_exit",
7   "guard", "max_guard", "country", "max_country", "as", "max_as"))
9 e <- aggregate(
10   list(all = d$all / d$max_all, exit = d$exit / d$max_exit,
11   guard = d$guard / d$max_guard, country = d$country / d$max_country,
12   as = d$as / d$max_as),
13   by = list(date = as.Date(d$validafter, origin = "1970-01-01 00:00:00")),
14   FUN = median)
15 e <- melt(e, "date")
16 e <- data.frame(date = e$date, variable =
17   ifelse(e$variable == "all", "All relays",
18   ifelse(e$variable == "exit", "All exits",
19   ifelse(e$variable == "guard", "All guards",
20   ifelse(e$variable == "country", "All countries",
21   "All ASes")))), value = e$value)
22 ggplot(e, aes(x = date, y = value)) +
23 geom_line() +
24 facet_wrap(~ variable) +
25 scale_x_date(name = "\nDate") +
26 scale_y_continuous(name = "Degree of anonymity\n", limits = c(0, 1),
27   labels = percent)
28 ggsave("degree-of-anonymity.png", width = 8, height = 6, dpi = 100)
30 f <- aggregate(list(all = d$all, max_all = d$max_all, exit = d$exit,
31   max_exit = d$max_exit, guard = d$guard, max_guard = d$max_guard,
32   country = d$country, max_country = d$max_country, as = d$as,
33   max_as = d$max_as),
34   by = list(date = as.Date(d$validafter, origin = "1970-01-01 00:00:00")),
35   FUN = median)
36 f <- rbind(
37   data.frame(date = f$date, entropy = f$all, max = f$max_all,
38     type = "All relays"),
39   data.frame(date = f$date, entropy = f$exit, max = f$max_exit,
40     type = "All exits"),
41   data.frame(date = f$date, entropy = f$guard, max = f$max_guard,
42     type = "All guards"),
43   data.frame(date = f$date, entropy = f$country, max = f$max_country,
44     type = "All countries"),
45   data.frame(date = f$date, entropy = f$as, max = f$max_as,
46     type = "All ASes"))
47 f <- melt(f, c("date", "type"))
48 ggplot(f, aes(x = date, y = value, colour = variable)) +
49 geom_line() +
50 facet_wrap(~ type) +
51 scale_x_date(name = "\nDate") +
52 scale_y_continuous(name = "Entropy and maximum entropy\n",
53   limits = c(0, max(f$value))) +
54 opts(legend.position = "none")
55 ggsave("entropy.png", width = 8, height = 6, dpi = 100)
57 g <- aggregate(list(all = d$all, max_all = d$max_all, exit = d$exit,
58   max_exit = d$max_exit, guard = d$guard, max_guard = d$max_guard,
59   country = d$country, max_country = d$max_country, as = d$as,
60   max_as = d$max_as),
61   by = list(date = as.Date(d$validafter, origin = "1970-01-01 00:00:00")),
62   FUN = median)
63 g <- rbind(
64   data.frame(date = g$date, entropy = 2^g$all, max = 2^g$max_all,
65     type = "All relays"),
66   data.frame(date = g$date, entropy = 2^g$exit, max = 2^g$max_exit,
67     type = "All exits"),
68   data.frame(date = g$date, entropy = 2^g$guard, max = 2^g$max_guard,
69     type = "All guards"))
70 g <- melt(g, c("date", "type"))
71 ggplot(g, aes(x = date, y = value, colour = variable)) +
72 geom_line() +
73 facet_grid(type ~ ., scales = "free_y") +
74 scale_x_date(name = "\nDate") +
75 scale_y_continuous(name = "Number of relays and number of fair relays\n") +
76 opts(legend.position = "none")
77 ggsave("relays-fair.png", width = 8, height = 6, dpi = 100)