The 311 service-request dataset is a repository of all the service-requests the 311 call center has received from 2010 - present (at time of writing September 2020). As a result it represents a lot of service requests, 23mil+, with over 40 columns of associated data including type of service request and location information.
The original datasource is available here: 311 Service Request Dataset
At the above link you'll find a profile of the dataset using the pandas module in Python. This provides an overview of what's included in this dataset as well as some detail around individual fields. I used this to shape my initial considerations as it related to the assignment.
The assignment is to map a temporal data structure, more commonly known as data that relates to time. Because observing change through the passage of time is a universal concept, temporality is a key storytelling method in data visualization. The 311 service request dataset contains temporal values in the form of timestamps for events connected to these service-requests, such as when the service-request was initially received and when it was closed (if ever).
Approaches to temporal visualizations fall under two primary categories which emphasize certain characteristics of time and how it is measured.
A starting point that moves towards the future, expresses the irreversible and cumulative nature of time
Cyclical time, expresses the repetitive nature of time many often emphasizing a measurement of time relating to the earth's rotation around the sun
Python script with supporting details on data filtering: Python Filtering
I again leveraged the Python module Pandas to filter my data to a subset of fields necessary to focus on the temporal element:
I converted the created date into two separate measurements of time and saved these as new columns:
My data was a manageable size at roughly 2.5gbs compared to the original 12gbs but I needed to further focus the data around temporal measurements for visualization. I grouped all complaints by year, week and complaint type. From here I had a much more manageable dataset that was down to roughly 3mbs!
I created a stacked area chart in Excel which shows the weeks of the year on the x-axis, number of complaints on the y-axis, and each year as a bar stacked on top of each other. It was immediatly clear that there is a certain cyclicality to service requests as some weeks consistently had noticeably higher complaints irregardless of year. I also prepared a monthly version of the total service requests, when comparing these charts you can see the impact from changing the time-scale. When the time-scale measurement is extended to months the average request volume smooths out.
While I like how easy it is to observe these annual patterns in the stacked area chart, I wanted to emphasize the sequential nature of the years and how each year before it feeds into the next. As I'm new to javascript, I was determined to do the next iteration in d3 as a learning opportunity. I began exploring radial charting options and considered a few:
Good for observing the cyclicality of time but didn't emphasize the sequential element.
SourceI settled on the spiral as it illustrates the sequential nature of time in a natural way. I was initially drawn to a spiral histogram like this one pictured but it felt difficult comparing the bars as the periods aren't aligned.
SourceFor the final version I stuck with months as the time scale. As a result the final heatmap doesn’t have a large variation in color, which would make it more visually striking, however the version with weeks had too many pieces which greatly distorted the size in earlier years. In this version its easy to see how overall request volume has increased in later years, presumably due to a broader usage of the online 311 service request channel. Additionally the summer 2020 months see a large increase in total call volume. For a future enhancement I’d like to add a filter to this that enables selecting 311 complaints by type. When I looked at the data it was apparent some complaint categories have larger flucuations (fireworks for example) than others. It would be nice to explore complaint categories through interactivity.