<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[CS 5124 — Visual Interfaces Data]]></title><description><![CDATA[This is Kevin Long's personal portfolio for CS 5124: Visual Interfaces Data.]]></description><link>https://cs5124.kevinuulong.com</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Apr 2026 07:20:13 GMT</lastBuildDate><atom:link href="https://cs5124.kevinuulong.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Project 2 — Who you gonna call? 3-1-1!]]></title><description><![CDATA[View it Live | Source Code | Demo Video
Data
Our data are from The City of Cincinnati’s data portal and includes all 311 non-emergency requests received by the city in the full year 2025.
It can be do]]></description><link>https://cs5124.kevinuulong.com/project-2-who-you-gonna-call-3-1-1</link><guid isPermaLink="true">https://cs5124.kevinuulong.com/project-2-who-you-gonna-call-3-1-1</guid><dc:creator><![CDATA[Kevin Long]]></dc:creator><pubDate>Wed, 01 Apr 2026 02:44:47 GMT</pubDate><content:encoded><![CDATA[<p><a href="https://project2.cs5124.kevinuulong.com/">View it Live</a> | <a href="https://github.com/kevinuulong/who-you-gonna-call-311">Source Code</a> | <a href="https://uc.mediaspace.kaltura.com/media/t/1_m3pjhgnk">Demo Video</a></p>
<h2>Data</h2>
<p>Our data are from The City of Cincinnati’s data portal and includes all 311 non-emergency requests received by the city in the full year 2025.</p>
<p>It can be downloaded <a href="https://data.cincinnati-oh.gov/efficient-service-delivery/Cincinnati-311-Non-Emergency-Service-Requests/gcej-gmiw/about_data">here</a>.</p>
<p>To position the flags for each neighborhood we used coordinates from each neighborhood’s Wikipedia page. A full list of these pages can be found on <a href="https://en.wikipedia.org/wiki/List_of_Cincinnati_neighborhoods">Wikipedia’s list of Cincinnati neighborhoods</a>.</p>
<h2>Sketching</h2>
<p>We each started the design process by reading through the design requirements and then drawing some very basic design sketches of how we wanted to layout our app. A sample of these sketches are included below.</p>
<img alt="" style="display:block;margin:0 auto" />

<img alt="" style="display:block;margin:0 auto" />

<img alt="" style="display:block;margin:0 auto" />

<p>Our sketches for our initial concepts were all somewhat in alignment, but we nonetheless got together and talked about the changes we would make before settling on the layout found in our final design.</p>
<h2>The Visualization</h2>
<p>1 section on the visualization components: Explain each view of the data, the GUI, etc.  Explain how you can interact with your application, and how the views update in response to these interactions.  Please include screenshots to illustrate, and relate these screenshots to the text.</p>
<p>There are three sections of our application: the map, the attribute view visualizations, and the service requests over the span of a year.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/3a2832f2-9d9a-4c8f-8e2e-9269e0601737.png" alt="" style="display:block;margin:0 auto" />

<p>The largest section, the map, shows various data service requests on a map of Cincinnati. The user can zoom in or out using the plus or minus button in the top left, and change the category of data they wish to see by using the dropdown on the bottom left.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/310e44a2-2a46-4dbb-8a6d-8786868b91f1.png" alt="" style="display:block;margin:0 auto" />

<p>The buttons on the top right allow the user to change the map layer and add/remove filters to change what is shown on the map.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/15f3f6ae-3e79-4394-afdd-3809415bfec9.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/8bffac67-23aa-4e75-9793-6573c69cc22a.png" alt="" style="display:block;margin:0 auto" />

<p>In the Service Request view, the colors of the dots (corresponding to the legend in the bottom left) shows the time it took for a service request to be handled. The Neighborhood view shows all the neighborhoods of Cincinnati (marked with their flag) and the number of service requests they had.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/b2f1861a-5509-4060-bcd1-d319ab150468.png" alt="" style="display:block;margin:0 auto" />

<p>The Priority view shows the priorities of the filtered requests, Responding Department view shows the department that handled the request, and the Service Type view shows the type of service that was performed. The tooltip is visible when hovering over a marker on the map, and it shows more detailed information about the request handled at that location.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/61d51363-1c01-4e25-8f03-0ca9929a56c7.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/e7ab8c41-985b-47d8-81d1-1072153d3bb9.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/86f66c8f-b98f-4af0-b5e5-030d3a5f2a46.png" alt="" style="display:block;margin:0 auto" />

<p>Different attribute visualizations can be viewed by clicking the blue buttons at the top of the right panel for attribute views. Requests by Neighborhoods shows the number of requests per neighborhood, sorted in descending order. Common Request Methods show the most common methods of submitting a request on a pie chart.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/9cdad902-07aa-4fcc-99c8-364629569bd1.png" alt="" style="display:block;margin:0 auto" />

<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/409be5ff-0045-42a1-9c08-0d760cd110eb.png" alt="" style="display:block;margin:0 auto" />

<p>Hovering over a bar in one of the bar charts shows a tooltip with details about that bar. Hovering over a pie/donut slice or a legend item highlights the section on the chart.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/e7fc1cc9-1089-4848-94dc-3f242b9c529f.png" alt="" style="display:block;margin:0 auto" />

<p><a href="https://www.google.com/url?q=https://uc.mediaspace.kaltura.com/media/t/1_m3pjhgnk&amp;sa=D&amp;source=editors&amp;ust=1775014387820570&amp;usg=AOvVaw3T0W_He_Y19qebwgCSS1bp">Here is a quick demo video</a> showcasing all the features of our app.</p>
<h2>Findings</h2>
<p>By default our app shows the pothole repair data and the response time. The first thing you will notice about it is that it is mostly a sea of yellow. This goes to show that the city responds to the vast majority of pothole repair requests within a short amount of time. There are only a few exceptions to this which is why the color scale goes all the way to 238 days (red).</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/19ba9ec1-191f-40ab-b287-8f2c70536a20.png" alt="" style="display:block;margin:0 auto" />

<p>The next most obvious discovery is that the vast majority of the service requests, regardless of service type, are made to the Public Services department (96,637 vs. the next closest at 18,188). This can be seen in the “Requests by Departments” bar graph along the right side.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/876a98f7-584d-44f0-8575-98df15c4f5b0.png" alt="" style="display:block;margin:0 auto" />

<p>Although it’s far from the only other thing you can learn from our visualization, one final example is that if you look down at the timeline in the bottom you can see that the two months with the most potholes reported are February and March. This makes a lot of sense if you think about what causes potholes to form. Potholes form when water (usually from snowmelt or rain) seeps into cracks in the pavement and then freezes and expands.</p>
<p>February and March in Cincinnati tend to be the months where the weather fluctuates between rainy and above freezing during the day, then dips during the night (or sometimes even just the next day), thus more freeze-thaw cycles and thus more potholes.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/0972fe1d-4eb5-4107-8a80-0f30ac8212af.png" alt="" style="display:block;margin:0 auto" />

<h2>The Process</h2>
<p>We used just <a href="https://d3js.org/">D3.js</a> and <a href="https://leafletjs.com/">Leaflet</a> with plain old JS, CSS, and HTML for the layout and all the visualizations in our app. Our code structure is pretty similar to the structure used in the sample code. We have a separate code file for each of the visualizations in our app.</p>
<p>We used <a href="https://www.python.org/">Python</a> and <a href="https://pandas.pydata.org/">Pandas</a> for the data preprocessing.</p>
<p>We used <a href="https://www.affinity.studio/">Affinity Designer</a> and <a href="https://www.figma.com/">Figma</a> for the flag illustrations. The flags themselves are from <a href="https://www.cincyflags.com/">CincyFlags</a>.</p>
<h2>Responsibilities</h2>
<p>Who did what- describe who did which part of the project</p>
<p>Amogh - I worked on implementing the layer mechanic where the user can choose which map type they want to see and the brush mechanic where the user can drag and make a selection area (brushing)</p>
<p>Anne - I mainly focused on the attribute view visualizations (level 3). I implemented the four smaller visualizations on the side: two bar charts and two pie/donut charts. I also added the brushing for these graphs.</p>
<p>Jonah - I mainly focused on the tooltips and the timeline. I implemented the timeline as a stacked bar chart that responds to changes in the filters. I also added all the useful data you see when hovering over a data point on the map.</p>
<p>Kevin - I worked mostly on map related elements. I implemented the legends and color scales as well as the filters and neighborhood flags.</p>
<h2>AI Use</h2>
<p>For this project, we have used AI to find solutions that are hard to figure out using other online resources such as documentation, forums. Etc. For instance, AI is used to debug the implementation of the brush feature for the map which can be enabled/disabled using the Arrow Button on the bottom of the list of buttons at top-right corner.</p>
<p>Furthermore we used AI to write the Python data preprocessing scripts we used to help compress the dataset to a more manageable size.</p>
<h2>Future Work</h2>
<p>We have a couple of things we would like to do if we had more time on this project.</p>
<p>The first and easiest thing is that we have completed code on a separate branch in our project that implements brushing on the map. We didn’t realize until today when we started writing this documentation but that branch did not get merged and therefore it did not get deployed by the due date.</p>
<p>It is ready to merge and would at this point be a very simple feature to add since all the hard work has already been done to implement it.</p>
<p>The next thing I think we would like to do is to finish linking everything. Some of our visualizations are linked (for example the map and the timeline) but there are a couple of the visualizations remaining that we just ran out of time to link together.</p>
]]></content:encoded></item><item><title><![CDATA[Vis in the Wild — Oreos and the Art of Crossword Puzzle Construction Analysis]]></title><description><![CDATA[I'm analyzing the visualizations in Oreos and the Art of Crossword Puzzle Construction an interactive story by Russell Samora for The Pudding. Specifically I'll be looking at the visualizations found ]]></description><link>https://cs5124.kevinuulong.com/vis-in-the-wild-oreos-and-the-art-of-crossword-puzzle-construction-analysis</link><guid isPermaLink="true">https://cs5124.kevinuulong.com/vis-in-the-wild-oreos-and-the-art-of-crossword-puzzle-construction-analysis</guid><dc:creator><![CDATA[Kevin Long]]></dc:creator><pubDate>Fri, 27 Mar 2026 02:53:42 GMT</pubDate><content:encoded><![CDATA[<p>I'm analyzing the visualizations in <a href="https://pudding.cool/2021/01/oreo/">Oreos and the Art of Crossword Puzzle Construction</a> an interactive story by Russell Samora for The Pudding. Specifically I'll be looking at the visualizations found in Level 3.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/e1deea8b-7ef6-447f-aac7-29a687fd7739.png" alt="" style="display:block;margin:0 auto" />

<h2>Purpose</h2>
<p>These visualizations are intended to explain first and foremost the somewhat bizarre clue in a 2020 USA Today crossword "Cookie that some people eat with mustard" for Oreo, but also why the word is so popular in crosswords and why crossword constructors have to go to such extreme lengths to keep cluing the word in new and interesting ways.</p>
<h2>The Data</h2>
<p>The data that primarily powers the visualizations in this piece come from <a href="https://xd.saul.pw/">a database of crossword clues</a> from over 90,000 grids from a whole host of different publications.</p>
<p>These data were compiled by automatically downloading and parsing crosswords daily from each of the source publications.</p>
<h2>Users</h2>
<p>The users of these visualizations are simply the readers of the article. It is assumed that they are at least familiar with the concept of crossword puzzles, but the story portion does a great job of explaining any of the important context needed to understand the visualizations themselves.</p>
<p>For example they include the following text and visualization to explain the prevalence of words like Oreo in the crossword.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/02485cf0-82de-4353-a18d-3ace703d1515.png" alt="" style="display:block;margin:0 auto" />

<h2>Questions and Insights</h2>
<p>There are many questions that a user can answer using these visualizations. Using what is probably my favorite of the visualizations, you can answer the question of when different words were first used to clue Oreo. You can slide through the years and see each of the new words used in clues and what the full clue in which each word made its debut.</p>
<p>From this I can for example, see that the first time the word favorite was used to clue Oreo was in 1998 and the full clue was "Cookie favorite".</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/6368c4fb-c8a4-4d71-9745-eb053aa520c2.png" alt="" style="display:block;margin:0 auto" />

<p>Another cool interactive visual that provides an interesting insight is the interactive probability permutation grid.</p>
<p>This visualization helps the user understand with the use of numbers and probabilities how Oreo is disproportionately used compared to the actual most probable or common answers.</p>
<p>It helps illustrate why Oreo is such useful fill when the user can see an entire grid and the actual restrictions that come with puzzle construction.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/23b337b3-a0b0-4d61-9562-1487acce112a.png" alt="" style="display:block;margin:0 auto" />

<h2>Design Choices</h2>
<p>I overall really like most of the design choices in these visualizations. I think they are by and large effective. They are clean and minimal. The almost slideshow-like format really highlights what is important at any given time and enables the user to focus on just that important information without the distraction of previous visualizations and/or text.</p>
<p>The one criticism I have is of the letter frequency visualization.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/a425175e-3104-4b82-b735-1b7ad8b20480.webp" alt="" style="display:block;margin:0 auto" />

<p>I very much appreciate the detail-on-demand feature of highlighting the current letter as you hover over it and showing the actual percent frequency. The problem I have with it is for some reason they give you a crosshair mouse pointer.</p>
<p>This makes me at least think I should be able to drag to make a rectangular selection of some kind. Maybe I'm alone here, but I suspect others would expect the same.</p>
<h2>Limitations</h2>
<p>Really all the limitations of this type of visualization stem from the fact that they are being used to tell a specific story. In this case about the word Oreo.</p>
<p>Perhaps a user may wish to explore some of the other frequently used words in a similar manner. These visualizations do not allow for that.</p>
]]></content:encoded></item><item><title><![CDATA[Project 1 — The Education Effect]]></title><description><![CDATA[The Education Effect is a data-driven, visual exploration of the effect increased education levels have on the world around us.
I started this project with a hypothesis. I suspected that countries wit]]></description><link>https://cs5124.kevinuulong.com/project-1-the-education-effect</link><guid isPermaLink="true">https://cs5124.kevinuulong.com/project-1-the-education-effect</guid><dc:creator><![CDATA[Kevin Long]]></dc:creator><pubDate>Fri, 27 Feb 2026 04:16:07 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/b2257dda-0640-4b90-9ad1-1d5bf063f6e6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The Education Effect is a data-driven, visual exploration of the effect increased education levels have on the world around us.</p>
<p>I started this project with a hypothesis. I suspected that countries with high educational enrollment rates would also be the ones with high scores in the LGBT+ Legal Equality Index.</p>
<p>I have always heard that increased education leads to a more accepting population, and I was curious to see if the data would back this up.</p>
<p>I'm a big fan of the data-driven storytelling done by publications like <a href="https://pudding.cool/">The Pudding</a>, so I I knew I wanted to try and emulate some of what they do and really tell a compelling story with my visualizations.</p>
<p><a href="https://project1.cs5124.kevinuulong.com"><strong>View it Live</strong></a> | <a href="https://github.com/kevinuulong/a-world-of-data"><strong>Source Code</strong></a> <strong>|</strong> <a href="https://uc.mediaspace.kaltura.com/media/t/1_rthuuy88"><strong>Demo Video</strong></a></p>
<h2><strong>About the Data</strong></h2>
<p>For this project I ended up using three different datasets from <a href="https://ourworldindata.org">Our World in Data</a>.</p>
<ul>
<li><p><a href="https://ourworldindata.org/grapher/primary-secondary-enrollment-completion-rates?time=earliest..2024&amp;v=1&amp;csvType=filtered&amp;useColumnShortNames=false">Primary, secondary and tertiary education enrollment and completion rates, World</a></p>
<ul>
<li>I used the enrollment rate data here, which tracks the number of students enrolled in primary, secondary, or tertiary education programs versus the officially reported size of the age group.</li>
</ul>
</li>
<li><p><a href="https://ourworldindata.org/grapher/gdp-per-capita-worldbank">GDP per capita</a></p>
<ul>
<li>GDP per capita tracks the total gross domestic product per person. Since it adjusts for population size it is much more useful for understanding and comparing the economic output of humans than pure GDP.</li>
</ul>
</li>
<li><p><a href="https://ourworldindata.org/grapher/lgbt-legal-equality-index">LGBT+ Legal Equality Index, 2025</a></p>
<ul>
<li>The LGBT+ Legal Equality Index captures to which extent LGBT+ people have the same rights as straight and cisgender people. It combines 15 individual policies, such as the legality of same-sex relationships, marriage, and gender marker changes.</li>
</ul>
</li>
</ul>
<p>Each of these datasets had countries and country codes in common and all but the LGBT+ Legal Equality Index have years for each data point.</p>
<h2>Design Stage</h2>
<p>Once I knew I was working with educational data and had settled on a title I began brainstorming themes and colors for the design of my project.</p>
<p>I tried a couple different concepts before I cam up with the idea to style it like those handwriting workbooks kids use when they are first learning to write.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/aa006343-78a9-4f93-b9a9-632dbd34ba91.png" alt="" style="display:block;margin:0 auto" />

<p>I used this concept, not only for the logo, but also the color scheme and chart axes/ticks.</p>
<p>Once I had found my design inspiration and theme I began to prototype the layout of the story and my charts in Figma.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/c299a2b8-a05c-4856-9c40-65f26a80b1a0.png" alt="" style="display:block;margin:0 auto" />

<p>One idea I really liked, but just couldn't get to look right with my theme, now matter how hard I tried was using some form of book for the bars on my bar chart and histogram. I tried 2D, I tried isometric, different colors, different themes. None of it was working so I sadly gave up on the concept.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/49797629-5e44-4003-bb56-55d703bd8927.png" alt="" style="display:block;margin:0 auto" />

<p>I was almost done with the design but something still felt like it was missing in the header. I had tried unsuccessfully to search for an image or illustration that fit well with my theme and colors, but everything I was finding felt too realistic or out of place.</p>
<p>Finally inspiration struck in the form of an origami model I had still sitting on my desk! While the model sitting on my desk was not quite right, I could fold some elementary origami models, take pictures of them and then trace them to produce some perfect illustrations of my own!</p>
<p>I think these illustrations turned out to be just the extra pop I was missing and really helped tie my whole theme together quite nicely.</p>
<h2>The Visualization</h2>
<p>The first visualization in the story shows the increase in gross enrollment rate from 1970 to 2023. It animates and auto plays when you scroll it fully into view, but also has manual playback controls if you want to pause or restart it.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/0b8aa6b3-7d7b-4045-b85a-855a243ab2fc.png" alt="" style="display:block;margin:0 auto" />

<p>Next I show a histogram that bins the number of countries with certain GDP per capita and similarly animates over time.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/60c597db-107f-4886-ae1c-7e42f0af0418.png" alt="" style="display:block;margin:0 auto" />

<p>With both these visualizations I had few enough bars and other elements on the graph at a time I was able to fit some of the information that would normally be relegated to detail-on-demand type interactions front and center making it really easy to see and discover.</p>
<p>Next I allowed the reader to see a comparison of educational enrollment rates and GDP per capita through an animated scatterplot. This had all the same animation controls as before, but also included an x-axis selector that lets you chose which type of enrollment rate you wanted to see displayed.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/7ecc8277-d3f3-4d0c-ba1a-9288ac3724cd.png" alt="" style="display:block;margin:0 auto" />

<p>For the scatterplots enough data was shown at once that it became necessary to start adding detail-on-demand information in tooltips when you hover over a point.</p>
<p>Since it was potentially a bit difficult to find or keep track of a specific country over time in the scatterplot I also included a choropleth map showing all the same educational enrollment and GDP data as before with a selector to switch between them and compare.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/c647e9d8-b762-45fa-8639-c69dd69c7fd2.png" alt="" style="display:block;margin:0 auto" />

<p>Finally, I included a visualization that compares the LGBT+ Legal Equality Index with educational enrollment rates. Since the LGBT+ Legal Equality Index is a somewhat new data set, only one year is currently available so this visualization does not animate over time and instead uses the most recently available educational enrollment data for each country.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/b835cb32-e309-4e77-a283-da04b5b95e31.png" alt="" style="display:block;margin:0 auto" />

<p>In several of these visualizations there were potentially confusing data points (like percents that went above 100) so when necessary I included expandable "Understanding the data" sections that provide helpful context and explanations for the reader.</p>
<h2>Insights</h2>
<p>If you've already read the story (which I encourage you to do) I go more in depth into all the insights I gathered from each of the visualizations. But to sum it all up, I found that while we cannot say just from these data alone that educational enrollment is responsible for increases in GDP per capita or LGBT+ legal equality, we can reasonably conclude that countries with higher educational enrollment rates are more likely to have better results in both of these measures.</p>
<p>This is probably most exemplified in the scatterplot of per capita GDP by secondary enrollment rate.</p>
<img src="https://cdn.hashnode.com/uploads/covers/5fdbb2041485f22e24b32681/938ce9d6-63df-4fe1-b4e0-e7d15eac9763.png" alt="" style="display:block;margin:0 auto" />

<p>While by no means conclusive, there definitely appears to be a correlation between these two measures.</p>
<h2>Implementation Details</h2>
<p>Other than D3, I didn't really use any 3rd party software for the visualizations and story themselves. All the design and graphics are my own. I used Figma for the UI and visualization design and <a href="https://www.affinity.studio/">Affinity Studio</a> for my illustrations. I used <a href="https://fonts.google.com/?query=merriweather">Merriweather Sans and Serif</a> by Sorkin Type as my main typefaces. The logo is set in <a href="https://fonts.google.com/specimen/Playwrite+US+Modern">Playwrite USA Modern</a> which is a typeface inspired by the way writing is taught in US elementary schools.</p>
<p>I used <a href="https://vite.dev/">Vite</a> without a framework to build and bundle my app and a lot of the data preprocessing was done using Python and <a href="https://pandas.pydata.org/">Pandas</a>.</p>
<h2>AI Use</h2>
<p>I didn't really use AI at all for the D3 and web development aspect of this project, but I did use it to write the vast majority of the Python data preprocessing scripts I used.</p>
<h2>Future Work</h2>
<p>There are probably two main things I would like to go back and add if I had more time to work on this project.</p>
<p>First, I did not design some of my first visualizations with filtering and/or brushing in mind. I was really concerned that loading and processing such a large dataset would be slow and problematic and cause the page to become unresponsive and unusable.</p>
<p>This is a large part of why I did so much data preprocessing especially for the first few graphs. The data for each of those visualizations are as slimmed down and minimal as possible containing only the exact data points that would be needed to display in that specific visualization.</p>
<p>This meant that by the time I got closer to the end and was looking to implement brushing and filtering I was missing a lot of the attributes I would need to make it work. I simply ran out of time to go back and rework those visualizations and instead decided to prioritize making what I did have the best I could.</p>
<p>Second, although I did still manage to tell a story with my visualizations if I had more time I would have loved to add some of the annotations or scroll driven insights and callouts common in scrollytelling.</p>
<p>I think I rightly recognized from pretty early on that as this was my first time doing any real data visualization work, trying to also learn how to use scrollytelling libraries or techniques might be biting off more than I could chew.</p>
<p>If I had more time though this is something I would love to learn and explore more.</p>
<h2>Demo Video</h2>
<p>You can view <a href="https://uc.mediaspace.kaltura.com/media/t/1_rthuuy88">a short demo video of my project here</a>!</p>
]]></content:encoded></item></channel></rss>