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/*

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

tennisrank-0.1.8.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

tennisrank-0.1.8-py3-none-any.whl (9.7 kB view details)

Uploaded Python 3

File details

Details for the file tennisrank-0.1.8.tar.gz.

File metadata

  • Download URL: tennisrank-0.1.8.tar.gz
  • Upload date:
  • Size: 9.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for tennisrank-0.1.8.tar.gz
Algorithm Hash digest
SHA256 118a089ab303383959c1f0aaf6e7277c2a922c7e2986aef5140de3046941e217
MD5 489553acdcb0788ea412e85c07b9ebee
BLAKE2b-256 a91e1b18f4ac2c1f4a682822021e7f8117ce5f1d6fb7b3b8c97313505df9750e

See more details on using hashes here.

File details

Details for the file tennisrank-0.1.8-py3-none-any.whl.

File metadata

  • Download URL: tennisrank-0.1.8-py3-none-any.whl
  • Upload date:
  • Size: 9.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.0.0 CPython/3.9.18

File hashes

Hashes for tennisrank-0.1.8-py3-none-any.whl
Algorithm Hash digest
SHA256 c78e18322a4f8837ee9979eb4e88a2cf09cb45b7cd28b0e00525ae48d16846fd
MD5 4bbdc09caddf29eb1f88a1f41efa3330
BLAKE2b-256 74bd8392df3103edf7574dcfb622bd9ee6576bf20a704f3588bcc4040858b212

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

0.1.8 This release

2 files

0.1.7

2 files

0.1.6

2 files

0.1.5

2 files

0.1.4

2 files

0.1.3

2 files

0.1.2

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page