iraq_unrest 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +114 -0
- data/Rakefile +7 -0
- data/examples/example_01.png +0 -0
- data/examples/example_02.png +0 -0
- data/examples/example_03.png +0 -0
- data/examples/iraq_government_casualty_figure.csv +95 -0
- data/examples/iraq_government_casualty_figure.html +126 -0
- data/examples/iraqi_casualties_comparison.csv +119 -0
- data/examples/iraqi_casualties_comparison.html +105 -0
- data/iraq_unrest.gemspec +33 -0
- data/lib/iraq_unrest/concerns/serializable.rb +37 -0
- data/lib/iraq_unrest/concerns/validatable.rb +18 -0
- data/lib/iraq_unrest/config.rb +8 -0
- data/lib/iraq_unrest/data/Iraq_Government_Casualty_Figure.csv +116 -0
- data/lib/iraq_unrest/data_set.rb +41 -0
- data/lib/iraq_unrest/erb/header.html.erb +32 -0
- data/lib/iraq_unrest/erb/iraq_government_casualty_figure.html.erb +94 -0
- data/lib/iraq_unrest/erb/iraqi_casualties_comparison.html.erb +73 -0
- data/lib/iraq_unrest/format.rb +103 -0
- data/lib/iraq_unrest/google_doc.rb +31 -0
- data/lib/iraq_unrest/iraq_government_casualty_figure.rb +53 -0
- data/lib/iraq_unrest/iraq_unrest_record.rb +74 -0
- data/lib/iraq_unrest/iraqi_casualties_comparison.rb +46 -0
- data/lib/iraq_unrest/serializers.rb +46 -0
- data/lib/iraq_unrest/version.rb +3 -0
- data/lib/iraq_unrest.rb +50 -0
- data/test/fixtures/vcr_cassettes/iraq_government_casualty_figure.yml +161 -0
- data/test/fixtures/vcr_cassettes/iraqi_casualties_comparison.yml +184 -0
- data/test/google_doc_test.rb +56 -0
- data/test/iraq_government_casualty_figure_test.rb +253 -0
- data/test/iraqi_casualties_comparison_test.rb +246 -0
- data/test/test_helper.rb +17 -0
- data/test/validatable_test.rb +34 -0
- 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>
|
data/iraq_unrest.gemspec
ADDED
@@ -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,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>
|