diff options
| author | Jules Laplace <julescarbon@gmail.com> | 2019-08-05 02:06:29 +0200 |
|---|---|---|
| committer | Jules Laplace <julescarbon@gmail.com> | 2019-08-05 02:06:29 +0200 |
| commit | 626c348af622b9bb66000d1a49dbe007131649ef (patch) | |
| tree | 59127e1e69a209c1f0823050c17979cd5253d312 /bin/grep.js | |
sonifications
Diffstat (limited to 'bin/grep.js')
| -rw-r--r-- | bin/grep.js | 143 |
1 files changed, 143 insertions, 0 deletions
diff --git a/bin/grep.js b/bin/grep.js new file mode 100644 index 0000000..67e5e4a --- /dev/null +++ b/bin/grep.js @@ -0,0 +1,143 @@ + +/* + This script parses the big gun violence CSV and filters for lines containing a particular string. + + 479363, + 2013-01-19,New Mexico,Albuquerque,2806 Long Lane, + 5,0, + http://www.gunviolencearchive.org/incident/479363, + http://hinterlandgazette.com/2013/01/pastor-greg-griego-identified-victims-killed-nehemiah-griego-albuquerque-nm-shooting.html, + False,1, + + gun_stolen, + 0::Unknown||1::Unknown, + + gun_type, + 0::22 LR||1::223 Rem [AR-15], + + incident_characteristics, + "Shot - Dead (murder, accidental, suicide) + ||Mass Shooting (4+ victims injured or killed excluding the subject/suspect/perpetrator, one location) + ||Domestic Violence", + + latitude, location_description, longitude, + 34.9791,,-106.716, + + n_guns_involved, notes, + 2,, + + participant_age, + 0::51||1::40||2::9||3::5||4::2||5::15, + + participant_age_group, + 0::Adult 18+||1::Adult 18+||2::Child 0-11||3::Child 0-11||4::Child 0-11||5::Teen 12-17, + + participant_gender, + 0::Male||1::Female||2::Male||3::Female||4::Female||5::Male, + + participant_name, + 0::Greg Griego||1::Sara Griego||2::Zephania Griego||3::Jael Griego||4::Angelina Griego||5::Nehemiah Griego, + + participant_relationship, + 5::Family, + + participant_status, + "0::Killed||1::Killed||2::Killed||3::Killed||4::Killed||5::Unharmed, Arrested", + + participant_type, + 0::Victim||1::Victim||2::Victim||3::Victim||4::Victim||5::Subject-Suspect, + + http://www.cbsnews.com/news/nehemiah-gringo-case-memorial-service-planned-for-family-allegedly-slain-by-new-mexico-teen/|| + http://www.thewire.com/national/2013/01/teenager-reportedly-used-ar-15-kill-five-new-mexico/61199/|| + http://bigstory.ap.org/article/officials-nm-teen-gunman-kills-5-inside-home|| + http://www.huffingtonpost.com/2013/01/21/nehemiah-griego-teen-shoots-parents-3-children_n_2519359.html|| + http://murderpedia.org/male.G/g/griego-nehemiah.htm|| + http://hinterlandgazette.com/2013/01/pastor-greg-griego-identified-victims-killed-nehemiah-griego-albuquerque-nm-shooting.html, + 10,14 +*/ + +const fs = require('fs') +const parse = require('csv-parse') +const stringify = require('csv-stringify') + +const fields = ("incident_id,date,state,city_or_county," + + "address,n_killed,n_injured,incident_url,source_url," + + "incident_url_fields_missing,congressional_district," + + "gun_stolen,gun_type,incident_characteristics,latitude," + + "location_description,longitude,n_guns_involved,notes," + + "participant_age,participant_age_group,participant_gender," + + "participant_name,participant_relationship," + + "participant_status,participant_type," + + "sources,state_house_district,state_senate_district") + .split(',') + .reduce((a,b,i) => { + a[b] = i + return a + }, {}) + +const search = 'school-shootings' +// const regexp = new RegExp(search, 'i') + +function test(row){ + return ( + row + // && row[fields.incident_characteristics].indexOf('Non-Shooting Incident') === -1 + && row[fields.incident_characteristics].indexOf('School Shooting') !== -1 + // // && row[fields.participant_age_group].indexOf('Teen') !== -1 + // && row[fields.participant_age_group].indexOf('Child') !== -1 + // && row[fields.gun_type].indexOf('AR-15') !== -1 + ) +} + +const input = fs.createReadStream('./data/rest/gun_violence.csv') +const parser = parse() +const stringifier = stringify() +const output = fs.createWriteStream('./data/' + search + '.csv') + +input.on('readable', function() { + let buf + while ((buf = input.read()) !== null) { + parser.write(buf) + } +}) +input.on('error', function(err){ + console.error('input error', err.message) +}) +input.on('finish', function(){ + parser.end() +}) + +let i = 0 +parser.on('readable', function(){ + let row + while (row = parser.read()) { + if (i === 0) { + stringifier.write(row) + } + if ((++i % 10000) === 0) { + console.log(i + '...') + } + if (test(row)) { + stringifier.write(row) + } + } +}) +parser.on('error', function(err){ + console.error('parser error', err.message) +}) +parser.on('end', function(){ + stringifier.end() +}) + +stringifier.on('readable', function(){ + let row + while(row = stringifier.read()){ + output.write(row) + } +}) +stringifier.on('error', function(err){ + console.error('stringifier error', err.message) +}) +stringifier.on('finish', function(){ + output.end() +}) |
