[LoL]

IMGD 2905 Project 4

League of Legends Game Analytics

Due date: Tuesday, April 18th 11:59pm


The goal of this project is to do some game analytics for Riot's League of Legends (League). You will use previous tools setup (project 1) that allow for querying, extraction and analysis of data. You will use the pipeline to extract data from Riot's game data set, analyze game data through charts and tables, and writeup the results in a report for dissemination.


Top | P0 - Setup | P1 - Gold | P2 - Skill | P3 - Seed | P4 - PuckHunt | Hints | Writeup | Submission | Grading

Part 0 - Setup

Revisit the previously setup environment for League of Legends game analytics. Namely, the guide Setup Game Analytics Pipeline Tools and the scripts from Part 1. You will likely want to make copies of working scripts into a new working directory for project 4.

Select a summoner for analysis. The summoner must have played at least 100 competitive games and the summoner cannot be Faker. For this project, the analysis is not of the summoner, per-se, but rather is using the summoner as a seed to obtain a sample of League of Legends matches.

For your chosen summoner, you will need to write a script or scripts to query the Riot API and extract:

  1. Summoner information
  2. List of 100 matches (classic 5v5)
  3. Full match statistics on each match

The script(s) can write to the console (terminal window), or save the output in csv or json format. You will use the output in your analysis for Parts 1-3, below.


Part 1 - The Golden Rule

In League of Legends, players earn gold is earned regularly over time and also by killing enemy minions and Champions, and neutral monsters. Players use gold to buy items (e.g., weapons and armor) for his/her Champion. Gold is a critical for making Champions more powerful and, for team gold, winning the match. However, gold amounts and distributions can vary widely from match to match. What is the role of gold in League of Legends matches?

Total Gold per Match

Analyze the total amount of gold obtained by all players in each match.

To extract total gold, the amount of gold earned by each player in the match (a total of 10 players/match) must be tallied. The amount of gold earned for each player is in the full match json data, under "participants" → "stats" → "goldEarned". For illustration, a json excerpt from a full match is below:

{
  "matchMode": "CLASSIC",
  ...
  "participants": [
    {
      "timeline": {
       ...
       "stats": {
         "doubleKills": 1,
         ...
         "goldEarned": 14446,
         ...

# Print the gold out for 1 player.
# Note: "match" is the full match data from RiotWatch get_match().
players = match['participants']
stats = players[0]['stats']
gold = stats['goldEarned']
print(gold))

Note, there are 10 such participant entries in each full match list.

Analysis should include an appropriate chart (e.g., histogram, cumulative distribution), an appropriate measure of central tendency, and an appropriate measure of spread.

Total Gold per Match versus Duration

Analyze the total gold per match versus the match duration. Analysis should include an appropriate chart (e.g., scatter plot) as well as summary analysis of any observed relationships in the analysis (e.g., gold rate). Detailed match duration analysis by itself is not needed (but can be done).

Match durations can be obtained as for Project 1.

Team Gold Difference versus Win Percent

Analyze the difference between the total gold earned by the winning team minus the losing team.

To determine which team won, there is a "true" or "false" value in each full match file for each team under "teams" → "winner". Since there are two teams, each can be checked. For example, relevant code may look like:

# Check if Team 0 won
is_winner = match['teams'][0]['winner']
if (is_winner == True):
  print("Team 0 won!")

Analysis should include an appropriate chart (e.g., histogram, cumulative distribution), an appropriate measure of central tendency, and an appropriate measure of spread. In addition, there should be appropriate analysis of how often more gold results in a win.


Part 2 - It's Skill, not Luck

League of Legends is primarily a game of skill. As such, analysis as to what differentiates skilled (i.e., high rank) players can be invaluable to understanding the game. Relevant data may include the gold, as per Part 1, but also the number of opposing Champions killed (kills), the number of Champion deaths (deaths) and the number of times an opposing Champion kill was assisted (assists). Killing opposing monsters (minions) yields gold, too, and takes skill. What are some differences in match data for higher ranked players versus lower ranked players?

You can obtain a sample of players of different ranks from the 10 players in each of the matches you analyze. Player rank can be determined for each player in the full match json data, under "participants" → "highestAcheivedSeasonTier". For illustration, a json excerpt from a full match is below:

{
  "matchMode": "CLASSIC",
  ...
  "participants": [
    {
      "timeline": {
       ...
      "highestAcheivedSeasonTier": DIAMOND,
       ...

For example, relevant code might look like:

# Print the rank out for 1 player.
players = match['participants']
rank = players[0]['highestAchievedSeasonTier']
print(rank)

Before reporting on any per-rank analysis, you should report the ranks available, and count in each, from the players in your match selection. If there are rank categories with only a single player, you might consider removing them from analysis.

Gold versus Rank

Analyze the amount of gold earned per player rank. Analysis should include an appropriate chart (e.g., bar chart) with and an appropriate measure of spread, ideally shown in the chart (e.g., as error bars).

KDA versus Rank

Analyze the kills, deaths and assists versus rank. Kills, deaths and assists for each player can be obtained as for gold earned in Part 1, substituting "kills", "deaths" or "assists" for "goldEarned", as appropriate. Note, kills, deaths and assists are often combined into a single number, the ratio of kills + assists / deaths, with various weights given to the "assists" term. Analysis should include an appropriate chart, and show spread (and central tendency, as appropriate).

CS versus Rank

Analyze the number of minions killed (aka "creep score" or "cs") versus rank. Minions killed by each player can be obtained as for gold earned in Part 1, substituting "minionsKilled". Analysis should include an appropriate chart, and show spread (and central tendency, as appropriate).


Part 3 - A Bad Seed?

Your analysis to this point is based on many matches (at least 100), but starting from the vantage of one player (your chosen summoner). Analysis from a different vantage (i.e., a different "seed") may yield different results. How much did the champion you chose impact your results?

Contact another classmate. For either part 1 or part 2, exchange data, suitable for doing comparative analysis with your summoner data. The data exchange should not be the "raw" data (i.e., not the json data from Riot), but rather analyzed data suitable for displaying in a chart.

Using your classmates data, do comparative analysis, being sure to draw appropriate charts that clearly illustrate any comparisons (e.g., side-by-side chart comparisons or charts with two trend lines). Consider box-and-whiskers charts for comparison.


Part 4 - Puck Hunt

Your Data

From the PuckHunt data provided, analyze the average time to hit (select) the target (puck) versus delay for your data.

All Data

For the full set of PuckHunt data, analyze one additional aspect of the data set. Possibilities include:

  1. Average time to hit versus speed (impulse)
  2. Number of trigger pulls versus delay
  3. Number of trigger pulls versus speed
  4. Thumbstick movement versus delay
  5. Thumbstick movement versus speed
  6. Distributions of catch times for delay and/or speed
  7. Another aspect of your own choosing

You should have the needed data files emailed to you. For format, the headers are as follows:


Hints

Remember, for all Riot API queries, there is a limit to how fast requests can be made. When making many queries back-to-back (e.g., full match statistics for 100 matches), make sure to "sleep" between queries. See the Hints from Project 1 for details.

Note, there are options other than pulling 100 matches from the Riot API each time per-match analysis is done. These include:

For project questions, please post your question on the imgd2905 question-answer forum. Both the professor and staff will look to answer all questions there, but students can also answer each other's questions. You may even find your question has been answered already!


Writeup

Writeup a short report on the above analysis. Include a description of the methodology, particularly as it relates to the results obtained. Have clearly labeled sections for each Part.

Important! Your report must include at least one of each:

  1. Cumulative distribution chart
  2. Histogram chart
  3. Box-and-whiskers chart
  4. Scatter plot

Be sure to include relevant details from Part 0 (e.g., summoner chosen, with profile of rank and matches) in the report.

You do not need to include details on how the data for Part 4 - PuckHunt was gathered, but you should include textural analysis.

All guidelines for data analysis (charts and writeup) pertain to this report, too.

In particular, you should see the Postmortem Feedback on Graded Projects for project 3.


Submission

The assignment is to be submitted electronically via the Instruct Assist Website by 11:59pm on the day due.

The submission is a report in PDF, named proj1-lastname.pdf

To submit your assignment, log into the Instruct Assist website:

https://ia.wpi.edu/imgd2905/

Use your WPI username and password for access. Visit:

Tools → File Submission

Select "Project 4" from the dropdown and then "Browse" and select the assignment file (i.e., proj4-lastname.pdf).

Make sure to hit "Upload File" after selecting it!

If successful, there should be a line similar to:

 Creator    Upload Time             File Name        Size    Status   Removal
 Claypool 2017-04-16 19:41:17  proj4-claypool.pdf   1228 KB  On Time  Delete


Grading

All accomplishments are shown through the report. The point break down does not necessarily reflect effort or time on task. Rather, the scale is graduated to provide for increasingly more effort required for the same reward (points).

[matches]

Breakdown

Part 1 40% Analysis of gold: gold per match, gold per match versus duration, team gold difference versus win percent.
Part 2 30% Analysis of skill: gold versus rank, kda versus rank, cs versus rank.
Part 3 20% Comparison of Part 1 (gold) or Part 2 (skill) with data from another summoner (classmate).
Part 4 10% PuckHunt: analysis of your data, analysis of full data.

Rubric

100-90. The submission clearly exceeds requirements. All parts of the project have been completed or nearly completed. The report is clearly organized and well-written, charts and tables are clearly labeled and described and messages provided about each part of the analysis.

89-80. The submission meets requirements. The first 3 parts of the project have been completed or nearly completed, but not part 4. The report is organized and well-written, charts and tables are labeled and described and messages provided about most of the analysis.

79-70. The submission barely meets requirements. The first 2 parts of the project have been completed or nearly completed, but not all of parts 3 or 4. The report is semi-organized and semi-well-written, charts and tables are somewhat labeled and described, but parts may be missing. Messages are not always clearly provided for the analysis.

69-60. The project fails to meet requirements in some places. The first part of the project has been completed or nearly completed, but not all of part 2 and not parts 3 or 4. The report is not well-organized nor well-written, charts and tables are not labeled or may be missing. Messages are not always provided for the analysis.

59-0. The project does not meet requirements. No part of the project has been completed, or only part 1. The report is not well-organized nor well-written, charts and tables are not labeled and/or are missing. Messages are not consistently provided for the analysis.

Postmortem Feedback on Graded Projects

Based on graded projects, see:

proj4-postmortem.pptx
for some examples and notes of caution related to project 4, specifically< and data analytics, in general. general.


Top | P0 - Setup | P1 - Gold | P2 - Skill | P3 - Seed | P4 - PuckHunt | Hints | Writeup | Submission | Grading

Return to the IMGD 2905 home page

Questions: imgd2905 question-answer forum