iraq_unrest 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
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>