Skip to content

Instantly share code, notes, and snippets.

@rashidkpc
Last active December 18, 2015 13:29
Show Gist options
  • Save rashidkpc/5790148 to your computer and use it in GitHub Desktop.
Save rashidkpc/5790148 to your computer and use it in GitHub Desktop.
{
"title": "American Gun Deaths since Newtown, CT",
"rows": [
{
"title": "Options",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"loading": false,
"error": false,
"span": 4,
"editable": true,
"group": [
"default"
],
"type": "text",
"mode": "markdown",
"content": "This dashboard is updated daily from data provided by [slate.com](http://www.slate.com/articles/news_and_politics/crime/2012/12/gun_death_tally_every_american_gun_death_since_newtown_sandy_hook_shooting.html). Every data point is a single human life taken by a gun in the United States since December 13th, 2012. If this data upsets you: [do something about it](http://www.house.gov/representatives/find/)",
"style": {}
},
{
"loading": false,
"error": "",
"span": 5,
"editable": true,
"group": [
"default"
],
"type": "timepicker",
"mode": "since",
"time_options": [
"5m",
"15m",
"1h",
"6h",
"12h",
"24h",
"2d",
"5d"
],
"timespan": "5d",
"timefield": "date",
"index": "newtown",
"defaultindex": "NOINDEX",
"index_interval": "none",
"refresh": {
"enable": false,
"interval": 30,
"min": 3
},
"timeformat": "",
"time": {
"from": "12/13/2012 00:00:00",
"to": "06/15/2013 17:09:20",
"index": [
"newtown"
]
}
},
{
"loading": false,
"error": false,
"span": 3,
"editable": true,
"group": [
"default"
],
"type": "dashcontrol",
"save": {
"gist": false,
"elasticsearch": true,
"local": true,
"default": true
},
"load": {
"gist": true,
"elasticsearch": true,
"local": true
},
"hide_control": false,
"elasticsearch_size": 20,
"elasticsearch_saveto": "kibana-int",
"temp": true,
"temp_ttl": "30d"
}
]
},
{
"title": "Query",
"height": "50px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"loading": false,
"error": false,
"span": 12,
"editable": true,
"group": [
"default"
],
"type": "stringquery",
"label": "Search",
"query": "",
"size": 100,
"sort": [
"_score",
"desc"
],
"multi": false,
"multi_arrange": "horizontal"
}
]
},
{
"title": "Graph",
"height": "300px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"loading": false,
"span": 8,
"editable": true,
"group": [
"default"
],
"type": "histogram",
"query": [
{
"query": "",
"label": ""
}
],
"interval": "1d",
"show": [
"points",
"lines",
"legend",
"x-axis",
"y-axis"
],
"timezone": "browser",
"spyable": true,
"zoomlinks": true,
"fill": 3,
"linewidth": 2,
"bars": false,
"stack": true,
"points": false,
"lines": true,
"legend": true,
"x-axis": true,
"y-axis": true,
"mode": "count",
"value_field": null,
"auto_int": true,
"resolution": 100,
"percentage": false,
"interactive": true
},
{
"loading": false,
"error": false,
"span": 4,
"editable": true,
"group": [
"default"
],
"type": "map",
"query": "",
"map": "usa",
"colors": [
"#A0E2E2",
"#265656"
],
"size": 100,
"exclude": [],
"spyable": true,
"index_limit": 0,
"field": "state",
"title": "US Gun Deaths by State"
}
]
},
{
"title": "Events",
"height": "350px",
"editable": true,
"collapse": false,
"collapsable": true,
"panels": [
{
"loading": false,
"error": false,
"span": 1,
"editable": true,
"group": [
"default"
],
"type": "fields",
"style": {},
"arrange": "vertical",
"micropanel_position": "right",
"sort": [
"date",
"asc"
],
"query": ""
},
{
"loading": false,
"error": false,
"span": 7,
"editable": true,
"group": [
"default"
],
"type": "table",
"query": "",
"interval": "1y",
"show": [
"bars",
"y-axis",
"x-axis",
"legend"
],
"fill": 3,
"overflow": "min-height",
"timezone": "browser",
"spyable": true,
"zoomlinks": true,
"size": 50,
"pages": 10,
"offset": 0,
"sort": [
"date",
"asc"
],
"style": {
"font-size": "9pt"
},
"fields": [
"date",
"id",
"name",
"gender",
"city",
"state",
"source"
],
"sortable": true,
"highlight": [],
"header": true,
"paging": true
},
{
"loading": false,
"error": false,
"span": 4,
"editable": true,
"group": [
"default"
],
"type": "column",
"panels": [
{
"loading": false,
"sizeable": false,
"span": 12,
"height": "150px",
"editable": true,
"group": [
"default"
],
"type": "hits",
"chart": "total",
"query": [
{
"query": "",
"label": ""
}
],
"style": {
"font-size": "72pt"
},
"arrangement": "vertical",
"counter_pos": "above",
"donut": false,
"tilt": false,
"labels": true,
"title": "Total Gun Deaths since Newtown, CT"
},
{
"loading": false,
"sizeable": false,
"span": 12,
"height": "350px",
"editable": true,
"group": [
"default"
],
"type": "hits",
"query": [
{
"query": "unknown",
"label": "unknown"
},
{
"query": "female",
"label": "female"
},
{
"query": "male",
"label": "male"
}
],
"style": {
"font-size": "10pt"
},
"arrangement": "horizontal",
"chart": "bar",
"counter_pos": "above",
"donut": false,
"tilt": false,
"labels": true,
"title": "Deaths by Gender"
},
{
"loading": false,
"error": false,
"sizeable": false,
"span": 12,
"height": "350px",
"editable": true,
"group": [
"default"
],
"type": "pie",
"mode": "terms",
"query": {
"field": "state",
"query": ""
},
"size": 50,
"exclude": [],
"donut": false,
"tilt": false,
"legend": "below",
"labels": true,
"default_field": "DEFAULT",
"spyable": true,
"title": "Deaths by State"
}
]
}
]
}
],
"editable": true,
"last": null
}
require 'rubygems'
require 'json'
require 'net/http'
require 'pp'
require 'date'
require 'tire'
Tire.index 'newtown' do
create :mappings => {
:gun_death => {
:properties => {
:date => { :type => 'date', :index => 'not_analyzed' },
:id => { :type => 'integer', :index => 'not_analyzed', :include_in_all => false },
:state => { :type => 'string', :index => 'not_analyzed' },
}
}
}
end
deaths = Net::HTTP.get(URI.parse('http://slate-interactives-prod.elasticbeanstalk.com/gun-deaths/getCSV.php')).split(/\r?\n/)
# fields from header
keys = deaths.shift.split(",")
values = []
result = []
# parse values
deaths.each do | line |
# Make sure line has all fields
if line.count(',') < 10
next
end
iter = 0
assoc = {}
line.split("\",\"").each do |v|
assoc[keys[iter]] = v.to_s.encode('UTF-8', {:invalid => :replace, :undef => :replace, :replace => '?'}).gsub(/"/,'')
iter += 1
end
if assoc['gender'] == 'M'
gender = 'male'
elsif assoc['gender'] == 'F'
gender = 'female'
else
gender = 'unknown'
end
event = {
:id => assoc['victimID'],
:date => Date.iso8601(assoc['date']),
:name => assoc['name'],
:gender => gender,
:age => assoc['age'].to_i,
:city => assoc['city'],
:state => assoc['state'],
:lonlat => [assoc['lng'],assoc['lat']],
:source => assoc['url'],
:type => "gun_death"
}
result.push(event)
end
Tire.index 'newtown' do
import result
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment