BonQuery
  • Home
  • Left in the Cold
  • Audits
    • INDEPENDENT OVERSIGHT
    • Discrepancy Tracker
    • Emergency Occupancy Audit
    • Central Intake Audit
    • About the Data
  • Shelter Dashboards
    • Inside Toronto’s Shelter System
    • Monthly System Flow Replication
    • Year-to-Date Capacity Match
    • Historical Trend Lines
    • Referral Requests Analysis
    • Daily Occupancy & Capacity
  • About
  • Accueil
  • Laissés dans le froid
  • Audits
    • SURVEILLANCE INDÉPENDANTE
    • Suivi des divergences
    • Audit de l’occupation d’urgence
    • Audit de l’admission centrale
    • À propos des données
  • Tableaux de bord
    • Le réseau de refuges de Toronto
    • Réplication du flux mensuel
    • Concordance année en cours
    • Tendances historiques
    • Analyse des demandes d’orientation
    • Occupation et capacité quotidiennes
  • À propos
  • FR
  • EN

Comparaison annuelle cumulative

Réseau de refuges de Toronto — tendances cumulatives de l’année en cours

Comparaison annuelle cumulative du réseau de refuges de Toronto — vérifiez si l’année en cours suit un rythme supérieur ou inférieur aux années précédentes pour les catégories d’entrées et de sorties : nouvellement repérés et accès au logement permanent.

Auteur(-trice)

Miriam Marling

data = FileAttachment("../data/shelter_flow.json").json()
MON = ["janv.","févr.","mars","avr.","mai","juin",
       "juill.","août","sept.","oct.","nov.","déc."]
fmtN = d => d.toLocaleString("fr-CA")

reportingMonthOptions = data
  .filter(d => d.population_group === "All Population")
  .sort((a, b) => b.flow_date.localeCompare(a.flow_date))
  .map(d => {
    const [y, m] = d.flow_date.split("-").map(Number)
    return {
      label: new Date(y, m - 1, 15).toLocaleString("fr-CA", {month: "long", year: "numeric"}),
      value: d.flow_date
    }
  })
viewof reportingDate = Inputs.select(reportingMonthOptions, {
  label: "Mois de référence",
  format: d => d.label,
  value: reportingMonthOptions[0]
})
reportingYear  = +reportingDate.value.slice(0, 4)
reportingMonth = +reportingDate.value.slice(5, 7)

ytdComputed = {
  const rows = data
    .filter(d => d.population_group === "All Population")
    .filter(d => {
      const y = +d.flow_date.slice(0, 4)
      const m = +d.flow_date.slice(5, 7)
      return (y === reportingYear || y === reportingYear - 1) && m <= reportingMonth
    })
    .sort((a, b) => a.flow_date.localeCompare(b.flow_date))

  const accNI = {}, accMH = {}
  return rows.map(d => {
    const y = +d.flow_date.slice(0, 4)
    const m = +d.flow_date.slice(5, 7)
    accNI[y] = (accNI[y] || 0) + d.newly_identified
    accMH[y] = (accMH[y] || 0) + d.moved_to_housing
    return {
      year: y, month: m,
      monthLabel: MON[m - 1],
      yearLabel: String(y),
      isCurrentYear: y === reportingYear,
      ytd_ni: accNI[y],
      ytd_mh: accMH[y]
    }
  })
}

ytdSorted = ytdComputed
  .sort((a, b) => a.month - b.month || a.year - b.year)
  .map(d => ({...d, barLabel: `${d.monthLabel} ${d.yearLabel}`}))

ytdDomain = ytdSorted.map(d => d.barLabel)

Comparaison cumulative annuelle : Nouvellement repérés

Plot.plot({
  width,
  height: 60 + ytdSorted.length * 22,
  marginLeft: 100,
  marginRight: 80,
  x: {label: "Nouvellement repérés cumulatifs (ann. cours)", grid: true, tickFormat: fmtN},
  y: {label: null, domain: ytdDomain},
  color: {
    domain: [String(reportingYear - 1), String(reportingYear)],
    range: ["#FFB3C1", "#FF2D55"],
    legend: true
  },
  marks: [
    Plot.ruleX([0]),
    Plot.barX(ytdSorted, {x: "ytd_ni", y: "barLabel", fill: "yearLabel", tip: true,
                          insetTop: 1, insetBottom: 1}),
    Plot.text(ytdSorted, {
      x: "ytd_ni", y: "barLabel",
      text: d => d.ytd_ni.toLocaleString("fr-CA"),
      textAnchor: "start", dx: 5, fontSize: 11
    })
  ]
})

Comparaison cumulative annuelle : Accès au logement permanent

Plot.plot({
  width,
  height: 60 + ytdSorted.length * 22,
  marginLeft: 100,
  marginRight: 80,
  x: {label: "Accès au logement permanent cumulatif (ann. cours)", grid: true, tickFormat: fmtN},
  y: {label: null, domain: ytdDomain},
  color: {
    domain: [String(reportingYear - 1), String(reportingYear)],
    range: ["#AED5AE", "#5BA75B"],
    legend: true
  },
  marks: [
    Plot.ruleX([0]),
    Plot.barX(ytdSorted, {x: "ytd_mh", y: "barLabel", fill: "yearLabel", tip: true,
                          insetTop: 1, insetBottom: 1}),
    Plot.text(ytdSorted, {
      x: "ytd_mh", y: "barLabel",
      text: d => d.ytd_mh.toLocaleString("fr-CA"),
      textAnchor: "start", dx: 5, fontSize: 11
    })
  ]
})

Consulter les autres tableaux de bord :

  • Tendances historiques
  • Portrait mensuel

Ce tableau de bord est également disponible en tant que tableau de bord Oracle APEX reposant sur la même base de données — utile pour voir comment les mêmes données s’affichent dans la plateforme native à faible code d’Oracle, ou pour explorer le SQL et la configuration APEX sous-jacents.

Définitions clés

Catégories d’entrées (personnes intégrant le réseau de refuges ce mois-ci) :

  • Nouvellement repérés. Personnes entrant dans le réseau de refuges pour la première fois. Exception pour le groupe « Chronique » : dans ce cas, cette colonne comptabilise les personnes devenues en situation d’itinérance chronique au cours du mois de référence, quelle que soit la durée de leur utilisation antérieure du réseau.

Catégories de sorties (personnes quittant le réseau de refuges ce mois-ci) :

  • Accès au logement permanent. Personnes ayant quitté le réseau de refuges pour un logement permanent.

Définitions basées sur la page Données sur les flux du réseau de refuges de la Ville de Toronto.

Lire toutes les conclusions →

Source des données

Toutes les données proviennent du jeu de données Flux du réseau de refuges de Toronto de la Ville de Toronto, publié mensuellement sur le portail de données ouvertes de la Ville.

Contient des informations sous licence Licence du gouvernement ouvert – Toronto.

 

Un audit de données indépendant pour les résidents de Toronto. / An independent data audit for Toronto residents.
© 2026 Miriam Marling · BonQuery