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.
The data are retrieved via the API (HTTP request along with personal API key) under a JSON format :
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)
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.
Clearly we see the cap in the LVL quantity vs. time played.
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.
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.
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).
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.
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.