DoNe does data analysis

Read and discuss official announcements, information and news about the DDRaceNetwork.
Forum rules
Please consider wheter there is a more appropiate subforum before creating a new thread here.
This is for offical DDRaceNetwork-related information and discussion only.
User avatar
timakro
Posts: 414
Joined: Mon May 05, 2014 6:05 pm
Location: Germany
Player profile: http://ddnet.tw/players/timakro/
Mapper profile: http://ddnet.tw/mappers/timakro/
Clan: unique

DoNe does data analysis

Post by timakro »

This topic is a series where I'll frequently add new analyses of the ddnet stats data, that is released daily. I'll include the code snippets used to calculate the results. I'll also explain them roughly, because I use python they should be easy to understand for you. Feel free to suggest new analyses below this topic but please make sure that they're not already done. If you're interested in the data, I'm using the ddnet stats in the csv format, you can find the download link in this thread.

Already present data analyses
To make this topic complete I'll give links to sites where people already did some data analyses with the ddnet stats. Ofcourse the Statistics & Charts page has some analyses of the ddnet stats but using the internal SQL database. Also deen did data analysis in The History of DDNet thread. Please check these out before suggesting new analyses.

Python module
I'm using a self written python module that downloads the ddnet stats and converts some of the data to python objects which is ridiculous slow. Though it's pretty comfortable to work with python objects in the analysis later. The module can be found at github. I'm not gonna write the first lines of every script in this thread over and over. Just rember that these variables exist in every script.

Code: Select all

import ddnet_stats

maps = ddnet_stats.get_maps()
finishes = ddnet_stats.get_finishes()
teamfinishes = ddnet_stats.get_teamfinishes()
These variables are lists filled with dictonaries. Every dictionary in a list has the same keys. Here's a list of the keys and an explanation of them if it's not obious what there values mean.
  • maps
    • mapper
    • name -> Mapname
    • mappers -> List of all mappers
    • server -> e.g. "Brutal"
    • points
    • stars
    • release -> datetime.datetime object, can be None since release times weren't recorded at the start of DDNet
  • finishes
    • date -> datetime.datetime object when the map was finished
    • map
    • time -> datetime.timedelta object of the finish time
    • server -> e.g. "GER", can be None since servers weren't saved earilier
    • player
  • teamfinishes
    The same keys as finishes except for server is not included and the team key is added:
    • team -> team id for the teamfinish, e.g. "c8ceea1d-f48e-11"
Another important thing to mention is that every teamfinish is included in the finishes list. The teamfinishes list is just to concatenate the finishes.

Understanding the data
First off I have some questions about the data. Let's get right into it by calculating some of the information you can see ingame using the ddnet stats. We will compare it to the ingame results to see if we understand the data right.

How does DDNet calculate the number of mapfinishes on a map?
As an example I choose the map Kobra to calculate the number of finishes. My first attempt was to calculate the mapfinishes by the number of finishes plus the number of teamfinishes with a unique team id.

Code: Select all

mapname = "Kobra"
mapfinishes = 0
for f in finishes:
    if f["map"] == mapname:
        mapfinishes += 1
teams = []
for f in teamfinishes:
    if f["map"] == mapname and f["team"] not in teams:
        mapfinishes += 1
        teams.append(f["team"])
print "There are", mapfinishes, "finishes on", mapname
First I go over all the finishes using a for loop. If the finish was made on Kobra I increase the number of mapfinishes. In the second loop I go over the teamfinishes. Ofcourse I check again if the mapname matches and if thats the case I make sure to count a team only once by using a list which holds the already counted teams.
My script says There are 16187 finishes on Kobra, which turns out to be wrong since it says ingame *** "Kobra" by Zerodin on Novice (★★★★✰, 4 points, 15202 finishes by 6366 tees, released 1 year and 6 months ago). So what went wrong here? I couldn't figure it out and asked deen for help he told me that the teamfinishes are already included in the finishes so we can easily fix it by removing the second loop. Additionally we'll add a list which holds all the different players that finished Kobra, so we can count them later.

Code: Select all

players = []The enumerate function simply makes it possible to get the number of the item in the list.
for i, f in enumerate(finishes):
    if f["map"] == mapname:
        mapfinishes += 1
        if f["player"] not in players:
            players.append(f["player"])
print "There are", mapfinishes, "finishes by", len(players), "players on", mapname
There are 15200 finishes by 6365 players on Kobra, looks right! Since the data is only released daily at 5:30 am, a small difference is fine.

Calculating a players points

Code: Select all

player = "Juandissimo"
points = 0
added_maps = []
for f in finishes:
    if f["player"] == player and f["map"] not in added_maps:
        for m in maps:
            if m["name"] == f["map"]:
                points += m["points"]
                break
        added_maps.append(f["map"])
print player, "has", points, "points"
First we go over every finish. If the finish is by Juandissimo and we haven't already counted the map we add the maps points to Juandissimo's points and add the map to the list of already counted maps.
My script says Juandissimo has 6221 points, which is totally right! *** 19. Juandissimo Points: 6221, requested by DoNe.

Are team ids unique for every finish?
So my question is if they are really unique for one finish or maybe for a combination of players or anything like that.

Code: Select all

for i, a in enumerate(teamfinishes):
    if i%100 == 0:
        print i, "/", len(teamfinishes)
    for b in teamfinishes:
        if a["team"] == b["team"] and a["time"] != b["time"]:
            print "Not unique!"
            sys.exit()
print "Unique!"
The enumerate function simply makes it possible to get the number of the item in the list. Since this takes ages to calculate I added a system that tells me how many calculations are done so far. If the number of the item in the list we are currently at devided by 100 is an integer we print how far we are with the calculations. We assume that if there are two teamfinishes which team ids are equal but there finish times aren't equal the team ids are not unique for every finish in general. sys.exit just terminates the whole program so print "Unique!" will not be executed anymore. Happy scrolling! :P

Code: Select all

Are team ids unique for one finish?
0 / 142234
100 / 142234
200 / 142234
300 / 142234
400 / 142234
500 / 142234
600 / 142234
700 / 142234
800 / 142234
900 / 142234
1000 / 142234
1100 / 142234
1200 / 142234
1300 / 142234
1400 / 142234
1500 / 142234
1600 / 142234
1700 / 142234
1800 / 142234
1900 / 142234
2000 / 142234
2100 / 142234
2200 / 142234
2300 / 142234
2400 / 142234
2500 / 142234
2600 / 142234
2700 / 142234
2800 / 142234
2900 / 142234
3000 / 142234
3100 / 142234
3200 / 142234
3300 / 142234
3400 / 142234
3500 / 142234
3600 / 142234
3700 / 142234
3800 / 142234
3900 / 142234
4000 / 142234
4100 / 142234
4200 / 142234
4300 / 142234
4400 / 142234
4500 / 142234
4600 / 142234
4700 / 142234
4800 / 142234
4900 / 142234
5000 / 142234
5100 / 142234
5200 / 142234
5300 / 142234
5400 / 142234
5500 / 142234
5600 / 142234
5700 / 142234
5800 / 142234
5900 / 142234
6000 / 142234
6100 / 142234
6200 / 142234
6300 / 142234
6400 / 142234
6500 / 142234
6600 / 142234
6700 / 142234
6800 / 142234
6900 / 142234
7000 / 142234
7100 / 142234
7200 / 142234
7300 / 142234
7400 / 142234
7500 / 142234
7600 / 142234
7700 / 142234
7800 / 142234
7900 / 142234
8000 / 142234
8100 / 142234
8200 / 142234
8300 / 142234
8400 / 142234
8500 / 142234
8600 / 142234
8700 / 142234
8800 / 142234
8900 / 142234
9000 / 142234
9100 / 142234
9200 / 142234
9300 / 142234
9400 / 142234
9500 / 142234
9600 / 142234
9700 / 142234
9800 / 142234
9900 / 142234
10000 / 142234
10100 / 142234
10200 / 142234
10300 / 142234
10400 / 142234
10500 / 142234
10600 / 142234
10700 / 142234
10800 / 142234
10900 / 142234
11000 / 142234
11100 / 142234
11200 / 142234
11300 / 142234
11400 / 142234
11500 / 142234
11600 / 142234
11700 / 142234
11800 / 142234
11900 / 142234
12000 / 142234
12100 / 142234
12200 / 142234
12300 / 142234
12400 / 142234
12500 / 142234
12600 / 142234
12700 / 142234
12800 / 142234
12900 / 142234
13000 / 142234
13100 / 142234
13200 / 142234
13300 / 142234
13400 / 142234
13500 / 142234
13600 / 142234
13700 / 142234
13800 / 142234
13900 / 142234
14000 / 142234
14100 / 142234
14200 / 142234
14300 / 142234
14400 / 142234
14500 / 142234
14600 / 142234
14700 / 142234
14800 / 142234
14900 / 142234
15000 / 142234
15100 / 142234
15200 / 142234
15300 / 142234
15400 / 142234
15500 / 142234
15600 / 142234
15700 / 142234
15800 / 142234
15900 / 142234
16000 / 142234
16100 / 142234
16200 / 142234
16300 / 142234
16400 / 142234
16500 / 142234
16600 / 142234
16700 / 142234
16800 / 142234
16900 / 142234
17000 / 142234
17100 / 142234
17200 / 142234
17300 / 142234
17400 / 142234
17500 / 142234
17600 / 142234
17700 / 142234
17800 / 142234
17900 / 142234
18000 / 142234
18100 / 142234
18200 / 142234
18300 / 142234
18400 / 142234
18500 / 142234
18600 / 142234
18700 / 142234
18800 / 142234
18900 / 142234
19000 / 142234
19100 / 142234
19200 / 142234
19300 / 142234
19400 / 142234
19500 / 142234
19600 / 142234
19700 / 142234
19800 / 142234
19900 / 142234
20000 / 142234
20100 / 142234
20200 / 142234
20300 / 142234
20400 / 142234
20500 / 142234
20600 / 142234
20700 / 142234
20800 / 142234
20900 / 142234
21000 / 142234
21100 / 142234
21200 / 142234
21300 / 142234
21400 / 142234
21500 / 142234
21600 / 142234
21700 / 142234
21800 / 142234
21900 / 142234
22000 / 142234
22100 / 142234
22200 / 142234
22300 / 142234
22400 / 142234
22500 / 142234
22600 / 142234
22700 / 142234
22800 / 142234
22900 / 142234
23000 / 142234
23100 / 142234
23200 / 142234
23300 / 142234
23400 / 142234
23500 / 142234
23600 / 142234
23700 / 142234
23800 / 142234
23900 / 142234
24000 / 142234
24100 / 142234
24200 / 142234
24300 / 142234
24400 / 142234
24500 / 142234
24600 / 142234
24700 / 142234
24800 / 142234
24900 / 142234
25000 / 142234
25100 / 142234
25200 / 142234
25300 / 142234
25400 / 142234
25500 / 142234
25600 / 142234
25700 / 142234
25800 / 142234
25900 / 142234
26000 / 142234
26100 / 142234
26200 / 142234
26300 / 142234
26400 / 142234
26500 / 142234
26600 / 142234
26700 / 142234
26800 / 142234
26900 / 142234
27000 / 142234
27100 / 142234
27200 / 142234
27300 / 142234
27400 / 142234
27500 / 142234
27600 / 142234
27700 / 142234
27800 / 142234
27900 / 142234
28000 / 142234
28100 / 142234
28200 / 142234
28300 / 142234
28400 / 142234
28500 / 142234
28600 / 142234
28700 / 142234
28800 / 142234
28900 / 142234
29000 / 142234
29100 / 142234
29200 / 142234
29300 / 142234
29400 / 142234
29500 / 142234
29600 / 142234
29700 / 142234
29800 / 142234
29900 / 142234
30000 / 142234
30100 / 142234
30200 / 142234
30300 / 142234
30400 / 142234
30500 / 142234
30600 / 142234
30700 / 142234
30800 / 142234
30900 / 142234
31000 / 142234
31100 / 142234
31200 / 142234
31300 / 142234
31400 / 142234
31500 / 142234
31600 / 142234
31700 / 142234
31800 / 142234
31900 / 142234
32000 / 142234
32100 / 142234
32200 / 142234
32300 / 142234
32400 / 142234
32500 / 142234
32600 / 142234
32700 / 142234
32800 / 142234
32900 / 142234
33000 / 142234
33100 / 142234
33200 / 142234
33300 / 142234
33400 / 142234
33500 / 142234
33600 / 142234
33700 / 142234
33800 / 142234
33900 / 142234
34000 / 142234
34100 / 142234
34200 / 142234
34300 / 142234
34400 / 142234
34500 / 142234
34600 / 142234
34700 / 142234
34800 / 142234
34900 / 142234
35000 / 142234
35100 / 142234
35200 / 142234
35300 / 142234
35400 / 142234
35500 / 142234
35600 / 142234
35700 / 142234
35800 / 142234
35900 / 142234
36000 / 142234
36100 / 142234
36200 / 142234
36300 / 142234
36400 / 142234
36500 / 142234
36600 / 142234
36700 / 142234
36800 / 142234
36900 / 142234
37000 / 142234
37100 / 142234
37200 / 142234
37300 / 142234
37400 / 142234
37500 / 142234
37600 / 142234
37700 / 142234
37800 / 142234
37900 / 142234
38000 / 142234
38100 / 142234
38200 / 142234
38300 / 142234
38400 / 142234
38500 / 142234
38600 / 142234
38700 / 142234
38800 / 142234
38900 / 142234
39000 / 142234
39100 / 142234
39200 / 142234
39300 / 142234
39400 / 142234
39500 / 142234
39600 / 142234
39700 / 142234
39800 / 142234
39900 / 142234
40000 / 142234
40100 / 142234
40200 / 142234
40300 / 142234
40400 / 142234
40500 / 142234
40600 / 142234
40700 / 142234
40800 / 142234
40900 / 142234
41000 / 142234
41100 / 142234
41200 / 142234
41300 / 142234
41400 / 142234
41500 / 142234
41600 / 142234
41700 / 142234
41800 / 142234
41900 / 142234
42000 / 142234
42100 / 142234
42200 / 142234
42300 / 142234
42400 / 142234
42500 / 142234
42600 / 142234
42700 / 142234
42800 / 142234
42900 / 142234
43000 / 142234
43100 / 142234
43200 / 142234
43300 / 142234
43400 / 142234
43500 / 142234
43600 / 142234
43700 / 142234
43800 / 142234
43900 / 142234
44000 / 142234
44100 / 142234
44200 / 142234
44300 / 142234
44400 / 142234
44500 / 142234
44600 / 142234
44700 / 142234
44800 / 142234
44900 / 142234
45000 / 142234
45100 / 142234
45200 / 142234
45300 / 142234
45400 / 142234
45500 / 142234
45600 / 142234
45700 / 142234
45800 / 142234
45900 / 142234
46000 / 142234
46100 / 142234
46200 / 142234
46300 / 142234
46400 / 142234
46500 / 142234
46600 / 142234
46700 / 142234
46800 / 142234
46900 / 142234
47000 / 142234
47100 / 142234
47200 / 142234
47300 / 142234
47400 / 142234
47500 / 142234
47600 / 142234
47700 / 142234
47800 / 142234
47900 / 142234
48000 / 142234
48100 / 142234
48200 / 142234
48300 / 142234
48400 / 142234
48500 / 142234
48600 / 142234
48700 / 142234
48800 / 142234
48900 / 142234
49000 / 142234
49100 / 142234
49200 / 142234
49300 / 142234
49400 / 142234
49500 / 142234
49600 / 142234
49700 / 142234
49800 / 142234
49900 / 142234
50000 / 142234
50100 / 142234
50200 / 142234
50300 / 142234
50400 / 142234
50500 / 142234
50600 / 142234
50700 / 142234
50800 / 142234
50900 / 142234
51000 / 142234
51100 / 142234
51200 / 142234
51300 / 142234
51400 / 142234
51500 / 142234
51600 / 142234
51700 / 142234
51800 / 142234
51900 / 142234
52000 / 142234
52100 / 142234
52200 / 142234
52300 / 142234
52400 / 142234
52500 / 142234
52600 / 142234
52700 / 142234
52800 / 142234
52900 / 142234
53000 / 142234
53100 / 142234
53200 / 142234
53300 / 142234
53400 / 142234
53500 / 142234
53600 / 142234
53700 / 142234
53800 / 142234
53900 / 142234
54000 / 142234
54100 / 142234
54200 / 142234
54300 / 142234
54400 / 142234
54500 / 142234
54600 / 142234
54700 / 142234
54800 / 142234
54900 / 142234
55000 / 142234
55100 / 142234
55200 / 142234
55300 / 142234
55400 / 142234
55500 / 142234
55600 / 142234
55700 / 142234
55800 / 142234
55900 / 142234
56000 / 142234
56100 / 142234
56200 / 142234
56300 / 142234
56400 / 142234
56500 / 142234
56600 / 142234
56700 / 142234
56800 / 142234
56900 / 142234
57000 / 142234
57100 / 142234
57200 / 142234
57300 / 142234
57400 / 142234
57500 / 142234
57600 / 142234
57700 / 142234
57800 / 142234
57900 / 142234
58000 / 142234
58100 / 142234
58200 / 142234
58300 / 142234
58400 / 142234
58500 / 142234
58600 / 142234
58700 / 142234
58800 / 142234
58900 / 142234
59000 / 142234
59100 / 142234
59200 / 142234
59300 / 142234
59400 / 142234
59500 / 142234
59600 / 142234
59700 / 142234
59800 / 142234
59900 / 142234
60000 / 142234
60100 / 142234
60200 / 142234
60300 / 142234
60400 / 142234
60500 / 142234
60600 / 142234
60700 / 142234
60800 / 142234
60900 / 142234
61000 / 142234
61100 / 142234
61200 / 142234
61300 / 142234
61400 / 142234
61500 / 142234
61600 / 142234
61700 / 142234
61800 / 142234
61900 / 142234
62000 / 142234
62100 / 142234
62200 / 142234
62300 / 142234
62400 / 142234
62500 / 142234
62600 / 142234
62700 / 142234
62800 / 142234
62900 / 142234
63000 / 142234
63100 / 142234
63200 / 142234
63300 / 142234
63400 / 142234
63500 / 142234
63600 / 142234
63700 / 142234
63800 / 142234
63900 / 142234
64000 / 142234
64100 / 142234
64200 / 142234
64300 / 142234
64400 / 142234
64500 / 142234
64600 / 142234
64700 / 142234
64800 / 142234
64900 / 142234
65000 / 142234
65100 / 142234
65200 / 142234
65300 / 142234
65400 / 142234
65500 / 142234
65600 / 142234
65700 / 142234
65800 / 142234
65900 / 142234
66000 / 142234
66100 / 142234
66200 / 142234
66300 / 142234
66400 / 142234
66500 / 142234
66600 / 142234
66700 / 142234
66800 / 142234
66900 / 142234
67000 / 142234
67100 / 142234
67200 / 142234
67300 / 142234
67400 / 142234
67500 / 142234
67600 / 142234
67700 / 142234
67800 / 142234
67900 / 142234
68000 / 142234
68100 / 142234
68200 / 142234
68300 / 142234
68400 / 142234
68500 / 142234
68600 / 142234
68700 / 142234
68800 / 142234
68900 / 142234
69000 / 142234
69100 / 142234
69200 / 142234
69300 / 142234
69400 / 142234
69500 / 142234
69600 / 142234
69700 / 142234
69800 / 142234
69900 / 142234
70000 / 142234
70100 / 142234
70200 / 142234
70300 / 142234
70400 / 142234
70500 / 142234
70600 / 142234
70700 / 142234
70800 / 142234
70900 / 142234
71000 / 142234
71100 / 142234
71200 / 142234
71300 / 142234
71400 / 142234
71500 / 142234
71600 / 142234
71700 / 142234
71800 / 142234
71900 / 142234
72000 / 142234
72100 / 142234
72200 / 142234
72300 / 142234
72400 / 142234
72500 / 142234
72600 / 142234
72700 / 142234
72800 / 142234
72900 / 142234
73000 / 142234
73100 / 142234
73200 / 142234
73300 / 142234
73400 / 142234
73500 / 142234
73600 / 142234
73700 / 142234
73800 / 142234
73900 / 142234
74000 / 142234
74100 / 142234
74200 / 142234
74300 / 142234
74400 / 142234
74500 / 142234
74600 / 142234
74700 / 142234
74800 / 142234
74900 / 142234
75000 / 142234
75100 / 142234
75200 / 142234
75300 / 142234
75400 / 142234
75500 / 142234
75600 / 142234
75700 / 142234
75800 / 142234
75900 / 142234
76000 / 142234
76100 / 142234
76200 / 142234
76300 / 142234
76400 / 142234
76500 / 142234
76600 / 142234
76700 / 142234
76800 / 142234
76900 / 142234
77000 / 142234
77100 / 142234
77200 / 142234
77300 / 142234
77400 / 142234
77500 / 142234
77600 / 142234
77700 / 142234
77800 / 142234
77900 / 142234
78000 / 142234
78100 / 142234
78200 / 142234
78300 / 142234
78400 / 142234
78500 / 142234
78600 / 142234
78700 / 142234
78800 / 142234
78900 / 142234
79000 / 142234
79100 / 142234
79200 / 142234
79300 / 142234
79400 / 142234
79500 / 142234
79600 / 142234
79700 / 142234
79800 / 142234
79900 / 142234
80000 / 142234
80100 / 142234
80200 / 142234
80300 / 142234
80400 / 142234
80500 / 142234
80600 / 142234
80700 / 142234
80800 / 142234
80900 / 142234
81000 / 142234
81100 / 142234
81200 / 142234
81300 / 142234
81400 / 142234
81500 / 142234
81600 / 142234
81700 / 142234
81800 / 142234
81900 / 142234
82000 / 142234
82100 / 142234
82200 / 142234
82300 / 142234
82400 / 142234
82500 / 142234
82600 / 142234
82700 / 142234
82800 / 142234
82900 / 142234
83000 / 142234
83100 / 142234
83200 / 142234
83300 / 142234
83400 / 142234
83500 / 142234
83600 / 142234
83700 / 142234
83800 / 142234
83900 / 142234
84000 / 142234
84100 / 142234
84200 / 142234
84300 / 142234
84400 / 142234
84500 / 142234
84600 / 142234
84700 / 142234
84800 / 142234
84900 / 142234
85000 / 142234
85100 / 142234
85200 / 142234
85300 / 142234
85400 / 142234
85500 / 142234
85600 / 142234
85700 / 142234
85800 / 142234
85900 / 142234
86000 / 142234
86100 / 142234
86200 / 142234
86300 / 142234
86400 / 142234
86500 / 142234
86600 / 142234
86700 / 142234
86800 / 142234
86900 / 142234
87000 / 142234
87100 / 142234
87200 / 142234
87300 / 142234
87400 / 142234
87500 / 142234
87600 / 142234
87700 / 142234
87800 / 142234
87900 / 142234
88000 / 142234
88100 / 142234
88200 / 142234
88300 / 142234
88400 / 142234
88500 / 142234
88600 / 142234
88700 / 142234
88800 / 142234
88900 / 142234
89000 / 142234
89100 / 142234
89200 / 142234
89300 / 142234
89400 / 142234
89500 / 142234
89600 / 142234
89700 / 142234
89800 / 142234
89900 / 142234
90000 / 142234
90100 / 142234
90200 / 142234
90300 / 142234
90400 / 142234
90500 / 142234
90600 / 142234
90700 / 142234
90800 / 142234
90900 / 142234
91000 / 142234
91100 / 142234
91200 / 142234
91300 / 142234
91400 / 142234
91500 / 142234
91600 / 142234
91700 / 142234
91800 / 142234
91900 / 142234
92000 / 142234
92100 / 142234
92200 / 142234
92300 / 142234
92400 / 142234
92500 / 142234
92600 / 142234
92700 / 142234
92800 / 142234
92900 / 142234
93000 / 142234
93100 / 142234
93200 / 142234
93300 / 142234
93400 / 142234
93500 / 142234
93600 / 142234
93700 / 142234
93800 / 142234
93900 / 142234
94000 / 142234
94100 / 142234
94200 / 142234
94300 / 142234
94400 / 142234
94500 / 142234
94600 / 142234
94700 / 142234
94800 / 142234
94900 / 142234
95000 / 142234
95100 / 142234
95200 / 142234
95300 / 142234
95400 / 142234
95500 / 142234
95600 / 142234
95700 / 142234
95800 / 142234
95900 / 142234
96000 / 142234
96100 / 142234
96200 / 142234
96300 / 142234
96400 / 142234
96500 / 142234
96600 / 142234
96700 / 142234
96800 / 142234
96900 / 142234
97000 / 142234
97100 / 142234
97200 / 142234
97300 / 142234
97400 / 142234
97500 / 142234
97600 / 142234
97700 / 142234
97800 / 142234
97900 / 142234
98000 / 142234
98100 / 142234
98200 / 142234
98300 / 142234
98400 / 142234
98500 / 142234
98600 / 142234
98700 / 142234
98800 / 142234
98900 / 142234
99000 / 142234
99100 / 142234
99200 / 142234
99300 / 142234
99400 / 142234
99500 / 142234
99600 / 142234
99700 / 142234
99800 / 142234
99900 / 142234
100000 / 142234
100100 / 142234
100200 / 142234
100300 / 142234
100400 / 142234
100500 / 142234
100600 / 142234
100700 / 142234
100800 / 142234
100900 / 142234
101000 / 142234
101100 / 142234
101200 / 142234
101300 / 142234
101400 / 142234
101500 / 142234
101600 / 142234
101700 / 142234
101800 / 142234
101900 / 142234
102000 / 142234
102100 / 142234
102200 / 142234
102300 / 142234
102400 / 142234
102500 / 142234
102600 / 142234
102700 / 142234
102800 / 142234
102900 / 142234
103000 / 142234
103100 / 142234
103200 / 142234
103300 / 142234
103400 / 142234
103500 / 142234
103600 / 142234
103700 / 142234
103800 / 142234
103900 / 142234
104000 / 142234
104100 / 142234
104200 / 142234
104300 / 142234
104400 / 142234
104500 / 142234
104600 / 142234
104700 / 142234
104800 / 142234
104900 / 142234
105000 / 142234
105100 / 142234
105200 / 142234
105300 / 142234
105400 / 142234
105500 / 142234
105600 / 142234
105700 / 142234
105800 / 142234
105900 / 142234
106000 / 142234
106100 / 142234
106200 / 142234
106300 / 142234
106400 / 142234
106500 / 142234
106600 / 142234
106700 / 142234
106800 / 142234
106900 / 142234
107000 / 142234
107100 / 142234
107200 / 142234
107300 / 142234
107400 / 142234
107500 / 142234
107600 / 142234
107700 / 142234
107800 / 142234
107900 / 142234
108000 / 142234
108100 / 142234
108200 / 142234
108300 / 142234
108400 / 142234
108500 / 142234
108600 / 142234
108700 / 142234
108800 / 142234
108900 / 142234
109000 / 142234
109100 / 142234
109200 / 142234
109300 / 142234
109400 / 142234
109500 / 142234
109600 / 142234
109700 / 142234
109800 / 142234
109900 / 142234
110000 / 142234
110100 / 142234
110200 / 142234
110300 / 142234
110400 / 142234
110500 / 142234
110600 / 142234
110700 / 142234
110800 / 142234
110900 / 142234
111000 / 142234
111100 / 142234
111200 / 142234
111300 / 142234
111400 / 142234
111500 / 142234
111600 / 142234
111700 / 142234
111800 / 142234
111900 / 142234
112000 / 142234
112100 / 142234
112200 / 142234
112300 / 142234
112400 / 142234
112500 / 142234
112600 / 142234
112700 / 142234
112800 / 142234
112900 / 142234
113000 / 142234
113100 / 142234
113200 / 142234
113300 / 142234
113400 / 142234
113500 / 142234
113600 / 142234
113700 / 142234
113800 / 142234
113900 / 142234
114000 / 142234
114100 / 142234
114200 / 142234
114300 / 142234
114400 / 142234
114500 / 142234
114600 / 142234
114700 / 142234
114800 / 142234
114900 / 142234
115000 / 142234
115100 / 142234
115200 / 142234
115300 / 142234
115400 / 142234
115500 / 142234
115600 / 142234
115700 / 142234
115800 / 142234
115900 / 142234
116000 / 142234
116100 / 142234
116200 / 142234
116300 / 142234
116400 / 142234
116500 / 142234
116600 / 142234
116700 / 142234
116800 / 142234
116900 / 142234
117000 / 142234
117100 / 142234
117200 / 142234
117300 / 142234
117400 / 142234
117500 / 142234
117600 / 142234
117700 / 142234
117800 / 142234
117900 / 142234
118000 / 142234
118100 / 142234
118200 / 142234
118300 / 142234
118400 / 142234
118500 / 142234
118600 / 142234
118700 / 142234
118800 / 142234
118900 / 142234
119000 / 142234
119100 / 142234
119200 / 142234
119300 / 142234
119400 / 142234
119500 / 142234
119600 / 142234
119700 / 142234
119800 / 142234
119900 / 142234
120000 / 142234
120100 / 142234
120200 / 142234
120300 / 142234
120400 / 142234
120500 / 142234
120600 / 142234
120700 / 142234
120800 / 142234
120900 / 142234
121000 / 142234
121100 / 142234
121200 / 142234
121300 / 142234
121400 / 142234
121500 / 142234
121600 / 142234
121700 / 142234
121800 / 142234
121900 / 142234
122000 / 142234
122100 / 142234
122200 / 142234
122300 / 142234
122400 / 142234
122500 / 142234
122600 / 142234
122700 / 142234
122800 / 142234
122900 / 142234
123000 / 142234
123100 / 142234
123200 / 142234
123300 / 142234
123400 / 142234
123500 / 142234
123600 / 142234
123700 / 142234
123800 / 142234
123900 / 142234
124000 / 142234
124100 / 142234
124200 / 142234
124300 / 142234
124400 / 142234
124500 / 142234
124600 / 142234
124700 / 142234
124800 / 142234
124900 / 142234
125000 / 142234
125100 / 142234
125200 / 142234
125300 / 142234
125400 / 142234
125500 / 142234
125600 / 142234
125700 / 142234
125800 / 142234
125900 / 142234
126000 / 142234
126100 / 142234
126200 / 142234
126300 / 142234
126400 / 142234
126500 / 142234
126600 / 142234
126700 / 142234
126800 / 142234
126900 / 142234
127000 / 142234
127100 / 142234
127200 / 142234
127300 / 142234
127400 / 142234
127500 / 142234
127600 / 142234
127700 / 142234
127800 / 142234
127900 / 142234
128000 / 142234
128100 / 142234
128200 / 142234
128300 / 142234
128400 / 142234
128500 / 142234
128600 / 142234
128700 / 142234
128800 / 142234
128900 / 142234
129000 / 142234
129100 / 142234
129200 / 142234
129300 / 142234
129400 / 142234
129500 / 142234
129600 / 142234
129700 / 142234
129800 / 142234
129900 / 142234
130000 / 142234
130100 / 142234
130200 / 142234
130300 / 142234
130400 / 142234
130500 / 142234
130600 / 142234
130700 / 142234
130800 / 142234
130900 / 142234
131000 / 142234
131100 / 142234
131200 / 142234
131300 / 142234
131400 / 142234
131500 / 142234
131600 / 142234
131700 / 142234
131800 / 142234
131900 / 142234
132000 / 142234
132100 / 142234
132200 / 142234
132300 / 142234
132400 / 142234
132500 / 142234
132600 / 142234
132700 / 142234
132800 / 142234
132900 / 142234
133000 / 142234
133100 / 142234
133200 / 142234
133300 / 142234
133400 / 142234
133500 / 142234
133600 / 142234
133700 / 142234
133800 / 142234
133900 / 142234
134000 / 142234
134100 / 142234
134200 / 142234
134300 / 142234
134400 / 142234
134500 / 142234
134600 / 142234
134700 / 142234
134800 / 142234
134900 / 142234
135000 / 142234
135100 / 142234
135200 / 142234
135300 / 142234
135400 / 142234
135500 / 142234
135600 / 142234
135700 / 142234
135800 / 142234
135900 / 142234
136000 / 142234
136100 / 142234
136200 / 142234
136300 / 142234
136400 / 142234
136500 / 142234
136600 / 142234
136700 / 142234
136800 / 142234
136900 / 142234
137000 / 142234
137100 / 142234
137200 / 142234
137300 / 142234
137400 / 142234
137500 / 142234
137600 / 142234
137700 / 142234
137800 / 142234
137900 / 142234
138000 / 142234
138100 / 142234
138200 / 142234
138300 / 142234
138400 / 142234
138500 / 142234
138600 / 142234
138700 / 142234
138800 / 142234
138900 / 142234
139000 / 142234
139100 / 142234
139200 / 142234
139300 / 142234
139400 / 142234
139500 / 142234
139600 / 142234
139700 / 142234
139800 / 142234
139900 / 142234
140000 / 142234
140100 / 142234
140200 / 142234
140300 / 142234
140400 / 142234
140500 / 142234
140600 / 142234
140700 / 142234
140800 / 142234
140900 / 142234
141000 / 142234
141100 / 142234
141200 / 142234
141300 / 142234
141400 / 142234
141500 / 142234
141600 / 142234
141700 / 142234
141800 / 142234
141900 / 142234
142000 / 142234
142100 / 142234
142200 / 142234
Unique!
Is finishing alone in a team considered as a teamfinish?
We just see if we can find a team id that occures only once in the data. If we do so we can surely say that it is considered as a teamfinish. Otherwise we can say that it is probably not considered as a teamfinish. "Probably", since it could be possible that just nobody finished ever alone in a team.

Code: Select all

alone = {}
for t in teamfinishes:
    team = t["team"]
    if team not in alone:
        alone[team] = True
    else:
        alone[team] = False
print "That finishing alone in a team is saved as a teamfinish is", "right" if True in alone.values() else "very likely wrong"
There we go That finishing alone in a team is saved as a teamfinish is right, thats what i expected.

When quick tournament maps are "released"?
For this question I went over all the quick tournament maps on the Tournaments page and collected the names of the maps and the corresponding time of the tournament start. This took me for ages but here we've got the list. I set the timezones to CET since thats the timezone the ddnet stats are in and we want to compare the times.

Code: Select all

tz = dateutil.tz.gettz("CET")
tournas = {
    "Level": dt.time(hour=20, tzinfo=tz),
    "Threesome": dt.time(hour=22, tzinfo=tz),
    "Kobra": dt.time(hour=20, tzinfo=tz),
    "Valley 2": dt.time(hour=20, tzinfo=tz),
    "Thor": dt.time(hour=17, tzinfo=tz),
    "Green Agony": dt.time(hour=20, tzinfo=tz),
    "Ice Cave 1": dt.time(hour=20, tzinfo=tz),
    "SkyCave": dt.time(hour=22, tzinfo=tz),
    "Kobra 2": dt.time(hour=19, tzinfo=tz),
    "Space Climb": dt.time(hour=20, tzinfo=tz),
    "Into the Wild": dt.time(hour=19, tzinfo=tz),
    "Ice Cave 2": dt.time(hour=19, tzinfo=tz),
    "Kindergarten": dt.time(hour=19, tzinfo=tz),
    "ROCKET-BELT": dt.time(hour=19, tzinfo=tz),
    "Simple World": dt.time(hour=20, tzinfo=tz),
    "Naufrage 2": dt.time(hour=20, tzinfo=tz),
    "Planet Mars": dt.time(hour=20, tzinfo=tz),
    "Falling Down": dt.time(hour=20, tzinfo=tz),
    "Simple World 2": dt.time(hour=20, tzinfo=tz),
    "Chill Let's Climb 2": dt.time(hour=20, tzinfo=tz),
    "Planet Venus": dt.time(hour=20, tzinfo=tz),
    "Inception": dt.time(hour=20, tzinfo=tz),
    "Rivendell": dt.time(hour=20, tzinfo=tz),
    "Eternal": dt.time(hour=20, tzinfo=tz),
    "Kobra 3": dt.time(hour=20, tzinfo=tz),
    "Fried": dt.time(hour=20, tzinfo=tz),
    "SunDay 2": dt.time(hour=20, tzinfo=tz),
    "Rollercoaster": dt.time(hour=20, tzinfo=tz),
    "Skychase": dt.time(hour=20, tzinfo=tz),
    "Spooky": dt.time(hour=20, tzinfo=tz),
    "Fallen Angel": dt.time(hour=20, tzinfo=tz),
    "Nirvana": dt.time(hour=20, tzinfo=tz),
    "TomorrowLand": dt.time(hour=20, tzinfo=tz),
    "Jvice": dt.time(hour=20, tzinfo=tz),
    "Aim 8.0": dt.time(hour=20, tzinfo=tz),
    "UpNDown": dt.time(hour=20, tzinfo=tz),
    "DarkSpy": dt.time(hour=20, tzinfo=tz),
    "Red Avenue": dt.time(hour=20, tzinfo=tz),
    "Desert Wolf": dt.time(hour=20, tzinfo=tz),
    "Eternal 2": dt.time(hour=20, tzinfo=tz),
    "Planet Jupiter": dt.time(hour=20, tzinfo=tz),
    "Everdeen": dt.time(hour=20, tzinfo=tz),
    "KeepOut": dt.time(hour=20, tzinfo=tz),
    "Optimum": dt.time(hour=20, tzinfo=tz)
}
So let's go over the tournament maps and replace the tournament start times with the differences to the release times.

Code: Select all

for mapname, start in tournas.items():
    for m in maps:
        if m["name"] == mapname:
            startday = dt.datetime.combine(m["release"].date(), start)
            delta = m["release"] - startday
            tournas[mapname] = delta
            break
    else:
        print mapname, "not found"
        sys.exit()
We use the datetime.datetime.combine function to combine the map release date with the tournament start time. After that we substract the map release datetime by the tournament start datetime. Let's sort the tournament maps now by their time differences and print the results.

Code: Select all

tournas = sorted(tournas.items(), key=lambda x: x[1])
for mapname, delta in tournas:
    if delta < dt.timedelta(0):
        print mapname, "was released", delta*-1, "before the tournament started"
    elif delta > dt.timedelta(0):
        print mapname, "was released", delta, "after the tournament started"
    else:
        print mapname, "was released exactly when the tournament started"
Note that we multiply the time differences at the first print by -1 since it is negative (because the map was released before the tournament start) and we want a positive value (since we want to say how long it was released before). The script produces the following output.

Code: Select all

SkyCave was released 2:01:00 before the tournament started
Inception was released 0:37:00 before the tournament started
Rivendell was released 0:33:00 before the tournament started
Falling Down was released 0:20:00 before the tournament started
Naufrage 2 was released 0:18:00 before the tournament started
Into the Wild was released 0:18:00 before the tournament started
Kobra was released 0:17:00 before the tournament started
Valley 2 was released 0:17:00 before the tournament started
Chill Let's Climb 2 was released 0:16:00 before the tournament started
Kobra 3 was released 0:16:00 before the tournament started
Planet Venus was released 0:16:00 before the tournament started
Space Climb was released 0:14:00 before the tournament started
Fried was released 0:13:00 before the tournament started
Kindergarten was released 0:13:00 before the tournament started
Eternal was released 0:13:00 before the tournament started
Green Agony was released 0:12:00 before the tournament started
Thor was released 0:12:00 before the tournament started
Planet Mars was released 0:07:00 before the tournament started
Skychase was released 0:06:00 before the tournament started
Simple World was released 0:06:00 before the tournament started
Desert Wolf was released 0:05:00 before the tournament started
Spooky was released 0:05:00 before the tournament started
Everdeen was released 0:05:00 before the tournament started
DarkSpy was released 0:05:00 before the tournament started
KeepOut was released 0:04:00 before the tournament started
Simple World 2 was released 0:04:00 before the tournament started
Kobra 2 was released 0:04:00 before the tournament started
Planet Jupiter was released 0:04:00 before the tournament started
Eternal 2 was released 0:04:00 before the tournament started
Ice Cave 1 was released 0:04:00 before the tournament started
Nirvana was released 0:03:00 before the tournament started
ROCKET-BELT was released 0:03:00 before the tournament started
Ice Cave 2 was released 0:03:00 before the tournament started
Aim 8.0 was released 0:02:00 before the tournament started
Jvice was released 0:02:00 before the tournament started
Fallen Angel was released 0:02:00 before the tournament started
Red Avenue was released 0:02:00 before the tournament started
SunDay 2 was released 0:02:00 before the tournament started
TomorrowLand was released 0:02:00 before the tournament started
UpNDown was released exactly when the tournament started
Rollercoaster was released 0:01:00 after the tournament started
Optimum was released 0:01:00 after the tournament started
Level was released 0:22:00 after the tournament started
Threesome was released 0:42:00 after the tournament started
We can see that almost every map was released before the tournament started. I also count UpNDown to the "normal" tournaments. Level and Threesome were the maps of the first quick tournament on DDNet, so I guess that another system was used for running tournaments back then, where the map gets released after the tournament ended. I remember starting problems on Rollercoaster, so thats probably why its released one minute later. I guess something similar must have happend at the Optimum tournament. Another extreme is SkyCave but I can't find a reason why its released so early. By taking another look at the tournament site of SkyCave I found this This tournament was played on 2014-03-30 from 22:00 to 22:00 CEST. If that was true, this would have been a really short tournament. :D Probably the tournament started at 20:00, so the time difference would have been only a minute.

For now I have no more questions about the data itself, let's get to the interesting part and start with the first data analysis!

Data analyses
I'll try to release the analyses in an order, so that they get more complex over time. The working code for every data analysis can be downloaded on github.

001 - What is the most common team on DDNet?
We basically count the finishes by a team of players and sort the teams by their finishes. We start by concatenating the players with the same team ids.

Code: Select all

teamids = {}
for t in teamfinishes:
    tid = t["team"]
    if tid not in teamids:
        teamids[tid] = [t["player"]]
    else:
        teamids[tid].append(t["player"])
Now we go over the teams of players and count how many finishes they have.

Code: Select all

teams = {}
for t in teamids.values():
    t = frozenset(t)
    if t not in teams:
        teams[t] = 1
    else:
        teams[t] += 1
And last but not least we sort the teams by their number of finishes, choose the first 50 teams and print the results.

Code: Select all

teams = sorted(teams.items(), key=lambda x: x[1], reverse=True)
for rank, (team, finishes)  in enumerate(teams[:50]):
    print "rank", rank+1, "team", ", ".join(team), "finishes", finishes
Let's take a look at the results!

Code: Select all

rank 1 team bluekitty, milk finishes 252
rank 2 team Cadi, [D] Cadi finishes 198
rank 3 team ΌℬitO➏34, Obito634 finishes 159
rank 4 team Sir Knuddel, Lady Knuddel finishes 150
rank 5 team Xploit, valex32 finishes 148
rank 6 team [D] Lifkug, Lifkug finishes 143
rank 7 team Super, Frosch finishes 132
rank 8 team [D]FiL, FiL finishes 126
rank 9 team Shocker, Pwner finishes 116
rank 10 team gB. | Zerodin, Hindu finishes 113
rank 11 team FerzaK, FUMOFFU finishes 110
rank 12 team mB. | maple, mB. | dinner finishes 107
rank 13 team Armin v Buuren, his cat finishes 103
rank 14 team «Èni®õ§|*>, Nõ GõõD «È finishes 103
rank 15 team gB. | FeIs, gB. | Kayumi finishes 103
rank 16 team [D] Themix, Themix finishes 103
rank 17 team Puncha, Yung Puncha finishes 102
rank 18 team BsRobert, BsRobert Dummy finishes 100
rank 19 team Teengoten, Snitchy finishes 97
rank 20 team Antro, .:Danytto:. finishes 88
rank 21 team ENIAC, Zadaxs finishes 84
rank 22 team <BµmM>, dummy finishes 81
rank 23 team phacrum, 645654 finishes 81
rank 24 team Ninja_Valik, Gr1t1sh finishes 80
rank 25 team Bixes, Themix finishes 79
rank 26 team maggi323, Forris finishes 79
rank 27 team Obst, Ark :3 finishes 77
rank 28 team MMilos, Wombat finishes 77
rank 29 team jet`s dummy, .:JeT:. finishes 76
rank 30 team Sweeeeet GM :>, Sweeeeet D. :> finishes 75
rank 31 team shoxX, Themix finishes 74
rank 32 team 'qZ |BlaGK|›, Chairn finishes 73
rank 33 team Chairn, |BlaGK|› finishes 72
rank 34 team ٭ıƞdex'<3, |Ŗaþŧurę| finishes 70
rank 35 team koala_viech, Lifkug finishes 68
rank 36 team QzBoY, Bes finishes 66
rank 37 team Illyoviszcztee, gr33nt3a finishes 65
rank 38 team qwerty, Armin v Buuren finishes 65
rank 39 team Mannyking, Sky-Owl finishes 64
rank 40 team Cr3amy, Cr3amL0v3r finishes 64
rank 41 team Juandissimo, Dr4gg3r finishes 64
rank 42 team FerzaK, Shotokan finishes 64
rank 43 team Novo c:, hi_leute_gll finishes 63
rank 44 team brain, LanuX finishes 63
rank 45 team still nameless, (1)still namele finishes 62
rank 46 team CookieAlex, CookieMichal finishes 60
rank 47 team deen, Lady Saavik finishes 59
rank 48 team [D] RedFight, RedFight finishes 59
rank 49 team Pio, Themix finishes 58
rank 50 team Ñı©Ø, Ñı©Ø ÐUMMY finishes 58
002 - What is the most common mapper team on DDNet?
The second analysis and I already failed the attempt to gradually increase the difficulty of the analyses. This is similar to the last analysis but we want to find out the most common team of mappers this time. I won't provide the code here since its very similar to the code of the last analysis and even easier. You can check out the code on github if you really want to see it. But here are the results.

Code: Select all

rank 1 team Broken, Intercity, Bee maps 7
rank 2 team Kintaro*, Delo maps 4
rank 3 team Fuu, Zoo maps 4
rank 4 team Bixes, Themix maps 4
rank 5 team Kintaro*, =CuBe=, =Typhoon= maps 3
rank 6 team Skeptar, tobu. maps 3
rank 7 team sMo0g, TheZyZya maps 3
rank 8 team Alias, Bee maps 3
rank 9 team Broken, Waschlappen maps 2
rank 10 team Cøke, Moby Dog maps 2
rank 11 team KaB, Tsin maps 2
rank 12 team Juandissimo, IRGNW maps 2
rank 13 team Chill [TD], DoNe maps 2
rank 14 team Ezio, Rico maps 2
rank 15 team DoNe, Various Mappers maps 2
rank 16 team SonGoku, spimm maps 2
rank 17 team Kayumi, {E}{L}{I}{T}{E} maps 2
rank 18 team Wolƒ.▲, Elephant maps 2
rank 19 team Hitomi, Saavik maps 2
rank 20 team Ama, Hitomi maps 2
003 - Which mapper has the most finishes on his own maps?
Every mapper gets a list of all his maps, we also create a counter which holds the finishes of his own maps which we will use later.

Code: Select all

mappers = {}
for m in maps:
    for mapper in m["mappers"]:
        if mapper not in mappers:
            mappers[mapper] = {"fin_own":0, "maps":[m["name"]]}
        else:
            mappers[mapper]["maps"].append(m["name"])
            
# poor saavik has another mapper than ingame name :(
mappers["Lady Saavik"] = mappers["Saavik"]
del mappers["Saavik"]
Now we go over the finishes and increase the counter of own map finishes if we find a finish were a player finished his own map.

Code: Select all

for f in finishes:
    p = f["player"]
    if p in mappers:
        if f["map"] in mappers[p]["maps"]:
            mappers[p]["fin_own"] += 1
And now the sorting and printing.

Code: Select all

mappers = sorted(mappers.items(), key=lambda x: x[1]["fin_own"], reverse=True)
for rank, (mapper, info) in enumerate(mappers[:50]):
    print "rank", rank+1, "mapper", mapper, "has", info["fin_own"], "finishes on his own maps"
Let's get the results!

Code: Select all

rank 1 mapper Broken has 151 finishes on his own maps
rank 2 mapper DoNe has 110 finishes on his own maps
rank 3 mapper Ama has 109 finishes on his own maps
rank 4 mapper Themix has 102 finishes on his own maps
rank 5 mapper Welf has 83 finishes on his own maps
rank 6 mapper Knight :3 has 53 finishes on his own maps
rank 7 mapper Aoe has 47 finishes on his own maps
rank 8 mapper mikey12 has 39 finishes on his own maps
rank 9 mapper Hitomi has 38 finishes on his own maps
rank 10 mapper SBL has 34 finishes on his own maps
rank 11 mapper Vasten100 has 33 finishes on his own maps
rank 12 mapper Destoros has 33 finishes on his own maps
rank 13 mapper Juandissimo has 33 finishes on his own maps
rank 14 mapper Seba0006 has 31 finishes on his own maps
rank 15 mapper fikmesån has 31 finishes on his own maps
rank 16 mapper Silex has 29 finishes on his own maps
rank 17 mapper Ñı©Ø has 29 finishes on his own maps
rank 18 mapper Lady Saavik has 29 finishes on his own maps
rank 19 mapper Hindu has 28 finishes on his own maps
rank 20 mapper Micro has 28 finishes on his own maps
rank 21 mapper Chill [TD] has 27 finishes on his own maps
rank 22 mapper hannibal has 27 finishes on his own maps
rank 23 mapper <BµmM> has 26 finishes on his own maps
rank 24 mapper [A] Awesome has 26 finishes on his own maps
rank 25 mapper =CuBe= has 25 finishes on his own maps
rank 26 mapper cris has 25 finishes on his own maps
rank 27 mapper KBeeeR has 24 finishes on his own maps
rank 28 mapper Suppe has 24 finishes on his own maps
rank 29 mapper ٭ıƞdex'<3 has 21 finishes on his own maps
rank 30 mapper Meliodafu has 21 finishes on his own maps
rank 31 mapper !_Vergeboy_! has 21 finishes on his own maps
rank 32 mapper SickCunt has 19 finishes on his own maps
rank 33 mapper Borup has 19 finishes on his own maps
rank 34 mapper Bixes has 19 finishes on his own maps
rank 35 mapper Chicken has 18 finishes on his own maps
rank 36 mapper Fňokurka oo7 has 18 finishes on his own maps
rank 37 mapper Tuna has 17 finishes on his own maps
rank 38 mapper Skeptar has 17 finishes on his own maps
rank 39 mapper Gridwyn has 16 finishes on his own maps
rank 40 mapper Åmol has 16 finishes on his own maps
rank 41 mapper Cyberpunk has 15 finishes on his own maps
rank 42 mapper »Rogue. has 15 finishes on his own maps
rank 43 mapper Alvin Risk has 15 finishes on his own maps
rank 44 mapper RaiNy has 13 finishes on his own maps
rank 45 mapper Cøke has 13 finishes on his own maps
rank 46 mapper 645654 has 13 finishes on his own maps
rank 47 mapper Kosho has 12 finishes on his own maps
rank 48 mapper aMu has 12 finishes on his own maps
rank 49 mapper EpicIceTee has 11 finishes on his own maps
rank 50 mapper hi_leute_gll has 10 finishes on his own maps
I'm on holiday until around 12.8. until then there will be no more analyses.
User avatar
EryX
Posts: 111
Joined: Mon May 05, 2014 11:16 pm
Player profile: http://ddnet.tw/players/EryX/
Clan: Sestra

Re: DoNe does data analysis

Post by EryX »

Nice, is it also possible to show, how many minutes a player spent on all servers?
I could sum up all times, but ofc there are often more than only 1 try.
Are the other tries saved, too?
Would be nice to know how many minutes i spent on DDNet with "EryX" :)
User avatar
timakro
Posts: 414
Joined: Mon May 05, 2014 6:05 pm
Location: Germany
Player profile: http://ddnet.tw/players/timakro/
Mapper profile: http://ddnet.tw/mappers/timakro/
Clan: unique

Re: DoNe does data analysis

Post by timakro »

EryX wrote:Nice, is it also possible to show, how many minutes a player spent on all servers?
I could sum up all times, but ofc there are often more than only 1 try.
Are the other tries saved, too?
Would be nice to know how many minutes i spent on DDNet with "EryX" :)
No, unfortunately they aren't saved.
User avatar
deen
TECHNICAL Team
Posts: 3575
Joined: Mon May 05, 2014 2:30 pm
Player profile: https://ddnet.org/players/deen/
Discord: deen#5910

Re: DoNe does data analysis

Post by deen »

Some ideas:
  • Most points made on one day/week/month by which player and when?
  • Map that was unfinished for the longest time since release
  • Person who plays in a team with the most different people
  • Time of day when players finish maps (finding night owls etc)
Chairn
Posts: 400
Joined: Sat Apr 11, 2015 5:05 pm
Player profile: http://ddnet.tw/players/Chairn/
Clan: QuintessenZ

Re: DoNe does data analysis

Post by Chairn »

Meh, blagk and i should be 6th :(

Nice analysis btw ^^.
hannibal
Posts: 341
Joined: Mon Jul 21, 2014 1:53 pm
Player profile: http://ddnet.tw/players/hannibal/
Mapper profile: http://ddnet.tw/mappers/hannibal/
Clan: A-Team

Re: DoNe does data analysis

Post by hannibal »

Who finished the most in team 0! Who played the least with his dummy!
Nirvana
Posts: 7
Joined: Mon Jul 06, 2020 8:57 am

Re: DoNe does data analysis

Post by Nirvana »

User avatar
deen
TECHNICAL Team
Posts: 3575
Joined: Mon May 05, 2014 2:30 pm
Player profile: https://ddnet.org/players/deen/
Discord: deen#5910

Re: DoNe does data analysis

Post by deen »

I have asked timakro if the git repo can be uploaded again.
Nirvana
Posts: 7
Joined: Mon Jul 06, 2020 8:57 am

Re: DoNe does data analysis

Post by Nirvana »

deen wrote: Tue Jul 07, 2020 11:40 am I have asked timakro if the git repo can be uploaded again.
Thank you.
User avatar
timakro
Posts: 414
Joined: Mon May 05, 2014 6:05 pm
Location: Germany
Player profile: http://ddnet.tw/players/timakro/
Mapper profile: http://ddnet.tw/mappers/timakro/
Clan: unique

Re: DoNe does data analysis

Post by timakro »

Can't find it on my disk so it's probably lost forever :/
Post Reply

Who is online

Users browsing this forum: No registered users and 2 guests