iraq_unrest 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +18 -0
  3. data/Gemfile +4 -0
  4. data/LICENSE.txt +22 -0
  5. data/README.md +114 -0
  6. data/Rakefile +7 -0
  7. data/examples/example_01.png +0 -0
  8. data/examples/example_02.png +0 -0
  9. data/examples/example_03.png +0 -0
  10. data/examples/iraq_government_casualty_figure.csv +95 -0
  11. data/examples/iraq_government_casualty_figure.html +126 -0
  12. data/examples/iraqi_casualties_comparison.csv +119 -0
  13. data/examples/iraqi_casualties_comparison.html +105 -0
  14. data/iraq_unrest.gemspec +33 -0
  15. data/lib/iraq_unrest/concerns/serializable.rb +37 -0
  16. data/lib/iraq_unrest/concerns/validatable.rb +18 -0
  17. data/lib/iraq_unrest/config.rb +8 -0
  18. data/lib/iraq_unrest/data/Iraq_Government_Casualty_Figure.csv +116 -0
  19. data/lib/iraq_unrest/data_set.rb +41 -0
  20. data/lib/iraq_unrest/erb/header.html.erb +32 -0
  21. data/lib/iraq_unrest/erb/iraq_government_casualty_figure.html.erb +94 -0
  22. data/lib/iraq_unrest/erb/iraqi_casualties_comparison.html.erb +73 -0
  23. data/lib/iraq_unrest/format.rb +103 -0
  24. data/lib/iraq_unrest/google_doc.rb +31 -0
  25. data/lib/iraq_unrest/iraq_government_casualty_figure.rb +53 -0
  26. data/lib/iraq_unrest/iraq_unrest_record.rb +74 -0
  27. data/lib/iraq_unrest/iraqi_casualties_comparison.rb +46 -0
  28. data/lib/iraq_unrest/serializers.rb +46 -0
  29. data/lib/iraq_unrest/version.rb +3 -0
  30. data/lib/iraq_unrest.rb +50 -0
  31. data/test/fixtures/vcr_cassettes/iraq_government_casualty_figure.yml +161 -0
  32. data/test/fixtures/vcr_cassettes/iraqi_casualties_comparison.yml +184 -0
  33. data/test/google_doc_test.rb +56 -0
  34. data/test/iraq_government_casualty_figure_test.rb +253 -0
  35. data/test/iraqi_casualties_comparison_test.rb +246 -0
  36. data/test/test_helper.rb +17 -0
  37. data/test/validatable_test.rb +34 -0
  38. metadata +242 -0
@@ -0,0 +1,105 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Iraqi Casualties Comparison</title>
5
+ <meta charset="UTF-8">
6
+ <meta name="description" content="Iraq Unrest Data Visualization">
7
+ <meta name="author" content="Brian Douglas Smith">
8
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.3.0/rickshaw.min.css">
10
+ <style type="text/css">
11
+
12
+ #chart_container {
13
+ position: relative;
14
+ display: inline-block;
15
+ font-family: Arial, Helvetica, sans-serif;
16
+ }
17
+
18
+ #y_axis {
19
+ position: absolute;
20
+ top: 0;
21
+ bottom: 0;
22
+ width: 40px;
23
+ }
24
+
25
+ #chart {
26
+ display: inline-block;
27
+ margin-left: 40px;
28
+ }
29
+
30
+ #legend {
31
+ display: inline-block;
32
+ position: relative;
33
+ left: 8px;
34
+ }
35
+
36
+ </style>
37
+
38
+ </head>
39
+
40
+ <body>
41
+ <h1>Iraqi Casualties Comparison</h1>
42
+ <p><a href="https://github.com/bds/iraq_toll">https://github.com/bds/iraq_toll</a></p>
43
+ <div id="chart_container">
44
+ <div id="y_axis"></div>
45
+ <div id="chart"></div>
46
+ </div>
47
+ <div id="legend"></div>
48
+
49
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
50
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.3.0/rickshaw.min.js"></script>
51
+ <script type="text/javascript">
52
+ var palette = new Rickshaw.Color.Palette( { scheme: 'spectrum14' } );
53
+
54
+ var graph = new Rickshaw.Graph( {
55
+ element: document.querySelector("#chart"),
56
+ renderer: 'area', width: 640, height: 480,
57
+ series: [ {
58
+ name: 'Iraq Body Count',
59
+ color: palette.color(),
60
+ data: [{"x":1075536000,"y":609},{"x":1078041600,"y":660},{"x":1080720000,"y":1001},{"x":1083308400,"y":1304},{"x":1085986800,"y":656},{"x":1088578800,"y":900},{"x":1091257200,"y":818},{"x":1093935600,"y":868},{"x":1096527600,"y":1031},{"x":1099206000,"y":1011},{"x":1101801600,"y":1653},{"x":1104480000,"y":1106},{"x":1107158400,"y":1188},{"x":1109577600,"y":1266},{"x":1112256000,"y":871},{"x":1114844400,"y":1119},{"x":1117522800,"y":1336},{"x":1120114800,"y":1299},{"x":1122793200,"y":1528},{"x":1125471600,"y":2266},{"x":1128063600,"y":1415},{"x":1130745600,"y":1298},{"x":1133337600,"y":1465},{"x":1136016000,"y":1135},{"x":1138694400,"y":1543},{"x":1141113600,"y":1569},{"x":1143792000,"y":1940},{"x":1146380400,"y":1792},{"x":1149058800,"y":2251},{"x":1151650800,"y":2553},{"x":1154329200,"y":3279},{"x":1157007600,"y":2835},{"x":1159599600,"y":2556},{"x":1162281600,"y":2977},{"x":1164873600,"y":3064},{"x":1167552000,"y":2886},{"x":1170230400,"y":2948},{"x":1172649600,"y":2607},{"x":1175324400,"y":2682},{"x":1177916400,"y":2495},{"x":1180594800,"y":2809},{"x":1183186800,"y":2180},{"x":1185865200,"y":2671},{"x":1188543600,"y":2457},{"x":1191135600,"y":1360},{"x":1193814000,"y":1286},{"x":1196409600,"y":1095},{"x":1199088000,"y":982},{"x":1201766400,"y":844},{"x":1204272000,"y":1049},{"x":1206946800,"y":1623},{"x":1209538800,"y":1272},{"x":1212217200,"y":886},{"x":1214809200,"y":747},{"x":1217487600,"y":623},{"x":1220166000,"y":627},{"x":1222758000,"y":584},{"x":1225436400,"y":575},{"x":1228032000,"y":521},{"x":1230710400,"y":576},{"x":1233388800,"y":366},{"x":1235808000,"y":402},{"x":1238482800,"y":426},{"x":1241074800,"y":565},{"x":1243753200,"y":387},{"x":1246345200,"y":498},{"x":1249023600,"y":407},{"x":1251702000,"y":618},{"x":1254294000,"y":332},{"x":1256972400,"y":435},{"x":1259568000,"y":226},{"x":1262246400,"y":475},{"x":1264924800,"y":263},{"x":1267344000,"y":304},{"x":1270018800,"y":336},{"x":1272610800,"y":385},{"x":1275289200,"y":387},{"x":1277881200,"y":385},{"x":1280559600,"y":443},{"x":1283238000,"y":516},{"x":1285830000,"y":254},{"x":1288508400,"y":312},{"x":1291104000,"y":307},{"x":1293782400,"y":217},{"x":1296460800,"y":389},{"x":1298880000,"y":252},{"x":1301554800,"y":311},{"x":1304146800,"y":289},{"x":1306825200,"y":381},{"x":1309417200,"y":386},{"x":1312095600,"y":308},{"x":1314774000,"y":401},{"x":1317366000,"y":397},{"x":1320044400,"y":366},{"x":1322640000,"y":279},{"x":1325318400,"y":388},{"x":1327996800,"y":524},{"x":1330502400,"y":356},{"x":1333177200,"y":377},{"x":1335769200,"y":392},{"x":1338447600,"y":304},{"x":1341039600,"y":529},{"x":1343718000,"y":469},{"x":1346396400,"y":422},{"x":1348988400,"y":396},{"x":1351666800,"y":290},{"x":1354262400,"y":240},{"x":1356940800,"y":275},{"x":1359619200,"y":357},{"x":1362038400,"y":358},{"x":1364713200,"y":395},{"x":1367305200,"y":544},{"x":1369983600,"y":887},{"x":1372575600,"y":0},{"x":1375254000,"y":0},{"x":1377932400,"y":0},{"x":1380524400,"y":0},{"x":1383202800,"y":0}]
61
+ }, {
62
+ name: 'Iraq Gov',
63
+ color: palette.color(),
64
+ data: [{"x":1075536000,"y":0},{"x":1078041600,"y":0},{"x":1080720000,"y":0},{"x":1083308400,"y":0},{"x":1085986800,"y":0},{"x":1088578800,"y":0},{"x":1091257200,"y":0},{"x":1093935600,"y":0},{"x":1096527600,"y":0},{"x":1099206000,"y":0},{"x":1101801600,"y":0},{"x":1104480000,"y":0},{"x":1107158400,"y":0},{"x":1109577600,"y":0},{"x":1112256000,"y":0},{"x":1114844400,"y":0},{"x":1117522800,"y":0},{"x":1120114800,"y":0},{"x":1122793200,"y":0},{"x":1125471600,"y":0},{"x":1128063600,"y":0},{"x":1130745600,"y":0},{"x":1133337600,"y":0},{"x":1136016000,"y":0},{"x":1138694400,"y":0},{"x":1141113600,"y":0},{"x":1143792000,"y":0},{"x":1146380400,"y":0},{"x":1149058800,"y":1055},{"x":1151650800,"y":1009},{"x":1154329200,"y":1850},{"x":1157007600,"y":0},{"x":1159599600,"y":0},{"x":1162281600,"y":1427},{"x":1164873600,"y":1975},{"x":1167552000,"y":0},{"x":1170230400,"y":2087},{"x":1172649600,"y":1806},{"x":1175324400,"y":2078},{"x":1177916400,"y":1689},{"x":1180594800,"y":2124},{"x":1183186800,"y":1463},{"x":1185865200,"y":1875},{"x":1188543600,"y":1856},{"x":1191135600,"y":917},{"x":1193814000,"y":887},{"x":1196409600,"y":606},{"x":1199088000,"y":568},{"x":1201766400,"y":541},{"x":1204272000,"y":721},{"x":1206946800,"y":1082},{"x":1209538800,"y":1073},{"x":1212217200,"y":563},{"x":1214809200,"y":509},{"x":1217487600,"y":465},{"x":1220166000,"y":431},{"x":1222758000,"y":440},{"x":1225436400,"y":317},{"x":1228032000,"y":340},{"x":1230710400,"y":316},{"x":1233388800,"y":191},{"x":1235808000,"y":258},{"x":1238482800,"y":252},{"x":1241074800,"y":355},{"x":1243753200,"y":155},{"x":1246345200,"y":437},{"x":1249023600,"y":275},{"x":1251702000,"y":456},{"x":1254294000,"y":203},{"x":1256972400,"y":410},{"x":1259568000,"y":122},{"x":1262246400,"y":367},{"x":1264924800,"y":196},{"x":1267344000,"y":352},{"x":1270018800,"y":367},{"x":1272610800,"y":328},{"x":1275289200,"y":337},{"x":1277881200,"y":284},{"x":1280559600,"y":535},{"x":1283238000,"y":426},{"x":1285830000,"y":273},{"x":1288508400,"y":185},{"x":1291104000,"y":171},{"x":1293782400,"y":151},{"x":1296460800,"y":259},{"x":1298880000,"y":197},{"x":1301554800,"y":247},{"x":1304146800,"y":211},{"x":1306825200,"y":177},{"x":1309417200,"y":271},{"x":1312095600,"y":259},{"x":1314774000,"y":239},{"x":1317366000,"y":185},{"x":1320044400,"y":258},{"x":1322640000,"y":187},{"x":1325318400,"y":155},{"x":1327996800,"y":151},{"x":1330502400,"y":150},{"x":1333177200,"y":112},{"x":1335769200,"y":126},{"x":1338447600,"y":132},{"x":1341039600,"y":131},{"x":1343718000,"y":325},{"x":1346396400,"y":164},{"x":1348988400,"y":365},{"x":1351666800,"y":144},{"x":1354262400,"y":166},{"x":1356940800,"y":208},{"x":1359619200,"y":177},{"x":1362038400,"y":136},{"x":1364713200,"y":163},{"x":1367305200,"y":205},{"x":1369983600,"y":630},{"x":1372575600,"y":240},{"x":1375254000,"y":921},{"x":1377932400,"y":356},{"x":1380524400,"y":885},{"x":1383202800,"y":964}]
65
+ }, {
66
+ name: 'AFP',
67
+ color: palette.color(),
68
+ data: [{"x":1075536000,"y":0},{"x":1078041600,"y":0},{"x":1080720000,"y":0},{"x":1083308400,"y":0},{"x":1085986800,"y":0},{"x":1088578800,"y":0},{"x":1091257200,"y":0},{"x":1093935600,"y":0},{"x":1096527600,"y":0},{"x":1099206000,"y":0},{"x":1101801600,"y":0},{"x":1104480000,"y":0},{"x":1107158400,"y":0},{"x":1109577600,"y":0},{"x":1112256000,"y":0},{"x":1114844400,"y":0},{"x":1117522800,"y":0},{"x":1120114800,"y":0},{"x":1122793200,"y":0},{"x":1125471600,"y":0},{"x":1128063600,"y":0},{"x":1130745600,"y":0},{"x":1133337600,"y":0},{"x":1136016000,"y":0},{"x":1138694400,"y":0},{"x":1141113600,"y":0},{"x":1143792000,"y":0},{"x":1146380400,"y":0},{"x":1149058800,"y":0},{"x":1151650800,"y":0},{"x":1154329200,"y":0},{"x":1157007600,"y":0},{"x":1159599600,"y":0},{"x":1162281600,"y":0},{"x":1164873600,"y":0},{"x":1167552000,"y":0},{"x":1170230400,"y":0},{"x":1172649600,"y":0},{"x":1175324400,"y":0},{"x":1177916400,"y":0},{"x":1180594800,"y":0},{"x":1183186800,"y":0},{"x":1185865200,"y":0},{"x":1188543600,"y":0},{"x":1191135600,"y":0},{"x":1193814000,"y":0},{"x":1196409600,"y":0},{"x":1199088000,"y":0},{"x":1201766400,"y":0},{"x":1204272000,"y":0},{"x":1206946800,"y":0},{"x":1209538800,"y":0},{"x":1212217200,"y":0},{"x":1214809200,"y":0},{"x":1217487600,"y":0},{"x":1220166000,"y":0},{"x":1222758000,"y":0},{"x":1225436400,"y":0},{"x":1228032000,"y":0},{"x":1230710400,"y":0},{"x":1233388800,"y":0},{"x":1235808000,"y":0},{"x":1238482800,"y":0},{"x":1241074800,"y":0},{"x":1243753200,"y":0},{"x":1246345200,"y":0},{"x":1249023600,"y":0},{"x":1251702000,"y":0},{"x":1254294000,"y":0},{"x":1256972400,"y":0},{"x":1259568000,"y":0},{"x":1262246400,"y":0},{"x":1264924800,"y":0},{"x":1267344000,"y":0},{"x":1270018800,"y":0},{"x":1272610800,"y":0},{"x":1275289200,"y":0},{"x":1277881200,"y":0},{"x":1280559600,"y":0},{"x":1283238000,"y":0},{"x":1285830000,"y":0},{"x":1288508400,"y":0},{"x":1291104000,"y":0},{"x":1293782400,"y":0},{"x":1296460800,"y":0},{"x":1298880000,"y":0},{"x":1301554800,"y":0},{"x":1304146800,"y":0},{"x":1306825200,"y":0},{"x":1309417200,"y":0},{"x":1312095600,"y":0},{"x":1314774000,"y":0},{"x":1317366000,"y":0},{"x":1320044400,"y":0},{"x":1322640000,"y":0},{"x":1325318400,"y":0},{"x":1327996800,"y":0},{"x":1330502400,"y":0},{"x":1333177200,"y":0},{"x":1335769200,"y":0},{"x":1338447600,"y":0},{"x":1341039600,"y":282},{"x":1343718000,"y":278},{"x":1346396400,"y":278},{"x":1348988400,"y":253},{"x":1351666800,"y":136},{"x":1354262400,"y":160},{"x":1356940800,"y":144},{"x":1359619200,"y":246},{"x":1362038400,"y":220},{"x":1364713200,"y":271},{"x":1367305200,"y":461},{"x":1369983600,"y":614},{"x":1372575600,"y":452},{"x":1375254000,"y":875},{"x":1377932400,"y":693},{"x":1380524400,"y":880},{"x":1383202800,"y":743}]
69
+ } ]});
70
+
71
+ var x_axis = new Rickshaw.Graph.Axis.Time( {
72
+ graph: graph
73
+ } );
74
+
75
+ var y_axis = new Rickshaw.Graph.Axis.Y( {
76
+ graph: graph,
77
+ orientation: 'left',
78
+ element: document.getElementById('y_axis'),
79
+ } );
80
+
81
+ var legend = new Rickshaw.Graph.Legend({
82
+ graph: graph,
83
+ element: document.getElementById('legend')
84
+ });
85
+
86
+ var shelving = new Rickshaw.Graph.Behavior.Series.Toggle({
87
+ graph: graph,
88
+ legend: legend
89
+ });
90
+
91
+ var highlighter = new Rickshaw.Graph.Behavior.Series.Highlight({
92
+ graph: graph,
93
+ legend: legend
94
+ });
95
+
96
+ var hoverDetail = new Rickshaw.Graph.HoverDetail( {
97
+ graph: graph,
98
+ yFormatter: function(y) { return Math.floor(y) + "" }
99
+ } );
100
+
101
+ graph.renderer.unstack = true;
102
+ graph.render();
103
+ </script>
104
+ </body>
105
+ </html>
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'iraq_unrest/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "iraq_unrest"
8
+ spec.version = IraqUnrest::VERSION
9
+ spec.authors = ["Brian D. Smith"]
10
+ spec.email = ["bd9302@gmail.com"]
11
+ spec.description = %q{Ruby library to serialize, format, and visualize Iraq data shared by Agence France-Presse.}
12
+ spec.summary = %q{Generates Rickshaw/D3.js graphs and formatted data files for Iraq data}
13
+ spec.homepage = "https://github.com/bds/iraq_unrest"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files`.split($/)
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_dependency "curb"
22
+ spec.add_dependency "tilt"
23
+ spec.add_dependency "active_model_serializers"
24
+ spec.add_dependency "activesupport"
25
+
26
+ spec.add_development_dependency "bundler", "~> 1.3"
27
+ spec.add_development_dependency "webmock", "< 1.14" # for VCR warning
28
+ spec.add_development_dependency "vcr"
29
+ spec.add_development_dependency "minitest"
30
+ spec.add_development_dependency "rake"
31
+ spec.add_development_dependency "awesome_print"
32
+ spec.add_development_dependency "byebug"
33
+ end
@@ -0,0 +1,37 @@
1
+ module IraqUnrest
2
+
3
+ module Serializable
4
+ extend ActiveSupport::Concern
5
+
6
+ delegate :to_json, :as_json, :to => :serialize
7
+
8
+ def read_attribute_for_serialization(key)
9
+ send(key)
10
+ end
11
+
12
+ def active_model_serializer
13
+ "IraqUnrest::Serializers::#{self.class.file_name.camelcase}Serializer".constantize
14
+ end
15
+
16
+ def serialize(serializer=active_model_serializer)
17
+ serializer.new(self)
18
+ end
19
+
20
+ module ClassMethods
21
+
22
+ def all
23
+ @all ||= parse(raw_csv)
24
+ end
25
+
26
+ def as_json
27
+ ActiveModel::ArraySerializer.new(all).as_json
28
+ end
29
+
30
+ def as_rickshaw
31
+ Serializers.as_rickshaw(all)
32
+ end
33
+
34
+ end
35
+
36
+ end
37
+ end
@@ -0,0 +1,18 @@
1
+ module IraqUnrest
2
+
3
+ module Validatable
4
+ def read_attribute_for_validation(key)
5
+ send(key)
6
+ end
7
+
8
+ def valid?
9
+ return false if self.date.nil?
10
+ return false unless self.date.length == 8
11
+ return false unless Date.strptime(self.date, "%b-%Y").past?
12
+ return false if self.date == Date.current.strftime("%b-%Y")
13
+ true
14
+ end
15
+
16
+ end
17
+
18
+ end
@@ -0,0 +1,8 @@
1
+ class IraqUnrest::Config
2
+ class << self
3
+ attr_accessor :timeout, :doc_id, :disclaimer
4
+ end
5
+ def self.configure(&block)
6
+ yield self
7
+ end
8
+ end
@@ -0,0 +1,116 @@
1
+ ###############################################
2
+ # NOTE: This file was generated by a software
3
+ # program [ https://github.com/bds/iraq_unrest ]
4
+ # which retrieved publicly shared data
5
+ # provided by Agence France-Presse.
6
+ #
7
+ # Figures are provided by Iraqi officials
8
+ # on a monthly basis, and have been compiled by
9
+ # Agence France-Presse at:
10
+ #
11
+ # http://u.afp.com/JSL
12
+ #
13
+ # They are based on data released by the Iraqi
14
+ # ministries of health, interior and defence.
15
+ # If you have any questions, please contact:
16
+ #
17
+ # AFP's Baghdad Bureau
18
+ # https://twitter.com/prashantrao
19
+ ###############################################
20
+ date,civilian_killed,police_killed,army_killed,civilian_wounded,police_wounded,army_wounded,insurg_killed,insurg_arrested
21
+ Dec-2013,,,,0,,,,0
22
+ Nov-2013,,,,0,,,,0
23
+ Oct-2013,,,,0,,,,0
24
+ Sep-2013,768,62,95,885,969,,76,1140
25
+ Aug-2013,267,56,78,356,455,,54,587
26
+ Jul-2013,778,88,122,921,1356,,89,1567
27
+ Jun-2013,156,55,90,240,244,,45,379
28
+ May-2013,446,96,193,630,752,,152,1097
29
+ Apr-2013,121,39,67,205,167,,66,300
30
+ Mar-2013,95,45,77,163,135,,44,256
31
+ Feb-2013,88,26,65,136,123,,40,228
32
+ Jan-2013,120,35,54,177,164,,40,258
33
+ Dec-2012,125,55,88,208,188,,58,334
34
+ Nov-2012,101,35,68,166,129,,55,252
35
+ Oct-2012,88,31,92,144,110,,62,264
36
+ Sep-2012,182,88,110,365,453,,120,683
37
+ Aug-2012,90,35,80,164,120,,60,260
38
+ Jul-2012,241,40,122,325,480,,95,697
39
+ Jun-2012,85,26,99,131,111,,59,269
40
+ May-2012,90,20,80,132,115,,53,248
41
+ Apr-2012,88,18,89,126,132,,50,271
42
+ Mar-2012,78,22,85,112,220,,52,357
43
+ Feb-2012,91,39,95,150,180,,77,352
44
+ Jan-2012,99,31,85,151,151,,85,321
45
+ Dec-2011,90,36,92,155,99,,88,279
46
+ Nov-2011,112,42,110,187,120,,95,325
47
+ Oct-2011,161,55,142,258,195,,101,438
48
+ Sep-2011,110,42,150,185,132,,82,364
49
+ Aug-2011,155,45,120,239,183,,96,399
50
+ Jul-2011,159,56,135,259,199,,119,453
51
+ Jun-2011,155,77,150,271,192,,112,454
52
+ May-2011,102,45,66,177,115,,85,266
53
+ Apr-2011,120,56,97,211,190,,90,377
54
+ Mar-2011,136,55,80,247,215,,75,370
55
+ Feb-2011,119,45,65,197,200,,60,325
56
+ Jan-2011,159,55,95,259,178,,90,363
57
+ Dec-2010,89,41,77,151,114,,80,271
58
+ Nov-2010,105,43,78,171,155,,60,293
59
+ Oct-2010,120,45,86,185,202,,75,363
60
+ Sep-2010,185,55,90,273,284,,111,485
61
+ Aug-2010,295,77,180,426,508,,150,838
62
+ Jul-2010,396,89,198,535,680,,165,1043
63
+ Jun-2010,204,50,109,284,400,,111,620
64
+ May-2010,275,45,141,337,520,,57,718
65
+ Apr-2010,274,39,133,328,731,,53,917
66
+ Mar-2010,216,50,120,367,419,,160,699
67
+ Feb-2010,211,96,155,352,414,,115,684
68
+ Jan-2010,135,41,120,196,620,,42,782
69
+ Dec-2009,306,48,119,367,1137,,32,1288
70
+ Nov-2009,88,22,56,122,332,,44,432
71
+ Oct-2009,343,42,135,410,1275,,90,1500
72
+ Sep-2009,125,38,102,203,533,,76,711
73
+ Aug-2009,393,48,129,456,1592,,20,1741
74
+ Jul-2009,223,40,93,275,975,,35,1103
75
+ Jun-2009,372,45,101,437,960,,34,1095
76
+ May-2009,124,25,55,155,285,,4,344
77
+ Apr-2009,290,41,97,355,640,,10,747
78
+ Mar-2009,185,53,157,252,445,,45,647
79
+ Feb-2009,211,30,61,258,456,,31,548
80
+ Jan-2009,140,24,35,191,300,,71,406
81
+ Dec-2008,240,58,206,316,609,,47,862
82
+ Nov-2008,297,29,100,340,600,,28,728
83
+ Oct-2008,278,21,61,317,461,,40,562
84
+ Sep-2008,359,55,144,440,704,,41,889
85
+ Aug-2008,383,30,115,431,680,,64,859
86
+ Jul-2008,387,45,83,465,601,,63,747
87
+ Jun-2008,448,40,111,509,685,,47,843
88
+ May-2008,504,32,89,563,857,,57,1003
89
+ Apr-2008,966,69,159,1073,1745,,104,2008
90
+ Mar-2008,925,103,103,1082,925,,54,1082
91
+ Feb-2008,636,65,121,721,705,,21,847
92
+ Jan-2008,463,56,119,541,656,,35,810
93
+ Dec-2007,480,64,156,568,730,,51,937
94
+ Nov-2007,537,45,119,606,521,,64,704
95
+ Oct-2007,758,116,180,887,144,,39,363
96
+ Sep-2007,840,61,120,917,849,,50,1019
97
+ Aug-2007,1771,20,100,1856,1558,,25,1683
98
+ Jul-2007,1652,144,169,1875,1691,,118,1978
99
+ Jun-2007,1241,191,350,1463,1561,,70,1981
100
+ May-2007,1951,127,215,2124,2011,,63,2289
101
+ Apr-2007,1498,128,202,1689,2330,,107,2639
102
+ Mar-2007,1869,165,277,2078,2719,,51,3047
103
+ Feb-2007,1646,131,147,1806,2701,,47,2895
104
+ Jan-2007,1992,55,135,2087,1941,,85,2161
105
+ Dec-2006,,,,0,,,,0
106
+ Nov-2006,1847,103,151,1975,1335,,,1486
107
+ Oct-2006,1289,119,184,1427,1504,,,1688
108
+ Sep-2006,,,,0,,,,0
109
+ Aug-2006,,,,0,,,,0
110
+ Jul-2006,1850,,,1850,,,,0
111
+ Jun-2006,887,79,126,1009,1588,,57,1771
112
+ May-2006,932,95,97,1055,1271,,57,1425
113
+ Apr-2006,,,,0,,,,0
114
+ Mar-2006,,,,0,,,,0
115
+ Feb-2006,,,,0,,,,0
116
+ Jan-2006,,,,0,,,,0
@@ -0,0 +1,41 @@
1
+ module IraqUnrest
2
+
3
+ class DataSet
4
+ include Validatable
5
+ include Serializable
6
+
7
+ def initialize(attributes={})
8
+ self.attributes=attributes
9
+ end
10
+
11
+ def attributes=(attrs)
12
+ attrs.each_pair do |k, v|
13
+ send("#{k}=", v)
14
+ end
15
+ end
16
+
17
+ class << self
18
+ def to_csv
19
+ DataSetFormatter.render(:csv, :object => self)
20
+ end
21
+
22
+ def to_html
23
+ DataSetFormatter.render(:html, :object => self)
24
+ end
25
+
26
+ def to_csv!
27
+ DataSetFormatter.render_file("#{file_name}.csv", :object => self)
28
+ end
29
+
30
+ def to_html!
31
+ DataSetFormatter.render_file("#{file_name}.html", :object => self)
32
+ end
33
+ alias_method :visualize!, :to_html!
34
+
35
+ def file_name
36
+ name.demodulize.underscore
37
+ end
38
+ end
39
+
40
+ end
41
+ end
@@ -0,0 +1,32 @@
1
+ <meta charset="UTF-8">
2
+ <meta name="description" content="Iraq Unrest Data Visualization">
3
+ <meta name="author" content="Brian Douglas Smith">
4
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
5
+ <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.3.0/rickshaw.min.css">
6
+ <style type="text/css">
7
+
8
+ #chart_container {
9
+ position: relative;
10
+ display: inline-block;
11
+ font-family: Arial, Helvetica, sans-serif;
12
+ }
13
+
14
+ #y_axis {
15
+ position: absolute;
16
+ top: 0;
17
+ bottom: 0;
18
+ width: 40px;
19
+ }
20
+
21
+ #chart {
22
+ display: inline-block;
23
+ margin-left: 40px;
24
+ }
25
+
26
+ #legend {
27
+ display: inline-block;
28
+ position: relative;
29
+ left: 8px;
30
+ }
31
+
32
+ </style>
@@ -0,0 +1,94 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Iraq Government Casualty Figures</title>
5
+ <%= header %>
6
+ </head>
7
+
8
+ <body>
9
+ <h1>Iraq Government Casualty Figures</h1>
10
+ <p><a href="https://github.com/bds/iraq_toll">https://github.com/bds/iraq_toll</a></p>
11
+ <div id="chart_container">
12
+ <div id="y_axis"></div>
13
+ <div id="chart"></div>
14
+ </div>
15
+ <div id="legend"></div>
16
+
17
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
18
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.3.0/rickshaw.min.js"></script>
19
+
20
+ <script type="text/javascript">
21
+ var palette = new Rickshaw.Color.Palette( { scheme: 'cool' } );
22
+
23
+ var graph = new Rickshaw.Graph( {
24
+ element: document.querySelector("#chart"),
25
+ renderer: 'area', width: 640, height: 480,
26
+ series: [ {
27
+ name: 'Civilian Killed',
28
+ color: palette.color(),
29
+ data: <%= JSON.generate(data[:civilian_killed]) %>
30
+ }, {
31
+ name: 'Civilian Wounded',
32
+ color: palette.color(),
33
+ data: <%= JSON.generate(data[:civilian_wounded]) %>
34
+ }, {
35
+ name: 'Police Killed',
36
+ color: palette.color(),
37
+ data: <%= JSON.generate(data[:police_killed]) %>
38
+ }, {
39
+ name: 'Police Wounded',
40
+ color: palette.color(),
41
+ data: <%= JSON.generate(data[:police_wounded]) %>
42
+ }, {
43
+ name: 'Army Killed',
44
+ color: palette.color(),
45
+ data: <%= JSON.generate(data[:army_killed]) %>
46
+ }, {
47
+ name: 'Army Wounded',
48
+ color: palette.color(),
49
+ data: <%= JSON.generate(data[:army_wounded]) %>
50
+ }, {
51
+ name: 'Insurgent Killed',
52
+ color: palette.color(),
53
+ data: <%= JSON.generate(data[:insurg_killed]) %>
54
+ }, {
55
+ name: 'Insurgent Arrested',
56
+ color: palette.color(),
57
+ data: <%= JSON.generate(data[:insurg_arrested]) %>
58
+ } ]});
59
+
60
+ var x_axis = new Rickshaw.Graph.Axis.Time( {
61
+ graph: graph
62
+ } );
63
+
64
+ var y_axis = new Rickshaw.Graph.Axis.Y( {
65
+ graph: graph,
66
+ orientation: 'left',
67
+ element: document.getElementById('y_axis'),
68
+ } );
69
+
70
+ var legend = new Rickshaw.Graph.Legend({
71
+ graph: graph,
72
+ element: document.getElementById('legend')
73
+ });
74
+
75
+ var shelving = new Rickshaw.Graph.Behavior.Series.Toggle({
76
+ graph: graph,
77
+ legend: legend
78
+ });
79
+
80
+ var highlighter = new Rickshaw.Graph.Behavior.Series.Highlight({
81
+ graph: graph,
82
+ legend: legend
83
+ });
84
+
85
+ var hoverDetail = new Rickshaw.Graph.HoverDetail( {
86
+ graph: graph,
87
+ yFormatter: function(y) { return Math.floor(y) + "" }
88
+ } );
89
+
90
+ graph.render();
91
+ </script>
92
+
93
+ </body>
94
+ </html>
@@ -0,0 +1,73 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <title>Iraqi Casualties Comparison</title>
5
+ <%= header %>
6
+ </head>
7
+
8
+ <body>
9
+ <h1>Iraqi Casualties Comparison</h1>
10
+ <p><a href="https://github.com/bds/iraq_toll">https://github.com/bds/iraq_toll</a></p>
11
+ <div id="chart_container">
12
+ <div id="y_axis"></div>
13
+ <div id="chart"></div>
14
+ </div>
15
+ <div id="legend"></div>
16
+
17
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.3.3/d3.min.js"></script>
18
+ <script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/rickshaw/1.3.0/rickshaw.min.js"></script>
19
+ <script type="text/javascript">
20
+ var palette = new Rickshaw.Color.Palette( { scheme: 'spectrum14' } );
21
+
22
+ var graph = new Rickshaw.Graph( {
23
+ element: document.querySelector("#chart"),
24
+ renderer: 'area', width: 640, height: 480,
25
+ series: [ {
26
+ name: 'Iraq Body Count',
27
+ color: palette.color(),
28
+ data: <%= JSON.generate(data[:iraq_body_count]) %>
29
+ }, {
30
+ name: 'Iraq Gov',
31
+ color: palette.color(),
32
+ data: <%= JSON.generate(data[:iraq_gov]) %>
33
+ }, {
34
+ name: 'AFP',
35
+ color: palette.color(),
36
+ data: <%= JSON.generate(data[:afp]) %>
37
+ } ]});
38
+
39
+ var x_axis = new Rickshaw.Graph.Axis.Time( {
40
+ graph: graph
41
+ } );
42
+
43
+ var y_axis = new Rickshaw.Graph.Axis.Y( {
44
+ graph: graph,
45
+ orientation: 'left',
46
+ element: document.getElementById('y_axis'),
47
+ } );
48
+
49
+ var legend = new Rickshaw.Graph.Legend({
50
+ graph: graph,
51
+ element: document.getElementById('legend')
52
+ });
53
+
54
+ var shelving = new Rickshaw.Graph.Behavior.Series.Toggle({
55
+ graph: graph,
56
+ legend: legend
57
+ });
58
+
59
+ var highlighter = new Rickshaw.Graph.Behavior.Series.Highlight({
60
+ graph: graph,
61
+ legend: legend
62
+ });
63
+
64
+ var hoverDetail = new Rickshaw.Graph.HoverDetail( {
65
+ graph: graph,
66
+ yFormatter: function(y) { return Math.floor(y) + "" }
67
+ } );
68
+
69
+ graph.renderer.unstack = true;
70
+ graph.render();
71
+ </script>
72
+ </body>
73
+ </html>