Thanks for checking it out and the feedback. I got the same error for your username. Let me look into it and get back to you....
Game Analytics Web Application

Great catch! I found a temporary fix and just pulled your data. It should work for you now, but I need to audit the results again to make sure they're accurate.
I think the error was related to certain characters in the Event field. This patch might exclude a few games from your history, and that's something I'll need to look into later.

Really cool and worked great for me! It might be interesting to graph both my rating as well as my opponent's ratings (particularly in the box plot). Also just more graphs in general! For example a scatter plot for openings would also be a good addition. Overall though I really like it. It's easy to use, it looks good, and it shows some interesting data.
I'm mostly a js/ts guy but you got me interested in streamlit! Nice work!

Thanks man checked it out. I think its really cool and you clearly put in some good work. Is it on GitHub? Also, my opinion is maybe put the most recent year at the top since I and I'm sure others will have to scroll down and are usually looking for their more recent year. Idk maybe that's just my opinion

Thanks, y'all. Appreciate the feedback.
@penguins380- I like the opening scatter plot idea. I was thinking I could create counts, or "densities", for each opening and then plot the count on the y axis and openings with ticks down on the x axis. Is something like that what you're thinking? I'm wondering if a bar chart would also work. My only thoughts are that there are a ton of openings so maybe I should limit it to some cut off so the x-axis ticks don't blow up, but I need to think about that. For your opponents' ratings, would you want to see a scatter plot of your opponent's average rating? Good ideas, and appreciate the thoughts and kind words.
@acity609- The year sort is a good idea, and I hadn't even thought of that. It's in a private GitHub repo, but after I work out the kinks I'm planning on making the repo public and then also modifying the code to work for Lichess. The Lichess PGN files are structured a little differently, but I think it'll be fairly straight forward to modify this to work for that site. Thanks for your time testing it, and appreciate the kind words.

I like the opening scatter plot idea. I was thinking I could create counts, or "densities", for each opening and then plot the count on the y axis and openings with ticks down on the x axis. Is something like that what you're thinking?
Oooo I really like that idea! I was thinking more y could be win-% and x could be number of games played. Then each point would represent a single opening. That said, I'd imagine both labeling or using a color/shape key would quickly get messy. I'm really not familiar with streamlit or what graphing libs it supports rendering, but maybe down the line you could add interactive graphs. That way you could show a label on hover or something similar. But I'm getting ahead of myself, I really like your idea too. You could even use the top/bottom n openings you've already calculated to limit them. I'd imagine those would probably be the most interesting anyway.
For the ratings, I thought it might be interesting to add another box-plot box(?) next to the existing one. So for each year there would be two boxes next to each other, one for "my" rating and one for "opponents" ratings. Honestly I'm really not sure how interesting this would be. Maybe splitting opponents into won or lost against could be a little more insightful. I also have only been playing chess online for 2 years so my graphs are quite sparse, I'd imagine for long-time players it might be more of a squeeze.
Sorry this is a lot, but final thought, it could also be helpful to "merge" some of the openings. I'm thinking some sort of function that checks the beginning of each opening name for example `Caro-Kann-Defense-Campom...` could be merged with `Caro-Kann-Defense-2.Nf3...` by keeping the key `Caro-Kann-Defense-`. This would be a pretty naive way to do it, but would create a way to group openings. Then you could play with specific opening analysis, for example graphing which variation are you best at, what variation needs improvement, etc.
Anyway, sorry again I got carried away, I've been toying with a somewhat similar electron app and have way too many ideas. Again, really cool project!!

The interactive graphs are a good idea. The second box plots for players with multiple years I think may be crammed, but I could always add a separate box plot for just the opponent ratings or opponent ratings split between wins and losses like you suggest.
Merging the openings also makes sense. At one point I was thinking of doing that, but if I'm remembering correctly, there wasn't a systematic way to split the variable and then group based on a delimiter. (E.g., some openings you would group at the second space in the field, some at the third, another at a dash, etc.) This could be overcome with something like "if Caro is in the field, group this into Caro-Kann", (or maybe a dictionary?), but I think I'd have to write that out for every opening. I'd need to look at the data again to be sure, but I think I remember considering this and thinking there wasn't a systematic way to do it- but take that with a grain of salt. I'll look into it again because I think it would be worthwhile.
Good luck with your app, and this has been some very useful feedback! All of this is worth looking into for sure and would improve the app.

Really nice app!
Few points of feedback:
UX:
-don't make the box outline red, unless someone entered something wrong, also I'd add action buttons, to start analysis, rather than onEnter, or when you click away.
-It is unclear to me what I am looking at for the box-plot, are those my opponents ratings? or just the ratings where I won/lost, I'd change the title.
In the section "Your Best/Wordt Openings":
- It says that the Birds-Opening is one of my best openings, but I have never played it. I assume that this means that I scored well against it with black, but in the color column it says "white", so I think something is going wrong there.
- the time control for 3 days is displayed as "3 days", but 5 days is displayed as 1/432000, I'd make this the same (preferably days)
I also have one user story, cause I always miss this in chess.com's graphs:
As a player, I would like to be able to see a graph of my rating (y) against games played (x), rather than time (x),
So that I can see how well I have been playing over a number of games, rather than a period of time.
But it looks really cool, now i wanna learn python

Really cool webapp!
One suggestion I would give is to sort the drop down box of time controls in ascending or descending. It seems like it currently follows the same sorting order in the table which is based on year and number of games played.

@Mister_CK Thank you for all of your feedback!
- Good catch on the time control display problem- converting that time control from the PGN notation to human readable form is one that I missed, and I will make that correction.
- I will try to change the color of the box.
-I agree that having "Opponent Data" right above the graphs makes what one is looking at misleading. I was hoping the titles of the graphs would be sufficient to tell players they are looking at their own ratings, but I can also see how this is unclear. I will modify this, and appreciate the suggestion.
- What are some numbers of games you would like to see performance over? One approach is that I could try to let users just enter whatever they want, but are there some specific numbers of games you think would be useful?
- For Birds-Opening, I looked at the raw PGN data of some of your games and you have some Chess960 games where you played white and the PGN data tagged the opening as A02 Birds Opening. Here are two examples: On 6/24/2021 you played white against konstantina22, ECO A02, ECO url: https://www.chess.com/openings/Birds-Opening-1...f5. You won this game on time. A second example of where you played white and the game was tagged with Birds-Opening was on 2/28/2019 against Nigrardo, ECO A02, ECO url:https://www.chess.com/openings/Birds-Opening-1...f5. You won this game by resignation.
If you think examples like these are not representative of how Birds-Opening could be shown as one of your best white openings, please let me know the time control and year you were looking at and I can dig into the raw data further. As a side note, I didn't think about variants like 960 and I'm wondering if I should do something to strip these types of games out of the analyses. Please let me know what your thoughts are on that, as well. Thank you for your time and help with the app.
@Leon_liju Agreed that sorting this would be better. Thank you for the suggestion and the time you took exploring the app and letting me know.

Here are the changes that have been pushed into the app. Thanks to y'all for the time you took testing the app and giving me feedback to improve it:
1) 5 day games now show up in human readable form.
2) I can't change the color of the input box with a Streamlit method, and it seems like other work arounds may not be stable in the future. This is the only item in this list that has not changed.
3) The titles of the graphs have been changed for more clarity.
4) Most recent years are now at the top of the drop downs.
5) Time controls in the drop down have also been sorted by length of the game rather than number of games played in that time control.
6) A new data visualization was added which plots the counts of games in each opening for the year and time control combination selected. The openings are aggregated based on the first two words in the ECO descriptions.

@Invincible_potato1 Glad you like, and thanks for the kind words! I found the historical data here from the Published-Data API as @Brooksvillechess says.
The programming language was Python and I used the following packages/libraries: matplotlib, os, pandas, requests, and Streamlit.
Hi,
I built a web app that pulls a player's games and 1) shows the number of games for each year and time control combination 2) identifies the highest rated player played and their rating 3) identifies the highest player beaten and their rating 4) shows who a player has beaten and lost to the most 5) identifies the five best and worst openings for each color for a given year and time control combination and 6) shows graphs of a player's average rating over time.
This is a beta version and feedback is appreciated. Thank you for your consideration,
https://chess-analytics.herokuapp.com/