In the iCarol system, resources are kept in 4 categories: agency, program, sites, and program at sites. An agency may have multiple sites (e.g. branches of AA), and may operate multiple programs (e.g. hospitals run a HIV/STD testing program, in addition to a behavioral health assisting program, etc.). A program may be conducted in multiple sites and covering different areas. The program at sites data indicate which programs are running on which sites.
But the exported data is just one single table, and important information such as location, coverage area, etc., can be found in either one or all of the aforementioned four types of entities. However, taxonomy code (service types) can only be found at programs, and geolocation is mostly present in sites.
To simplify future analysis, the data must be consolidated into one entity type–a single geographical entity with attributes explaining its service types and coverage areas. Therefore I used Site as the starting data points, then extract and attach information from other entity types to it.
- Agency is used to obtain the website and contact info.
- Site is used for the name, geolocation, address and operation hours of the sites.
- Program and Program at sites are used to extract taxonomy code and names, as well as coverage areas of the sites.
- Location type (e.g. city hall, shelter, hospital, etc) is inferred from taxonomy code (maybe reverse geocoding would be a better idea?).
Even after extensive cleaning, there are still some issues that seem non-trivial to fix:
- More than 70% of resources do not have an address (yet another reason for geoencoding).
- Some sites are not properly assigned correct coordinates, e.g., US Bankrupcy Court has three divisional offices in Massachusetts, but only one has geo coordinates.
- Some sites use addresses as their site names, although this does not interfere statistics.
- Coverage area are non standarized–they can be any of the state, county and city/town level.
After cleaning and removing duplicates, there are in total 8,463 human service sites physically located in Massachusetts, belonging to 3,488 agencies.
They are now searchable at: https://www.algolia.com/realtime-search-demo/search-resources. This is currently just a demo. It is planned to incorporate similar interface (and a map, of course) to the Mass 211 Map web app, too.
Following graph shows the normalized number of resource sites, 2-1-1 calls, and population by county.
normalize <- function(x, f = min) {
tmp <- f(x, na.rm=TRUE)
(x - tmp) / (max(x, na.rm=TRUE) - tmp)
}
sites.ma %>%
filter(county != 'All Countries',
county != 'Pueblo',
county != 'United States') %>%
count(county) %>%
left_join(
count.county, by = c('county' = 'name')
) %>%
select(
county, n_resource = n, n_call,
population = TotalPop
) %>%
mutate(
n_call = normalize(n_call),
population = normalize(population),
n_resource = normalize(n_resource),
county = fct_reorder(county, -n_resource)
) %>%
gather(
count_name, count_var, -county
) %>%
ggplot(aes(x = county, y = count_var, fill = count_name)) +
geom_bar(
stat = 'identity',
position = 'dodge'
) +
theme_minimal() +
theme(
axis.text.x = element_text(angle = 45, hjust = 1)
) +
labs(
y = 'Number of resource sites',
fill = ''
)

Intuitively, this graph compares counties with their peers in terms of calls and resources corresponding to population size. It is not hard to imagine more population should produce more resources and calls, then what really matters becomes who receives a higher number of calls with regard to its population size and does more resources mean less or more calls?
It can be seen that resources have a relatively even distribution comparing to the other two variables–this is understandable because critical resources must be available to all the counties, even for remote areas with small population.
There are obvious patterns in this graph: Suffolk, Worcester, Hampden can be categorized in one group, in which a relative small population produces a lot of resources and calls. This can be explained by the fact that they each has one of Massachusetts’ top 3 biggest cities: Boston of Suffolk, Worcester of Worcester, Springfield of Hampden. Resources tend to agglomerate in big cities, and poor people in big cities are more likely to make 2-1-1 calls–either because there are more resources readily available to them, or because they are more poor.
Counties surrounding the Suffolk county–Middlesex, Norfolk and Essex, all have a relatively high population and number of resources, but low number of calls.
Ideas for future analysis
- Exclude basic municipality and policing services, check what’s the effect of the presence of other critical human service resources, on public health and poverty.
- Use the coverage attribute and geographical accessibility to compute each ZIP code/town’s “human service accessibility index”. Different service and site types obviously have different implications in terms of geographical reliance. It would be a major challenge to accurately quantify the coverage areas.
- Evaluate the geographical reliance of different service types, provide suggestions for the locations of future resources?
LS0tCnRpdGxlOiAiUmVzb3VyY2VzIGF2YWlsYWJsZSBmb3IgcmVmZXJyYWxzIGluIDItMS0xIgpvdXRwdXQ6IAogIGh0bWxfbm90ZWJvb2s6IAogICAgdGhlbWU6IGpvdXJuYWwKICAgIGNvZGVfZm9sZGluZzogaGlkZQotLS0KCkluIHRoZSBpQ2Fyb2wgc3lzdGVtLCByZXNvdXJjZXMgYXJlIGtlcHQgaW4gNCBjYXRlZ29yaWVzOiAqKmFnZW5jeSoqLCAqKnByb2dyYW0qKiwgKipzaXRlcyoqLCBhbmQgKipwcm9ncmFtIGF0IHNpdGVzKiouIEFuIGFnZW5jeSBtYXkgaGF2ZSBtdWx0aXBsZSBzaXRlcyAoZS5nLiBicmFuY2hlcyBvZiBBQSksIGFuZCBtYXkgb3BlcmF0ZSBtdWx0aXBsZSBwcm9ncmFtcyAoZS5nLiBob3NwaXRhbHMgcnVuIGEgSElWL1NURCB0ZXN0aW5nIHByb2dyYW0sIGluIGFkZGl0aW9uIHRvIGEgYmVoYXZpb3JhbCBoZWFsdGggYXNzaXN0aW5nIHByb2dyYW0sIGV0Yy4pLiBBIHByb2dyYW0gbWF5IGJlIGNvbmR1Y3RlZCBpbiBtdWx0aXBsZSBzaXRlcyBhbmQgY292ZXJpbmcgZGlmZmVyZW50IGFyZWFzLiBUaGUgX3Byb2dyYW0gYXQgc2l0ZXNfIGRhdGEgaW5kaWNhdGUgd2hpY2ggcHJvZ3JhbXMgYXJlIHJ1bm5pbmcgb24gd2hpY2ggc2l0ZXMuCgpCdXQgdGhlIGV4cG9ydGVkIGRhdGEgaXMganVzdCBvbmUgc2luZ2xlIHRhYmxlLCBhbmQgaW1wb3J0YW50IGluZm9ybWF0aW9uIHN1Y2ggYXMgbG9jYXRpb24sIGNvdmVyYWdlIGFyZWEsIGV0Yy4sIGNhbiBiZSBmb3VuZCBpbiBlaXRoZXIgb25lIG9yIGFsbCBvZiB0aGUgYWZvcmVtZW50aW9uZWQgZm91ciB0eXBlcyBvZiBlbnRpdGllcy4gSG93ZXZlciwgdGF4b25vbXkgY29kZSAoc2VydmljZSB0eXBlcykgY2FuIG9ubHkgYmUgZm91bmQgYXQgX3Byb2dyYW1zXywgYW5kIGdlb2xvY2F0aW9uIGlzIG1vc3RseSBwcmVzZW50IGluIF9zaXRlc18uCgpUbyBzaW1wbGlmeSBmdXR1cmUgYW5hbHlzaXMsIHRoZSBkYXRhIG11c3QgYmUgY29uc29saWRhdGVkIGludG8gb25lIGVudGl0eSB0eXBlLS1hIHNpbmdsZSBnZW9ncmFwaGljYWwgZW50aXR5IHdpdGggYXR0cmlidXRlcyBleHBsYWluaW5nIGl0cyBzZXJ2aWNlIHR5cGVzIGFuZCBjb3ZlcmFnZSBhcmVhcy4gVGhlcmVmb3JlIEkgdXNlZCBfU2l0ZV8gYXMgdGhlIHN0YXJ0aW5nIGRhdGEgcG9pbnRzLCB0aGVuIGV4dHJhY3QgYW5kIGF0dGFjaCBpbmZvcm1hdGlvbiBmcm9tIG90aGVyIGVudGl0eSB0eXBlcyB0byBpdC4KCjEuICoqQWdlbmN5KiogaXMgdXNlZCB0byBvYnRhaW4gdGhlIHdlYnNpdGUgYW5kIGNvbnRhY3QgaW5mby4KMi4gKipTaXRlKiogaXMgdXNlZCBmb3IgdGhlIG5hbWUsIGdlb2xvY2F0aW9uLCBhZGRyZXNzIGFuZCBvcGVyYXRpb24gaG91cnMgb2YgdGhlIHNpdGVzLgozLiAqKlByb2dyYW0qKiBhbmQgKipQcm9ncmFtIGF0IHNpdGVzKiogYXJlIHVzZWQgdG8gZXh0cmFjdCB0YXhvbm9teSBjb2RlIGFuZCBuYW1lcywgYXMgd2VsbCBhcyBjb3ZlcmFnZSBhcmVhcyBvZiB0aGUgc2l0ZXMuCjQuIExvY2F0aW9uIHR5cGUgKGUuZy4gY2l0eSBoYWxsLCBzaGVsdGVyLCBob3NwaXRhbCwgZXRjKSBpcyBpbmZlcnJlZCBmcm9tIHRheG9ub215IGNvZGUgKG1heWJlIHJldmVyc2UgZ2VvY29kaW5nIHdvdWxkIGJlIGEgYmV0dGVyIGlkZWE/KS4KCkV2ZW4gYWZ0ZXIgZXh0ZW5zaXZlIGNsZWFuaW5nLCB0aGVyZSBhcmUgc3RpbGwgc29tZSBpc3N1ZXMgdGhhdCBzZWVtIG5vbi10cml2aWFsIHRvIGZpeDoKCjEuIE1vcmUgdGhhbiA3MCUgb2YgcmVzb3VyY2VzIGRvIG5vdCBoYXZlIGFuIGFkZHJlc3MgKHlldCBhbm90aGVyIHJlYXNvbiBmb3IgZ2VvZW5jb2RpbmcpLgoyLiBTb21lIHNpdGVzIGFyZSBub3QgcHJvcGVybHkgYXNzaWduZWQgY29ycmVjdCBjb29yZGluYXRlcywgZS5nLiwgVVMgQmFua3J1cGN5IENvdXJ0IGhhcyB0aHJlZSBkaXZpc2lvbmFsIG9mZmljZXMgaW4gTWFzc2FjaHVzZXR0cywgYnV0IG9ubHkgb25lIGhhcyBnZW8gY29vcmRpbmF0ZXMuCjMuIFNvbWUgc2l0ZXMgdXNlIGFkZHJlc3NlcyBhcyB0aGVpciBzaXRlIG5hbWVzLCBhbHRob3VnaCB0aGlzIGRvZXMgbm90IGludGVyZmVyZSBzdGF0aXN0aWNzLgozLiBDb3ZlcmFnZSBhcmVhIGFyZSBub24gc3RhbmRhcml6ZWQtLXRoZXkgY2FuIGJlIGFueSBvZiB0aGUgc3RhdGUsIGNvdW50eSBhbmQgY2l0eS90b3duIGxldmVsLgoKQWZ0ZXIgY2xlYW5pbmcgYW5kIHJlbW92aW5nIGR1cGxpY2F0ZXMsIHRoZXJlIGFyZSBpbiB0b3RhbCBgciBmb3JtYXQobnJvdyhzaXRlcy5tYSksIGJpZy5tYXJrPScsJylgIGh1bWFuIHNlcnZpY2Ugc2l0ZXMgcGh5c2ljYWxseSBsb2NhdGVkIGluIE1hc3NhY2h1c2V0dHMsIGJlbG9uZ2luZyB0byBgciBmb3JtYXQobnJvdyhyc3JjJGFnZW5jaWVzKSwgYmlnLm1hcms9JywnKWAgYWdlbmNpZXMuCgpUaGV5IGFyZSBub3cgc2VhcmNoYWJsZSBhdDogPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHBzOi8vd3d3LmFsZ29saWEuY29tL3JlYWx0aW1lLXNlYXJjaC1kZW1vL3NlYXJjaC1yZXNvdXJjZXMiPmh0dHBzOi8vd3d3LmFsZ29saWEuY29tL3JlYWx0aW1lLXNlYXJjaC1kZW1vL3NlYXJjaC1yZXNvdXJjZXM8L2E+LiBUaGlzIGlzIGN1cnJlbnRseSBqdXN0IGEgZGVtby4gSXQgaXMgcGxhbm5lZCB0byBpbmNvcnBvcmF0ZSBzaW1pbGFyIGludGVyZmFjZSAoYW5kIGEgbWFwLCBvZiBjb3Vyc2UpIHRvIHRoZSBbTWFzcyAyMTEgTWFwXShodHRwczovL21hc3MyMTEuaGVyb2t1YXBwLmNvbS8pIHdlYiBhcHAsIHRvby4KCkZvbGxvd2luZyBncmFwaCBzaG93cyB0aGUgbm9ybWFsaXplZCBudW1iZXIgb2YgcmVzb3VyY2Ugc2l0ZXMsIDItMS0xIGNhbGxzLCBhbmQgcG9wdWxhdGlvbiBieSBjb3VudHkuCgpgYGB7ciwgZmlnLndpZHRoPTUsIGZpZy5oZWlnaHQ9Mi42LCBmaWcucmV0aW5hPTIsIG1lc3NhZ2U9RkFMU0V9Cm5vcm1hbGl6ZSA8LSBmdW5jdGlvbih4LCBmID0gbWluKSB7CiAgdG1wIDwtIGYoeCwgbmEucm09VFJVRSkKICAoeCAtIHRtcCkgLyAobWF4KHgsIG5hLnJtPVRSVUUpIC0gdG1wKQp9CgpzaXRlcy5tYSAlPiUKICBmaWx0ZXIoY291bnR5ICE9ICdBbGwgQ291bnRyaWVzJywKICAgICAgICAgY291bnR5ICE9ICdQdWVibG8nLAogICAgICAgICBjb3VudHkgIT0gJ1VuaXRlZCBTdGF0ZXMnKSAlPiUKICBjb3VudChjb3VudHkpICU+JQogIGxlZnRfam9pbigKICAgIGNvdW50LmNvdW50eSwgYnkgPSBjKCdjb3VudHknID0gJ25hbWUnKQogICkgJT4lCiAgc2VsZWN0KAogICAgY291bnR5LCBuX3Jlc291cmNlID0gbiwgbl9jYWxsLAogICAgcG9wdWxhdGlvbiA9IFRvdGFsUG9wCiAgKSAlPiUKICBtdXRhdGUoCiAgICBuX2NhbGwgPSBub3JtYWxpemUobl9jYWxsKSwKICAgIHBvcHVsYXRpb24gPSBub3JtYWxpemUocG9wdWxhdGlvbiksCiAgICBuX3Jlc291cmNlID0gbm9ybWFsaXplKG5fcmVzb3VyY2UpLAogICAgY291bnR5ID0gZmN0X3Jlb3JkZXIoY291bnR5LCAtbl9yZXNvdXJjZSkKICApICU+JQogIGdhdGhlcigKICAgIGNvdW50X25hbWUsIGNvdW50X3ZhciwgLWNvdW50eQogICkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gY291bnR5LCB5ID0gY291bnRfdmFyLCBmaWxsID0gY291bnRfbmFtZSkpICsKICBnZW9tX2JhcigKICAgIHN0YXQgPSAnaWRlbnRpdHknLAogICAgcG9zaXRpb24gPSAnZG9kZ2UnCiAgKSArCiAgdGhlbWVfbWluaW1hbCgpICsKICB0aGVtZSgKICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkKICApICsKICBsYWJzKAogICAgeSA9ICdOdW1iZXIgb2YgcmVzb3VyY2Ugc2l0ZXMnLAogICAgZmlsbCA9ICcnCiAgKQpgYGAKCkludHVpdGl2ZWx5LCB0aGlzIGdyYXBoIGNvbXBhcmVzIGNvdW50aWVzIHdpdGggdGhlaXIgcGVlcnMgaW4gdGVybXMgb2YgY2FsbHMgYW5kIHJlc291cmNlcyBjb3JyZXNwb25kaW5nIHRvIHBvcHVsYXRpb24gc2l6ZS4gSXQgaXMgbm90IGhhcmQgdG8gaW1hZ2luZSBtb3JlIHBvcHVsYXRpb24gc2hvdWxkIHByb2R1Y2UgbW9yZSByZXNvdXJjZXMgYW5kIGNhbGxzLCB0aGVuIHdoYXQgcmVhbGx5IG1hdHRlcnMgYmVjb21lcyB3aG8gcmVjZWl2ZXMgYSBoaWdoZXIgbnVtYmVyIG9mIGNhbGxzIHdpdGggcmVnYXJkIHRvIGl0cyBwb3B1bGF0aW9uIHNpemUgYW5kIGRvZXMgbW9yZSByZXNvdXJjZXMgbWVhbiBsZXNzIG9yIG1vcmUgY2FsbHM/CgpJdCBjYW4gYmUgc2VlbiB0aGF0IHJlc291cmNlcyBoYXZlIGEgcmVsYXRpdmVseSBldmVuIGRpc3RyaWJ1dGlvbiBjb21wYXJpbmcgdG8gdGhlIG90aGVyIHR3byB2YXJpYWJsZXMtLXRoaXMgaXMgdW5kZXJzdGFuZGFibGUgYmVjYXVzZSBjcml0aWNhbCByZXNvdXJjZXMgbXVzdCBiZSBhdmFpbGFibGUgdG8gYWxsIHRoZSBjb3VudGllcywgZXZlbiBmb3IgcmVtb3RlIGFyZWFzIHdpdGggc21hbGwgcG9wdWxhdGlvbi4KClRoZXJlIGFyZSBvYnZpb3VzIHBhdHRlcm5zIGluIHRoaXMgZ3JhcGg6IFN1ZmZvbGssIFdvcmNlc3RlciwgSGFtcGRlbiBjYW4gYmUgY2F0ZWdvcml6ZWQgaW4gb25lIGdyb3VwLCBpbiB3aGljaCBhIHJlbGF0aXZlIHNtYWxsIHBvcHVsYXRpb24gcHJvZHVjZXMgYSBsb3Qgb2YgcmVzb3VyY2VzIGFuZCBjYWxscy4gVGhpcyBjYW4gYmUgZXhwbGFpbmVkIGJ5IHRoZSBmYWN0IHRoYXQgdGhleSBlYWNoIGhhcyBvbmUgb2YgTWFzc2FjaHVzZXR0cycgdG9wIDMgYmlnZ2VzdCBjaXRpZXM6IEJvc3RvbiBvZiBTdWZmb2xrLCBXb3JjZXN0ZXIgb2YgV29yY2VzdGVyLCBTcHJpbmdmaWVsZCBvZiBIYW1wZGVuLiBSZXNvdXJjZXMgdGVuZCB0byBhZ2dsb21lcmF0ZSBpbiBiaWcgY2l0aWVzLCBhbmQgcG9vciBwZW9wbGUgaW4gYmlnIGNpdGllcyBhcmUgbW9yZSBsaWtlbHkgdG8gbWFrZSAyLTEtMSBjYWxscy0tZWl0aGVyIGJlY2F1c2UgdGhlcmUgYXJlIG1vcmUgcmVzb3VyY2VzIHJlYWRpbHkgYXZhaWxhYmxlIHRvIHRoZW0sIG9yIGJlY2F1c2UgdGhleSBhcmUgbW9yZSBwb29yLgoKQ291bnRpZXMgc3Vycm91bmRpbmcgdGhlIFN1ZmZvbGsgY291bnR5LS1NaWRkbGVzZXgsIE5vcmZvbGsgYW5kIEVzc2V4LCBhbGwgaGF2ZSBhIHJlbGF0aXZlbHkgaGlnaCBwb3B1bGF0aW9uIGFuZCBudW1iZXIgb2YgcmVzb3VyY2VzLCBidXQgbG93IG51bWJlciBvZiBjYWxscy4KCiMjIElkZWFzIGZvciBmdXR1cmUgYW5hbHlzaXMKCjEuIEV4Y2x1ZGUgYmFzaWMgbXVuaWNpcGFsaXR5IGFuZCBwb2xpY2luZyBzZXJ2aWNlcywgY2hlY2sgd2hhdCdzIHRoZSBlZmZlY3Qgb2YgdGhlIHByZXNlbmNlIG9mIG90aGVyIGNyaXRpY2FsIGh1bWFuIHNlcnZpY2UgcmVzb3VyY2VzLCBvbiBwdWJsaWMgaGVhbHRoIGFuZCBwb3ZlcnR5LiAKMi4gVXNlIHRoZSBjb3ZlcmFnZSBhdHRyaWJ1dGUgYW5kIGdlb2dyYXBoaWNhbCBhY2Nlc3NpYmlsaXR5IHRvIGNvbXB1dGUgZWFjaCBaSVAgY29kZS90b3duJ3MgImh1bWFuIHNlcnZpY2UgYWNjZXNzaWJpbGl0eSBpbmRleCIuIERpZmZlcmVudCBzZXJ2aWNlIGFuZCBzaXRlIHR5cGVzIG9idmlvdXNseSBoYXZlIGRpZmZlcmVudCBpbXBsaWNhdGlvbnMgaW4gdGVybXMgb2YgZ2VvZ3JhcGhpY2FsIHJlbGlhbmNlLiBJdCB3b3VsZCBiZSBhIG1ham9yIGNoYWxsZW5nZSB0byBhY2N1cmF0ZWx5IHF1YW50aWZ5IHRoZSBjb3ZlcmFnZSBhcmVhcy4KMy4gRXZhbHVhdGUgdGhlIGdlb2dyYXBoaWNhbCByZWxpYW5jZSBvZiBkaWZmZXJlbnQgc2VydmljZSB0eXBlcywgcHJvdmlkZSBzdWdnZXN0aW9ucyBmb3IgdGhlIGxvY2F0aW9ucyBvZiBmdXR1cmUgcmVzb3VyY2VzPw==