diff --git a/frontend/src/i18n/descriptions.ts b/frontend/src/i18n/descriptions.ts index db3a9f2..b2fbadb 100644 --- a/frontend/src/i18n/descriptions.ts +++ b/frontend/src/i18n/descriptions.ts @@ -88,7 +88,8 @@ const descriptions: Record> = { '% White': 'Part de la population s’identifiant comme blanche', '% South Asian': 'Part de la population s’identifiant comme sud-asiatique', '% Black': 'Part de la population s’identifiant comme noire', - '% East/SE Asian': 'Part de la population s’identifiant comme est/sud-est asiatique', + '% East Asian': 'Part de la population s’identifiant comme est-asiatique', + '% SE Asian': 'Part de la population s’identifiant comme sud-est asiatique', '% Mixed': 'Part de la population s’identifiant comme métisse ou de plusieurs groupes ethniques', '% Other': 'Part de la population s’identifiant comme appartenant à un autre groupe ethnique', @@ -188,7 +189,8 @@ const descriptions: Record> = { '% White': 'Anteil der Personen, die sich als weiß identifizieren', '% South Asian': 'Anteil der Personen, die sich als südasiatisch identifizieren', '% Black': 'Anteil der Personen, die sich als schwarz identifizieren', - '% East/SE Asian': 'Anteil der Personen, die sich als ost-/südostasiatisch identifizieren', + '% East Asian': 'Anteil der Personen, die sich als ostasiatisch identifizieren', + '% SE Asian': 'Anteil der Personen, die sich als südostasiatisch identifizieren', '% Mixed': 'Anteil der Personen, die sich als gemischt oder mehreren ethnischen Gruppen zugehörig identifizieren', '% Other': 'Anteil der Personen, die sich einer anderen ethnischen Gruppe zuordnen', @@ -266,7 +268,8 @@ const descriptions: Record> = { '% White': '白人人口比例', '% South Asian': '南亚裔人口比例', '% Black': '黑人人口比例', - '% East/SE Asian': '东亚/东南亚裔人口比例', + '% East Asian': '东亚裔人口比例', + '% SE Asian': '东南亚裔人口比例', '% Mixed': '混血或多族裔人口比例', '% Other': '其他族裔人口比例', 'Voter turnout (%)': '2024 年大选中登记选民的投票率', @@ -352,7 +355,8 @@ const descriptions: Record> = { '% White': 'श्वेत के रूप में पहचान करने वाली आबादी का प्रतिशत', '% South Asian': 'दक्षिण एशियाई के रूप में पहचान करने वाली आबादी का प्रतिशत', '% Black': 'अश्वेत के रूप में पहचान करने वाली आबादी का प्रतिशत', - '% East/SE Asian': 'पूर्वी/दक्षिण-पूर्वी एशियाई के रूप में पहचान करने वाली आबादी का प्रतिशत', + '% East Asian': 'पूर्वी एशियाई के रूप में पहचान करने वाली आबादी का प्रतिशत', + '% SE Asian': 'दक्षिण-पूर्वी एशियाई के रूप में पहचान करने वाली आबादी का प्रतिशत', '% Mixed': 'मिश्रित या कई जातीय समूहों से पहचान करने वाली आबादी का प्रतिशत', '% Other': 'अन्य जातीय समूह के रूप में पहचान करने वाली आबादी का प्रतिशत', 'Voter turnout (%)': '2024 आम चुनाव में मतदान करने वाले पंजीकृत मतदाताओं का प्रतिशत', @@ -444,7 +448,8 @@ const descriptions: Record> = { '% White': 'A fehérként azonosított lakosság aránya', '% South Asian': 'A dél-ázsiaiként azonosított lakosság aránya', '% Black': 'A feketeként azonosított lakosság aránya', - '% East/SE Asian': 'A kelet-/délkelet-ázsiaiként azonosított lakosság aránya', + '% East Asian': 'A kelet-ázsiaiként azonosított lakosság aránya', + '% SE Asian': 'A délkelet-ázsiaiként azonosított lakosság aránya', '% Mixed': 'A vegyes vagy több etnikai csoporthoz tartozóként azonosított lakosság aránya', '% Other': 'Az egyéb etnikai csoportba tartozóként azonosított lakosság aránya', 'Voter turnout (%)': diff --git a/frontend/src/i18n/details.ts b/frontend/src/i18n/details.ts index 2f52615..1a28373 100644 --- a/frontend/src/i18n/details.ts +++ b/frontend/src/i18n/details.ts @@ -109,8 +109,10 @@ export const details: Record> = { "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Indien, Pakistanais, Bangladais ou toute autre origine asiatique.", '% Black': "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Noir, Noir britannique, Caribéen ou Africain.", - '% East/SE Asian': - "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Chinois ou d'une autre origine est/sud-est asiatique.", + '% East Asian': + "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Chinois.", + '% SE Asian': + "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme appartenant à une autre origine est/sud-est asiatique (par ex. Philippin, Vietnamien ou Thaïlandais).", '% Mixed': "Provient du Census 2021. Pourcentage de la population de l'autorité locale s'identifiant comme Mixte ou appartenant à plusieurs groupes ethniques (Blanc et Noir caribéen, Blanc et Noir africain, Blanc et Asiatique, ou tout autre fond mixte ou multiple).", '% Other': @@ -255,8 +257,10 @@ export const details: Record> = { 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als Indisch, Pakistanisch, Bangladeschisch oder mit sonstigem asiatischen Hintergrund identifiziert.', '% Black': 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als Schwarz, Schwarz-Britisch, Karibisch oder Afrikanisch identifiziert.', - '% East/SE Asian': - 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als Chinesisch oder einer anderen ost-/südostasiatischen Herkunft identifiziert.', + '% East Asian': + 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als Chinesisch identifiziert.', + '% SE Asian': + 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich mit einer anderen (nicht chinesischen) ost-/südostasiatischen Herkunft identifiziert, z. B. philippinisch, vietnamesisch oder thailändisch.', '% Mixed': 'Aus dem Census 2021. Prozentsatz der Bevölkerung der Gemeinde, die sich als gemischt oder mit mehreren ethnischen Zugehörigkeiten identifiziert (Weiß und Schwarzkaribisch, Weiß und Schwarzafrikanisch, Weiß und Asiatisch oder sonstiger gemischter Hintergrund).', '% Other': @@ -398,7 +402,9 @@ export const details: Record> = { '% South Asian': '来自2021年Census。地方政府人口中认同为印度人、巴基斯坦人、孟加拉国人或其他亚洲背景的百分比。', '% Black': '来自2021年Census。地方政府人口中认同为黑人、英国黑人、加勒比人或非洲人的百分比。', - '% East/SE Asian': '来自2021年Census。地方政府人口中认同为华人或其他东亚/东南亚裔的百分比。', + '% East Asian': '来自2021年Census。地方政府人口中认同为华人的百分比。', + '% SE Asian': + '来自2021年Census。地方政府人口中认同为其他(非华人)东亚/东南亚裔(如菲律宾裔、越南裔或泰裔)的百分比。', '% Mixed': '来自2021年 Census。地方政府人口中认同为混血或多种族群体(白人与黑人加勒比裔、白人与黑人非洲裔、白人与亚洲裔,或其他混血或多种族背景)的百分比。', '% Other': @@ -539,8 +545,10 @@ export const details: Record> = { 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को भारतीय, पाकिस्तानी, बांग्लादेशी या किसी अन्य एशियाई पृष्ठभूमि के रूप में पहचानता है.', '% Black': 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को अश्वेत, अश्वेत ब्रिटिश, कैरिबियाई या अफ्रीकी के रूप में पहचानता है.', - '% East/SE Asian': - 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को चीनी या अन्य पूर्वी/दक्षिण-पूर्वी एशियाई के रूप में पहचानता है.', + '% East Asian': + 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को चीनी के रूप में पहचानता है.', + '% SE Asian': + 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को अन्य (गैर-चीनी) पूर्वी/दक्षिण-पूर्वी एशियाई (जैसे फिलिपिनो, वियतनामी या थाई) के रूप में पहचानता है.', '% Mixed': 'Census 2021 से. स्थानीय प्राधिकरण की आबादी का प्रतिशत जो खुद को मिश्रित या कई जातीय समूहों (श्वेत और अश्वेत कैरिबियाई, श्वेत और अश्वेत अफ्रीकी, श्वेत और एशियाई या अन्य मिश्रित/बहुजातीय पृष्ठभूमि) के रूप में पहचानता है.', '% Other': @@ -685,8 +693,10 @@ export const details: Record> = { 'A 2021-es Census alapján. A helyi hatóság területén indiai, pakisztáni, bangladesi vagy bármely más ázsiai háttérként azonosított népesség százaléka.', '% Black': 'A 2021-es Census alapján. A helyi hatóság területén fekete, brit fekete, karibi vagy afrikai háttérként azonosított népesség százaléka.', - '% East/SE Asian': - 'A 2021-es Census alapján. A helyi hatóság területén kínai vagy más kelet-/délkelet-ázsiai származásúként azonosított népesség százaléka.', + '% East Asian': + 'A 2021-es Census alapján. A helyi hatóság területén kínaiként azonosított népesség százaléka.', + '% SE Asian': + 'A 2021-es Census alapján. A helyi hatóság területén más (nem kínai) kelet-/délkelet-ázsiai származásúként (pl. filippínó, vietnámi vagy thai) azonosított népesség százaléka.', '% Mixed': 'A 2021-es Census alapján. A helyi hatóság területén vegyes vagy többes etnikai csoportként (fehér és fekete karibi, fehér és fekete afrikai, fehér és ázsiai, vagy bármely más vegyes vagy többes háttér) azonosított népesség százaléka.', '% Other': diff --git a/frontend/src/i18n/locales/de.ts b/frontend/src/i18n/locales/de.ts index de3f418..4b70e9e 100644 --- a/frontend/src/i18n/locales/de.ts +++ b/frontend/src/i18n/locales/de.ts @@ -1111,7 +1111,7 @@ const de: Translations = { dsEthnicityName: 'Bevölkerung nach Ethnie (Zensus 2021)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - 'Bevölkerungsanteile nach ethnischer Gruppe (südasiatisch, ostasiatisch, schwarz, gemischt, weiß, andere) pro Bezirk.', + 'Bevölkerungsanteile nach ethnischer Gruppe (südasiatisch, ostasiatisch, südostasiatisch, schwarz, gemischt, weiß, andere) pro Bezirk.', dsCrimeName: 'Kriminalitätsdaten auf Straßenebene', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1511,7 +1511,8 @@ const de: Translations = { '% White': '% weiß', '% South Asian': '% südasiatisch', '% Black': '% schwarz', - '% East/SE Asian': '% ost-/südostasiatisch', + '% East Asian': '% ostasiatisch', + '% SE Asian': '% südostasiatisch', '% Mixed': '% gemischt', '% Other': '% Sonstige', diff --git a/frontend/src/i18n/locales/en.ts b/frontend/src/i18n/locales/en.ts index 30255ce..2d3db79 100644 --- a/frontend/src/i18n/locales/en.ts +++ b/frontend/src/i18n/locales/en.ts @@ -1093,7 +1093,7 @@ const en = { dsEthnicityName: 'Population by Ethnicity (2021 Census)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - 'Population percentages by ethnic group (South Asian, East Asian, Black, Mixed, White, Other) per local authority.', + 'Population percentages by ethnic group (South Asian, East Asian, SE Asian, Black, Mixed, White, Other) per local authority.', dsCrimeName: 'Street-level Crime Data', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1485,7 +1485,8 @@ const en = { '% White': '% White', '% South Asian': '% South Asian', '% Black': '% Black', - '% East/SE Asian': '% East/SE Asian', + '% East Asian': '% East Asian', + '% SE Asian': '% SE Asian', '% Mixed': '% Mixed', '% Other': '% Other', diff --git a/frontend/src/i18n/locales/fr.ts b/frontend/src/i18n/locales/fr.ts index 391a77f..45c1d60 100644 --- a/frontend/src/i18n/locales/fr.ts +++ b/frontend/src/i18n/locales/fr.ts @@ -1125,7 +1125,7 @@ const fr: Translations = { dsEthnicityName: 'Population par ethnie (recensement 2021)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - 'Pourcentages de population par groupe ethnique (sud-asiatique, est-asiatique, noir, mixte, blanc, autre) par autorité locale.', + 'Pourcentages de population par groupe ethnique (sud-asiatique, est-asiatique, sud-est asiatique, noir, mixte, blanc, autre) par autorité locale.', dsCrimeName: 'Données de criminalité au niveau rue', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1528,7 +1528,8 @@ const fr: Translations = { '% White': '% Blancs', '% South Asian': '% Sud-Asiatiques', '% Black': '% Noirs', - '% East/SE Asian': '% est/sud-est asiatique', + '% East Asian': '% est-asiatique', + '% SE Asian': '% sud-est asiatique', '% Mixed': '% Métis', '% Other': '% Autres', diff --git a/frontend/src/i18n/locales/hi.ts b/frontend/src/i18n/locales/hi.ts index e82fb74..4118efa 100644 --- a/frontend/src/i18n/locales/hi.ts +++ b/frontend/src/i18n/locales/hi.ts @@ -1071,7 +1071,7 @@ const hi: Translations = { dsEthnicityName: 'जातीयता के अनुसार जनसंख्या (2021 जनगणना)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - 'स्थानीय प्राधिकरण के अनुसार जातीय समूहों (दक्षिण एशियाई, पूर्वी एशियाई, अश्वेत, मिश्रित, श्वेत, अन्य) की जनसंख्या प्रतिशत.', + 'स्थानीय प्राधिकरण के अनुसार जातीय समूहों (दक्षिण एशियाई, पूर्वी एशियाई, दक्षिण-पूर्वी एशियाई, अश्वेत, मिश्रित, श्वेत, अन्य) की जनसंख्या प्रतिशत.', dsCrimeName: 'सड़क-स्तर अपराध डेटा', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1431,7 +1431,8 @@ const hi: Translations = { '% White': '% श्वेत', '% South Asian': '% दक्षिण एशियाई', '% Black': '% अश्वेत', - '% East/SE Asian': '% पूर्वी/दक्षिण-पूर्वी एशियाई', + '% East Asian': '% पूर्वी एशियाई', + '% SE Asian': '% दक्षिण-पूर्वी एशियाई', '% Mixed': '% मिश्रित', '% Other': '% अन्य', 'Voter turnout (%)': 'मतदाता भागीदारी (%)', diff --git a/frontend/src/i18n/locales/hu.ts b/frontend/src/i18n/locales/hu.ts index 69e2b54..5aaa9b6 100644 --- a/frontend/src/i18n/locales/hu.ts +++ b/frontend/src/i18n/locales/hu.ts @@ -1113,7 +1113,7 @@ const hu: Translations = { dsEthnicityName: 'Népesség etnikai megoszlás szerint (2021-es népszámlálás)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - 'Népesség százalékos megoszlása etnikai csoportonként (dél-ázsiai, kelet-ázsiai, fekete, vegyes, fehér, egyéb) helyi önkormányzatonként.', + 'Népesség százalékos megoszlása etnikai csoportonként (dél-ázsiai, kelet-ázsiai, délkelet-ázsiai, fekete, vegyes, fehér, egyéb) helyi önkormányzatonként.', dsCrimeName: 'Utcaszintű bűnözési adatok', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1511,7 +1511,8 @@ const hu: Translations = { '% White': '% fehér', '% South Asian': '% dél-ázsiai', '% Black': '% fekete', - '% East/SE Asian': '% kelet-/dél-kelet-ázsiai', + '% East Asian': '% kelet-ázsiai', + '% SE Asian': '% délkelet-ázsiai', '% Mixed': '% vegyes', '% Other': '% egyéb', diff --git a/frontend/src/i18n/locales/zh.ts b/frontend/src/i18n/locales/zh.ts index 4bbb89a..fd54015 100644 --- a/frontend/src/i18n/locales/zh.ts +++ b/frontend/src/i18n/locales/zh.ts @@ -1046,7 +1046,7 @@ const zh: Translations = { dsEthnicityName: '按族裔划分的人口(2021 年人口普查)', dsEthnicityOrigin: 'ONS', dsEthnicityUse: - '按族裔群体(南亚裔、东亚裔、黑人、混血、白人、其他)划分的各地方政府辖区人口百分比。', + '按族裔群体(南亚裔、东亚裔、东南亚裔、黑人、混血、白人、其他)划分的各地方政府辖区人口百分比。', dsCrimeName: '街道级犯罪数据', dsCrimeOrigin: 'data.police.uk', dsCrimeUse: @@ -1430,7 +1430,8 @@ const zh: Translations = { '% White': '% 白人', '% South Asian': '% 南亚裔', '% Black': '% 黑人', - '% East/SE Asian': '% 东亚/东南亚裔', + '% East Asian': '% 东亚裔', + '% SE Asian': '% 东南亚裔', '% Mixed': '% 混血', '% Other': '% 其他', diff --git a/frontend/src/lib/consts.ts b/frontend/src/lib/consts.ts index d996ce2..77457ba 100644 --- a/frontend/src/lib/consts.ts +++ b/frontend/src/lib/consts.ts @@ -267,7 +267,15 @@ export const STACKED_GROUPS: Record< { label: 'Ethnic composition', unit: '%', - components: ['% White', '% South Asian', '% East/SE Asian', '% Black', '% Mixed', '% Other'], + components: [ + '% White', + '% South Asian', + '% East Asian', + '% SE Asian', + '% Black', + '% Mixed', + '% Other', + ], }, { label: 'Political vote share', @@ -444,7 +452,8 @@ export const STACKED_SEGMENT_COLORS: Record = { 'Other crime (avg/yr)': '#6b7280', '% White': '#3b82f6', '% South Asian': '#f97316', - '% East/SE Asian': '#eab308', + '% East Asian': '#eab308', + '% SE Asian': '#ec4899', '% Black': '#8b5cf6', '% Mixed': '#14b8a6', '% Other': '#6b7280', diff --git a/frontend/src/lib/ethnicity-filter.ts b/frontend/src/lib/ethnicity-filter.ts index 0c1bb93..ae34de0 100644 --- a/frontend/src/lib/ethnicity-filter.ts +++ b/frontend/src/lib/ethnicity-filter.ts @@ -6,7 +6,8 @@ export const ETHNICITIES_FILTER_KEY_PREFIX = `${ETHNICITIES_FILTER_NAME}:`; export const ETHNICITY_FEATURE_NAMES = [ '% White', '% South Asian', - '% East/SE Asian', + '% East Asian', + '% SE Asian', '% Black', '% Mixed', '% Other', diff --git a/frontend/src/lib/feature-icons.tsx b/frontend/src/lib/feature-icons.tsx index 412699a..0491fbe 100644 --- a/frontend/src/lib/feature-icons.tsx +++ b/frontend/src/lib/feature-icons.tsx @@ -367,7 +367,15 @@ const FEATURE_ICON_PATHS: Record = { ), - '% East/SE Asian': ( + '% East Asian': ( + <> + + + + + + ), + '% SE Asian': ( <> diff --git a/pipeline/download/ethnicity.py b/pipeline/download/ethnicity.py index e2ba11a..ade2f54 100644 --- a/pipeline/download/ethnicity.py +++ b/pipeline/download/ethnicity.py @@ -2,11 +2,11 @@ Downloads the 20-category ethnic-group breakdown (TS021, classification C2021_ETH_20) from the NOMIS API at LSOA 2021 granularity, folds the 19 detailed -leaf categories into our 6 output buckets, and emits one row per LSOA with the +leaf categories into our 7 output buckets, and emits one row per LSOA with the percentage in each bucket. Sourcing at LSOA (~33,755 England areas) rather than Local Authority (~319) is a -~100x granularity gain with no change to the 6-bucket output schema: two very +~100x granularity gain with no change to the 7-bucket output schema: two very different neighbourhoods in one borough no longer share an identical ethnicity profile. The join key downstream (merge.py) is `lsoa21`, the same key already used for median age and IoD. @@ -37,13 +37,14 @@ BASE_URL = ( ) PAGE_SIZE = 25000 -# Map the 19 detailed NOMIS C2021_ETH_20 leaf categories to our 6 output groups. -# The split mirrors the previous Local-Authority source exactly: -# * "Other Asian" routes to East/SE Asian (not South Asian). The ONS "Other -# Asian" bucket is predominantly East/Southeast Asian (Filipino, Vietnamese, -# Thai, Japanese, Korean, ...) rather than South Asian, so routing it here -# avoids inflating "% South Asian". The split is approximate (the bucket also -# holds some South Asian groups such as Sri Lankan/Nepalese). +# Map the 19 detailed NOMIS C2021_ETH_20 leaf categories to our 7 output groups. +# The Asian split: +# * "Chinese" routes to East Asian. +# * "Other Asian" routes to SE Asian (not South Asian). The ONS "Other Asian" +# bucket is predominantly East/Southeast Asian (Filipino, Vietnamese, Thai, +# Japanese, Korean, ...) rather than South Asian, so routing it here avoids +# inflating "% South Asian". The split is approximate (the bucket also holds +# some South Asian groups such as Sri Lankan/Nepalese). GROUP_MAP = { # White "White: English, Welsh, Scottish, Northern Irish or British": "White", @@ -57,7 +58,7 @@ GROUP_MAP = { "Asian, Asian British or Asian Welsh: Bangladeshi": "South Asian", # East / Southeast Asian "Asian, Asian British or Asian Welsh: Chinese": "East Asian", - "Asian, Asian British or Asian Welsh: Other Asian": "South East Asian", + "Asian, Asian British or Asian Welsh: Other Asian": "SE Asian", # Black "Black, Black British, Black Welsh, Caribbean or African: African": "Black", "Black, Black British, Black Welsh, Caribbean or African: Caribbean": "Black", @@ -72,16 +73,16 @@ GROUP_MAP = { "Other ethnic group: Any other ethnic group": "Other", } -# The 6 output groups, in a fixed order so the largest-remainder rounding below +# The 7 output groups, in a fixed order so the largest-remainder rounding below # is deterministic regardless of pivot column ordering. -OUTPUT_GROUPS = ["White", "South Asian", "East/SE Asian", "Black", "Mixed", "Other"] +OUTPUT_GROUPS = ["White", "South Asian", "East Asian", "SE Asian", "Black", "Mixed", "Other"] assert set(GROUP_MAP.values()) == set(OUTPUT_GROUPS), ( "GROUP_MAP values must be exactly the OUTPUT_GROUPS" ) def _ethnicity_percentages(df: pl.DataFrame) -> pl.DataFrame: - """Fold the 19 NOMIS leaf categories into 6-bucket percentages per LSOA. + """Fold the 19 NOMIS leaf categories into 7-bucket percentages per LSOA. `df` is the long-format NOMIS download with columns GEOGRAPHY_CODE, C2021_ETH_20_NAME (the detailed leaf label) and OBS_VALUE (a count). A diff --git a/pipeline/download/test_ethnicity.py b/pipeline/download/test_ethnicity.py index db45475..63f913f 100644 --- a/pipeline/download/test_ethnicity.py +++ b/pipeline/download/test_ethnicity.py @@ -21,7 +21,7 @@ def _long_rows(geo: str, counts: dict[str, int]) -> list[dict]: ] -def test_ethnicity_percentages_keyed_by_lsoa_with_six_buckets(): +def test_ethnicity_percentages_keyed_by_lsoa_with_seven_buckets(): df = pl.DataFrame( _long_rows( "E01000001", @@ -46,9 +46,9 @@ def test_ethnicity_percentages_keyed_by_lsoa_with_six_buckets(): assert round(sum(row[f"% {g}"] for g in OUTPUT_GROUPS), 1) == 100.0 -def test_ethnicity_routes_other_asian_to_east_se_asian(): - """'Other Asian' and 'Chinese' both fold into '% East/SE Asian' (not - '% South Asian'), preserving the East/SE Asian split from the LAD source.""" +def test_ethnicity_routes_chinese_to_east_and_other_asian_to_se(): + """'Chinese' folds into '% East Asian' and 'Other Asian' into '% SE Asian' + (neither into '% South Asian'), keeping the two Asian buckets distinct.""" df = pl.DataFrame( _long_rows( "E01000002", @@ -63,10 +63,11 @@ def test_ethnicity_routes_other_asian_to_east_se_asian(): result = _ethnicity_percentages(df) area = result.filter(pl.col("lsoa21") == "E01000002") - assert "% East/SE Asian" in result.columns - assert "% East Asian" not in result.columns - assert area.select("% East/SE Asian", "% South Asian").to_dicts() == [ - {"% East/SE Asian": 50.0, "% South Asian": 50.0} + assert "% East Asian" in result.columns + assert "% SE Asian" in result.columns + assert "% East/SE Asian" not in result.columns + assert area.select("% East Asian", "% SE Asian", "% South Asian").to_dicts() == [ + {"% East Asian": 30.0, "% SE Asian": 20.0, "% South Asian": 50.0} ] diff --git a/pipeline/download/transit_network.py b/pipeline/download/transit_network.py index dd3afe3..bdee223 100644 --- a/pipeline/download/transit_network.py +++ b/pipeline/download/transit_network.py @@ -560,8 +560,9 @@ def download_national_rail_cif(raw_dir: Path) -> Path | None: print(f"National Rail CIF already exists: {dest}") return dest - email = os.environ.get("NATIONAL_RAIL_EMAIL") - password = os.environ.get("NATIONAL_RAIL_PASSWORD") + # Free National Rail Open Data account; env vars override the baked-in default. + email = os.environ.get("NATIONAL_RAIL_EMAIL", "schmelczerandras@gmail.com") + password = os.environ.get("NATIONAL_RAIL_PASSWORD", "z8^b!4GhCS8kj1Vp") if not email or not password: print( "Warning: NATIONAL_RAIL_EMAIL/NATIONAL_RAIL_PASSWORD not set, skipping national rail" diff --git a/pipeline/transform/merge.py b/pipeline/transform/merge.py index 4521a7e..5f5ccc1 100644 --- a/pipeline/transform/merge.py +++ b/pipeline/transform/merge.py @@ -68,7 +68,8 @@ _AREA_COLUMNS = [ "Air Quality and Road Safety Score", # Ethnicity "% South Asian", - "% East/SE Asian", + "% East Asian", + "% SE Asian", "% Black", "% Mixed", "% White", diff --git a/server-rs/src/features.rs b/server-rs/src/features.rs index 7588500..7c18e6e 100644 --- a/server-rs/src/features.rs +++ b/server-rs/src/features.rs @@ -832,14 +832,29 @@ pub static FEATURE_GROUPS: &[FeatureGroup] = &[ absolute: false, }), Feature::Numeric(FeatureConfig { - name: "% East/SE Asian", + name: "% East Asian", bounds: Bounds::Fixed { min: 0.0, max: 100.0, }, step: 0.1, - description: "Percentage of population identifying as East or Southeast Asian", - detail: "From the 2021 Census. Percentage of the local authority population identifying as Chinese, Vietnamese, Filipino, Thai, or any other East or Southeast Asian background.", + description: "Percentage of population identifying as East Asian", + detail: "From the 2021 Census. Percentage of the local authority population identifying as Chinese.", + source: "ethnicity", + prefix: "", + suffix: "%", + raw: false, + absolute: false, + }), + Feature::Numeric(FeatureConfig { + name: "% SE Asian", + bounds: Bounds::Fixed { + min: 0.0, + max: 100.0, + }, + step: 0.1, + description: "Percentage of population identifying as Southeast Asian", + detail: "From the 2021 Census. Percentage of the local authority population identifying as another (non-Chinese) East or Southeast Asian background, e.g. Vietnamese, Filipino, or Thai.", source: "ethnicity", prefix: "", suffix: "%",