This is a live demo, built on made-up or public data. All demos

AP Exam Performance

How many students take Advanced Placement exams at each school, and how many pass.

rcd_ap
Rows
6,308
Schools & agencies
793
Years covered
2013–14 to 2023–24
Values suppressed
7.2%
by the state's privacy rules
Clear

This is exactly how the state publishes it — raw column names, raw codes.

Decode this table
id agency_code category_code part_mask_code pass_mask_code pct_ap_participation pct_ap_pass year
5726 00A000 A 0.9 2024
5727 010303 H 0.5 0.7 2024
5728 010324 H 0.1 0.6 2024
5729 010348 H 0.1 0.4 2024
5730 010360 H 0.2 2024
5731 010388 H 0.1 0.6 2024
5732 010396 H 0.2 0.5 2024
5733 010400 H 0.2 0.6 2024
5734 010410 H 0.2 0.5 2024
5735 010450 A 3.0 3.0 2024
5736 010LEA 0.1 0.6 2024
5737 01B000 A 0.3 0.7 2024
5738 01C000 A 0.2 0.7 2024
5739 01D000 A 0.2 0.8 2024
5740 020302 H 0.1 0.8 2024
5741 020LEA 0.1 0.8 2024
5742 030304 H 3.0 3.0 2024
5743 030LEA 3.0 3.0 2024
5744 040304 H 0.1 0.4 2024
5745 040306 H 2.0 0.1 0.1 2024
5746 040LEA 0.1 0.2 2024
5747 050302 H 0.1 0.6 2024
5748 050LEA 0.1 0.6 2024
5749 060302 H 0.1 0.6 2024
5750 060LEA 0.1 0.6 2024
5751 070339 H 0.1 0.3 2024
5752 070342 H 0.1 0.3 2024
5753 070LEA 0.1 0.3 2024
5754 080312 H 0.1 0.1 2024
5755 080LEA 0.1 2024
5756 090368 H 3.0 3.0 2024
5757 090LEA 3.0 3.0 2024
5758 100326 H 0.1 0.5 2024
5759 100334 H 0.1 0.8 2024
5760 100348 H 0.1 0.7 2024
5761 100LEA 0.1 0.6 2024
5762 110304 H 0.2 0.7 2024
5763 110336 H 0.2 0.7 2024
5764 110340 H 0.1 0.4 2024
5765 110352 H 0.1 0.6 2024
5766 110380 H 0.2 0.7 2024
5767 110416 H 0.1 0.7 2024
5768 110475 A 3.0 3.0 2024
5769 110500 H 0.4 0.9 2024
5770 110LEA 0.2 0.7 2024
5771 111302 H 0.3 0.7 2024
5772 111700 H 0.3 0.8 2024
5773 111LEA 0.3 0.7 2024
5774 11C000 A 0.2 0.7 2024
5775 11D000 T 0.3 0.6 2024
Column dictionary — the state's own definitions
Shown as State's column Data type State's description Codes
agency_code key agency_code VARCHAR(6) 010303/010LEA/NC-SEA
category_code category_code VARCHAR(1) Grade span category code
6 codes
  • A → Elementary, Middle, High School
  • E → Elementary
  • H → High School
  • I → Elementary, Middle school
  • M → Middle School
  • T → Middle, High School
part_mask_code part_mask_code NUMERIC(4,1) Masking Code for participation
4 codes
  • 1 → >95%
  • 2 → <5%
  • 3 → <10 in denominator
  • 4 → Insufficient Data (per business area, specific alternate minimum denominator, there is not enough data to provide a meaningful answer - additional set of masking rules on a case by case basis)
pass_mask_code pass_mask_code NUMERIC(4,1) Masking Code for passing
4 codes
  • 1 → >95%
  • 2 → <5%
  • 3 → <10 in denominator
  • 4 → Insufficient Data (per business area, specific alternate minimum denominator, there is not enough data to provide a meaningful answer - additional set of masking rules on a case by case basis)
pct_ap_participation pct_ap_participation NUMERIC(4,1) Percentage of AP Exam participation rate
pct_ap_pass pct_ap_pass NUMERIC(4,1) Percentage of AP Exam scores of 3 or above
year key year VARCHAR(4) YYYY (i.e. 2006 for the 2005/06 school year)
About this table

State's description: AP score percentages and participation rates

Listed in the state's table index as rcd_ap (active, 2014)

6,308 rows loaded, covering 793 schools and agencies, 2013–14 to 2023–24.

How this table got here
  1. The state publishes an Excel data dictionary. This demo reads it: 66 table definitions, 525 column definitions, and 181 code definitions — the same ones behind the Decoded view above.
  2. From those definitions it writes a Django database model for each table, so nobody has to type the columns in by hand. This table's model came out like this:
class RcdAp(SRCBaseModel):
    agency_code = models.CharField(max_length=6)
    category_code = models.CharField(
        max_length=31,
        null=True,
        blank=True,
        choices=[
            ("E", "Elementary"),
            ("M", "Middle School"),
            ("H", "High School"),
            ("A", "Elementary, Middle, High School"),
            ("T", "Middle, High School"),
            ("I", "Elementary, Middle school"),
        ],
    )
    part_mask_code = models.DecimalField(max_digits=4, decimal_places=1, null=True, blank=True)
    pass_mask_code = models.DecimalField(max_digits=4, decimal_places=1, null=True, blank=True)
    pct_ap_participation = models.DecimalField(max_digits=4, decimal_places=1, null=True, blank=True)
    pct_ap_pass = models.DecimalField(max_digits=4, decimal_places=1, null=True, blank=True)
    year = models.CharField(max_length=4)

    class Meta:
        db_table = "rcd_ap"
        managed = True
        unique_together = ("year", "agency_code")
  1. 6,308 rows were then loaded from the state's raw data files into RcdAp.
  2. It also takes a fingerprint (SHA-256) of the dictionary's general-rules sheet. If the state quietly rewrites its rules document, the next rebuild flags the change instead of absorbing it silently.
Want something like this for your program? Schedule a conversation or email matt@mattniksch.com.