Motivation

I like Destiny and I like numbers, analyzing data and making some nice visualizations. Few weeks ago I learned about the Bungie API used to get access to your own character(s) statistics. Destiny Item Manager and Destiny Tracker are excellent examples of how to use this API.

There is 2 levels to max in Destiny : character level (LVL) and Light level (LIGHT). LVL increases by doing activities (story missions, strikes, patrols) whereas LIGHT is an aggregate of the LIGHT levels of all you weapons/gears.

I always like the progression in the game because it is very satisfactory to see weapons getting better, gears getting more details. The feeling is also traduced each time LVL increases by the short animation and display at the screen.

Ultimately a good progression level should entertain the player in order to keep him playing the game. Other examples are Diablo 3 where the character level cap (70) is relatively fast and The Division. So my goal was to look how the data are traducing (if they do) this feeling.

Methodology

The data are retrieved via the API (HTTP request along with personal API key) under a JSON format :

The character I used for these data analysis (Female Warlock) is still at :
id1 ='4611686018428669871'
id2 ='2305843009399642403'

#get character summary
fullName = 'http://www.bungie.net/Platform/Destiny/2/Account/'+(id1)+'/Character/'+ (id2)

(Although now it has been stripped of its best gears and weapons)

Plots

LIGHT vs total time played

I added the location/Planet/Activity in the data as well. It should give some informations about what type of activities the player is doing through its progression. We can expect more story missions as the beginning then more strikes towards the level cap.

The progression looked linear for for time played < 500 minutes then it takes a polynomial second degree shape. So we can quickly evaluate this by modelling the LIGHT level vs time played with a general polynomial function : \[a + bx+ cx^{2}\]

## 
## Call:
## lm(formula = df$LIGHT ~ (df$time_played + I(df$time_played^2)))
## 
## Residuals:
##      Min       1Q   Median       3Q      Max 
## -13.6327  -3.4388  -0.6347   2.8556  18.7959 
## 
## Coefficients:
##                       Estimate Std. Error t value Pr(>|t|)    
## (Intercept)          5.788e+00  3.497e-01   16.55   <2e-16 ***
## df$time_played       2.409e-01  7.310e-04  329.58   <2e-16 ***
## I(df$time_played^2) -5.228e-05  3.177e-07 -164.53   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 5.277 on 2026 degrees of freedom
## Multiple R-squared:  0.996,  Adjusted R-squared:  0.996 
## F-statistic: 2.525e+05 on 2 and 2026 DF,  p-value: < 2.2e-16

Thehigh R-squared value of the fit (0.996) is confirming the trend (polynomial) describing how the LIGHt level evolves as a function of the time played. However It may not be true for day-1 characters because of the level cap.

LVL vs total time played

Clearly we see the cap in the LVL quantity vs. time played.

LVL vs LIGHT

LVL vs session

I defined a (gameplay) session each time I play this character ; most of the time I played for 1-2 hours. Having this quantity helps better to have an understanding of how the levels increased vs time/time_played_in_session.

What is shown here is the LIGHT increase vs the time played for each session, where session is in chronological order. Lines are linear fits.

  • We see that the slopes of the linear fits decrease as the session index increases
  • it means that at the beginning, the progression is very fast
  • towards the LIGHT cap (session ~19-20), the increase in LIGHT level is very small for the time played ( = level cap, grind)

Summary of activities

I was surprised to notice how much I spent in Social Activities ( = Tower, Reef). Clearly I spent a lot of time for gears and weapons management/optimization. It is also reflected in the plots LIGHT vs. total time played where we see small peaks at recurrent times and traduces how I play : session of 1-2 hours of strikes/story missions then I go to the Tower to decrypt engrams, hence the increase in LIGHT level.

Reputations vs. time played

Similarly we can plot the different reputations vs the time played

Crucible reputation is null because I haven’t played PVP games at all during that period. It’s interesting to notice that both the Vanguard and Cryptarch reputations look similar vs time played (and are close together) while it may take more time to increase the other reputations. We also see (as expected) that Eris, Petra and Variks reputations start later in time since you have to unlock the locations first (Moon, Reef).

Quick comment on the code

On the plots LVL vs. total time played, there is no data around 1100 minutes. The reason is because as I wanted to code the LVL as a float, I calculated the remaining as :

charLevel = char['Response']['data']['characterLevel'] + float(char['Response']['data']['levelProgression']['progressToNextLevel'])/char['Response']['data']['levelProgression']['nextLevelAt']

However as soon as I reached LVL = 40, the quantity char[‘Response’][‘data’][‘levelProgression’][‘nextLevelAt’] is null hence the division is undefined, script broke.

Comparison with a day-1 character

For comparison of the LIGHT level vs time played, I tracked the data of my hunter (day-1) since ROI.

As mentioned before, the polynomial shape is only true when starting a new character. I do not have the data from the past 33000 minutes for this character but it would be very interesting to see the shape.