# Penalty Blog
<div align="center">
<a href="">[![Python Version](https://img.shields.io/pypi/pyversions/penaltyblog)](https://pypi.org/project/penaltyblog/)</a>
<a href="">[![Coverage Status](https://coveralls.io/repos/github/martineastwood/penaltyblog/badge.svg?branch=master&service=github)](https://coveralls.io/repos/github/martineastwood/penaltyblog/badge.svg?branch=master&service=github)</a>
<a href="">[![PyPI](https://img.shields.io/pypi/v/penaltyblog.svg)](https://pypi.org/project/penaltyblog/)</a>
<a href="">[![Downloads](https://static.pepy.tech/badge/penaltyblog)](https://pepy.tech/project/penaltyblog)</a>
<a href="">[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)</a>
<a href="">[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)</a>
<a href="">[![Code style: pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)</a>
</div>
The **penaltyblog** Python package contains lots of useful code from [pena.lt/y/blog](http://pena.lt/y/blog.html) for working with football (soccer) data.
**penaltyblog** includes functions for:
- Scraping football data from sources such as football-data.co.uk, FBRef, ESPN, Club Elo, Understat, SoFifa and Fantasy Premier League
- Modelling of football matches using Poisson-based models, such as Dixon and Coles, and Bayesian models
- Predicting probabilities for many betting markets, e.g. Asian handicaps, over/under, total goals etc
- Modelling football team's abilities using Massey ratings, Colley ratings and Elo ratings
- Estimating the implied odds from bookmaker's odds by removing the overround using multiple different methods
- Mathematically optimising your fantasy football team
## Installation
`pip install penaltyblog`
## Documentation
To learn how to use penaltyblog, you can read the [documentation](https://penaltyblog.readthedocs.io/en/latest/) and look at the
examples for:
- [Scraping football data](https://penaltyblog.readthedocs.io/en/latest/scrapers/index.html)
- [Predicting football matches and betting markets](https://penaltyblog.readthedocs.io/en/latest/models/index.html)
- [Estimating the implied odds from bookmakers odds](https://penaltyblog.readthedocs.io/en/latest/implied/index.html)
- [Calculate Massey, Colley and Elo ratings](https://penaltyblog.readthedocs.io/en/latest/ratings/index.html)
## References
- Mark J. Dixon and Stuart G. Coles (1997) Modelling Association Football Scores and Inefficiencies in the Football Betting Market
- Håvard Rue and Øyvind Salvesen (1999) Prediction and Retrospective Analysis of Soccer Matches in a League
- Anthony C. Constantinou and Norman E. Fenton (2012) Solving the problem of inadequate scoring rules for assessing probabilistic football forecast models
- Hyun Song Shin (1992) Prices of State Contingent Claims with Insider Traders, and the Favourite-Longshot Bias
- Hyun Song Shin (1993) Measuring the Incidence of Insider Trading in a Market for State-Contingent Claims
- Joseph Buchdahl (2015) The Wisdom of the Crowd
- Gianluca Baio and Marta A. Blangiardo (2010) Bayesian Hierarchical Model for the Prediction of Football Results
Raw data
{
"_id": null,
"home_page": "https://github.com/martineastwood/penaltyblog",
"name": "penaltyblog",
"maintainer": null,
"docs_url": null,
"requires_python": "<=3.12.6,>=3.10",
"maintainer_email": null,
"keywords": "football, soccer, goals, modelling, dixon coles, poisson, bayesian, scraper, scraping, backtest",
"author": "Martin Eastwood",
"author_email": "martin.eastwood@gmx.com",
"download_url": "https://files.pythonhosted.org/packages/38/ff/a2a06f25275ccc5f4a4da80146787c38fdfbc995f87a162f5817bdb243a4/penaltyblog-0.8.2.tar.gz",
"platform": null,
"description": "# Penalty Blog\n\n<div align=\"center\">\n\n <a href=\"\">[![Python Version](https://img.shields.io/pypi/pyversions/penaltyblog)](https://pypi.org/project/penaltyblog/)</a>\n <a href=\"\">[![Coverage Status](https://coveralls.io/repos/github/martineastwood/penaltyblog/badge.svg?branch=master&service=github)](https://coveralls.io/repos/github/martineastwood/penaltyblog/badge.svg?branch=master&service=github)</a>\n <a href=\"\">[![PyPI](https://img.shields.io/pypi/v/penaltyblog.svg)](https://pypi.org/project/penaltyblog/)</a>\n <a href=\"\">[![Downloads](https://static.pepy.tech/badge/penaltyblog)](https://pepy.tech/project/penaltyblog)</a>\n <a href=\"\">[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)</a>\n <a href=\"\">[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)</a>\n <a href=\"\">[![Code style: pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit)</a>\n\n</div>\n\n\nThe **penaltyblog** Python package contains lots of useful code from [pena.lt/y/blog](http://pena.lt/y/blog.html) for working with football (soccer) data.\n\n**penaltyblog** includes functions for:\n\n- Scraping football data from sources such as football-data.co.uk, FBRef, ESPN, Club Elo, Understat, SoFifa and Fantasy Premier League\n- Modelling of football matches using Poisson-based models, such as Dixon and Coles, and Bayesian models\n- Predicting probabilities for many betting markets, e.g. Asian handicaps, over/under, total goals etc\n- Modelling football team's abilities using Massey ratings, Colley ratings and Elo ratings\n- Estimating the implied odds from bookmaker's odds by removing the overround using multiple different methods\n- Mathematically optimising your fantasy football team\n\n## Installation\n\n`pip install penaltyblog`\n\n\n## Documentation\n\nTo learn how to use penaltyblog, you can read the [documentation](https://penaltyblog.readthedocs.io/en/latest/) and look at the\nexamples for:\n\n- [Scraping football data](https://penaltyblog.readthedocs.io/en/latest/scrapers/index.html)\n- [Predicting football matches and betting markets](https://penaltyblog.readthedocs.io/en/latest/models/index.html)\n- [Estimating the implied odds from bookmakers odds](https://penaltyblog.readthedocs.io/en/latest/implied/index.html)\n- [Calculate Massey, Colley and Elo ratings](https://penaltyblog.readthedocs.io/en/latest/ratings/index.html)\n\n## References\n\n- Mark J. Dixon and Stuart G. Coles (1997) Modelling Association Football Scores and Inefficiencies in the Football Betting Market\n- H\u00e5vard Rue and \u00d8yvind Salvesen (1999) Prediction and Retrospective Analysis of Soccer Matches in a League\n- Anthony C. Constantinou and Norman E. Fenton (2012) Solving the problem of inadequate scoring rules for assessing probabilistic football forecast models\n- Hyun Song Shin (1992) Prices of State Contingent Claims with Insider Traders, and the Favourite-Longshot Bias\n- Hyun Song Shin (1993) Measuring the Incidence of Insider Trading in a Market for State-Contingent Claims\n- Joseph Buchdahl (2015) The Wisdom of the Crowd\n- Gianluca Baio and Marta A. Blangiardo (2010) Bayesian Hierarchical Model for the Prediction of Football Results\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Library from http://pena.lt/y/blog for scraping and modelling football (soccer) data",
"version": "0.8.2",
"project_urls": {
"Homepage": "https://github.com/martineastwood/penaltyblog",
"Repository": "https://github.com/martineastwood/penaltyblog"
},
"split_keywords": [
"football",
" soccer",
" goals",
" modelling",
" dixon coles",
" poisson",
" bayesian",
" scraper",
" scraping",
" backtest"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bc2fd70047e3782be688de33e65ce0524ea31ea6907860e3874e3ba3cc3c82e1",
"md5": "4fdf4f9e4ca69620631fdb55019fa898",
"sha256": "cea6cbff7b49762277ba877aa5842b70daadf993edba0922a05ae07f26496b25"
},
"downloads": -1,
"filename": "penaltyblog-0.8.2-py3-none-any.whl",
"has_sig": false,
"md5_digest": "4fdf4f9e4ca69620631fdb55019fa898",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<=3.12.6,>=3.10",
"size": 53636,
"upload_time": "2024-10-19T18:11:23",
"upload_time_iso_8601": "2024-10-19T18:11:23.000443Z",
"url": "https://files.pythonhosted.org/packages/bc/2f/d70047e3782be688de33e65ce0524ea31ea6907860e3874e3ba3cc3c82e1/penaltyblog-0.8.2-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "38ffa2a06f25275ccc5f4a4da80146787c38fdfbc995f87a162f5817bdb243a4",
"md5": "ef61a05e33b2d70486d720f14013b7d3",
"sha256": "dc13603586faea355a5fa59b5c19281de7e78ac7e588ceff4ba8f8073fc8df3b"
},
"downloads": -1,
"filename": "penaltyblog-0.8.2.tar.gz",
"has_sig": false,
"md5_digest": "ef61a05e33b2d70486d720f14013b7d3",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<=3.12.6,>=3.10",
"size": 32165,
"upload_time": "2024-10-19T18:11:24",
"upload_time_iso_8601": "2024-10-19T18:11:24.890413Z",
"url": "https://files.pythonhosted.org/packages/38/ff/a2a06f25275ccc5f4a4da80146787c38fdfbc995f87a162f5817bdb243a4/penaltyblog-0.8.2.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-10-19 18:11:24",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "martineastwood",
"github_project": "penaltyblog",
"travis_ci": false,
"coveralls": false,
"github_actions": false,
"lcname": "penaltyblog"
}