Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/woctezuma/steam-player-level-percentiles

Query and analyze percentiles of player levels on Steam.
https://github.com/woctezuma/steam-player-level-percentiles

centile percentile percentiles steam steam-api steam-community steam-leaks steam-level steam-players

Last synced: 30 days ago
JSON representation

Query and analyze percentiles of player levels on Steam.

Awesome Lists containing this project

README

        

# Steam Player Level Percentiles

This repository contains Python code to query percentiles of player levels, to infer the total number of Steam players.

![Illustration cover][img-cover]

## Requirements

- Install the latest version of [Python 3.X][python-download-url].
- Install the required packages:

```bash
pip install -r requirements.txt
```

## Usage

```bash
python player_levels.py
```

To apply the method to achievement unlock percentages, run:

```bash
python achievements.py --app-id 788100
```

## Assumption

Let us assume that, in order to compute the percentages, Valve:

- divides the total number of players by 100,
- then truncates it.

For instance, with `16,483,473` players at level 1, and `104,857,600` players in total,
then the percentile would be:
```
16,483,473 / 1,048,576 ~ 15.719864845275879
```

which is finally displayed as:

```
https://api.steampowered.com/IPlayerService/GetSteamLevelDistribution/v1/?player_level=1
```

```json
{
"response": {
"player_level_percentile": 15.719864845275879
}
}
```

## Results

```
Least Common Multiple: 1048576
```

Following our assumption, this would mean that the total number of Steam players is
a multiple of `104,857,6XY`, where `XY` are unknown digits.
This is not super useful info.😅

## Truncation

> [!Note]
> Interestingly, the least common multiplier is a power of 2.

$$
1048576 = 1024^2 = 2^{20}
$$

This could indicate a truncation of the numbers in binary representation,
which would prevent the estimation of a total number of Steam players
of the order $2^{28} - 2^{30}$, i.e. hundreds of millions.

## References

- [`GetSteamLevelDistribution`][steamdb-api]: API which returns how a given Steam Level compares the user base at large
- Tyler Glaiel, [*Using achievement stats to estimate sales on Steam*][glaiel-medium-blogpost], June 2018
- [`TylerGlaiel/steamsalesestimator`][glaiel-sales-estimator]: C++ code supporting the aforementioned blog post
- Ars Technica's article: [*Valve leaks Steam game player counts; we have the numbers*][article], July 2018
- Ars Technica's supplemental data: [snapshot of "players estimate"][arstechnica18-data] for 13,281 games

[img-cover]:
[python-download-url]:

[steamdb-api]:
[glaiel-medium-blogpost]:
[glaiel-sales-estimator]:
[article]:
[arstechnica18-data]: