Hello! ๐๐ป
I'm a software engineer based in the Philadelphia area.
I like writing correct and maintainable software in languages like TypeScript, Scala, and Haskell.
Here's some work I'm proud of: Language Map of the United States
Language map of the United States
Home Page: https://languagemap.us/
License: GNU General Public License v3.0
Hello! ๐๐ป
I'm a software engineer based in the Philadelphia area.
I like writing correct and maintainable software in languages like TypeScript, Scala, and Haskell.
Here's some work I'm proud of: Language Map of the United States
After the redesign to add a header (which is awesome), I can't see the legend button:
I assume it's because of the header content wrapping unexpectedly.
Originally posted by @pcaisse in #6 (comment)
It would be good to have a sense of how much traffic the site is getting and from where it is being accessed.
Open and privacy-conscious analytics would be required. Plausible seems like a good choice: https://plausible.io/
Currently the app supports visualizing snapshots for one of several years. It would be very cool to show how speaker counts are changing over time per language via a heatmap.
This would require the user to be able to select a range of years and likely call for a different choropleth.
Earlier testers are indicating that it's not clear that they can zoom for more detail; they don't seem to be discovering that they can view PUMAs or to be aware of the switch between states and PUMAs. We need a way to convey that to the user somehow (make it more obvious/discoverable).
The problem is worse on mobile where you see less of the screen but still have to zoom in to the same extent to see PUMAs -- you get in a position where you can only see a few states but still no PUMAs. For example:
My initial thought was that the "zoom for more detail" was so ingrained that people would know to do it. However, with other slippy maps, you can zoom and get incrementally more detail. This is not the case with this app since you need to cross a certain threshold of zoom level to get finer/coarser granularity.
I like the idea of having a UI component that when clicked will zoom you to the other level (either PUMA or state). If this were a radio-button type component that would have the advantage of showing the two distinct possible states (eg. "[x] State [ ] PUMA") and thus make the user aware of them. However, the word "PUMA" will mean nothing to users and I'd rather not have to explain it because it still won't mean a whole lot even after explaining it. A "Zoom In/Out" toggle may be more appropriate, but that doesn't indicate a threshold.
In addition to making it clear that you can switch levels, I think this would be a nice feature to have since I sometimes find myself manually zooming to try to hit the threshold when using the app.
Very open to other ideas on this!
EDIT: A promising solution to this issue is to overlay PUMA outlines on top of states once you hit a certain zoom level.
It's not always clear to the user that you can click for more info or zoom to see smaller areas (PUMAs).
Perhaps some hover action or auto-zooming would be appropriate here.
Taken from: #10 (review)
The state geometries are represented on the map but we have no data for them (see https://languagemap.us/?languageCode=6930&year=2019&boundingBox=132.45263078348523%2C7.2127487231898755%2C166.52441692272453%2C25.381259928837807):
Assuming there's no PUMS data available for those geometries, they should be filtered out so as not to show up black on the map.
A laundry list of changes to be made before showing the app to a general audience:
Users have said that it's difficult to distinguish between the color buckets without looking closely.
They currently always show up on the map with zero counts, but they shouldn't show up at all.
language_map=# select statefp, name from states where statefp not in (select distinct(state_id) from people_summary);
statefp | name
---------+----------------------------------------------
66 | Guam
69 | Commonwealth of the Northern Mariana Islands
78 | United States Virgin Islands
60 | American Samoa
72 | Puerto Rico
(5 rows)
These rows are not needed and are being scanned needlessly.
language_map=# select count(*) from people_state_summary where language_id is null;
count
-------
20625
(1 row)
language_map=# select count(*) from people_summary where language_id is null;
count
--------
467406
(1 row)
Will require:
Census data is collected every 10 years, whereas ACS data is collected every year. The PUMAs (geometries) change as per population data from the census so they are per decade but the PUMS data (speaker counts) is per year. That means that PUMS data for a given year has to be shown with the right PUMAs for that decade for the speaker counts to make sense vis-a-vis the population. (A further complication is that there is also 3 and 5 year PUMS data which is aggregated over those year spans; that data hasn't been used in this project to keep things simple.)
Currently the data processing code is such that there is a hard-coded assumption that the PUMA data is from the 2010's (see https://github.com/pcaisse/language-map-us/blob/main/data/scripts/build_geojson#L97). It would be nice to support data from the 2010's and the 2020's.
One important thing to note is that the way they asked about language spoken at home changed in 2016 (see https://www.census.gov/content/dam/Census/programs-surveys/acs/tech-doc/user-notes/2016_Language_User_Note.pdf) with very many more language options being added. This would mean that the language options would need to be change based on the year instead of being hardcoded as they are currently, breaking some assumptions that the frontend makes currently.
PUMS datasets for all years: https://data.census.gov/mdat/#/
This path results in a 500:
PUMS data is available here: https://www2.census.gov/programs-surveys/acs/data/pums/2016/5-Year/csv_ppr.zip
PUMA is here: https://s3.us-east-2.amazonaws.com/language-map-us-public/cb_2016_72_puma10_500k.zip
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.