popolo-project / popolo-spec

International legislative data specifications
http://www.popoloproject.com/
99 stars 18 forks source link

Update Coalition modelling example to show change of Government #100

Open tmtmtmtm opened 9 years ago

tmtmtmtm commented 9 years ago

The example at http://www.popoloproject.com/appendices/examples.html#party-coalition would be significantly improved if it also showed a change of government. Are there completely separate Organizations for each? How are they connected? How do/can legislative_session Events connect, etc?

tmtmtmtm commented 9 years ago

I'm hoping to implement this for EveryPolitician this week, so it would be good to ensure I'm doing it in the preferred manner, so it could be used as an exemplar.

jpmckinney commented 9 years ago

Coalitions don't survive elections, for the same reason legislative memberships don't. Note that it's political groups (caucuses, fractions, clubs, etc.) that create coalitions, not parties, but in many jurisdictions there's no useful distinction to make between political groups and parties, in which case there's no reason to create a new organization for the caucus.

I'm not sure what your other questions mean:

  1. How are they connected? (within the same legislative period, or across periods?)
  2. How do/can legislative_session Events connect, etc? (connect to what?)
tmtmtmtm commented 9 years ago

Coalitions don't survive elections, for the same reason legislative memberships don't

Sure — but it's entirely unclear what that means for modelling them, which is why it would be significantly more valuable to show not just a single example, but a change.

How are they connected? (within the same legislative period, or across periods?)

Currently the example shows a single Organization, called "Government", with a founding and dissolution date, which seems simple enough. But it's not obvious how this would work once you are recording historic coalitions too.

The natural assumption of someone simply cut'n'pasting from the example might be to simply have multiple such Organizations, varying only the name (Government 72, Government 73, etc) — but that is either insufficient, or simply not the right approach at all.

But in the absence of a longer example (or even explanatory text) it's unclear whether the right way is to, yes, have a separate Organization for each Coalition, but ensure there's at least a consistent classification{1} (and/or perhaps something else?) to connect them, or to have a single long-running "Government" Organization, which has different Group members at different times. (The example strongly implies the former to me, whereas the latter seems more useful.)

An example that shows at least two Coalitions{2} would let people see what will be the same each time (other than the Party/Group ids), versus what will differ, and in what way.

This is a great example of the sort of thing that should be completely self-evident to people once they see it, but is generally pretty confusing and error-prone to figure out from first principles, almost certainly certainly lead to variations in approach in different countries that would makie it much more difficult to create common tooling, etc.

How do/can legislative_session Events connect, etc? (connect to what?)

Sorry, I meant legislative_period here. But the more general answer is that I{3} probably don't know. I just know that there are now Events, that seem like they should be involved somewhere here (Coalitions generally have a very direct mapping to legislative periods), but as the example doesn't show them, it's unclear how — is it just a matter of adding a suitable legislative_period_id from which it can inherit its dates if they're the same, or is there something more involved?


[1] including what that should preferably be called

[2] And, better still, including a period with a single-party majority government.

[3] primarily here "I" refers to a hypothetical reader, but to a certain degree it also refers to me the actual reader who is actively wanting to use this right now and whose brain is hurting trying to puzzle it all out.

jpmckinney commented 9 years ago

I think a problem is that we haven't expressed any use cases yet. Right now it's just "Here's data. Model it." What sorts of questions do we need to answer?

  1. Who forms the government for this legislative period?
  2. ???

Responding to your comments: My instinct for a change in government would be a copy of the example, but with different date ranges for the new government, and different members of the new government. Using the same classification for all coalitions makes sense. I haven't researched the different words people use to describe these organizations, so I can't propose a standard value at the moment. For a single-party majority government, I don't think it makes sense to create a coalition with one member.

Thinking through what this should look like: Right now, the first question can't be answered even with the current example, unless the name "Government" is magic (but it won't work internationally). In a Westminster system, the government is generally the political group with the most members. I don't know if this is always true, but we may want it to be possible to model governments without having to also model memberships - and at any rate determine which group forms the government without counting each group's members. While we're here, we may want to add the question:

  1. Who forms the opposition? (and second, third, fourth opposition, depending on whether the legislature actually tracks those)

So, within a legislative period, we have political groups that can combine into bigger political groups and can form either a government, an opposition, or a group without any special status.

To model this, we can subclass Organization as PoliticalGroup and add a legislative_period (and legislative_period_id) property to link the group to the period. Each PoliticalGroup can be a member of another PoliticalGroup. PoliticalGroups can have a classification of government, opposition, second opposition, etc. If you ask the questions we have so far, maybe you end up with a PoliticalGroup that has member groups, maybe you end up with an individual party caucus that has no member groups. Either way, you've answered the question.

In general, legislators would be members of the legislature and members of a political group. I'll have to check whether this works with our previous discussion on modeling party memberships using on_behalf_of.

How does this sound?

tmtmtmtm commented 9 years ago

What sorts of questions do we need to answer?

For me a key one is also the reverse of the first: "In which periods was Party/Group X in Government?". My working assumption is that that will be much more easily answered if the approach is the same whether they were there as part of a coalition or as a single-party majority.

In a Westminster system, the government is generally the political group with the most members. I don't know if this is always true

One example I've seen where that wasn't true, was Ontario, where in 1985–7, the Progressive Conservatives had the most seats, but the Liberals formed the government due to a confidence and supply arrangement (but not coalition) with the NDP.

we may want it to be possible to model governments without having to also model memberships - and at any rate determine which group forms the government without counting each group's members

Yes — very much so. I know who the member groups of every Finnish and Estonian coalition have been for a much longer time period that I know the actual members.

PoliticalGroups can have a classification of government, opposition, second opposition, etc

A fairly common case is also to have groups that formally support the government, but aren't actually members, and for that to be distinct from opposition. (e.g. the Infobox on https://en.wikipedia.org/wiki/National_Assembly_(Bulgaria) — specifically the Patriotic Front)

I don't think I've come across the concept of "Second Opposition" before — where has that?

In general, legislators would be members of the legislature and members of a political group. I'll have to check whether this works with our previous discussion on modeling party memberships using on_behalf_of.

I'll ponder the wider suggestion some more, but on this specific point, I'd very strongly push for the person not needing to explicitly be a member of the Group, but that simply being an on_behalf_of on the Membership of the legislature. Unless my understanding of how these Groups generally work is off, I don't think it makes sense to have a 'raw' Membership of the Group: it can only exist in the context of the Parliamentary Membership. Or are there cases where that's not so?

Using on_behalf_of massively simplifies a swathe of queries, many of which are currently impossible to answer definitively on existing datasets which track parallel unconnected Memberships of the Legislature and of Parties/Groups.

tmtmtmtm commented 9 years ago

as a further datapoint: Brazil appears to have two large and distinct Opposition groups (made up of 9, and 6 parties respectively, with the government being a coalition of 9 parties too!): https://en.wikipedia.org/wiki/55th_Legislature_of_the_National_Congress

tmtmtmtm commented 9 years ago

And a further family of questions triggered by the Brazilian case, but important in a few other contexts I can immediately think of: with what other Parties does Party X tend to form a Group? / Has X ever been in a Coalition with Y?, etc

jpmckinney commented 9 years ago

Brazil's multiple opposition groups shouldn't be a problem. Both can be classified as opposition in the same legislative period.

  1. with what other Parties does Party X tend to form a Group?
  2. Has X ever been in a Coalition with Y?

These seem to be more API questions, as the data model isn't going to encode these facts directly (i.e. we're not going to have a list of all parties one party has ever been in a coalition with as part of the spec). Of course, the data model can make these questions harder or easier to answer. For Q2:

SELECT 1
  FROM memberships m
  INNER JOIN memberships n
    ON m.organization_id = n.organization_id
  WHERE m.member_id = 'X'
    AND n.member_id = 'Y';

For Q1, taking a simple count as our "tendency" metric:

SELECT COUNT(*)
  FROM memberships m
  INNER JOIN memberships n
    ON m.organization_id = n.organization_id AND n.member_id != 'X'
  WHERE m.member_id = 'X'
  GROUP BY n.member_id;

Easy enough!

jpmckinney commented 9 years ago

@tmtmtmtm I'm a bit lost on where this issue ended up. What are the open questions / tasks?

tmtmtmtm commented 9 years ago

The original task is still the important part: showing an extended example of how this should work.

The later discussion was to mainly just to give some answers to your "What sorts of questions do we need to answer", rather than being primary to the issue.