KANSAS AND MISSOURI SCHOOL DISTRICT OUTCOMES VS. FUNDING ADEQUACY
Interactive bubble chart widget package
==========================================================

CONTENTS
--------
index.html
    The standalone, self-contained interactive widget. Opens directly
    in any browser -- no server or install required. Chart data is
    embedded inline inside this file, so it works fully offline once
    downloaded (it does load Chart.js from a CDN via <script src>, so
    an internet connection is needed for that one external file).

    Features:
      - Year slider, 2009-2024, with a play button to animate through
        years
      - State toggle: "Both" / "Kansas" / "Missouri" -- filters which
        districts are plotted without reloading any data
      - Standard toggle: "Average" / "Higher (vs. MA average)" --
        switches BOTH axes together. "Average" uses % Adequacy =
        ppcstot / sim_cost_1_bd on the x-axis and the raw outcome
        index on the y-axis. "Higher" uses % Adequacy = ppcstot /
        sim_cost_2_bd on the x-axis and each district's outcome
        index minus that year's Massachusetts average outcome index
        on the y-axis (see METHODOLOGY below). Composes freely with
        the state toggle and year slider -- e.g. Kansas-only
        districts under the higher standard for 2015.
      - Search box and click-to-select highlighting -- each selected
        district gets its own color from a 10-color palette, matched
        to a colored dot on its chip
      - Bubble size = enrollment

data/ks_mo_district_data.csv
    Human-readable version of the underlying data, one row per
    district-year:
        district_name                    - KS or MO school district
        state                              - "KS" or "MO"
        year                               - 2009-2024
        pct_adequacy_avg                   - ppcstot / sim_cost_1_bd
                                              * 100 (Average standard),
                                              rounded to the nearest
                                              whole percent
        pct_adequacy_high                  - ppcstot / sim_cost_2_bd
                                              * 100 (Higher standard),
                                              rounded to the nearest
                                              whole percent
        outcome_index                      - SEDA-based outcome
                                              index, rounded to 2
                                              decimal places (used by
                                              the Average standard)
        outcome_distance_to_ma_avg         - outcome_index minus that
                                              year's Massachusetts
                                              average outcome index,
                                              rounded to 2 decimal
                                              places (used by the
                                              Higher standard)
        enrollment                         - district enrollment

data/ks_mo_district_data.json
    The same data in the compact array format actually embedded in
    index.html's <script> tag:
        [ [district_name, state, [[year_offset, pct_adequacy_avg, pct_adequacy_high, outcome_index_x100, outcome_distance_to_ma_avg_x100, enrollment], ...]], ... ]
    year_offset is years since 2009 (0 = 2009, 15 = 2024); both
    outcome fields are *100 (integers) -- divide by 100 to get the
    real values. Provided in case you want to inspect, re-use, or
    re-embed the exact dataset elsewhere.

METHODOLOGY NOTES
------------------
- This uses the same national NECM/SEDA source file as the other
  widgets in this series.
- Average standard: x-axis % Adequacy = ppcstot / sim_cost_1_bd (the
  cost of achieving average outcomes); y-axis = the raw outcome
  index.
- Higher standard: x-axis % Adequacy = ppcstot / sim_cost_2_bd (the
  cost of achieving a higher outcome standard -- sim_cost_2_bd is
  consistently about 50% higher than sim_cost_1_bd for every
  district-year in this file); y-axis = each district's outcome
  index minus that same year's unweighted Massachusetts average
  outcome index (an unweighted mean across roughly 230-240 MA
  districts per year, ranging from about 0.16 in 2022 to 0.49 in
  2013). Because MA's average moves year to year, a KS or MO
  district holding steady can still show a shifting distance-to-MA
  as the slider moves, even with no change of its own. This pairs
  the same higher cost basis used in the CA/NJ/KS toggle widgets
  with the same Massachusetts-benchmark approach used in the CT and
  CA-vs-Massachusetts widgets elsewhere in this series.
- The source file had the same blank-district-name pattern in 2014,
  2020, and 2021 seen in the CA/CT/NJ files. It was fixed the same
  way: districts are grouped by a stable ID (leaid) rather than by
  name text, with each district's display name taken from whichever
  year has a non-blank value.
- One name collision: two distinct Kansas districts are both named
  "Blue Valley" (different leaid values). The larger, well-known one
  (Blue Valley USD 229 in Johnson County, ~22,000 students) is
  disambiguated in the data as "Blue Valley (2012000)" using its
  leaid; the much smaller district (~250 students) keeps the plain
  name "Blue Valley".
- 707 districts are represented: 259 Kansas, 448 Missouri.

USAGE
-----
Just open index.html in a browser. To embed it on a website (e.g. as
an iframe), upload index.html somewhere with a public URL and point an
<iframe src="..."> at it -- the CSV/JSON files aren't required for the
widget to run; they're included here for reference and reuse.
