From ca978a54dce44b1b7ad55406cc5f6ee551dfadb8 Mon Sep 17 00:00:00 2001 From: Tyler Matteo Date: Mon, 11 Mar 2024 12:55:39 -0400 Subject: [PATCH] Merging ACS 2022 updates to staging (#1149) * Epic/13898 pff (#1097) * make start:local-api command * update readme with start:local-api command * update table variables that changed * Place shells of tables Fill pop table with variables * add mutually-exclusive table variables * place all decennial variables into tables * remove space from decennial male var * add formatting to tables. remove unused tables * write tooltips * bar charts * Updated label to complete AB#14528 * Added much of CCD selection type functionality required for map page * update choropleths with abbreviated variables * SASS division updated * Implemented correct selection explode functionality for CCDs * point to remote api and local layers * Updated selection summary for CCDs at the top of data explorer page. * Disabled ACS in dropdown for CCDs * Specify decimal places for pop density Remove special property for decennial props * use divider type for empty rows * Updated about page text. Completes AB#14714 * Fix for attempting to load ACS data for geotypes without ACS data. Completes AB#14496. * update census topics in explorer * Updated map layers portion of About page * remove percent from special variables * Added pop pyramid for census data. Completes AB#14724 * Updated Decennial Census text. * check whether previous sum is null * hide percents for special variables * mark ratios as special * Upgraded packages * Revert "point to remote api and local layers" This reverts commit 1c6732679158008f0d277dc9db60e67e12819240. --------- Co-authored-by: dhochbaum-dcp * Bugs/epic 13898 (#1099) * remove moe from decennial pop pyramid * fix pop pyramid for previous years * Task 14578 Dialog text for Fall 2023 DHC updates * prevent the rendering of 2010 census household type chart * prevent any decennial comparisons from being marked insignificant * Epic/13898 pff (#1097) (#1098) (#1101) * make start:local-api command * update readme with start:local-api command * update table variables that changed * Place shells of tables Fill pop table with variables * add mutually-exclusive table variables * place all decennial variables into tables * remove space from decennial male var * add formatting to tables. remove unused tables * write tooltips * bar charts * Updated label to complete AB#14528 * Added much of CCD selection type functionality required for map page * update choropleths with abbreviated variables * SASS division updated * Implemented correct selection explode functionality for CCDs * point to remote api and local layers * Updated selection summary for CCDs at the top of data explorer page. * Disabled ACS in dropdown for CCDs * Specify decimal places for pop density Remove special property for decennial props * use divider type for empty rows * Updated about page text. Completes AB#14714 * Fix for attempting to load ACS data for geotypes without ACS data. Completes AB#14496. * update census topics in explorer * Updated map layers portion of About page * remove percent from special variables * Added pop pyramid for census data. Completes AB#14724 * Updated Decennial Census text. * check whether previous sum is null * hide percents for special variables * mark ratios as special * Upgraded packages * Revert "point to remote api and local layers" This reverts commit 1c6732679158008f0d277dc9db60e67e12819240. --------- Co-authored-by: Tyler Matteo Co-authored-by: dhochbaum-dcp * remove banner text for archive note * Add banner with link to sign up for user interviews * Remove margin from info banner * Remove sign up banner (#1115) * issue/16067 updated initial pop-up greeting with new copy * Add missing comma to netlify.toml * Remove signup banner (#1142) * Remove sign up banner * Update to env to fix citynet issue * Issue/16067 PFF Updates Trunk Branch (#1135) * Population FactFinder 2018-2022 ACS & 2020 DDHC-A Updates * issue 1130 updated category stops * issue 1129 updated category stops for Pop65pl * Issue 1125 update year references * issue/1138 update copy on special note in data source menu * issue/1138 update copy on special note in data source menu * Revert "issue/1138 update copy on special note in data source menu" This reverts commit 5e749f7766a5f305da6ae44ece45201f5305772e. "This reverts the pre-update banner message already in develop" * issue/1127 updated and added to asian subgroups * Issue 1125 remove extra end quotations * issue 1146 Updated ACS Places of Birth * Issue 1132 - Added Detailed Race and Ethnicity (DT&E) decennial variables - DT&E variables are loaded and viewed when viewing data * Issue 1133 added sub header text to DT&E header * Issue 1124 Update about page copy * Issue#1128 display acs data for ccds * fix build issue on netlifty --------- Co-authored-by: pratishta * Updated pop-up copy --------- Co-authored-by: Timothy Miller Co-authored-by: dhochbaum-dcp Co-authored-by: horatio Co-authored-by: Horatio Co-authored-by: pratishta --- app/choropleth-config/index.js | 43 +- .../explorer/source-select-dropdown.js | 2 +- app/components/map-utility-box.js | 4 +- app/controllers/explorer.js | 170 ++-- app/sources-config/index.js | 6 +- .../acs/demographic/asian-subgroup.js | 117 ++- app/table-config/acs/social/place-of-birth.js | 105 +- .../census/detailed-race-and-ethnicity.js | 928 ++++++++++++++++++ app/table-config/census/index.js | 2 + app/templates/about.hbs | 4 + .../components/data-table-header-change.hbs | 6 +- app/templates/components/default-modal.hbs | 4 +- .../explorer/source-select-dropdown.hbs | 157 ++- app/templates/explorer.hbs | 4 + app/topics-config/acs.js | 8 +- app/topics-config/census.js | 11 + 16 files changed, 1333 insertions(+), 238 deletions(-) create mode 100644 app/table-config/census/detailed-race-and-ethnicity.js diff --git a/app/choropleth-config/index.js b/app/choropleth-config/index.js index 212c150a..acba5a93 100644 --- a/app/choropleth-config/index.js +++ b/app/choropleth-config/index.js @@ -17,24 +17,6 @@ const choroplethConfigs = [ '#e54444', ], }, - { - group: 'Demographic (ACS)', - id: 'pop65pl1', - label: '65 Years and Over', - tooltip: 'Population 65 years and over', - legendTitle: 'Population 65 years and over', - stops: [ - '#f2f2a2', - 4000, - '#efc68a', - 8000, - '#e99963', - 12000, - '#e56d44', - 15000, - '#e54444', - ], - }, { group: 'Social (ACS)', id: 'ea_bchdh', @@ -84,7 +66,7 @@ const choroplethConfigs = [ legendTitle: 'Percent foreign-born population', stops: [ '#f2f2a2', - 25, + 20, '#efc68a', 35, '#e99963', @@ -139,13 +121,13 @@ const choroplethConfigs = [ label: 'Below Poverty (percent)', tooltip: 'Percent of population whose income is below the poverty level', legendTitle: 'Percent of population below poverty level', - stops: ['#f2f2a2', 12, '#efc68a', 20, '#e56d44', 40, '#e54444'], + stops: ['#f2f2a2', 15, '#efc68a', 30, '#e56d44', 40, '#e54444'], }, { group: 'Housing (ACS)', id: 'mdgr', label: 'Median Gross Rent', - tooltip: 'Median gross rent (in 2020 inflation-adjusted dollars)', + tooltip: 'Median gross rent (in 2022 inflation-adjusted dollars)', legendTitle: 'Median Gross Rent', stops: ['#f2f2a2', 1500, '#efc68a', 2000, '#e56d44', 2500, '#e54444'], }, @@ -188,6 +170,24 @@ const choroplethConfigs = [ '#e54444', ], }, + { + group: 'Census', + id: 'pop65pl', + label: '65 Years and Over', + tooltip: 'Population 65 years and over', + legendTitle: 'Population 65 years and over', + stops: [ + '#f2f2a2', + 4000, + '#efc68a', + 6000, + '#e99963', + 8000, + '#e56d44', + 10000, + '#e54444', + ], + }, { group: 'Census', id: 'wnh', @@ -645,7 +645,6 @@ const MINIMUM_RACIAL_COUNT = 5000; // For all other variables, or for racial group percent change when the count is above the minimum, // fill color is simply determined by the "steps" array const buildPaintFill = (id, minimum, stops) => { - const racialPercentChangeIds = ['wnh_pc', 'bnh_pc', 'anh_pc', 'hsp1_pc']; return racialPercentChangeIds.includes(id) diff --git a/app/components/explorer/source-select-dropdown.js b/app/components/explorer/source-select-dropdown.js index 70513273..7866c04e 100644 --- a/app/components/explorer/source-select-dropdown.js +++ b/app/components/explorer/source-select-dropdown.js @@ -57,7 +57,7 @@ export default class SourceSelectDropdownComponent extends Component { } get showACS() { - if(['districts', 'blocks', 'ccds'].includes(this.args.geotype)) { + if(['districts', 'blocks'].includes(this.args.geotype)) { return false; } return true; diff --git a/app/components/map-utility-box.js b/app/components/map-utility-box.js index 6d90da2d..a34a5daa 100644 --- a/app/components/map-utility-box.js +++ b/app/components/map-utility-box.js @@ -146,8 +146,8 @@ export default Component.extend({ }) } - // Reset the source for geotypes that do not have ACS data - if ((['ccds', 'districts'].includes(type)) && (['acs-current', 'acs-previous', 'acs-change'].includes(queryParams['source']))) { + // Reset the source for geotypes that do not have ACS data. + if ((['districts'].includes(type)) && (['acs-current', 'acs-previous', 'acs-change'].includes(queryParams['source']))) { queryParams['source'] = 'decennial-current'; } diff --git a/app/controllers/explorer.js b/app/controllers/explorer.js index 923c70b0..8d76e331 100644 --- a/app/controllers/explorer.js +++ b/app/controllers/explorer.js @@ -22,16 +22,18 @@ export default class ExplorerController extends Controller { 'acsTopics', 'compareTo', 'showReliability', - 'showCharts' + 'showCharts', ]; @tracked showCharts = true; @tracked sourceId = 'decennial-current'; - @tracked censusTopics = 'populationSexAgeDensity,mutuallyExclusiveRaceHispanicOrigin,relationHeadHousehold,householdType,housingOccupancy,housingTenure,householdSize'; + @tracked censusTopics = + 'populationSexAgeDensity,mutuallyExclusiveRaceHispanicOrigin,detailedRaceAndEthnicity,relationHeadHousehold,householdType,housingOccupancy,housingTenure,householdSize'; - @tracked acsTopics = 'demo-sexAndAge,demo-mutuallyExclusiveRaceHispanicOrigin,demo-hispanicSubgroup,demo-asianSubgroup'; + @tracked acsTopics = + 'demo-sexAndAge,demo-mutuallyExclusiveRaceHispanicOrigin,demo-hispanicSubgroup,demo-asianSubgroup'; @tracked showReliability = false; @@ -40,10 +42,10 @@ export default class ExplorerController extends Controller { // The comparison geography ID. // Must match ID of one option in comparisonGeoOptions. // Default "0" maps to NYC. - @tracked compareTo = "0"; + @tracked compareTo = '0'; pauseToRerender(time) { - return new Promise(resolve => setTimeout(resolve, time)); + return new Promise((resolve) => setTimeout(resolve, time)); } toggleSourceInList(sourceId) { @@ -58,51 +60,51 @@ export default class ExplorerController extends Controller { return { ...source, selected: false, - } + }; }); } toggleChildren = (children, selectedValue) => { - return children.map(child => { + return children.map((child) => { return { ...child, selected: selectedValue, children: this.toggleChildren(child.children, selectedValue), - } + }; }); - } + }; toggleTopicInList = (topics, itemId) => { return topics.map((topic) => { if (topic.id === itemId) { return { ...topic, - selected: "selected", - children: this.toggleChildren(topic.children, "selected"), + selected: 'selected', + children: this.toggleChildren(topic.children, 'selected'), }; } if (topic.children && topic.children.length > 0) { const newChildren = this.toggleTopicInList(topic.children, itemId); - let newSelectedValue = "indeterminate"; + let newSelectedValue = 'indeterminate'; - if (newChildren.every(child => child.selected === "selected")) { - newSelectedValue = "selected"; + if (newChildren.every((child) => child.selected === 'selected')) { + newSelectedValue = 'selected'; } - if (newChildren.every(child => child.selected === "unselected")) { - newSelectedValue = "unselected"; + if (newChildren.every((child) => child.selected === 'unselected')) { + newSelectedValue = 'unselected'; } return { ...topic, selected: newSelectedValue, - children: newChildren - } + children: newChildren, + }; } return topic; }); - } + }; get comparisonGeo() { if (this.model.comparisonGeoOptions) { @@ -121,15 +123,15 @@ export default class ExplorerController extends Controller { } get source() { - return this.sources.find(source => source.selected); + return this.sources.find((source) => source.selected); } set source(newSource) { const { id } = newSource; - sessionStorage.setItem('source', id) + sessionStorage.setItem('source', id); - this.transitionToRoute('explorer', { queryParams: { source: id }}); + this.transitionToRoute('explorer', { queryParams: { source: id } }); } // returns either 'current', 'previous' or 'change' @@ -142,15 +144,18 @@ export default class ExplorerController extends Controller { } get topicsIdList() { - const rawTopicsList = this.source.type === 'census' ? this.censusTopics : this.acsTopics; + const rawTopicsList = + this.source.type === 'census' ? this.censusTopics : this.acsTopics; - if (rawTopicsList === 'all'){ + if (rawTopicsList === 'all') { if (this.source.type === 'census') { - return censusTopicsDefault.map(topic => topic.id); + return censusTopicsDefault.map((topic) => topic.id); } return acsTopicsDefault.reduce((topicsIdList, curTopic) => { - return topicsIdList.concat(curTopic.children.map(subtopic => subtopic.id)); + return topicsIdList.concat( + curTopic.children.map((subtopic) => subtopic.id) + ); }, []); } else if (rawTopicsList === 'none') { return []; @@ -166,7 +171,7 @@ export default class ExplorerController extends Controller { return this.toggleTopicInList(topicsIdList, curTopicId); }, censusTopicsDefault); } - + return this.topicsIdList.reduce((topicsIdList, curTopicId) => { return this.toggleTopicInList(topicsIdList, curTopicId); }, acsTopicsDefault); @@ -178,23 +183,23 @@ export default class ExplorerController extends Controller { set topics(newTopics) { const qpKey = this.source.type === 'census' ? 'censusTopics' : 'acsTopics'; - sessionStorage.setItem([qpKey], newTopics) + sessionStorage.setItem([qpKey], newTopics); - this.transitionToRoute('explorer', { queryParams: { [qpKey]: newTopics }}); + this.transitionToRoute('explorer', { queryParams: { [qpKey]: newTopics } }); } get isAllTopicsSelected() { const { topics } = this; - if (topics.every(topic => topic.selected === "selected")) { - return "selected"; + if (topics.every((topic) => topic.selected === 'selected')) { + return 'selected'; } - if (topics.every(topic => topic.selected === "unselected")) { - return "unselected"; + if (topics.every((topic) => topic.selected === 'unselected')) { + return 'unselected'; } - return "indeterminate"; + return 'indeterminate'; } get selectedCount() { @@ -204,21 +209,25 @@ export default class ExplorerController extends Controller { get sortedLabels() { var { features } = this.model.selection; if (['districts', 'boroughs'].includes(this.model.selection.type)) { - for(var i = 0; i < features.length; i++) { - features[i].properties.borocode = features[i].properties.geoid.toString().slice(0,1); + for (var i = 0; i < features.length; i++) { + features[i].properties.borocode = features[i].properties.geoid + .toString() + .slice(0, 1); if (this.model.selection.type === 'districts') { features[i].properties.district = features[i].properties.geoid % 100; } } } else if (this.model.selection.type === 'ccds') { - return features.map((ccd) => ccd.properties.geolabel).sort((a, b) => a - b); + return features + .map((ccd) => ccd.properties.geolabel) + .sort((a, b) => a - b); } - - const bronx = features.filter(d => d.properties.borocode === '2'); - const brooklyn = features.filter(d => d.properties.borocode === '3'); - const manhattan = features.filter(d => d.properties.borocode === '1'); - const queens = features.filter(d => d.properties.borocode === '4'); - const statenisland = features.filter(d => d.properties.borocode === '5'); + + const bronx = features.filter((d) => d.properties.borocode === '2'); + const brooklyn = features.filter((d) => d.properties.borocode === '3'); + const manhattan = features.filter((d) => d.properties.borocode === '1'); + const queens = features.filter((d) => d.properties.borocode === '4'); + const statenisland = features.filter((d) => d.properties.borocode === '5'); return [ { @@ -241,7 +250,7 @@ export default class ExplorerController extends Controller { label: 'Staten Island', features: statenisland, }, - ].filter(d => d.features.length > 0); + ].filter((d) => d.features.length > 0); } get agePopDist() { @@ -286,8 +295,8 @@ export default class ExplorerController extends Controller { this.source = newSource; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ - 'event' : 'select_data_source', - 'select_data_source' : newSource.label, + event: 'select_data_source', + select_data_source: newSource.label, }); this.metrics.trackEvent('GoogleAnalytics', { eventCategory: 'Data Source', @@ -301,18 +310,22 @@ export default class ExplorerController extends Controller { await this.pauseToRerender(1); if (topic.type === 'subtopic') { - if (this.topicsIdList.includes(topic.id)) { - this.topics = this.topicsIdList.filter(topicId => topicId !== topic.id); - } else { - this.topics = this.topicsIdList.concat([topic.id]); - } + if (this.topicsIdList.includes(topic.id)) { + this.topics = this.topicsIdList.filter( + (topicId) => topicId !== topic.id + ); + } else { + this.topics = this.topicsIdList.concat([topic.id]); + } } if (topic.type === 'topic') { - const topicChildrenIds = topic.children.map(subtopic => subtopic.id); + const topicChildrenIds = topic.children.map((subtopic) => subtopic.id); - if (topic.selected === "selected" || topic.selected === "indeterminate") { - this.topics = this.topicsIdList.filter(topicId => !topicChildrenIds.includes(topicId)); + if (topic.selected === 'selected' || topic.selected === 'indeterminate') { + this.topics = this.topicsIdList.filter( + (topicId) => !topicChildrenIds.includes(topicId) + ); } else { this.topics = this.topicsIdList.concat(topicChildrenIds); } @@ -325,19 +338,19 @@ export default class ExplorerController extends Controller { this.isLoading = true; await this.pauseToRerender(1); - this.topics = this.isAllTopicsSelected === "unselected" ? "all" : "none"; + this.topics = this.isAllTopicsSelected === 'unselected' ? 'all' : 'none'; this.isLoading = false; window.dataLayer = window.dataLayer || []; window.dataLayer.push({ - 'event' : 'select_all_topics', - 'toggle' : this.isAllTopicsSelected === "unselected" ? "none" : "all", + event: 'select_all_topics', + toggle: this.isAllTopicsSelected === 'unselected' ? 'none' : 'all', }); this.metrics.trackEvent('GoogleAnalytics', { eventCategory: 'Select Topics', eventAction: 'Select All Topics Toggle', - eventLabel: this.isAllTopicsSelected === "unselected" ? "none" : "all", + eventLabel: this.isAllTopicsSelected === 'unselected' ? 'none' : 'all', }); } @@ -347,8 +360,8 @@ export default class ExplorerController extends Controller { if (controlId === 'showReliability') { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ - 'event' : 'toggle_show_reliability_data', - 'show_reliability_data' : !currentControlValue, + event: 'toggle_show_reliability_data', + show_reliability_data: !currentControlValue, }); this.metrics.trackEvent('GoogleAnalytics', { eventCategory: 'Show Reliability Data', @@ -358,8 +371,8 @@ export default class ExplorerController extends Controller { } else if (controlId === 'showCharts') { window.dataLayer = window.dataLayer || []; window.dataLayer.push({ - 'event' : 'toggle_show_charts', - 'show_charts' : !currentControlValue, + event: 'toggle_show_charts', + show_charts: !currentControlValue, }); this.metrics.trackEvent('GoogleAnalytics', { eventCategory: 'Show Charts', @@ -368,23 +381,32 @@ export default class ExplorerController extends Controller { }); } - sessionStorage.setItem([controlId], !currentControlValue) + sessionStorage.setItem([controlId], !currentControlValue); - this.transitionToRoute('explorer', { queryParams: { - [controlId]: !currentControlValue, - }}); + this.transitionToRoute('explorer', { + queryParams: { + [controlId]: !currentControlValue, + }, + }); } @task({ restartable: true }) *reloadExplorerModel(newGeoid) { yield this.store.unloadAll('row'); - const newExplorerModel = yield fetchExplorerModel(this.store, this.model.geotype, this.model.geoid, newGeoid); + const newExplorerModel = yield fetchExplorerModel( + this.store, + this.model.geotype, + this.model.geoid, + newGeoid + ); this.model = newExplorerModel; - sessionStorage.setItem('compareTo', newGeoid) + sessionStorage.setItem('compareTo', newGeoid); - yield this.transitionToRoute('explorer', { queryParams: { compareTo: newGeoid }}); + yield this.transitionToRoute('explorer', { + queryParams: { compareTo: newGeoid }, + }); } @action updateCompareTo(geoid) { @@ -396,10 +418,10 @@ export default class ExplorerController extends Controller { @action toggleReliability() { this.showReliability = !this.showReliability; /*global Promise*/ - return new Promise(resolve => { - setTimeout(function() { - resolve("slow") - }, 1) - }) + return new Promise((resolve) => { + setTimeout(function () { + resolve('slow'); + }, 1); + }); } } diff --git a/app/sources-config/index.js b/app/sources-config/index.js index 4c7c9f00..9d63a51f 100644 --- a/app/sources-config/index.js +++ b/app/sources-config/index.js @@ -25,9 +25,9 @@ export default [ }, { id: 'acs-current', - label: '2017 - 2021', + label: '2018 - 2022', type: 'acs', - year: '2017-2021', + year: '2018-2022', mode: 'current', selected: false, }, @@ -41,7 +41,7 @@ export default [ }, { id: 'acs-change', - label: 'Change Over Time (2006-2010 to 2017-2021)', + label: 'Change Over Time (2006-2010 to 2018-2022)', type: 'acs', year: null, mode: 'change', diff --git a/app/table-config/acs/demographic/asian-subgroup.js b/app/table-config/acs/demographic/asian-subgroup.js index e54c3d14..a1fc8925 100644 --- a/app/table-config/acs/demographic/asian-subgroup.js +++ b/app/table-config/acs/demographic/asian-subgroup.js @@ -13,6 +13,11 @@ export default [ title: 'Chinese, except Taiwanese', data: 'asnchinot', }, + { + indent: 1, + title: 'Hmong', + data: 'asnhmng', + }, { indent: 1, title: 'Japanese', @@ -39,87 +44,131 @@ export default [ data: 'asntwn', }, { - title: 'South Asian', - data: 'asnsouth', + indent: 1, + title: 'Other East Asian', + data: 'asnoeast', + }, + { + title: 'Southeast Asian', + data: 'asnseast', }, { indent: 1, - title: 'Asian Indian', - data: 'asnind', + title: 'Burmese', + data: 'asnburm', }, { indent: 1, - title: 'Bangladeshi', - data: 'asnbng', + title: 'Cambodian', + data: 'asncmb', }, { indent: 1, - title: 'Bhutanese', - data: 'asnbhutn', + title: 'Filipino', + data: 'asnflp', }, { indent: 1, - title: 'Nepalese', - data: 'asnnepal', + title: 'Indonesian', + data: 'asnindnsn', }, { indent: 1, - title: 'Pakistani', - data: 'asnpak', + title: 'Laotian', + data: 'asnlao', }, { indent: 1, - title: 'Sri Lankan', - data: 'asnsril', + title: 'Malaysian', + data: 'asnmalsn', }, { - title: 'Southeast Asian', - data: 'asnseast', + indent: 1, + title: 'Mien', + data: 'asnmien', }, { indent: 1, - title: 'Burmese', - data: 'asnburm', + title: 'Singaporean', + data: 'asnsingpr', }, { indent: 1, - title: 'Cambodian', - data: 'asncmb', + title: 'Thai', + data: 'asnthai', }, { indent: 1, - title: 'Filipino', - data: 'asnflp', + title: 'Vietnamese', + data: 'asnvtn', }, { indent: 1, - title: 'Hmong', - data: 'asnhmng', + title: 'Other Southeast Asian', + data: 'asnoseast', + }, + { + title: 'South Asian', + data: 'asnsouth', }, { indent: 1, - title: 'Indonesian', - data: 'asnindnsn', + title: 'Asian Indian', + data: 'asnind', }, { indent: 1, - title: 'Laotian', - data: 'asnlao', + title: 'Bangladeshi', + data: 'asnbng', }, { indent: 1, - title: 'Malaysian', - data: 'asnmalsn', + title: 'Bhutanese', + data: 'asnbhutn', }, { indent: 1, - title: 'Thai', - data: 'asnthai', + title: 'Nepalese', + data: 'asnnepal', }, { indent: 1, - title: 'Vietnamese', - data: 'asnvtn', + title: 'Pakistani', + data: 'asnpak', + }, + { + indent: 1, + title: 'Sikh', + data: 'asnsikh', + }, + { + indent: 1, + title: 'Sri Lankan', + data: 'asnsril', + }, + { + indent: 1, + title: 'Other South Asian', + data: 'asnosouth', + }, + { + title: 'Central Asian', + data: 'asncntrl', + }, + { + indent: 1, + title: 'Kazakh', + data: 'asnkazakh', + }, + { + indent: 1, + title: 'Uzbek', + data: 'asnuzbek', + }, + { + indent: 1, + title: 'Other Central Asian', + data: 'asnocntrl', }, { title: 'Other Asian', diff --git a/app/table-config/acs/social/place-of-birth.js b/app/table-config/acs/social/place-of-birth.js index c4f6db34..2f93eb18 100755 --- a/app/table-config/acs/social/place-of-birth.js +++ b/app/table-config/acs/social/place-of-birth.js @@ -25,7 +25,8 @@ export default [ }, { indent: 1, - title: 'Born in Puerto Rico, U.S. Island areas, or born abroad to American parent(s)', + title: + 'Born in Puerto Rico, U.S. Island areas, or born abroad to American parent(s)', data: 'ntvprusab', }, { @@ -154,6 +155,11 @@ export default [ title: 'Portugal', data: 'portugal', }, + { + indent: 3, + title: 'Azores Islands', + data: 'azores', + }, { indent: 2, title: 'Spain', @@ -318,6 +324,11 @@ export default [ title: 'Bangladesh', data: 'bngldsh', }, + { + indent: 2, + title: 'Bhutan', + data: 'bhutan', + }, { indent: 2, title: 'India', @@ -418,6 +429,21 @@ export default [ title: 'Western Asia', data: 'wasia', }, + { + indent: 2, + title: 'Armenia', + data: 'armenia', + }, + { + indent: 2, + title: 'Azerbaijan', + data: 'azerbjn', + }, + { + indent: 2, + title: 'Georgia', + data: 'georgia', + }, { indent: 2, title: 'Iraq', @@ -455,18 +481,18 @@ export default [ }, { indent: 2, - title: 'Yemen', - data: 'yemen', + title: 'Turkey', + data: 'turkey', }, { indent: 2, - title: 'Turkey', - data: 'turkey', + title: 'United Arab Emirates', + data: 'uaremir', }, { indent: 2, - title: 'Armenia', - data: 'armenia', + title: 'Yemen', + data: 'yemen', }, { indent: 2, @@ -502,6 +528,26 @@ export default [ title: 'Kenya', data: 'kenya', }, + { + indent: 2, + title: 'Somalia', + data: 'somalia', + }, + { + indent: 2, + title: 'Tanzania', + data: 'tanzania', + }, + { + indent: 2, + title: 'Uganda', + data: 'uganda', + }, + { + indent: 2, + title: 'Zimbabwe', + data: 'zimbabwe', + }, { indent: 2, title: 'Other Eastern Africa', @@ -517,6 +563,16 @@ export default [ title: 'Cameroon ', data: 'cameroon', }, + { + indent: 2, + title: 'Congo', + data: 'congo', + }, + { + indent: 2, + title: 'Democratic Republic of Congo (Zaire)', + data: 'drcongo', + }, { indent: 2, title: 'Other Middle Africa', @@ -527,6 +583,11 @@ export default [ title: 'Northern Africa', data: 'nafr', }, + { + indent: 2, + title: 'Algeria', + data: 'algeria', + }, { indent: 2, title: 'Egypt', @@ -577,6 +638,11 @@ export default [ title: 'Ghana', data: 'ghana', }, + { + indent: 2, + title: 'Ivory Coast ', + data: 'ivorycst', + }, { indent: 2, title: 'Liberia', @@ -587,11 +653,21 @@ export default [ title: 'Nigeria', data: 'nigeria', }, + { + indent: 2, + title: 'Senegal', + data: 'senegal', + }, { indent: 2, title: 'Sierra Leone', data: 'sierral', }, + { + indent: 2, + title: 'Togo', + data: 'togo', + }, { indent: 2, title: 'Other Western Africa', @@ -626,6 +702,16 @@ export default [ title: 'Fiji', data: 'fiji', }, + { + indent: 1, + title: 'Marshall Islands', + data: 'mrshlisl', + }, + { + indent: 1, + title: 'Micronesia', + data: 'microns', + }, { indent: 1, title: 'Oceania, n.e.c.', @@ -685,6 +771,11 @@ export default [ title: 'Jamaica', data: 'jamaica', }, + { + indent: 3, + title: 'St. Lucia', + data: 'stlucia', + }, { indent: 3, title: 'St. Vincent and the Grenadines', diff --git a/app/table-config/census/detailed-race-and-ethnicity.js b/app/table-config/census/detailed-race-and-ethnicity.js new file mode 100644 index 00000000..b2bc0e76 --- /dev/null +++ b/app/table-config/census/detailed-race-and-ethnicity.js @@ -0,0 +1,928 @@ +export default [ + { + data: 'pop', + title: 'Total Population', + highlight: true, + }, + { + title: 'Hispanic or Latino (of any race)', + }, + { + data: 'hmex', + title: 'Mexican', + indent: 3, + }, + { + data: 'hca', + title: 'Central American', + indent: 2, + }, + { + data: 'hcacstrcn', + title: 'Costa Rican', + indent: 3, + }, + { + data: 'hcagutmln', + title: 'Guatemalan', + indent: 3, + }, + { + data: 'hcahndrn', + title: 'Honduran', + indent: 3, + }, + { + data: 'hcancrgn', + title: 'Nicaraguan', + indent: 3, + }, + { + data: 'hcapnmn', + title: 'Panamanian', + indent: 3, + }, + { + data: 'hcaslvdrn', + title: 'Salvadoran', + indent: 3, + }, + { + data: 'hsa', + title: 'South American', + indent: 2, + }, + { + data: 'hsaargntn', + title: 'Argentinean', + indent: 3, + }, + { + data: 'hsablvn', + title: 'Bolivian', + indent: 3, + }, + { + data: 'hsachln', + title: 'Chilean', + indent: 3, + }, + { + data: 'hsaclmbn', + title: 'Colombian', + indent: 3, + }, + { + data: 'hsaecudrn', + title: 'Ecuadorian', + indent: 3, + }, + { + data: 'hsaprguyn', + title: 'Paraguayan', + indent: 3, + }, + { + data: 'hsaprvn', + title: 'Peruvian', + indent: 3, + }, + { + data: 'hsaurgyn', + title: 'Uruguayan', + indent: 3, + }, + { + data: 'hsavnzuln', + title: 'Venezuelan', + indent: 3, + }, + { + data: 'hch', + title: 'Caribbean Hispanic', + indent: 2, + }, + { + data: 'hchcuban', + title: 'Cuban', + indent: 3, + }, + { + data: 'hchdmncn', + title: 'Dominican', + indent: 3, + }, + { + data: 'hchprtrcn', + title: 'Puerto Rican', + indent: 3, + }, + { + data: 'hoth', + title: 'Other Hispanic, Latino, or Spanish', + indent: 2, + }, + { + data: 'hothspnrd', + title: 'Spaniard', + indent: 3, + }, + { + data: 'hothspnsh', + title: 'Spanish', + indent: 3, + }, + { + data: 'hothspnam', + title: 'Spanish American ', + indent: 3, + }, + { + data: 'hothgrfna', + title: 'Garifuna', + indent: 3, + }, + { + title: 'White', + }, + { + data: 'weur', + title: 'European', + indent: 2, + }, + { + data: 'weuralbn', + title: 'Albanian', + indent: 3, + }, + { + data: 'weurarmn', + title: 'Armenian', + indent: 3, + }, + { + data: 'weurastrn', + title: 'Austrian', + indent: 3, + }, + { + data: 'weurazrbn', + title: 'Azerbaijani', + indent: 3, + }, + { + data: 'weurblrsn', + title: 'Belarusian', + indent: 3, + }, + { + data: 'weurblgn', + title: 'Belgian', + indent: 3, + }, + { + data: 'weurbshrz', + title: 'Bosnian and Herzegovinian', + indent: 3, + }, + { + data: 'weurbrtsh', + title: 'British', + indent: 3, + }, + { + data: 'weurblgrn', + title: 'Bulgarian', + indent: 3, + }, + { + data: 'weurcrtn', + title: 'Croatian', + indent: 3, + }, + { + data: 'weurcyprt', + title: 'Cypriot', + indent: 3, + }, + { + data: 'weurczch', + title: 'Czech', + indent: 3, + }, + { + data: 'weurdnsh', + title: 'Danish', + indent: 3, + }, + { + data: 'weurdtch', + title: 'Dutch', + indent: 3, + }, + { + data: 'weurengsh', + title: 'English', + indent: 3, + }, + { + data: 'weurestn', + title: 'Estonian', + indent: 3, + }, + { + data: 'weurfnnsh', + title: 'Finnish', + indent: 3, + }, + { + data: 'weurfrnch', + title: 'French', + indent: 3, + }, + { + data: 'weurgrgn', + title: 'Georgian', + indent: 3, + }, + { + data: 'weurgrmn', + title: 'German', + indent: 3, + }, + { + data: 'weurgrk', + title: 'Greek', + indent: 3, + }, + { + data: 'weurhngrn', + title: 'Hungarian', + indent: 3, + }, + { + data: 'weurirsh', + title: 'Irish', + indent: 3, + }, + { + data: 'weuritln', + title: 'Italian', + indent: 3, + }, + { + data: 'weurksvn', + title: 'Kosovan', + indent: 3, + }, + { + data: 'weurltvn', + title: 'Latvian', + indent: 3, + }, + { + data: 'weurlthn', + title: 'Lithuanian', + indent: 3, + }, + { + data: 'weurmcdn', + title: 'Macedonian', + indent: 3, + }, + { + data: 'weurmlts', + title: 'Maltese', + indent: 3, + }, + { + data: 'weurmldvn', + title: 'Moldovan', + indent: 3, + }, + { + data: 'weurmtgrn', + title: 'Montenegrin', + indent: 3, + }, + { + data: 'weurnrwgn', + title: 'Norwegian', + indent: 3, + }, + { + data: 'weurplsh', + title: 'Polish', + indent: 3, + }, + { + data: 'weurprtgs', + title: 'Portuguese', + indent: 3, + }, + { + data: 'weurrmn', + title: 'Romanian', + indent: 3, + }, + { + data: 'weurrsn', + title: 'Russian', + indent: 3, + }, + { + data: 'weurscdvn', + title: 'Scandinavian', + indent: 3, + }, + { + data: 'weursirsh', + title: 'Scots-Irish', + indent: 3, + }, + { + data: 'weursctsh', + title: 'Scottish', + indent: 3, + }, + { + data: 'weursrbn', + title: 'Serbian', + indent: 3, + }, + { + data: 'weurslvc', + title: 'Slavic', + indent: 3, + }, + { + data: 'weurslvk', + title: 'Slovak', + indent: 3, + }, + { + data: 'weurslvn', + title: 'Slovenian', + indent: 3, + }, + { + data: 'weurswdsh', + title: 'Swedish', + indent: 3, + }, + { + data: 'weurswiss', + title: 'Swiss', + indent: 3, + }, + { + data: 'WEurTrksh', + title: 'Turkish', + indent: 3, + }, + { + data: 'weururkrn', + title: 'Ukrainian', + indent: 3, + }, + { + data: 'weurwlsh', + title: 'Welsh', + indent: 3, + }, + { + data: 'wmena', + title: 'Middle Eastern or North African', + indent: 2, + }, + { + data: 'wmenaagrn', + title: 'Algerian', + indent: 3, + }, + { + data: 'wmenaarab', + title: 'Arab', + indent: 3, + }, + { + data: 'wmenaegtn', + title: 'Egyptian', + indent: 3, + }, + { + data: 'WMENAIrn', + title: 'Iranian', + indent: 3, + }, + { + data: 'wmenairq', + title: 'Iraqi', + indent: 3, + }, + { + data: 'wmenaisrl', + title: 'Israeli', + indent: 3, + }, + { + data: 'wmenajrdn', + title: 'Jordanian', + indent: 3, + }, + { + data: 'wmenalbns', + title: 'Lebanese', + indent: 3, + }, + { + data: 'wmenamrcn', + title: 'Moroccan', + indent: 3, + }, + { + data: 'wmenapstn', + title: 'Palestinian', + indent: 3, + }, + { + data: 'wmenasyrn', + title: 'Syrian', + indent: 3, + }, + { + data: 'wmenatnsn', + title: 'Tunisian', + indent: 3, + }, + { + data: 'wmenaymn', + title: 'Yemeni', + indent: 3, + }, + { + data: 'woth', + title: 'Other White', + indent: 2, + }, + { + data: 'wothastrn', + title: 'Australian', + indent: 3, + }, + { + data: 'wothcndn', + title: 'Canadian', + indent: 3, + }, + { + data: 'wothfrcdn', + title: 'French Canadian', + indent: 3, + }, + { + data: 'wothnzldr', + title: 'New Zealander', + indent: 3, + }, + { + title: 'Black or African American', + }, + { + data: 'bafram', + title: 'African American', + indent: 3, + }, + { + data: 'bssaf', + title: 'Sub-Saharan African', + indent: 2, + }, + { + data: 'bssafbrkb', + title: 'Burkinabe', + indent: 3, + }, + { + data: 'bssafcmrn', + title: 'Cameroonian', + indent: 3, + }, + { + data: 'bssafcgls', + title: 'Congolese', + indent: 3, + }, + { + data: 'bssafethn', + title: 'Ethiopian', + indent: 3, + }, + { + data: 'bssafgmbn', + title: 'Gambian', + indent: 3, + }, + { + data: 'bssafghn', + title: 'Ghanaian', + indent: 3, + }, + { + data: 'bssafgnn', + title: 'Guinean', + indent: 3, + }, + { + data: 'bssafivrn', + title: 'Ivoirian', + indent: 3, + }, + { + data: 'bssafknyn', + title: 'Kenyan', + indent: 3, + }, + { + data: 'bssaflbrn', + title: 'Liberian', + indent: 3, + }, + { + data: 'bssafmln', + title: 'Malian', + indent: 3, + }, + { + data: 'bssafngrn', + title: 'Nigerian (Nigeria)', + indent: 3, + }, + { + data: 'bssafsgls', + title: 'Senegalese', + indent: 3, + }, + { + data: 'bssafsrln', + title: 'Sierra Leonean', + indent: 3, + }, + { + data: 'bssafsafr', + title: 'South African', + indent: 3, + }, + { + data: 'bssafsdns', + title: 'Sudanese', + indent: 3, + }, + { + data: 'bssaftgls', + title: 'Togolese', + indent: 3, + }, + { + data: 'bcrb', + title: 'Caribbean', + indent: 2, + }, + { + data: 'bcrbatbrb', + title: 'Antiguan and Barbudan', + indent: 3, + }, + { + data: 'bcrbbhmn', + title: 'Bahamian', + indent: 3, + }, + { + data: 'bcrbbrbdn', + title: 'Barbadian', + indent: 3, + }, + { + data: 'bcrbdmis', + title: 'Dominica Islander', + indent: 3, + }, + { + data: 'bcrbgrndn', + title: 'Grenadian', + indent: 3, + }, + { + data: 'bcrbhtn', + title: 'Haitian', + indent: 3, + }, + { + data: 'bcrbjmcn', + title: 'Jamaican', + indent: 3, + }, + { + data: 'bcrbktnv', + title: 'Kittian and Nevisian', + indent: 3, + }, + { + data: 'bcrbstluc', + title: 'St. Lucian', + indent: 3, + }, + { + data: 'bcrbtrtob', + title: 'Trinidadian and Tobagonian', + indent: 3, + }, + { + data: 'bcrbusvis', + title: 'U.S. Virgin Islander', + indent: 3, + }, + { + data: 'bcrbvnctn', + title: 'Vincentian', + indent: 3, + }, + { + data: 'bcrbwind', + title: 'West Indian', + indent: 3, + }, + { + data: 'both', + title: 'Other Black or African American', + indent: 3, + }, + { + title: 'American Indian and Alaska Native', + }, + { + data: 'aianalkntv', + title: 'Alaska Native', + indent: 2, + }, + { + data: 'aianain', + title: 'American Indian', + indent: 2, + }, + { + data: 'aianainbf', + title: 'Blackfeet Tribe of the Blackfeet Indian Reservation of Montana', + indent: 4, + }, + { + data: 'aianainch', + title: 'Cherokee', + indent: 4, + }, + { + data: 'aiancnain', + title: 'Central American Indian (all tribes)', + indent: 2, + }, + { + data: 'aianmxin', + title: 'Mexican Indian (all tribes)', + indent: 2, + }, + { + data: 'aianmxina', + title: 'Aztec', + indent: 3, + }, + { + data: 'aiansai', + title: 'South American Indian (all tribes)', + indent: 2, + }, + { + data: 'aiansaiei', + title: 'Ecuadorian Indian', + indent: 3, + }, + { + data: 'aiansaigy', + title: 'Guyanese South American Indian', + indent: 3, + }, + { + data: 'aiansaiic', + title: 'Inca', + indent: 3, + }, + { + data: 'aiancrb', + title: 'Caribbean Indian (all tribes)', + indent: 2, + }, + { + data: 'aiancrbt', + title: 'Taino', + indent: 3, + }, + { + data: 'aianmsin', + title: 'Mesoamerican Indian (all tribes)', + indent: 2, + }, + { + data: 'aianmsinm', + title: 'Maya', + indent: 3, + }, + { + title: 'Asian', + }, + { + data: 'aea', + title: 'East Asian', + indent: 3, + }, + { + data: 'aeachnsnt', + title: 'Chinese, except Taiwanese', + indent: 3, + }, + { + data: 'aeajpns', + title: 'Japanese', + indent: 3, + }, + { + data: 'aeakrn', + title: 'Korean', + indent: 3, + }, + { + data: 'aeatwns', + title: 'Taiwanese', + indent: 3, + }, + { + data: 'aca', + title: 'Central Asian', + indent: 2, + }, + { + data: 'acaafghan', + title: 'Afghan', + indent: 3, + }, + { + data: 'acakazakh', + title: 'Kazakh', + indent: 3, + }, + { + data: 'acakyrgyz', + title: 'Kyrgyz', + indent: 3, + }, + { + data: 'acatajik', + title: 'Tajik', + indent: 3, + }, + { + data: 'acauzbek', + title: 'Uzbek', + indent: 3, + }, + { + data: 'asa', + title: 'South Asian', + indent: 2, + }, + { + data: 'asaasnind', + title: 'Asian Indian', + indent: 3, + }, + { + data: 'asabngdsh', + title: 'Bangladeshi', + indent: 3, + }, + { + data: 'asanpls', + title: 'Nepalese', + indent: 3, + }, + { + data: 'asapkstn', + title: 'Pakistani', + indent: 3, + }, + { + data: 'asasikh', + title: 'Sikh', + indent: 3, + }, + { + data: 'asasrlnkn', + title: 'Sri Lankan', + indent: 3, + }, + { + data: 'asea', + title: 'Southeast Asian', + indent: 2, + }, + { + data: 'aseabrms', + title: 'Burmese', + indent: 3, + }, + { + data: 'aseacmbdn', + title: 'Cambodian', + indent: 3, + }, + { + data: 'aseaflpn', + title: 'Filipino', + indent: 3, + }, + { + data: 'aseaindsn', + title: 'Indonesian', + indent: 3, + }, + { + data: 'aseamlysn', + title: 'Malaysian', + indent: 3, + }, + { + data: 'aseasgprn', + title: 'Singaporean', + indent: 3, + }, + { + data: 'aseathai', + title: 'Thai', + indent: 3, + }, + { + data: 'aseavtnms', + title: 'Vietnamese', + indent: 3, + }, + { + data: 'aoth', + title: 'Other Asian', + indent: 2, + }, + { + title: 'Native Hawaiian and Other Pacific Islander', + }, + { + data: 'nhpiply', + title: 'Polynesian', + indent: 2, + }, + { + data: 'nhpiplynh', + title: 'Native Hawaiian', + indent: 3, + }, + { + data: 'nhpiplysm', + title: 'Samoan', + indent: 3, + }, + { + data: 'nhpimc', + title: 'Micronesian', + indent: 2, + }, + { + data: 'nhpimcchr', + title: 'Chamorro', + indent: 3, + }, + { + title: 'Some Other Race', + }, + { + data: 'sorblzn', + title: 'Belizean', + indent: 3, + }, + { + data: 'sorbrzln', + title: 'Brazilian', + indent: 3, + }, + { + data: 'sorguyans', + title: 'Guyanese', + indent: 3, + }, +]; diff --git a/app/table-config/census/index.js b/app/table-config/census/index.js index a4c182fe..8873200e 100644 --- a/app/table-config/census/index.js +++ b/app/table-config/census/index.js @@ -7,6 +7,7 @@ import householdSize from './household-size'; import mutuallyExclusiveRaceHispanicOrigin from './mutually-exclusive-race---hispanic-origin'; import relationshipToHeadOfHouseholdHouseholder from './relationship-to-head-of-household--householder'; import populationSexAgeDensity from './population-sex-age-density'; +import detailedRaceAndEthnicity from './detailed-race-and-ethnicity'; export default { householdType, @@ -16,4 +17,5 @@ export default { mutuallyExclusiveRaceHispanicOrigin, relationshipToHeadOfHouseholdHouseholder, populationSexAgeDensity, + detailedRaceAndEthnicity, }; diff --git a/app/templates/about.hbs b/app/templates/about.hbs index be7d1fc7..ce42e7c9 100644 --- a/app/templates/about.hbs +++ b/app/templates/about.hbs @@ -63,6 +63,10 @@

It is also important to note that private information (such as names and addresses) collected through the census is protected under Title 13 of U. S. Code. To adhere to the law and to avoid the disclosure of information about individual respondents, the Census Bureau has historically applied a host of techniques, such as top- and bottom-coding, imputation, table- and cell-suppression, and data swapping. The Census Bureau is employing a new technique with the 2020 Census, referred to as the Disclosure Avoidance System (DAS), based on differential privacy. With this approach, the Census Bureau “infuses noise” systematically across census data and sets a quantified disclosure risk, referred to as the Privacy Loss Budget (PLB).

While the new DAS approach may diminish the risk of disclosure concerns, it comes at a cost to data accuracy. Consequently, 2020 Census data users should be aware that all sub-state counts, except for housing units (which are unaffected by the DAS), may be adjusted to protect the privacy of Census participants and may be subject to reduced accuracy. Because DAS noise infusion is randomized, it is impossible for data users to know the degree to which any individual statistic is altered. However, it is possible to say that in general the relative size of errors decreases as counts increase. Consequently, data users should have greater confidence in the accuracy of the data as counts get larger. Further, an evaluation of a Privacy-Protected Microdata File (PPMF), treated with a Disclosure Avoidance System like the one applied to 2020 redistricting data, showed that counts of 300 or more rarely have sizable errors (error beyond +/- 10% of the count). Therefore, while data users need to be cognizant of data accuracy limitations, they should have confidence in conclusions based on sizable counts, which are relatively unaffected by the Census Bureau’s latest disclosure avoidance method.

The Census Bureau has not yet released data on average household size. This variable was derived from published data by DCP and are considered draft calculations. The data are provided for information purposes only and should not be relied on for analyses until verified by the Census Bureau.

+

Detailed Race and Ethnicity

+

Counts for all detailed race and ethnicity groups shown in NYC PFF represent the number of people who identified with each group, either alone or in combination with another group(s) -- this count represents the maximum number of people who identified with each respective 2020 Census group. Counts are given for both detailed and regional groups, with detailed groups nesting under regional, and both nesting under broad Race/Ethnicity groups following the Census Bureau’s classification methodology. Some responses may have been reclassified by the Census Bureau. All detailed race and ethnicity data are affected by the Census Bureau’s infusion of statistical noise for privacy protection, and thus come with bands of uncertainty. (For more information on the classifications and noise infusion, see the Census Bureau’s Detailed DHC-A technical documentation.)

+

For all geographies, and for every given detailed race and ethnicity group, the Census Bureau suppressed counts of less than 22. For regional groups, the Census Bureau suppressed counts of less than 94. Consequently, NYC PFF will display such suppressed values as blank.

+

When geographies are aggregated (such as a grouping of census tracts forming a Neighborhood Tabulation Area, Community District Tabulation Area, or other custom study area) there may be compounded error from both suppression and intentional noise infusion. Further, aggregated counts will not sum to published counts for higher orders of geography, such as boroughs, due to independent application of noise infusion. (Again, see the Census Bureau’s Detailed DHC-A technical documentation for more information.)

American Community Survey

The American Community Survey (ACS) is the most extensive nationwide survey currently available. From its annual releases users are able to examine the city’s detailed demographic, social, economic, and housing characteristics. Each month, questionnaires are sent to a sample of approximately 300,000 addresses across the country, so households are continuously receiving and responding to the ACS. In order to have a large enough sample from which to create estimates of characteristics for small areas, the ACS “rolls-up” the sample for five-year periods. New York City Population FactFinder (PFF) relies on these five-year period estimates to produce all of its ACS profile content. Because these estimates span a five-year period, they are represented with a start-year and end-year (for example, 2014-2018). These do not represent change over that five-year period, but rather something akin to a five-year average. It is also important to note that ACS estimates are derived from a survey and are subject to sampling error. Consequently, all ACS estimates are published with Margins of Error (MOEs) at a 90% confidence interval. These MOEs are available in PFF in data reliability views.

diff --git a/app/templates/components/data-table-header-change.hbs b/app/templates/components/data-table-header-change.hbs index 9b7430c4..c431f7d5 100644 --- a/app/templates/components/data-table-header-change.hbs +++ b/app/templates/components/data-table-header-change.hbs @@ -21,8 +21,8 @@ Change, 2010 to 2020 {{else}}{{!-- acs --}} 2006-2010 - 2017-2021 - Change, 2006-2010 to 2017-2021 + 2018-2022 + Change, 2006-2010 to 2018-2022 {{/if}} {{#if @reliability}} @@ -39,7 +39,7 @@ Percent {{fa-icon icon='question-circle' transform='shrink-2'}} {{ember-tooltip - text='2017-2021 number minus 2006-2010 number, divided by 2006-2010 number. Quotient multiplied by 100.' + text='2018-2022 number minus 2006-2010 number, divided by 2006-2010 number. Quotient multiplied by 100.' side='left' }} diff --git a/app/templates/components/default-modal.hbs b/app/templates/components/default-modal.hbs index 055cd1ae..c2851ce9 100644 --- a/app/templates/components/default-modal.hbs +++ b/app/templates/components/default-modal.hbs @@ -1,8 +1,6 @@

- NYC Population FactFinder will soon be updated with 2018-2022 American - Community Survey (ACS) data and with Detailed Race/Ethnicity Responses from - the 2020 Census. + NYC Population FactFinder has been updated with 2018-2022 American Community Survey (ACS) data and with Detailed Race/Ethnicity Responses from the 2020 Census. 2017-2021 ACS data are still available in the ACS sub-section of NYC City Planning's Population Division website.

diff --git a/app/templates/components/explorer/source-select-dropdown.hbs b/app/templates/components/explorer/source-select-dropdown.hbs index 24c90777..a7c2a65b 100644 --- a/app/templates/components/explorer/source-select-dropdown.hbs +++ b/app/templates/components/explorer/source-select-dropdown.hbs @@ -1,98 +1,85 @@ -
- {{#if this.open}} -
- {{#if @isModelLoading}} -
- Please wait... -
- {{else}} - Decennial Census - {{#each this.censusSources key="id" as |source|}} -
-
- - {{#if source.selected}} - {{fa-icon icon='dot-circle' prefix='far'}} - {{else}} - {{fa-icon icon='circle' prefix='far' class='silver'}} - {{/if}} - -
+
+ {{#if @isModelLoading}} +
+ Please wait... +
+ {{else}} + Decennial Census + {{#each this.censusSources key="id" as |source|}} +
+
+ + {{#if source.selected}} + {{fa-icon icon='dot-circle' prefix='far'}} + {{else}} + {{fa-icon icon='circle' prefix='far' class='silver'}} + {{/if}} + +
-
- {{source.label}} -
-
- {{/each}} +
+ {{source.label}} +
+
+ {{/each}} - {{#if this.showACS}} - American Community Survey (ACS) - {{#each this.acsSources key="id" as |source|}} -
-
- - {{#if source.selected}} - {{fa-icon icon='dot-circle' prefix='far'}} - {{else}} - {{fa-icon icon='circle' prefix='far' class='silver'}} - {{/if}} - -
+ {{#if this.showACS}} + American Community Survey (ACS) + {{#each this.acsSources key="id" as |source|}} +
+
+ + {{#if source.selected}} + {{fa-icon icon='dot-circle' prefix='far'}} + {{else}} + {{fa-icon icon='circle' prefix='far' class='silver'}} + {{/if}} + +
-
- {{source.label}} -
-
- {{/each}} - {{else}} - American Community Survey (ACS) - {{#each this.acsSources key="id" as |source|}} -
-
- - {{fa-icon icon='circle' prefix='far' class='silver'}} - -
+
+ {{source.label}} +
+
+ {{/each}} + {{else}} + American Community Survey (ACS) + {{#each this.acsSources key="id" as |source|}} +
+
+ + {{fa-icon icon='circle' prefix='far' class='silver'}} + +
-
- {{source.label}} -
-
- {{/each}} - {{/if}} - {{/if}} - {{#if this.showDistrictACSWarning}} -

- *ACS data are not available for Community Districts (CDs). Alternatively, users can select Community District Tabulation Areas – rough approximations of CDs – to access ACS data.* -

- {{/if}} - {{#if this.showCCDACSWarning}} -

- *ACS data are currently not available for City Council Districts (CCDs).* -

- {{/if}} +
+ {{source.label}} +
+ {{/each}} + {{/if}} + {{/if}} + {{#if this.showDistrictACSWarning}} +

+ *ACS data are not available for Community Districts (CDs). Alternatively, users can select Community District + Tabulation Areas – rough approximations of CDs – to access ACS data.* +

+ {{/if}} + {{#if this.showCCDACSWarning}} +

+ *ACS data for City Council Districts (CCDs) come from aggregations of census tracts that roughly approximate the + area of each CCD and may not be perfectly representative of the population within each CCD.* +

+ {{/if}} +
{{/if}} -
+
\ No newline at end of file diff --git a/app/templates/explorer.hbs b/app/templates/explorer.hbs index 0708fb3d..f33155cd 100644 --- a/app/templates/explorer.hbs +++ b/app/templates/explorer.hbs @@ -78,6 +78,10 @@

{{subtopic.label}}

+ {{#if subtopic.labelText}} +

+ {{subtopic.labelText}}

+ {{/if}} {{data-table mode=this.mode decennial=true diff --git a/app/topics-config/acs.js b/app/topics-config/acs.js index c9efaac3..860e8d92 100644 --- a/app/topics-config/acs.js +++ b/app/topics-config/acs.js @@ -311,7 +311,7 @@ export default [ { id: 'econ-incomeAndBenefits', label: 'Income and Benefits', - tooltip: 'In 2021 inflation-adjusted dollars', + tooltip: 'In 2022 inflation-adjusted dollars', selected: 'unselected', type: 'subtopic', tableConfig: acsEconomicTableConfig.incomeAndBenefits, @@ -329,7 +329,7 @@ export default [ label: 'Earnings', selected: 'unselected', type: 'subtopic', - tooltip: 'In 2021 inflation-adjusted dollars', + tooltip: 'In 2022 inflation-adjusted dollars', tableConfig: acsEconomicTableConfig.earnings, charts: null, children: [], @@ -461,7 +461,7 @@ export default [ { id: 'hou-value', label: 'Value', - tooltip: 'In 2021 inflation-adjusted dollars', + tooltip: 'In 2022 inflation-adjusted dollars', selected: 'unselected', type: 'subtopic', tableConfig: acsHousingTableConfig.value, @@ -495,7 +495,7 @@ export default [ { id: 'hou-grossRent', label: 'Gross Rent', - tooltip: 'In 2021 inflation-adjusted dollars', + tooltip: 'In 2022 inflation-adjusted dollars', selected: 'unselected', type: 'subtopic', tableConfig: acsHousingTableConfig.grossRent, diff --git a/app/topics-config/census.js b/app/topics-config/census.js index 2ac702fb..8e3655fb 100644 --- a/app/topics-config/census.js +++ b/app/topics-config/census.js @@ -26,6 +26,17 @@ export default [ ], children: [], }, + { + id: 'detailedRaceAndEthnicity', + label: 'Detailed Race and Ethnicity', + labelText: + 'Detailed race and ethnicity data represent the group alone or in any combination. The Census Bureau only publishes detailed race and ethnicity data for NYC at a tract, county, and city level. All other geographies are calculated by the Department of City Planning. Because of suppression, aggregate counts incorporate nonsampling error.', + selected: 'unselected', + type: 'subtopic', + tableConfig: censusTableConfig.detailedRaceAndEthnicity, + charts: null, + children: [], + }, { id: 'relationHeadHousehold', label: 'Relationship to Head of Household (Householder)',