share of population under 18 years old with foreign background or non-Belgian citizenship in the Brussels-Capital Region

Model: DeepSeek V4.1 Flash Checked on:

Brussels-Capital Region (BE10) — young population by citizenship / origin

Using Eurostat's 2021 Census tables for the Brussels-Capital Region (NUTS‑2 = BE10)12, complemented by the single‑year age totals3:

Total population 2021: 1,226,329, of which 277,043 are under 18.

Age group Total Non-Belgian citizenship Foreign-born (proxy for foreign background)
0–4 80,361 23.1% 6.4%
5–9 79,938 29.7% 15.3%
10–14 75,739 26.5% 21.4%
Under 15 236,038 26.4% 14.2%
15–19 68,256 26.9% 27.6%
All ages 1,226,329 35.0% 46.4%

Answer:

A comparison chart was produced in 4 (brussels_young_origin.svg).

Caveats: The regional census tables do not publish an exact "under‑18" breakdown by citizenship/origin, so the under‑18 citizenship figure is an estimate (the two adjacent published bands, under‑15 and 15–19, both sit near 26.5%, so the estimate is robust). The OECD's "Population by citizenship – Cities and FUAs" dataset would contain an exact under‑18 citizenship/origin breakdown for Brussels, but its dataflow was unavailable (persistent server‑side error), so it could not be used.

  1. Eurostat dataset: Population by groups of country of citizenship, age groups, groups of current activity status and NUTS 2 region
  2. Eurostat dataset: Population by groups of country of birth, age groups, groups of current activity status and NUTS 2 region
  3. Eurostat dataset: Population by age and NUTS 2 region
  4. Dataset: cens_21ctza_r2 Dataset: cens_21coba_r2 Dataset: cens_21agr2

    Images

    brussels_young_origin.svg

    Dataset filters for cens_21ctza_r2

    FilterValue(s)
    geoBE10
    sexT
    wstatusTOTAL

    Dataset filters for cens_21coba_r2

    FilterValue(s)
    geoBE10
    sexT
    wstatusTOTAL

    Dataset filters for cens_21agr2

    FilterValue(s)
    geoBE10
    sexT

    Program output

    Under-15 total: 236038
    Age 15,16,17: 13969 13728 13308
    Under-18 total: 277043
    Total pop: 1226329
    
     Age group  Total pop  Non-Belgian citizenship %  Foreign-born %
          0-4      80361                       23.1             6.4
          5-9      79938                       29.7            15.3
        10-14      75739                       26.5            21.4
          <15     236038                       26.4            14.2
        15-19      68256                       26.9            27.6
     All ages    1226329                       35.0            46.4
    
    Estimated under-18 non-Belgian citizenship: 26.5% (73363 / 277043)
    Estimated under-18 foreign-born:            16.2% (44932 / 277043)
    
    saved chart
    

    Code

    
    import pandas as pd, numpy as np
    import matplotlib; matplotlib.use('Agg')
    import matplotlib.pyplot as plt
    
    cit = pd.read_csv(DATASET_FILES[0], low_memory=False)   # citizenship (18)
    cob = pd.read_csv(DATASET_FILES[1], low_memory=False)   # country of birth (8)
    pop = pd.read_csv(DATASET_FILES[2], low_memory=False)   # single-year age (60)
    
    # --- under-18 total from single-year ages ---
    s = pop.set_index('age')['value']
    lt15 = s['Y_LT15']
    y15,y16,y17 = s['Y15'], s['Y16'], s['Y17']
    u18 = lt15 + y15 + y16 + y17
    print("Under-15 total:", lt15)
    print("Age 15,16,17:", y15, y16, y17)
    print("Under-18 total:", u18)
    print("Total pop:", s['TOTAL'])
    
    # --- citizenship shares ---
    cp = cit.pivot_table(index='age', columns='citizen', values='value', aggfunc='sum')
    bp = cob.pivot_table(index='age', columns='c_birth', values='value', aggfunc='sum')
    
    def sh(p, col, age):
        return p.loc[age, col]/p.loc[age,'TOTAL']*100
    
    rows = []
    for age,lab in [('Y_LT5','0-4'),('Y5-9','5-9'),('Y10-14','10-14'),('Y_LT15','<15'),('Y15-19','15-19'),('TOTAL','All ages')]:
        rows.append([lab, cp.loc[age,'TOTAL'], sh(cp,'FOR',age), sh(bp,'FOR',age)])
    tab = pd.DataFrame(rows, columns=['Age group','Total pop','Non-Belgian citizenship %','Foreign-born %'])
    print("\n", tab.round(1).to_string(index=False))
    
    # --- estimated under-18 (assume 15-17 behave like 15-19) ---
    rate_cit_15_19 = sh(cp,'FOR','Y15-19')/100
    rate_fb_15_19  = sh(bp,'FOR','Y15-19')/100
    est_cit = cp.loc['Y_LT15','FOR'] + rate_cit_15_19*(y15+y16+y17)
    est_fb  = bp.loc['Y_LT15','FOR'] + rate_fb_15_19*(y15+y16+y17)
    print("\nEstimated under-18 non-Belgian citizenship: %.1f%% (%d / %d)" % (est_cit/u18*100, est_cit, u18))
    print("Estimated under-18 foreign-born:            %.1f%% (%d / %d)" % (est_fb/u18*100, est_fb, u18))
    
    # --- chart ---
    ages=['Y_LT5','Y5-9','Y10-14','Y15-19']; labels=['0-4','5-9','10-14','15-19']
    x=np.arange(len(ages)); w=0.38
    fig,ax=plt.subplots(figsize=(9,5))
    ax.bar(x-w/2,[sh(cp,'FOR',a) for a in ages],w,label='Non-Belgian citizenship',color='#c0392b')
    ax.bar(x+w/2,[sh(bp,'FOR',a) for a in ages],w,label='Foreign-born (partial proxy for foreign background)',color='#2980b9')
    ax.set_xticks(x); ax.set_xticklabels(labels); ax.set_ylim(0,35)
    ax.set_xlabel('Age group'); ax.set_ylabel('% of age group')
    ax.set_title('Brussels-Capital Region (BE10), Census 2021\nYoung population with non-Belgian citizenship vs. foreign-born')
    ax.legend(); ax.grid(axis='y',alpha=.3)
    for i,a in enumerate(ages):
        ax.text(i-w/2, sh(cp,'FOR',a)+0.5, f"{sh(cp,'FOR',a):.1f}", ha='center', fontsize=8)
        ax.text(i+w/2, sh(bp,'FOR',a)+0.5, f"{sh(bp,'FOR',a):.1f}", ha='center', fontsize=8)
    plt.tight_layout(); plt.savefig('brussels_young_origin.svg'); print("\nsaved chart")