npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

chessanalysis

v0.1.2

Published

Welcome! We (@EllAchE and @bennyrubanov) are chess amateurs who also have interests in statistics, programming and sillyness. This repo brings those interests together. Here, we find and visualize some of the sillier (and perhaps less useful) chess statis

Downloads

133

Readme

Overview

Welcome! We (@EllAchE and @bennyrubanov) are chess amateurs who also have interests in statistics, programming and sillyness. This repo brings those interests together. Here, we find and visualize some of the sillier (and perhaps less useful) chess statistics no one has bothered to calculate before. This project is open source (MIT License), so we encourage contributions and suggestions! 😊

Preliminary Results

The project is under development, with the goal to one day look at the entirety of the Lichess games database. However, we have already analyzed a subset of the data. Here's a deep dive into those: Analyzing 5 billion chess games

and if that's not enough, here is a result on 450k games from November 2013! Results

Methodology

Data

Data is sourced from the public Lichess games database.

Credits

We have taken advantage of some of the helpful methods in chess.js to save ourselves a little dev time.

Definitions

  • Unambiguous Piece (UAP): e.g. pawn that started on a2
  • Ambiguous pieces: pawn, bishop, knight, rook, queen, king

Edge Cases

Current implementation is bolded where multiple options exist:

Kills/Deaths/Assists

  • If two pieces simultaneously checkmate a king each is credited with 0.5 kills/mates (not currently implemented)
  • A checkmate is considered a "death" for the king and a "kill" for the mating piece
  • An "assist" is counted for a piece if: the move before the checkmate is that piece's move, and it is a "check"
    • A "hockey assist": same as "assist", but the move looked at is the one two moves before the checkmate
    • HOWEVER: a piece cannot assist itself, so it is not counted if the piece checks and then mates the next move

Distances

Knight

  • knight move counts as 2: one diagonal and one hor/vert. An alternative would be to count as 3: 2 horizontal/vertical + 1 hor/vert
  • To calculate when a knight "hops" a piece we do the following.
    • A knight can take 2 paths to its destination, if either of those paths is clear we assume it takes the "easier path" and does not hop a piece.
    • If there is no clear path we count ALL pieces blocking both paths, then divide the aggregate by 2. There are two reasons for this:
      • We want deterministic outputs from processing games
      • We want to avoid selection bias. It would be possible to use a deterministic rule (i.e. short distance first when odd moves) to determine the knight's path, however that or similar decisions could introduce bias when considering common opening patterns. A randomness rule (i.e. generate a random number to choose the path) would avoid this but would lead to nondeterminisic results.

Bishop

  • Diagonal moves count as 1. An alternative would be diagonal moves count as 2: 1 horizontal + 1 vertical

Castling

  • Castling counts as a move for a rook as well as the king
  • The distance a rook covers during a castle move is also tracked

Promotions

  • After an unambiguous piece is promoted:
    • It is treated as the new piece
    • It is treated as the original piece (i.e. if the pawn that started the game on a2 is promoted to a Queen, it is still treated as the pawn on a2 for the purposes of calculating distance functions, etc)

Priority (& Silly) Questions to answer

Kills/Deaths/Assists

thesis: beginners get forked by knights and lose a lot of high level pieces. Will be answered by KD ratio by piece value

  • K/D ratios for each piece
    • KD ratio by piece value (where piece values are defined as: Pawn 1 point, Knight 3 points, Bishop 3 points, Rook 5 points, Queen 9 points, King 4 points per standard valuations in https://en.wikipedia.org/wiki/Chess_piece_relative_value)
    • KD ratio by number of pieces taken
  • revenge kills (i.e. take back a piece immediately after it was taken)
  • best kill streaks (i.e. one piece is the only one taking others for some time)
  • which piece delivers checkmate most/least often, has the most checkmate assists, and the most hockey assists
  • where do checkmates happen most/least often (what squares specifically)
  • heat map of which squares are "battleground", i.e. have the most captures

Distances/Moves

  • average distance each piece has traveled
    • furthest distance a piece has traveled in a single game
  • average number of moves by piece
  • the game with the furthest collective distance moved
  • the game with the most moves played

Promotions

  • how often a piece is promoted to different pieces (q, n, b, r)
  • how often each unambiguous pawn promotes

Openings/Endings/Wins/Losses

  • how often do games end with 3 fold repetition? Stalemate? Ties in general? Insufficient material? Loss on time? Lack of pawn advancement?
  • top 5 most used/popular openings
    • number of times various openings (e.g. bongcloud 😁) are played ♙
  • which side wins more often (white vs black)
    • percentage of games ending with white winning, black winning, and ties
  • which side wins more often for each of the top 5 most used/popular openings

Dataset facts

  • number of games analyzed
  • average rating of players
  • quantity of games played by time control category (e.g. bullet/blitz/rapid/classical)
  • quantity of games played by time control quantity (e.g. 180+2, 1500+0, etc)
  • quantity of games ended by termination type (e.g. "normal", "time forfeit", etc)
  • player who played the most games in the dataset
  • average rating diff in games played
  • largest rating diff between players in games played

Miscellaneous

  • most queens to appear in a game
  • en passant count
  • most pieces hopped over by a knight
  • average pieces hopped by a knight
  • number of games with queen side vs king side castling
  • number of games without castling

Extra Credit Questions to Answer

  • what time people rage quit at different ELOs
  • which piece is a "defender" for when checkmate within king capture range is possible
  • different number of mistakes for each ELO
  • heat map of squares sat on and visited by piece type
  • furthest distance a single pawn has gone from it's original lane
  • heat map of where each piece gets its kills, vs. its deaths
  • at what move number in a chess game is a move played by fewer than 10% of the players who follow a particular opening or line?
  • average piece lifetime
    • how many moves until a piece is captured on average
    • how much clock time until a piece is captured on average
  • has a single piece ever covered the entire board in one game?
  • how many pieces on average does a Queen take before it gets taken down

Planned Roadmap Items

  • Segment by ELO rating ranges
  • Segment all relevant questions by ambiguous pieces and unambiguous pieces (e.g. pawn, bishop, knight, rook, queen, king) vs unambiguous pieces (e.g. pawn that started on a2)
  • Segment by wins and losses
  • Answer: which openings are most effective to learn by ELO rating? (find out which openings are most effective by ELO rating ranges)
  • Opening popularities seem to shift over time. Create animation/flow diagram showing popularity shifts on lichess. Segment by rating ranges

Thanks for reading!