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.
- 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,103 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
# Code from https://github.com/sandal/fatty
|
4
|
+
class Format
|
5
|
+
attr_accessor :params
|
6
|
+
|
7
|
+
# FIXME: Need to understand where the methods to be
|
8
|
+
# implemented are declared
|
9
|
+
def validate
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class Formatter
|
14
|
+
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def formats
|
18
|
+
@formats ||= {}
|
19
|
+
end
|
20
|
+
|
21
|
+
def required_params(*args)
|
22
|
+
@required_params = args
|
23
|
+
end
|
24
|
+
|
25
|
+
def format(name, options={}, &block)
|
26
|
+
formats[name] = Class.new(IraqUnrest::Format, &block)
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate(format, params={})
|
30
|
+
check_required_params(params)
|
31
|
+
end
|
32
|
+
|
33
|
+
# puts ListFormatter.render(:csv, :data => data)
|
34
|
+
def render(format, params={})
|
35
|
+
validate(format, params)
|
36
|
+
|
37
|
+
# Each format object implements all the required steps
|
38
|
+
# so they they can be used interchangeably
|
39
|
+
format_obj = formats[format].new
|
40
|
+
|
41
|
+
# Customize
|
42
|
+
format_obj.params = params
|
43
|
+
format_obj.validate
|
44
|
+
format_obj.render
|
45
|
+
end
|
46
|
+
|
47
|
+
def render_file(file, params={})
|
48
|
+
format = File.extname(file).delete(".").to_sym
|
49
|
+
|
50
|
+
File.open(file, "w") do |f|
|
51
|
+
f << render(format, params)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
private
|
56
|
+
|
57
|
+
def check_required_params(params)
|
58
|
+
unless (@required_params || []).all? { |k| params.key?(k) }
|
59
|
+
raise Exception, "One or more required params is missing"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
class DataSetFormatter < Formatter
|
67
|
+
|
68
|
+
required_params :object
|
69
|
+
|
70
|
+
format :csv do
|
71
|
+
|
72
|
+
def render
|
73
|
+
tpl = <<-EOS
|
74
|
+
# header
|
75
|
+
csv << self::ATTRIBUTES
|
76
|
+
|
77
|
+
# data rows
|
78
|
+
self.all.each do |row|
|
79
|
+
csv << row.attributes.values
|
80
|
+
end
|
81
|
+
EOS
|
82
|
+
template = Tilt::CSVTemplate.new { tpl }
|
83
|
+
template.render(params[:object])
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
format :html do
|
88
|
+
|
89
|
+
def render
|
90
|
+
object = params[:object]
|
91
|
+
erb_dir = File.dirname(__FILE__) + "/erb"
|
92
|
+
|
93
|
+
template = Tilt.new(erb_dir + "/" + object.file_name + ".html.erb")
|
94
|
+
header = Tilt.new(erb_dir + '/header.html.erb')
|
95
|
+
template.render(self, :header => header.render,
|
96
|
+
:data => object.as_rickshaw)
|
97
|
+
end
|
98
|
+
|
99
|
+
end
|
100
|
+
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
class GoogleDoc
|
4
|
+
|
5
|
+
SPREADSHEETS = {:iraq_government_casualty_figure => 4,
|
6
|
+
:iraqi_casualties_comparison => 9}
|
7
|
+
|
8
|
+
def spreadsheet(name)
|
9
|
+
raise ArgumentError, "Invalid spreadsheet name" unless SPREADSHEETS.include?(name)
|
10
|
+
|
11
|
+
begin
|
12
|
+
uri = URI.parse("https://docs.google.com/spreadsheet/pub?hl=en_US&key=%s&hl=en_US&gid=%s&output=csv" %
|
13
|
+
[IraqUnrest::Config.doc_id, SPREADSHEETS[name]])
|
14
|
+
|
15
|
+
curl = ::Curl::Easy.perform(uri.to_s) do |c|
|
16
|
+
c.timeout = IraqUnrest::Config.timeout
|
17
|
+
end
|
18
|
+
rescue Curl::Err::TimeoutError => e
|
19
|
+
raise $!, "Could not connect to Google Docs in a timely manner #{$!}", $!.backtrace
|
20
|
+
end
|
21
|
+
|
22
|
+
if curl.response_code != 200
|
23
|
+
raise Exception, "Did not receive a successfull response from Google Docs"
|
24
|
+
end
|
25
|
+
|
26
|
+
curl.body_str
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
class IraqGovernmentCasualtyFigure < DataSet
|
4
|
+
|
5
|
+
ATTRIBUTES = [ :date, :civilian_killed, :police_killed, :army_killed,
|
6
|
+
:civilian_wounded, :police_wounded, :army_wounded,
|
7
|
+
:insurg_killed, :insurg_arrested ]
|
8
|
+
|
9
|
+
attr_accessor *ATTRIBUTES
|
10
|
+
|
11
|
+
def attributes
|
12
|
+
ATTRIBUTES.inject(ActiveSupport::HashWithIndifferentAccess.new) do |result, key|
|
13
|
+
result[key] = read_attribute_for_validation(key)
|
14
|
+
result
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.raw_csv
|
19
|
+
GoogleDoc.new.spreadsheet(file_name.to_sym)
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.parse(data)
|
23
|
+
result = []
|
24
|
+
parsed = data.split("\n")
|
25
|
+
title = parsed.slice(0).split(",").first.gsub(/\(|\(|\:|\s+/, "").chop.underscore
|
26
|
+
comments = parsed.slice!(1..4)
|
27
|
+
|
28
|
+
if title != file_name
|
29
|
+
raise Exception, "Could not find a valid title in data source"
|
30
|
+
end
|
31
|
+
|
32
|
+
parsed.each do |row|
|
33
|
+
fields = row.split(",", -1)
|
34
|
+
|
35
|
+
obj = new(:date => fields[0],
|
36
|
+
:civilian_killed => fields[1],
|
37
|
+
:police_killed => fields[2],
|
38
|
+
:army_killed => fields[3],
|
39
|
+
:civilian_wounded => fields[5],
|
40
|
+
:police_wounded => fields[6],
|
41
|
+
:army_wounded => fields[7],
|
42
|
+
:insurg_killed => fields[9],
|
43
|
+
:insurg_arrested => fields[10])
|
44
|
+
|
45
|
+
result << obj if obj.valid?
|
46
|
+
end
|
47
|
+
|
48
|
+
result
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
class DataSet
|
4
|
+
|
5
|
+
def initialize(attributes={})
|
6
|
+
self.attributes=attributes
|
7
|
+
end
|
8
|
+
|
9
|
+
def attributes=(attrs)
|
10
|
+
attrs.each_pair do |k, v|
|
11
|
+
send("#{k}=", v)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
class << self
|
16
|
+
|
17
|
+
def parse
|
18
|
+
end
|
19
|
+
|
20
|
+
def all
|
21
|
+
parse(self.raw_csv)
|
22
|
+
end
|
23
|
+
|
24
|
+
def raw_csv
|
25
|
+
doc = IraqUnrest::GoogleDoc.new.spreadsheet(self.file_name.to_sym)
|
26
|
+
end
|
27
|
+
|
28
|
+
def file_name
|
29
|
+
self.name.split("::").last.underscore
|
30
|
+
end
|
31
|
+
|
32
|
+
# Need to make this clear that this is picking up the
|
33
|
+
# result of ActiveModelSerializer
|
34
|
+
def to_json
|
35
|
+
ActiveModel::ArraySerializer.new(self.all).to_json
|
36
|
+
end
|
37
|
+
|
38
|
+
def as_json
|
39
|
+
ActiveModel::ArraySerializer.new(self.all).as_json
|
40
|
+
end
|
41
|
+
|
42
|
+
# FIXME - we could probably remove a layer of abstraction here
|
43
|
+
def to_rickshaw
|
44
|
+
IraqUnrest::Serializers.as_rickshaw(self.all)
|
45
|
+
end
|
46
|
+
|
47
|
+
def to_csv
|
48
|
+
IraqUnrest::Serializers.as_csv(self.all)
|
49
|
+
end
|
50
|
+
|
51
|
+
def to_html
|
52
|
+
IraqUnrest::Serializers.as_html(self.all)
|
53
|
+
end
|
54
|
+
|
55
|
+
def generate_csv!
|
56
|
+
file = File.new(self.file_name + ".csv", "w")
|
57
|
+
file.puts IraqUnrest::Config.disclaimer
|
58
|
+
csv_data = self.to_csv.to_s.split("\n")
|
59
|
+
csv_data.each { |row| file.puts row }
|
60
|
+
|
61
|
+
file.close
|
62
|
+
file
|
63
|
+
end
|
64
|
+
|
65
|
+
def generate_html!
|
66
|
+
file = File.new(self.file_name + ".html", "w")
|
67
|
+
file.puts self.to_html
|
68
|
+
file.close
|
69
|
+
file
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
class IraqiCasualtiesComparison < DataSet
|
4
|
+
|
5
|
+
ATTRIBUTES = [:date, :afp, :iraq_gov, :iraq_body_count]
|
6
|
+
|
7
|
+
attr_accessor *ATTRIBUTES
|
8
|
+
|
9
|
+
def attributes
|
10
|
+
ATTRIBUTES.inject(ActiveSupport::HashWithIndifferentAccess.new) do |result, key|
|
11
|
+
result[key] = read_attribute_for_validation(key)
|
12
|
+
result
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.raw_csv
|
17
|
+
GoogleDoc.new.spreadsheet(file_name.to_sym)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.parse(data)
|
21
|
+
result = []
|
22
|
+
parsed = data.split("\n")
|
23
|
+
|
24
|
+
title = parsed.slice!(0).split(",").first.gsub(/\(|\(|\:|A |\s+/, "").underscore
|
25
|
+
comments = parsed.slice!(0..4)
|
26
|
+
|
27
|
+
if title != file_name
|
28
|
+
raise Exception, "Could not find a valid title in data source"
|
29
|
+
end
|
30
|
+
|
31
|
+
parsed.each do |row|
|
32
|
+
fields = row.split(",", -1)
|
33
|
+
obj = new(:date => fields[0],
|
34
|
+
:iraq_gov => fields[1],
|
35
|
+
:iraq_body_count => fields[2],
|
36
|
+
:afp => fields[3])
|
37
|
+
|
38
|
+
result << obj if obj.valid?
|
39
|
+
end
|
40
|
+
|
41
|
+
result
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module IraqUnrest
|
2
|
+
|
3
|
+
module Serializers
|
4
|
+
|
5
|
+
# Gives to_json and as_json
|
6
|
+
# Used by both members and collections
|
7
|
+
class IraqiCasualtiesComparisonSerializer < ::ActiveModel::Serializer
|
8
|
+
attributes :date, :afp, :iraq_gov, :iraq_body_count
|
9
|
+
|
10
|
+
self.root = false
|
11
|
+
|
12
|
+
def date
|
13
|
+
Date.strptime(object.date, "%b-%Y").end_of_month.to_time.to_i
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
class IraqGovernmentCasualtyFigureSerializer < ::ActiveModel::Serializer
|
18
|
+
attributes :date, :civilian_killed, :police_killed, :army_killed,
|
19
|
+
:civilian_wounded, :police_wounded, :army_wounded,
|
20
|
+
:insurg_killed, :insurg_arrested
|
21
|
+
|
22
|
+
self.root = false
|
23
|
+
|
24
|
+
def date
|
25
|
+
Date.strptime(object.date, "%b-%Y").end_of_month.to_time.to_i
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.as_rickshaw(data)
|
30
|
+
result = {}
|
31
|
+
attrs = data.first.attributes.except(:date).symbolize_keys.keys
|
32
|
+
|
33
|
+
data.each do |row|
|
34
|
+
attrs.each do |attr|
|
35
|
+
result[attr] ||= []
|
36
|
+
result[attr] << { :x => Date.strptime(row.date, "%b-%Y").end_of_month.to_time.to_i,
|
37
|
+
:y => row.send(attr).to_i ||= 0 }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
result.each {|k,v| result[k].sort_by! { |hsh| hsh[:x]} }
|
42
|
+
result
|
43
|
+
end
|
44
|
+
|
45
|
+
end
|
46
|
+
end
|
data/lib/iraq_unrest.rb
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'tilt'
|
2
|
+
require 'json'
|
3
|
+
require 'curb'
|
4
|
+
require 'csv'
|
5
|
+
|
6
|
+
require 'active_model_serializers'
|
7
|
+
require 'active_support/concern'
|
8
|
+
require 'active_support/core_ext/hash'
|
9
|
+
require 'active_support/core_ext/object' # gives us to_json
|
10
|
+
require 'active_support/inflector'
|
11
|
+
|
12
|
+
require "iraq_unrest/version"
|
13
|
+
require "iraq_unrest/config"
|
14
|
+
require "iraq_unrest/concerns/validatable"
|
15
|
+
require "iraq_unrest/concerns/serializable"
|
16
|
+
require "iraq_unrest/serializers"
|
17
|
+
require "iraq_unrest/format"
|
18
|
+
require "iraq_unrest/google_doc"
|
19
|
+
require "iraq_unrest/data_set"
|
20
|
+
require "iraq_unrest/iraq_government_casualty_figure"
|
21
|
+
require "iraq_unrest/iraqi_casualties_comparison"
|
22
|
+
|
23
|
+
IraqUnrest::Config.configure do |config|
|
24
|
+
config.doc_id = "0Aia6y6NymliRdEZESktBSWVqNWM1dkZOSGNIVmtFZEE"
|
25
|
+
config.timeout = 30
|
26
|
+
config.disclaimer = <<-EOS
|
27
|
+
##################################################
|
28
|
+
# NOTE: This file was generated by a free software
|
29
|
+
# program [ https://github.com/bds/iraq_unrest ]
|
30
|
+
# which retrieved publicly shared data
|
31
|
+
# provided by Agence France-Presse.
|
32
|
+
#
|
33
|
+
# Figures are provided by Iraqi officials
|
34
|
+
# on a monthly basis, and have been compiled by
|
35
|
+
# Agence France-Presse at:
|
36
|
+
#
|
37
|
+
# http://u.afp.com/JSL
|
38
|
+
#
|
39
|
+
# They are based on data released by the Iraqi
|
40
|
+
# ministries of health, interior and defence.
|
41
|
+
# If you have any questions, please contact:
|
42
|
+
#
|
43
|
+
# AFP's Baghdad Bureau
|
44
|
+
# https://twitter.com/prashantrao
|
45
|
+
##################################################
|
46
|
+
EOS
|
47
|
+
end
|
48
|
+
|
49
|
+
module IraqUnrest
|
50
|
+
end
|
@@ -0,0 +1,161 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: get
|
5
|
+
uri: https://docs.google.com/spreadsheet/pub?gid=4&hl=en_US&key=0Aia6y6NymliRdEZESktBSWVqNWM1dkZOSGNIVmtFZEE&output=csv
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: ''
|
9
|
+
headers: {}
|
10
|
+
response:
|
11
|
+
status:
|
12
|
+
code: 200
|
13
|
+
message: OK
|
14
|
+
headers:
|
15
|
+
Content-Type:
|
16
|
+
- text/csv
|
17
|
+
X-Robots-Tag:
|
18
|
+
- noindex, nofollow, nosnippet
|
19
|
+
Content-Disposition:
|
20
|
+
- attachment; filename="Iraq Unrest.csv"
|
21
|
+
Set-Cookie:
|
22
|
+
- NID=67=uwoB2ugbyq-jGSmZq1XiowMDE5_FXC2Pu4_HQPzWowKD3_xYmyXAOshxb8BiGerBt0oWLDZw1S0WTvuQpCiDYu-0qvBvjorrPCNfbGUOqK-vANG2-qAcQbo2hMq8S7Kd;Domain=.google.com;Path=/;Expires=Wed,
|
23
|
+
14-May-2014 16:29:07 GMT;HttpOnly
|
24
|
+
P3p:
|
25
|
+
- CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657
|
26
|
+
for more info."
|
27
|
+
Date:
|
28
|
+
- Tue, 12 Nov 2013 16:29:07 GMT
|
29
|
+
Expires:
|
30
|
+
- Tue, 12 Nov 2013 16:29:07 GMT
|
31
|
+
Cache-Control:
|
32
|
+
- private, max-age=0
|
33
|
+
X-Content-Type-Options:
|
34
|
+
- nosniff
|
35
|
+
X-Xss-Protection:
|
36
|
+
- 1; mode=block
|
37
|
+
Server:
|
38
|
+
- GSE
|
39
|
+
Alternate-Protocol:
|
40
|
+
- 443:quic
|
41
|
+
Transfer-Encoding:
|
42
|
+
- chunked
|
43
|
+
body:
|
44
|
+
encoding: ASCII-8BIT
|
45
|
+
string: |-
|
46
|
+
Iraq Government Casualty Figures,,,,,,,,,,
|
47
|
+
,,,,,,,,,,
|
48
|
+
"Note: These figures are provided by Iraqi officials on a monthly basis, and have been compiled by Agence France-Presse. They are based on data released by the Iraqi ministries of health, interior and defence. If you have any questions, please leave a comment or contact AFP's Baghdad Bureau.",,,,,,,,,,
|
49
|
+
,,,,,,,,,,
|
50
|
+
,Killed,,,,Wounded,,,,Insurgents,
|
51
|
+
,Civilians,Police,Army,Total,Civilians,Police,Army,Total,Killed,Arrested
|
52
|
+
Dec-2013,,,,0,,,,0,,
|
53
|
+
Nov-2013,,,,0,,,,0,,
|
54
|
+
Oct-2013,855,65,44,964,1445,88,67,1600,33,167
|
55
|
+
Sep-2013,768,62,55,885,969,95,76,1140,86,523
|
56
|
+
Aug-2013,267,56,33,356,455,78,54,587,87,496
|
57
|
+
Jul-2013,778,88,55,921,1356,122,89,1567,68,
|
58
|
+
Jun-2013,156,55,29,240,244,90,45,379,23,87
|
59
|
+
May-2013,446,96,88,630,752,193,152,1097,51,222
|
60
|
+
Apr-2013,121,39,45,205,167,67,66,300,40,87
|
61
|
+
Mar-2013,95,45,23,163,135,77,44,256,30,67
|
62
|
+
Feb-2013,88,26,22,136,123,65,40,228,,
|
63
|
+
Jan-2013,120,35,22,177,164,54,40,258,33,72
|
64
|
+
2013,3694,567,416,4677,5810,929,673,7412,451,1721
|
65
|
+
Dec-2012,125,55,28,208,188,88,58,334,19,70
|
66
|
+
Nov-2012,101,35,30,166,129,68,55,252,12,51
|
67
|
+
Oct-2012,88,31,25,144,110,92,62,264,22,77
|
68
|
+
Sep-2012,182,88,95,365,453,110,120,683,,
|
69
|
+
Aug-2012,90,35,39,164,120,80,60,260,26,90
|
70
|
+
Jul-2012,241,40,44,325,480,122,95,697,,
|
71
|
+
Jun-2012,85,26,20,131,111,99,59,269,11,100
|
72
|
+
May-2012,90,20,22,132,115,80,53,248,20,105
|
73
|
+
Apr-2012,88,18,20,126,132,89,50,271,25,185
|
74
|
+
Mar-2012,78,22,12,112,220,85,52,357,30,152
|
75
|
+
Feb-2012,91,39,20,150,180,95,77,352,33,104
|
76
|
+
Jan-2012,99,31,21,151,151,85,85,321,41,214
|
77
|
+
2012,1358,440,376,2174,2389,1093,826,4308,239,1148
|
78
|
+
Dec-2011,90,36,29,155,99,92,88,279,48,150
|
79
|
+
Nov-2011,112,42,33,187,120,110,95,325,55,120
|
80
|
+
Oct-2011,161,55,42,258,195,142,101,438,85,
|
81
|
+
Sep-2011,110,42,33,185,132,150,82,364,45,215
|
82
|
+
Aug-2011,155,45,39,239,183,120,96,399,56,
|
83
|
+
Jul-2011,159,56,44,259,199,135,119,453,22,115
|
84
|
+
Jun-2011,155,77,39,271,192,150,112,454,25,102
|
85
|
+
May-2011,102,45,30,177,115,66,85,266,32,155
|
86
|
+
Apr-2011,120,56,35,211,190,97,90,377,49,199
|
87
|
+
Mar-2011,136,55,56,247,215,80,75,370,72,209
|
88
|
+
Feb-2011,119,45,33,197,200,65,60,325,36,250
|
89
|
+
Jan-2011,159,55,45,259,178,95,90,363,65,295
|
90
|
+
2011,1578,609,458,2645,2018,1302,1093,4413,590,1810
|
91
|
+
Dec-2010,89,41,21,151,114,77,80,271,34,
|
92
|
+
Nov-2010,105,43,23,171,155,78,60,293,40,195
|
93
|
+
Oct-2010,120,45,20,185,202,86,75,363,50,250
|
94
|
+
Sep-2010,185,55,33,273,284,90,111,485,78,487
|
95
|
+
Aug-2010,295,77,54,426,508,180,150,838,98,850
|
96
|
+
Jul-2010,396,89,50,535,680,198,165,1043,100,955
|
97
|
+
Jun-2010,204,50,30,284,400,109,111,620,44,600
|
98
|
+
May-2010,275,45,17,337,520,141,57,718,55,660
|
99
|
+
Apr-2010,274,39,15,328,731,133,53,917,48,590
|
100
|
+
Mar-2010,216,50,101,367,419,120,160,699,57,666
|
101
|
+
Feb-2010,211,96,45,352,414,155,115,684,52,661
|
102
|
+
Jan-2010,135,41,20,196,620,120,42,782,54,681
|
103
|
+
2010,2505,671,429,3605,5047,1487,1179,7713,710,6595
|
104
|
+
Dec-2009,306,48,13,367,1137,119,32,1288,48,635
|
105
|
+
Nov-2009,88,22,12,122,332,56,44,432,38,510
|
106
|
+
Oct-2009,343,42,25,410,1275,135,90,1500,38,585
|
107
|
+
Sep-2009,125,38,40,203,533,102,76,711,43,395
|
108
|
+
Aug-2009,393,48,15,456,1592,129,20,1741,52,540
|
109
|
+
Jul-2009,223,40,12,275,975,93,35,1103,41,400
|
110
|
+
Jun-2009,372,45,20,437,960,101,34,1095,47,635
|
111
|
+
May-2009,124,25,6,155,285,55,4,344,40,904
|
112
|
+
Apr-2009,290,41,24,355,640,97,10,747,53,831
|
113
|
+
Mar-2009,185,53,14,252,445,157,45,647,45,650
|
114
|
+
Feb-2009,211,30,17,258,456,61,31,548,61,508
|
115
|
+
Jan-2009,140,24,27,191,300,35,71,406,29,482
|
116
|
+
2009,2800,456,225,3481,8930,1140,492,10562,535,7075
|
117
|
+
Dec-2008,240,58,18,316,609,206,47,862,44,667
|
118
|
+
Nov-2008,297,29,14,340,600,100,28,728,60,875
|
119
|
+
Oct-2008,278,21,18,317,461,61,40,562,44,855
|
120
|
+
Sep-2008,359,55,26,440,704,144,41,889,66,920
|
121
|
+
Aug-2008,383,30,18,431,680,115,64,859,116,1385
|
122
|
+
Jul-2008,387,45,33,465,601,83,63,747,107,
|
123
|
+
Jun-2008,448,40,21,509,685,111,47,843,124,949
|
124
|
+
May-2008,504,32,27,563,857,89,57,1003,170,2421
|
125
|
+
Apr-2008,966,69,38,1073,1745,159,104,2008,355,1270
|
126
|
+
Mar-2008,925,103,54,1082,925,103,54,1082,645,2592
|
127
|
+
Feb-2008,636,65,20,721,705,121,21,847,237,1341
|
128
|
+
Jan-2008,463,56,22,541,656,119,35,810,229,1225
|
129
|
+
2008,5886,603,309,6798,9228,1411,601,11240,2197,14500
|
130
|
+
Dec-2007,480,64,24,568,730,156,51,937,251,1146
|
131
|
+
Nov-2007,537,45,24,606,521,119,64,704,240,2090
|
132
|
+
Oct-2007,758,116,13,887,144,180,39,363,334,1428
|
133
|
+
Sep-2007,840,61,16,917,849,120,50,1019,361,1520
|
134
|
+
Aug-2007,1771,20,65,1856,1558,100,25,1683,472,2027
|
135
|
+
Jul-2007,1652,144,79,1875,1691,169,118,1978,425,2191
|
136
|
+
Jun-2007,1241,191,31,1463,1561,350,70,1981,417,2265
|
137
|
+
May-2007,1951,127,46,2124,2011,215,63,2289,297,2355
|
138
|
+
Apr-2007,1498,128,63,1689,2330,202,107,2639,219,2939
|
139
|
+
Mar-2007,1869,165,44,2078,2719,277,51,3047,481,5664
|
140
|
+
Feb-2007,1646,131,29,1806,2701,147,47,2895,586,1921
|
141
|
+
Jan-2007,1992,55,40,2087,1941,135,85,2161,586,1921
|
142
|
+
2007,16235,1247,474,17956,18756,2170,770,21696,4669,27467
|
143
|
+
Dec-2006,,,,0,,,,0,423,
|
144
|
+
Nov-2006,1847,103,25,1975,1335,151,,1486,,
|
145
|
+
Oct-2006,1289,119,19,1427,1504,184,,1688,,
|
146
|
+
Sep-2006,,,,0,,,,0,,
|
147
|
+
Aug-2006,,,,0,,,,0,,
|
148
|
+
Jul-2006,1850,,,1850,,,,0,,
|
149
|
+
Jun-2006,887,79,43,1009,1588,126,57,1771,93,
|
150
|
+
May-2006,932,95,28,1055,1271,97,57,1425,324,
|
151
|
+
Apr-2006,,,,0,,,,0,,
|
152
|
+
Mar-2006,,,,0,,,,0,,
|
153
|
+
Feb-2006,,,,0,,,,0,,
|
154
|
+
Jan-2006,,,,0,,,,0,,
|
155
|
+
2006,6805,396,115,7316,5698,558,114,6370,840,0
|
156
|
+
Overall,37167,4422,2386,43975,52066,9161,5075,66302,9780,58595
|
157
|
+
,,,,,,,,,,
|
158
|
+
NB: Months with only police figures are combined police/army tolls,,,,,,,,,,
|
159
|
+
http_version:
|
160
|
+
recorded_at: Tue, 12 Nov 2013 16:29:07 GMT
|
161
|
+
recorded_with: VCR 2.6.0
|