Inspiration
I was looking for fun projects I could do in my spare time and came upon this hackathon. I choose to do it because I thought it would be fun to to handle a large dataset and do a bunch of math with it using numpy. I also started this project because I was interested in machine learning and I wanted to learn how to implement it. I did run out of time to do this however.
What it does
Asynchronously downloads game data from S3, parses that data, uses it to calculate player skills and region skills, which are in turn used to calculate team skills, which are ordered to create the power rankings.
How I built it
I used Python, to parse and download the data, Django to build the website, AWS EC2 to run the data downloading script because it even though it was sped up using asyncio it still had a very long runtime. I also used EC2 to host the website
Challenges I ran into
I was working alone and I ran out of time to implement everything I wanted to. I also made several major design changes late into development and didn't plan ahead as much as I should have which makes the code pretty messy. I tried to comment everything the best I could. I dropped the machine learning aspect of it and I made a mistake that lead to role information not being saved. As a result I couldn't implement some planned features such as weighing stats differently based on role. I knew nothing about almost every technology I used so I had to learn everything as I went which slowed me down. I ran into a lot of issues with downloading the data and wasted a lot of time on it. I tried so many different things to speed it up but it still took 7+ hours. Even after running for that long on an EC2 instance the first two times for an unknown the process terminated for seemingly no reason before it was done. I tried using a python library that saved the data in case it terminated early but it did not work. Finally I edited the python script to write the data directly to a json file every time it downloaded a game, which I probably should have done to begin with. This seemed to work but for some reason even though its output indicated it had almost combed through every game the resulting data seemed truncated considerably. I ran out of time to try again and I just had to go with what data I had.
Accomplishments that I am proud of
I managed to make something that works, and I learned a lot doing it, which is everything I ever wanted out of this project. I managed to process over 500 gigabytes of data and do math on to to produce meaningful results. I managed to build a website and run it on a webserver. I am very proud of myself for being succesful at this even though much did not go as planned.
What I learned
How to build a website in Django, how to run a web server using Nginx as a reverse proxy, how to use AWS, how to use many different unix commands such as ssh,sftp,nohup, and much more, A lot of linux information, math equations for scaling data, Numpy, Multithreading,Multiprocessing, and Asycio with python(I tried all three even though I only used the latter), Different python features I had never encountered. HTML, networking stuff, How do deal with raw binary in python (I tried a lot of different methods for downloading the S3 data), Json,
What's next for Esports Power Rankings
This project is largely unfinished and I am going to keep working on it in order to implement all of the features I cut because of either mistakes on my end or running out of time. I plan on redownloading all of the data and making sure that I really have all of it accounted for in the rankings. I also plan to update the website with more features and make it look better, alongside getting a domain name and a certificate so people don't think it's a virus.
Built With
- amazon-ec2
- asyncio
- django
- gunicorn
- nginx
- numpy
- python
Log in or sign up for Devpost to join the conversation.