❄️ The Icicle Streaming Query Language ❄️
1module Default where
2
3import Missing
4import Demographics
5
6input injury : {
7 action : Option String
8 , location : String
9 , severity : Double
10 }
11
12is_head : String -> Bool
13is_head l =
14 l == "head"
15
16max_group : Element b -> Aggregate a -> Aggregate (Possibly b)
17max_group k e =
18 group fold (k, e) = (group k in e)
19 in max_by e k
20
21feature actioned_damage =
22 from injury
23 in filter let Some act = action
24 in group act
25 in sum severity
26
27feature age =
28 from age
29 in newest value
30
31feature is_head =
32 from injury
33 in is_head (newest location)
34
35feature any_head =
36 from injury
37 in any (is_head location)
38
39feature sum_severity =
40 from injury
41 in sum severity
42
43feature any_ea =
44 from injury
45 in any (grepl "ea" location)
46
47feature empty =
48 from injury
49 in seq missing 0
50
51feature head_damage =
52 from injury
53 in filter is_head location
54 in sum severity
55
56feature worst_injured =
57 from injury
58 in max_group location (sum severity)
59
60feature most_injured =
61 from injury
62 in max_group location (count severity)
63
64feature sd_injury =
65 from injury
66 in sd severity
67
68feature mean_injury =
69 from injury
70 in mean severity
71
72feature injury_blah =
73 from injury
74 in filter location == "head" || (location == "arm" && is_some action)
75 in sum severity
76
77feature mean_day_of_week =
78 from injury
79 in let
80 tau =
81 2 * pi
82 dow =
83 tau / 7 * double (mod (days time) 7)
84 m =
85 (circular_stats dow).mean
86 in
87 m / tau * 7
88
89feature days_in_location =
90 from injury
91 in days_in location time now