Advertisement
Guest User

Lichess correlation script

a guest
Oct 31st, 2022
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 2.41 KB | Source Code | 0 0
  1. #!/bin/bash
  2.  
  3. # quick and dirty script to calculate rating correlation across rapid &
  4. # classical time control for users in a lichess team. depends on jq,
  5. # mysql, and wget
  6.  
  7. TEAMID="lichess-swiss"
  8. USERLISTURL="https://lichess.org/api/team/$TEAMID/users"
  9. MINGAMES=30
  10. USERFILE="users"
  11. CSVFILE="users.rating.csv"
  12.  
  13. MYSQLUSER="mysql"
  14. MYSQLPASSWD="mysql"
  15. MYSQLDB="lichess_rating"
  16. MYSQLTABLE="users"
  17.  
  18. if [ ! -e "$CSVFILE" ]
  19. then
  20.     if [ ! -e "$USERFILE" ]
  21.     then
  22.         # this can take a very long time; to get a smaller sample you can CTRL-V and then examine
  23.         # users.<hash>.part. to calculate i looked at the first 17725 users.
  24.         #wget $USERLISTURL
  25.  
  26.         echo "Please download a portion of $USERLISTURL" 2>&1
  27.         exit 1
  28.     fi
  29.  
  30.     touch $CSVFILE
  31.     echo "Processing file $USERFILE ..." 2>&1
  32.     count="1"
  33.  
  34.     for userProf in $(grep \"id\"  users)
  35.     do
  36.         if [ "$(( $count%10 ))" == "0" ]
  37.         then
  38.             echo "    $count lines processed...." 2>&1
  39.         fi
  40.  
  41.         echo "$userProf" | jq -r '.  | [.id, .perfs.rapid.games, .perfs.rapid.rating, .perfs.classical.games, .perfs.classical.rating] | @csv' >> $CSVFILE 2>/dev/null
  42.  
  43.         count=$(( $count + 1 ))
  44.     done
  45. fi
  46.  
  47. cp $CSVFILE /tmp
  48. chmod 644 /tmp/$CSVFILE
  49.  
  50. mysql -u$MYSQLUSER -p$MYSQLPASSWD -e "CREATE DATABASE $MYSQLDB"
  51. mysql -u$MYSQLUSER -p$MYSQLPASSWD $MYSQLDB -e "CREATE TABLE $MYSQLTABLE ( id varchar(255), rapid_games int, rapid_rating double, classical_games int, classical_rating double )"
  52. mysql -umysql -pmysql $MYSQLDB --local_infile=1 -e "LOAD DATA INFILE '/tmp/$CSVFILE' INTO TABLE $MYSQLTABLE FIELDS TERMINATED BY ','"
  53.  
  54. echo "The correlation between rapid and classical ratings from users with at least $MINGAMES games in both is:"
  55.  
  56. mysql -umysql -pmysql $MYSQLDB -e "SELECT (AVG(rapid_rating * classical_rating) - (AVG(rapid_rating) * AVG(classical_rating))) / (STDDEV(rapid_rating) * STDDEV(classical_rating)) AS 'Pearsons r' FROM $MYSQLTABLE WHERE classical_games>$MINGAMES AND rapid_games>$MINGAMES"
  57.  
  58. echo "The average rating difference between rapid and classical ratings from users with at least $MINGAMES games in both is:"
  59.  
  60. mysql -umysql -pmysql $MYSQLDB -e "SELECT AVG(rating_diff) FROM (SELECT id, ABS(classical_rating - rapid_rating) AS rating_diff FROM users WHERE classical_games>30 AND rapid_games>30 ORDER BY rating_diff) a"
  61.  
  62. mysql -u$MYSQLUSER -p$MYSQLPASSWD -e "DROP DATABASE $MYSQLDB"
  63.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement