Snippet from the final layout

Very short write-up here. This was created with data from the V-Dem institute, and was inspired by their article on toxic polarization and democratic backsliding.

Data processing, map creation, and chart creation was all done in Python (thanks to geopandas and Plotly). Final layout was created in Illustrator.

Quick note on the methodology. While the high-level democracy indicators are on a scale of 0–1, the societal polarization indicator was originally on a scale of 1–4 (where 4 is no societal polarization, and 1 is high polarization). I normalized this to match the 0–1 scale, and then took the inverse of that scale, so that a higher value meant a higher level of societal polarization.

Data processed using R

The Hack

In the aftermath of the attempted insurrection, Parler faced a flurry of events. Google and Apple dropped them from their respective app stores, and Amazon informed them that they would be shutting down their servers. Oh, and someone (@donk_enby) breached their website and extracted 56.7 TB of user data.

The Data

After the website breach, Kyle McDonald made the data available in an easily digestible CSV, alongside instructions on how to view the videos for each data point.

While this project is not interested in finding out who was at the riot, or in viewing any of the videos, you can check…

using Java, Leaflet, and turf.js


If you want to skip reading, you can navigate straight to LoopMyRun. The purpose of this web app is to create a running (or walking) loop in any road network, given a preferred distance and location.

Looking for a 5k in Madison, WI

Though I wish I knew that Strava had already created this solution before I embarked on this project, creating this app did have worthwhile benefits anyhow:

  1. It was a great learning experience.
  2. My app is free while Strava’s routing is a premium feature.
  3. While Strava pulls potential routes from its “3 billion activities and 50 million users”, my app does not keep track of…

with Python, Mapbox GL JS, and Flask

The City of Grand Rapids, with data available since 2004, has handled code compliance and building cases originating internally and from the public. At the time of this writing, the number of cases started is fast approaching 300,000 cases.

Interestingly enough, there is no means to view this data spatially. That is why I built a mapping interface. I aim to update this data at least once a week.

If you would like to learn about the implementation of this web app, please read on. If not, then you can find the Code Compliance map here. Please be patient as the data loads.

Note: this does not work on Android and probably does not work on iOS. Please use your computer. …

This article was originally written on Apr. 26th, 2018.

The goal of this project is to analyze the demographics of donors to a non-profit in West Michigan with Python. Demographic data was acquired from the U.S. Census Bureau’s American Fact Finder, donor data through my geocoding project, and the shapefiles were found through the Census’s TIGER shapefiles. I looked for the following data:

First, I imported the relevant modules and set the current working directory:

Next, the spreadsheets are turned…

This article was originally written on March 2nd, 2018.

The goal of this project was to map out the donors of a nonprofit in West Michigan. The CSV of donors numbered over 10,000 records. While there are many geocoding options out there, I decided to turn to an organization that specializes in data gathering for residences: the U.S. Census Bureau.

First, I formatted the CSV for geocoding via Python’s pandas library:

The maximum amount the U.S. Census Bureau can geocode per file is 10,000. Since I was working with a CSV that slightly exceeded that, I needed to split…

Article originally written on Apr. 12th, 2018.

The purpose of this project was to allow any citizen to view cemeteries online so that they can search for occupants in any of Grand Rapids’ six cemeteries. This project was based on four phases: implementing surveying maps, reconciling polygon data with cemetery records, automating much of the workflow in Python, and visualizing it all in ArcGIS Online.

Survey Map of Woodlawn West

The first phase of the project dealt largely with georeferencing the surveying maps, converting the image to editable features, and cleaning up said features. Though there are six cemeteries, there…

Article originally written on Jan. 24th, 2018.

For millennia, the marshes in Mesopotamia — located by Iraq and Iran — boasted a rich culture of Marsh Arabs and a diverse ecosystem. Enter Saddam Hussein: after the building of dams and the targeting of marshes for political reasons, the ecosystem went under a drastic change. This project helps visualize the changes from 1988 to 2015 using Landsat 7 images and the remote sensing software ERDAS Imagine.

Images were acquired via USGS’s Global Visualization Viewer (GloVis). These images mostly derived from NASA’s Landsat 7 satellite, though for the earlier year of 1988…

Kray Freestone

Just a curious GIS Developer

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store