Description
Python implementation of WengLin Bayesian ranking, a better, licensefree alternative to TrueSkill
This is a port of the amazing openskill.js package.
openskill.py alternatives and similar software solutions
Based on the "Analytics" category.
Alternatively, view openskill.py alternatives based on common mentions on social networks and blogs.

Elasticsearch
Free and Open, Distributed, RESTful Search Engine 
Superset
Apache Superset is a Data Visualization and Data Exploration Platform [Moved to: https://github.com/apache/superset] 
Metabase
The simplest, fastest way to get business intelligence and analytics to everyone in your company :yum: 
Redash
Make Your Company Data Driven. Connect to any data source, easily visualize, dashboard and share your data. 
Piwik
Liberating Web Analytics. Star us on Github? +1. Matomo is the leading open alternative to Google Analytics that gives you full control over your data. Matomo lets you easily collect data from websites & apps and visualise this data and extract insights. Privacy is builtin. We love Pull Requests! 
Druid
Apache Druid: a high performance realtime analytics database. 
Umami
Umami is a simple, fast, privacyfocused alternative to Google Analytics. 
GoAccess
GoAccess is a realtime web log analyzer and interactive viewer that runs in a terminal in *nix systems or through your browser. 
cube.js
ðŸ“Š Cube â€” The Semantic Layer for Building Data Applications 
Plausible
Simple, opensource, lightweight (< 1 KB) and privacyfriendly web analytics alternative to Google Analytics. 
PostHog
ðŸ¦” PostHog provides opensource product analytics, session recording, feature flagging and a/b testing that you can selfhost. 
Snowplow
The enterprisegrade behavioral data engine (web, mobile, serverside, webhooks), running cloudnatively on AWS and GCP 
Fathom Analytics
Fathom Lite. Simple, privacyfocused website analytics. Built with Golang & Preact. 
Countly
Countly helps you get insights from your application. Available selfhosted or on private cloud. 
ThinkUp
ThinkUp gives you insights into your social networking activity on Twitter, Facebook, Instagram, and beyond. 
RudderStack
Privacy and Security focused Segmentalternative, in Golang and React 
Ackee
Selfhosted, Node.js based analytics tool for those who care about privacy. 
Velox
A C++ vectorized database acceleration library aimed to optimizing query engines and data processing systems. 
Open Web Analytics
Official repository for Open Web Analytics which is an open source alternative to commercial tools such as Google Analytics. Stay in control of the data you collect about the use of your website or app. Please consider sponsoring this project. 
Shynet
Modern, privacyfriendly, and detailed web analytics that works without cookies or JS. 
Open source APM and DataDog alternative
Open source APM: OpenTelemetry traces, metrics, and logs 
Socioboard
Socioboard is world's first and open source Social Technology Enabler. Socioboard Core is our flagship product. 
Chartbrew
Opensource web platform used to create live reporting dashboards from APIs, MongoDB, Firestore, MySQL, PostgreSQL, and more ðŸ“ˆðŸ“Š 
Rakam
ðŸ“ˆ Collect customer event data from your apps. (Note that this project only includes the API collector, not the visualization platform) 
IG Monitoring
ðŸš¨ DISCONTINUEDðŸš¨ IGMonitoring  Free, self hosted Instagram Analytics and Stats 
Koko Analytics
Privacyfriendly analytics for your WordPress site. 
Tellery
Tellery lets you build metrics using SQL and bring them to your team. As easy as using a document. As powerful as a data modeling tool. 
Suet
Detailed analytics and reporting for your Mailgun transactional emails. 
Mixpost
Selfhosted social media management. Schedule and organize your social content. Built with Laravel Framework. 
Matomo
Leading opensource analytics platform that gives you more than just powerful analytics, formerly known as Piwik. 
Houdini
Free and open source fundraising infrastructure for nonprofits and NGOs
Static code analysis for 29 languages.
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of openskill.py or a related project?
Popular Comparisons
README
Python implementation of WengLin Bayesian ranking, a better, licensefree alternative to TrueSkill
This is a port of the amazing openskill.js package.
Installation
pip install openskill
Usage
>>> from openskill import Rating, rate
>>> a1 = Rating()
>>> a1
Rating(mu=25, sigma=8.333333333333334)
>>> a2 = Rating(mu=32.444, sigma=5.123)
>>> a2
Rating(mu=32.444, sigma=5.123)
>>> b1 = Rating(43.381, 2.421)
>>> b1
Rating(mu=43.381, sigma=2.421)
>>> b2 = Rating(mu=25.188, sigma=6.211)
>>> b2
Rating(mu=25.188, sigma=6.211)
If a1
and a2
are on a team, and wins against a team of b1
and b2
, send this into rate:
>>> [[x1, x2], [y1, y2]] = rate([[a1, a2], [b1, b2]])
>>> x1, x2, y1, y2
(Rating(mu=28.669648436582808, sigma=8.071520788025197), Rating(mu=33.83086971107981, sigma=5.062772998705765), Rating(mu=43.071274808241974, sigma=2.4166900452721256), Rating(mu=23.149503312339064, sigma=6.1378606973362135))
You can also create Rating
objects by importing create_rating
:
>>> from openskill import create_rating
>>> x1 = [28.669648436582808, 8.071520788025197]
>>> x1 = create_rating(x1)
>>> x1
Rating(mu=28.669648436582808, sigma=8.071520788025197)
Ranks
When displaying a rating, or sorting a list of ratings, you can use ordinal
:
>>> from openskill import ordinal
>>> ordinal([43.07, 2.42])
35.81
By default, this returns mu  3 * sigma
, showing a rating for which there's a 99.7% likelihood the player's true rating is higher, so with early games, a player's ordinal rating will usually go up and could go up even if that player loses.
Artificial Ranks
If your teams are listed in one order but your ranking is in a different order, for convenience you can specify a ranks option, such as:
>>> a1 = b1 = c1 = d1 = Rating()
>>> result = [[a2], [b2], [c2], [d2]] = rate([[a1], [b1], [c1], [d1]], rank=[4, 1, 3, 2])
>>> result
[[Rating(mu=20.96265504062538, sigma=8.083731307186588)], [Rating(mu=27.795084971874736, sigma=8.263160757613477)], [Rating(mu=24.68943500312503, sigma=8.083731307186588)], [Rating(mu=26.552824984374855, sigma=8.179213704945203)]]
It's assumed that the lower ranks are better (wins), while higher ranks are worse (losses). You can provide a score instead, where lower is worse and higher is better. These can just be raw scores from the game, if you want.
Ties should have either equivalent rank or score.
>>> a1 = b1 = c1 = d1 = Rating()
>>> result = [[a2], [b2], [c2], [d2]] = rate([[a1], [b1], [c1], [d1]], score=[37, 19, 37, 42])
>>> result
[[Rating(mu=24.68943500312503, sigma=8.179213704945203)], [Rating(mu=22.826045021875203, sigma=8.179213704945203)], [Rating(mu=24.68943500312503, sigma=8.179213704945203)], [Rating(mu=27.795084971874736, sigma=8.263160757613477)]]
Predicting Winners
You can compare two or more teams to get the probabilities of each team winning.
>>> from openskill import predict_win
>>> a1 = Rating()
>>> a2 = Rating(mu=33.564, sigma=1.123)
>>> predictions = predict_win(teams=[[a1], [a2]])
>>> predictions
[0.45110901512761536, 0.5488909848723846]
>>> sum(predictions)
1.0
Predicting Draws
You can compare two or more teams to get the probabilities of the match drawing.
>>> from openskill import predict_draw
>>> a1 = Rating()
>>> a2 = Rating(mu=33.564, sigma=1.123)
>>> prediction = predict_draw(teams=[[a1], [a2]])
>>> prediction
0.09025541153402594
Choosing Models
The default model is PlackettLuce
. You can import alternate models from openskill.models
like so:
>>> from openskill.models import BradleyTerryFull
>>> a1 = b1 = c1 = d1 = Rating()
>>> rate([[a1], [b1], [c1], [d1]], rank=[4, 1, 3, 2], model=BradleyTerryFull)
[[Rating(mu=17.09430584957905, sigma=7.5012190693964005)], [Rating(mu=32.90569415042095, sigma=7.5012190693964005)], [Rating(mu=22.36476861652635, sigma=7.5012190693964005)], [Rating(mu=27.63523138347365, sigma=7.5012190693964005)]]
Available Models
BradleyTerryFull
: Full Pairing for BradleyTerryBradleyTerryPart
: Partial Pairing for BradleyTerryPlackettLuce
: Generalized BradleyTerryThurstoneMostellerFull
: Full Pairing for ThurstoneMostellerThurstoneMostellerPart
: Partial Pairing for ThurstoneMosteller
Which Model Do I Want?
 BradleyTerry rating models follow a logistic distribution over a player's skill, similar to Glicko.
 ThurstoneMosteller rating models follow a gaussian distribution, similar to TrueSkill. Gaussian CDF/PDF functions differ in implementation from system to system (they're all just chebyshev approximations anyway). The accuracy of this model isn't usually as great either, but tuning this with an alternative gamma function can improve the accuracy if you really want to get into it.
 Full pairing should have more accurate ratings over partial pairing, however in high k games (like a 100+ person marathon race), BradleyTerry and ThurstoneMosteller models need to do a calculation of joint probability which involves is a k1 dimensional integration, which is computationally expensive. Use partial pairing in this case, where players only change based on their neighbors.
 PlackettLuce (default) is a generalized BradleyTerry model for k â‰¥ 3 teams. It scales best.
Advanced Usage
You can learn more about how to configure this library to suit your custom needs in the project documentation.
Implementations in other Languages
*Note that all licence references and agreements mentioned in the openskill.py README section above
are relevant to that project's source code only.