Skip to content

Latest commit

 

History

History
37 lines (25 loc) · 1.87 KB

README.md

File metadata and controls

37 lines (25 loc) · 1.87 KB

condorcet-method

This repo implements the Schulze method, a Condorcet-type election method. Please refer to Wikipedia for all the mathematical details.

How to run the method

1. Prepare your data

The first step is to import your data in a dataframe. The structure has to be the following:

  • Each voter has to correspond to a line
  • Each row contains, ordered from the left to the right columns, the preferences of the voter
  • Each entry corresponds to the name of teh candidates: make sure not to make spelling mistakes

To see a concrete example, have a look at Run_ranking.ipynb.

2. Run the election method to discover the winning candidates

To run the model once the dataframe df is ready, it is just one line:

condorcet.compute_ranks(df) 

As in the example in the notebook, the output is a list of lists, where the position of the inner list corresponds to the ranking and if the inner lists are longer than one element, it is because there is a tie.

3. Dive deeper

You can extract the d[V,W] and p[V,W] matrices with the methods:

  • condorcet._compute_d(weighted_ranks, candidate_names)
  • condorcet._compute_p(dmat, candidate_names)

To extract the candidate names and the weighted ranks to be input to the above methods, please use:

  • weighted_ranks = condorcet.weighted_ranks_from_df(df)
  • candidate_names = condorcet.candidate_names_from_df(df)

Code tests

The Wikipedia example is reproduced in the example notebook and all the entries of the p and d matrices match the original ones.

A short unit test can be run with the command pytest once in the repo root folder. To run the test, pytest is required. You can install it with pip install pytest.