The site uses cookies that you may not want. Continued use means acceptance. For more information see our privacy policy.

Counting the 118th House of Representatives

Of 435 seats, the top three states populate over a quarter of the House.

Do we really know what’s in 118th House of Representatives? A panel of untrained scientists (i.e., me) have attempted to extract some key ingredients for analysis.

There are 222 members expected for Republicans, which you may think is mostly a southern party. In the 118th, it is exactly half-southern (using the Census regions). It is half-southern, a tenth north-eastern, a quarter mid-western, and about 16% western.

But even within the south, a plurality of it is concentrated in two states. Texas and Florida make up 40% of the southern conference. California accounts for 34% of the western bloc, while New York is half of the northeastern strain of the conference. The midwest stands out, in that no state really dominates. Ohio is closest, but it provides only 19% of that region’s Republican members.

Total members sent by region, for comparison:

  • Northeast sends 76 members (17%)
  • Midwest sends 91 members (21%)
  • South sends 164 members (38%)
  • West sends 104 members (24%)

But given the southern region includes more states, the per-state membership means are:

  • Northeast averages 8.4
  • Midwest averages 7.6
  • South averages 10.3 (not including the District of Columbia, which is allowed merely a delegate)
  • West averages 8.7

It’s interesting to realize that California Republicans are twice as many as Alabama Republicans in the House. Going the other way, in the 118th Texas (13) will send only one fewer Democrat than Illinois (14) (and New York will send 15).

California is the powerhouse for Democrats, sending 40 members, an almost four-to-one partisan ratio. Its the largest state, and its 52 members are almost 12% of the House.

On the other end, single-member states, the two parties split the six of them. Alaska, Delaware, and Vermont for Democrats; North Dakota, South Dakota, and Wyoming for Republicans. The two-member states are also single-party in membership. There are seven of them, and they favor the Democrats by one state. Idaho, Montana, and West Virginia are for Republicans; Hawaii, Maine, New Hampshire, and Rhode Island will seat Democrats. And the pair of three-member states are the same story again: Nebraska for Republicans, New Mexico for Democrats.

That’s already 15 states (30%) and 26 members (6%). That’s 14 seats for Democrats and 12 seats for Republicans.

It’s only when we get to four-member states that we see the first mixture in membership. While Arkansas, Iowa, and Utah all give their four seats to Republicans, Kansas and Mississippi each give one of them to Democrats, and Nevada gives one to Republicans. These 24 members and six states nearly match the previous batch in percent of members, though heavily tilted toward Republicans: 19 seats to five.

There are two five-member states, Connecticut and Oklahoma, and both are exclusive to one party (Democrats and Republicans, respectively) in the 118th. Kentucky and Louisiana both give five of their six to Republicans, while Oregon gives four of its six to Democrats.

Alabama and South Carolina both give six of their seven seats to Republicans. With 42 members, the five-member, six-member, and seven-member states, seven in all, are nearly 10% of the House, and they give Republicans 27 members but only 15 to the Democrats.

Colorado gives five of their eight seats to Democrats, while Maryland gives seven of theirs to the Democrats. Minnesota is the rare split state, giving four to each party. Missouri and Wisconsin each give six of their eight seats to Republicans. With 40 members, these five eight-member states again make a little under 10% of the House, but 24 of them are Republican seats.

Massachusetts has the distinction of being the largest single-party state, with all nine seats being Democratic. The other three nine-seaters are also imbalanced. Arizona gives six to Republicans, while Indiana and Tennessee give seven and eight, respectively. These four states with 36 seats account for 8% of the House and give 21 seats to Republicans.

After that come some larger states which lean toward Democrats. Washington gives eight of its ten to Democrats, and nine of New Jersey’s 12 seats are for Democrats. But Virginia and Michigan are both near-splits. Democrats get six of Virginia’s 11, and they get seven of Michigan’s 13 seats.

After you get past nine members, the next seat commonality is 14 for North Carolina and Georgia. Georgia leans more Republican, with nine of its seats for that conference, while North Carolina is the second and last split-state at seven apiece.

Together these six larger-but-not-huge states send 74 members, or 17% of the House, 42 of which are for Democrats.

Ohio yields two Republican seats for every Democratic one, with ten Republicans out of its 15 members. And the final commonality is at 17 seats for both Illinois and Pennsylvania. Illinois favors Democrats at 14 seats, while Pennsylvania is nearly split, with nine seats for Democrats.

Those three states provide 49 members to the House, about 11% of its capacity.

Finally, the other big three that aren’t California. New York is more purple than you might remember, giving only 15 of its 26 seats to Democrats. About 6% of the House hails from New York in the 118th.

But Florida is less purple than memory would have it. A full score of its 28 members are Republicans. Like New York, it fills about 6% of the House seats.

And Texas. The lone-star state, inexplicably, has the second most seats after California. Not so lone, there are 38 of them (close to 9% of the House), of which 25 are Republicans, practically two-to-one.


All told, there are only six mostly-balanced states (partisan percents in the 40s or 50s) out of 44 that could be balanced (i.e., six only have one seat in the House). They are Michigan, Minnesota, New York, North Carolina, Pennsylvania, and Virginia. Notably, they all have at least eight members (Minnesota being that one). Together they send 89 members, or 20% of the House, and they break slightly in favor of Democrats with 48 members (54% of their members).

Is that a coincidence? Are these all states of transition, on their way to more partisan slates? In some ways they are all in geographically transitional parts of the country, between the south and northeast, or the northeast and midwest.

On the other hand, the odds of smaller states to get in balance is lower, given fewer combinations making it within one or two seats of balance. Only 50% of configurations of a two-seater is balanced, and a three-seat state split 2-1 would still be rather unbalanced.

If the House were expanded significantly, we would likely see more states approach something closer to balance, and that would make the House healthier for all of us. But it would also require changes to rules and norms, and there’s been little sign of any real effort to increase the seat count.

As for partisan states, which I’ll define as having at least four seats and where two-thirds or more are for one party, there are 27 of them, out of 35 that have at least four members. (Colorado and Georgia are both partisan, but neither is quite two-thirds partisan in the 118th.) The partisan states send 293 members (67% of the House) and fill 157 Republican seats. Thus, about 54% of the partisan-state seats are Republican.

JSON Schemas and Making a Versatile Application.

Please excuse the big wad of JSON in the middle of the post.

Things have come a long way from the previous post (diehealthy.org: 27 October 2022: “Working on a Local Single Page Application.”) about working on a local file that provides a whole data tracking. While I originally wanted it to be used for games, I’d seen other JSON-schema-based stuff online and decided it could be fully schema driven. While it doesn’t yet edit its own schemas, that’s probably feasible in the long run (if not something I’ll necessarily do).

In order to further refine it toward that schema system, I forked it and made a version to track the movies I’ve watch. The post image is of that version, though they are currently at parity aside from the schema differences.

To give an idea what I mean by schema, here’s some excerpts from the film version:

{
    "name": "filmtracker",
    "defaults": {
        "filters": {
            "recorded": 1,
            "watched": 0
        }
    },
    "props": [
        {
            "name": "name",
            "title": "Name",
            "type": "string",
            "display": "headertext",
            "displaystyle": "italics",
            "sortOn": true,
            "req": true,
            "def": null
        },
        {
            "name": "recorddata",
            "title": "Record data",
            "type": "group",
            "props": [
                {
                    "name": "added",
                    "title": "Added",
                    "hidden": true,
                    "display": "fulldate",
                    "displayprefix": "Added on",
                    "type": "date",
                    "sortOn": true
                },
                {
                    "name": "modified",
                    "title": "Modified",
                    "hidden": true,
                    "display": "fulldate",
                    "displayprefix": "Updated on",
                    "type": "date",
                    "sortOn": true
                }
            ]
        },
        {
            "name": "watchdata",
            "title": "Watch info",
            "type": "group",
            "props": [
                {
                    "name": "recorded",
                    "title": "Recorded",
                    "type": "bool",
                    "display": "iffalse",
                    "displayvalue": "Unrecorded.",
                    "summaryvalue": "📅",
                    "filter": true,
                    "def": 0
                },
                {
                    "name": "watched",
                    "title": "Watched",
                    "type": "bool",
                    "display": "text",
                    "displaydepends": [
                        "recorded"
                    ],
                    "displayvalues": [
                        "Unseen",
                        "Seen"
                    ],
                    "summaryvalues": [
                        "💾",
                        "🍿"
                    ],
                    "filter": true,
                    "def": 0
                },
                {
                    "name": "watchdate",
                    "title": "Date of watch",
                    "type": "date",
                    "display": "monthdate",
                    "displaydepends": [
                        "watched"
                    ],
                    "displayprefix": "Watched",
                    "sortOn": true,
                    "sortDep": "bought",
                    "def": ""
                }
            ]
        },
        {
            "name": "filmdata",
            "title": "Film info",
            "type": "group",
            "props": [
                {
                    "name": "releaseyear",
                    "title": "Year of Release",
                    "type": "num",
                    "display": "text",
                    "displayprefix": "Year:",
                    "sortOn": true,
                    "minv": 1900,
                    "def": 2022
                },
                {
                    "name": "score",
                    "title": "Review score",
                    "type": "range",
                    "display": "stars",
                    "displaydepends": [
                        "watched"
                    ],
                    "displayprefix": "Score:",
                    "summaryvalue": "stars",
                    "sortOn": true,
                    "sortDep": "watched",
                    "minv": 0,
                    "maxv": 5,
                    "step": 1,
                    "def": 0
                }
            ]
        },
        {
            "name": "categories",
            "title": "Tags",
            "type": "strarray",
            "display": "ulist",
            "def": null
        },
        {
            "name": "notes",
            "title": "Notes",
            "type": "text",
            "display": "longtext",
            "summary": "📓",
            "def": null
        }
    ]
}

It’s quite a lot, and messy (as is the rest of the application so far), and it mixes data definitions with their presentation, but it’s mostly serviceable. But it lets me define, with the current version:

  • groups
  • numeric inputs
  • string inputs
  • url inputs (unvalidated at the moment)
  • date inputs (though I’d prefer to move to month/year or such)
  • boolean inputs (implemented as radio buttons)
  • tri inputs (radio buttons)
  • range inputs (radio buttons)
  • text inputs (text boxes)
  • string array inputs (for tags, with autocomplete!)

I’d originally gone with checkboxes and three-state checkboxes for booleans and tris, but decided it was too much trouble and having separate buttons looked nicer. The basic checkboxes were reused instead for toggling off or on the listing filters for boolean and tri fields.

It can also search in and sort the listing.


One of the nicer parts of all this is the ability to export and import from JSON, as well as being able to use the browser console to loop through and batch-modify the data. I’m not sure how feasible it would be to implement that through UI, which would be more useful to nontechnical users. But for now this is just a little project to handle my own data.

If I can get it cleaned up, I’ll probably throw a copy up here at some point, though so far I’m still iterating on it a good bit as I go through my old list of movies I watched and fill in their details. I started keeping a list at some point last year, and that was title-only, so it’s been a lot of searching, figuring out which was the movie I actually watched, trying to remember enough to give it a rating.

But the main goal is that if I decide I need a list of something, I can copy the file over, throw a schema together, and start making the list in a way that lets me update it or review it better than a text file and not requiring the ugliness of a spreadsheet. Like when I kept a list of the legislators who objected on 6 January 2021, that’s just a text file. Next time it could be a nice little application that makes the task not necessarily easier, but more useful:

  1. Get a text list of the things
  2. Some light massaging to turn it into JSON
  3. Write a quick schema
  4. Import the data
  5. Fill in any details, be able to filter, sort, search easily.

I can only imagine what data wrangling looks like in 100 years. I hope by then it’s all AI user interfaces that look pretty are functional no friction. Until then, this project has reminded me how powerful, how versatile, and above all how fairly simple, HTML plus Javascript has gotten.