Skip to main content

tennis-rank

Computes tennis player ranks using pagerank algorithm on match graph

Install

Using pip:

pip install tennisrank

Run tests:

make lint
make test

Example

from tennisrank.utils import load_atp
from tennisrank.model import Player, PlayerRank
from tennisrank.algorithm import TennisRank

matches = load_atp(2021)
ranker = TennisRank(matches)
# Get top 3 on all surfaces
top = 3
for surface in [Surface.ANY, Surface.HARD, Surface.CLAY, Surface.GRASS]:
    print(f'Top {top} on {surface.name} surface (unit weight):')
    ranks = ranker.get_ranks(surface=surface)
    for player_rank in ranks[:top]:
        print('-', player_rank)
    print(f'{len(ranks)-top} more...')
    print()

# Get rank of particular player
ranker.get_rank('Novak Hukohic', surface=Surface.GRASS)  # fuzzy matching

Creates the following output:

Top 3 on ANY surface (unit weight):
- PlayerRank(player=Player(id=100644, name='Alexander Zverev'), rank=1, surface=<Surface.ANY: 3>)
- PlayerRank(player=Player(id=104925, name='Novak Djokovic'), rank=2, surface=<Surface.ANY: 3>)
- PlayerRank(player=Player(id=106421, name='Daniil Medvedev'), rank=3, surface=<Surface.ANY: 3>)
389 more...

Top 3 on HARD surface (unit weight):
- PlayerRank(player=Player(id=106421, name='Daniil Medvedev'), rank=1, surface=<Surface.HARD: 0>)
- PlayerRank(player=Player(id=100644, name='Alexander Zverev'), rank=2, surface=<Surface.HARD: 0>)
- PlayerRank(player=Player(id=104925, name='Novak Djokovic'), rank=3, surface=<Surface.HARD: 0>)
316 more...

Top 3 on CLAY surface (unit weight):
- PlayerRank(player=Player(id=104745, name='Rafael Nadal'), rank=1, surface=<Surface.CLAY: 2>)
- PlayerRank(player=Player(id=104925, name='Novak Djokovic'), rank=2, surface=<Surface.CLAY: 2>)
- PlayerRank(player=Player(id=126774, name='Stefanos Tsitsipas'), rank=3, surface=<Surface.CLAY: 2>)
221 more...

Top 3 on GRASS surface (unit weight):
- PlayerRank(player=Player(id=104925, name='Novak Djokovic'), rank=1, surface=<Surface.GRASS: 1>)
- PlayerRank(player=Player(id=200000, name='Felix Auger Aliassime'), rank=2, surface=<Surface.GRASS: 1>)
- PlayerRank(player=Player(id=126610, name='Matteo Berrettini'), rank=3, surface=<Surface.GRASS: 1>)
164 more...

(PlayerRank(player=Player(id=104925, name='Novak Djokovic'), rank=1, surface=<Surface.GRASS: 1>),
 0.7407407407407407)

Publish new version

For developers

Via Github Actions

  • Update version number in pyproject.toml
  • Merge to main (via PR, direct push to main or other way)
  • Create new release on Github

Direct to PyPI

Build and upload:

python -m build
twine upload dist/*

Release files for tennisrank 0.1.8

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tennisrank 0.1.8
File Size Uploaded
tennisrank-0.1.8.tar.gz 9.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tennisrank 0.1.8
File Interpreter ABI Platform
tennisrank-0.1.8-py3-none-any.whl Python 3 none any Details

Total release size: 19.3 kB

Release files / tennisrank-0.1.8.tar.gz

Download URL tennisrank-0.1.8.tar.gz
Size 9.6 kB
Tags Source
SHA-256 checksum
How to use checksums
118a089ab303383959c1f0aaf6e7277c2a922c7e2986aef5140de3046941e217
BLAKE2b-256 checksum
How to use checksums
a91e1b18f4ac2c1f4a682822021e7f8117ce5f1d6fb7b3b8c97313505df9750e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.18

Release files / tennisrank-0.1.8-py3-none-any.whl

Download URL tennisrank-0.1.8-py3-none-any.whl
Size 9.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
c78e18322a4f8837ee9979eb4e88a2cf09cb45b7cd28b0e00525ae48d16846fd
BLAKE2b-256 checksum
How to use checksums
74bd8392df3103edf7574dcfb622bd9ee6576bf20a704f3588bcc4040858b212
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/5.0.0 CPython/3.9.18

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page