Tutorial Advancement by Teja Tammali & Varun Sharma
To begin this article about our new proposal for a new League of Legends tutorial system we will first discuss what motivations led us to this project and why we think it is important. We will also discuss what end goal we have in mind!
It is no surprise that one of the biggest problems in League of Legends is the skill gap between various ranks in the game. We are trying to solve that problem by analyzing how low elo players can improve. This project hopes to find disparities or problem occurrences with their current code and algorithm that create these significant skill gaps. Inside this api as well as others provided by Riot Games, we will specifically find “low elo” statistical rates and values. Specific data and how it was used and applied will be discussed later in the article! League of Legends has a stigma as a challenging game for new players, and we are sure we will find why in the data we can extract. This data is essential for the business aspect because there is potential to break that initial skill gap and learning curve. This is why part of our target audience is a larger stakeholder within Riot Games because we want to show them concrete data that their game has a hard learning curve and therefore creates a smaller new player base. If the particular solution to the problem comes true, then the game will see much more popularity. Some insights we want to extract are win rates on certain champions within the game, especially those that are better known within the community as low elo champions. We also hope to extract game data on certain champions that are banned a lot and expand that towards building patterns and champion data to better equip uneducated players with data about how to help bridge that initial skill gap.
The reason we want to present this to a target audience of Riot Stakeholders is that it is mutually beneficial to both the player base and the company to help their newer and lower elo players within the game. For the players, we can continue to have a better, more popular game that has an active player base. These things keep the game fresh and fun. More players mean a bigger community which the player base would welcome. For the company, they get to retain their player base and not lose their low elo players who get discouraged. The company can now use the data we get to help make a better tutorial plan. A better tutorial plan would help break that skill gap because at the moment the tutorial only explains how to beat the AI and not other much more skilled players. We hope to present enough information to the stakeholders to show that they need to change their tutorial system to include some of the data we will present so people can practice with it and improve.
To continue, we will now discuss the data we worked with and how we obtained it, used it, applied it, and how we can draw insights from it. Data will be collected by calling the API key into the code and using frameworks that support the API, such as Cassiopeia vs Riot-Watcher. We mostly dealt with Riot-Watcher. There are many ways the team tried to use the API and get the data however. One way is using the developer portal itself by Riot. We found that is a very inefficient way to retrieve match information and specific data we needed. In the developer portal, there are multiple get requests that are needed to be run and it’s just very hectic to go through them manually, entering in the UID and various parameters. This is the reason we primarily dealt with Riot-Watcher over Cassiopeia. To continue, the code will be written in Python using Spyder as the code text editor. The data includes win rates, champion play rates/bank rates, positional play rates, and elements provided to everyone such as tutorial information. We wanted this data because we often feel these are the pieces of information missing from newer players that could help them bridge the skill gaps mentioned earlier. The data collected from the API includes data on example champions we plan to use for this project, itemization data for the champions as mentioned in the data collection report goals, and “role” data on the champions. Data we collected about the champions included a few of the more popular champions within the game as they had the most data on them and it was easy to make better conclusions from them. We took a few champions from each of the roles in the game that had the most data on them. With this data, we have data on certain champions and where they play the most, also known as their role. So how did we work with Riot-watcher to get the data? Although Riot-Watcher is a lot more hands-on and a bit more difficult to pick up, it was less buggy to deal with in comparison to Cassiopeia. The team had to find a way to store the API on the computer and call it into the code. So we had a perfect idea. The team decided to make a setup_env function that loads the dotenv as well as the API key stored on the computer, then proceeds to tell Riot-Watcher to use League of Legends functions with the API key. The results we found were large and are that we can pretty much retrieve any data we want from a League of Legends match. This includes the type of champion played, what the player builds throughout the match, what type of attack they have done on another champion, etc. For example, from the match information gathered, there are more than 2,000 values to look at as mentioned before. One specific analysis the team has done is gathering multiple match ids and displaying the game time for each match. Now let’s gather at our end goal: to use this data to present to Riot stakeholders that there is a need for a better tutorial program. We wanted to use this vast amount of data and apply it more than programs that are already out there. We want to teach players everything they need in terms of basics on the League of Legends client itself which again is mutually beneficial for the player and the company. At last, the team will not need to overly convert from different formats as the API is very friendly to work with Python using the required frameworks. The only process that needs to be done is to parse the data from the JSON into Python, resulting in the creation of a dictionary. If needed, we can also convert the Python objects like tuples, strings, ints, etc. into JSON strings.
Another method the team was attempting to do is get the Kernel to work within the Python code, so instead of using an API key, the team would retrieve information from the URL provided. When attempting to do this, the team used a postman. Postman API allows users of the application programmatically access data stored in Postman account with ease, basically meaning it enables us to use this application for API testing. Furthermore, it is an HTTP client that tests HTTP requests, utilizing a graphical user interface, through which we obtain different types of responses that need to be subsequently validated. When attempting to do this, however, we would always get an “unauthorized” error since the API development key isn’t put in the URL. When attempting to put in the development key at the end of the URL as ?api_key = <key>, the link would not work which made the process difficult to work with. Other key ideas that were used from the course is using frameworks for time series, data manipulation, and data visualization. Some popular frameworks we used include Pandas and Matplotlib. Pandas was used to read in the match data if it was saved as a .json file as well as data manipulation such as .head(). Matplotlib was used in order to create simple graphs for analysis such as creating a plt.scatter.
To analyze insights, mostly graphs and texts were used.
The graph shows that the more gold earned by a player, the more damage that can be done to minions, towers, or even opponents.
As you can see from this output, this information will be displayed when a player asks which of the champions fall in different categories. In this case, “Mage” was entered and outputted all the different mages that exist in this game. Furthermore, if a player asks information about a champion, information about them will be displayed such as shown that Ahri has 500 hp at level 1.
Additional information about Ahri’s Q key move output.
So for the text that was returned above, the basic items of ‘boots’ were returned with their description, what it builds into, etc. As you can see, all the items are based on numbers and not their actual names, for example ‘into’: [‘3158’, ‘3007’…]. This was one problem while looking at the match data is that there are various ids for each element of the game. Since there are so many items that each champion can build within a match, they all are under the name “mythicItemUsed” followed by the id. The challenging part is looking into what the specific id links to what specific in-game mythic item.
In order to talk about the insights for the stakeholders, we can use the data displayed above as well as the data we gathered in order to compare what we want our goal to be and how that is better than other services already available as well as why it is important for the game itself. Firstly, the data we gathered is going to be used to first build a new tutorial system and with that help retain new players. This tutorial will teach players how to best optimize the champions they play. The reason they can do this is that we craft the tutorial around the data we gathered to best set up the player with his champion in the role he is best in, with the best items possible, and the best information on other in-game mechanics. This is a program that will be readily available to the League of Legends client rather than having to use other websites or services to get this information. These websites/programs include OP.gg, U.gg, and blitz.gg. All three of these use a version of Riot Games League of Legends API to give data to users. In fact, all 3 provide relatively the same service so that puts them in direct competition with each other. They all use the League of legends API to provide champion data such as win rates, item builds, and role data They allow you to track how successful you are at the game and on a certain champion. However, these 3 programs listed above are all not Riot Games affiliated and just work in tandem with them. That means there is no real change to the actual game itself and new players have to discover this resource exists and then how to use it. Our goal is to implement this into the game directly at some point so that new players have a better-equipped tutorial system readily available in the League of Legends client. Having something better than what is already out there and available but also on the League of Legends client itself will incentivize players to use the Riot-provided materials first and therefore grow the brand more. Growing the brand will grow the player base and from there they will see more game popularity, more profits, and more freedom to pursue other projects within the game due to this new popularity. This useful tool could help retain a frustrated player base which only proves to be helpful for the company.
The most irritating limitation of this project is having to refresh the API key every 24 hours. Riot is very strict when it comes to API usage. An attempt for registering a product was done as well, but there is no update on behalf of those who accept the requests. Other than that, other limitations include the research and tutorials available to retrieve information in Python. There are documents from the Riot-Watcher and data dragon on how to work through the API to gather data but it can get very hectic once there is so much data to work with.