Посмотрим же, что там у нас накапало.

Все графики интерактивные — можно ховерить, зумить и т.п.

library(tidyverse)
library(plotly)

 

Все посещения:

df <- jsonlite::fromJSON("https://relativio-jccm.rhcloud.com/api/data")
df %>% 
    mutate(
        timestamp = as.POSIXct(
            substr(timestamp, 1, 19),
            format = "%Y-%m-%dT%H:%M:%S"
        )
    ) %>% 
    plot_ly(width = 800) %>% 
    add_histogram(
        color = I("black"),
        x = ~timestamp
    ) %>% 
    layout(
        title = sprintf(
            "Всего посещений: %s",
            format(nrow(df), big.mark = ",")
        ),
        xaxis = list(
            dtick = 86400000,
            title = ""
        )
    )

 

Только страницы, начинающиеся с http://ruletka.se/:

df %>% 
    filter(grepl("^http://ruletka.se/", link)) %>% 
    count(link) %>% 
    plot_ly(width = 800) %>% 
    add_bars(
        hoverinfo = "text",
        marker = list(
            color = "black",
            line = list(color = "white", width = .5)
        ),
        text = ~stringr::str_match(link, "^http://ruletka.se/(.*)")[, 2],
        x = ~n,
        y = 1
    ) %>% 
    layout(
        bargap = 0,
        barmode = "stack",
        hovermode = "closest",
        title = sprintf(
            "%.1f%% ссылок с одним посещением",
            df %>% 
                filter(grepl("^http://ruletka.se/", link)) %>% 
                count(link) %>% 
                count(n) %>% 
                summarise(nn[n == 1] / sum(nn)) %>% 
                .[[1]] * 100
        ),
        xaxis = list(title = "Посещений")
    )

 

Статистика посещений с валидными токенами (_relativio_...):

df %>% 
    filter(grepl("^_relativio_", token)) %>% 
    count(token) %>% 
    plot_ly(width = 800) %>% 
    add_bars(
        hoverinfo = "text",
        marker = list(
            color = "black",
            line = list(color = "white", width = .5)
        ),
        text = ~stringr::str_match(token, "^_relativio_(.*)")[, 2],
        x = ~n,
        y = 1
    ) %>% 
    layout(
        bargap = 0,
        barmode = "stack",
        hovermode = "closest",
        title = sprintf(
            "%.1f%% токенов с одним посещением",
            df %>% 
                filter(grepl("^_relativio_", token)) %>% 
                count(token) %>% 
                count(n) %>% 
                summarise(nn[n == 1] / sum(nn)) %>% 
                .[[1]] * 100
        ),
        xaxis = list(
            dtick = 1,
            title = "Посещений"
        )
    )

 

Вот такие пироги.

 

LS0tDQp0aXRsZTogItCn0YLQviDRgtCw0Lwg0YEg0KDQtdC70Y/RgtC40LLQuNC+PyINCmF1dGhvcjogItCc0LjRhdCw0LjQuyDQltC40LvQutC40L0iDQpkYXRlOiAiYHIgU3lzLkRhdGUoKWAiDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQombmJzcDsNCg0K0J/QvtGB0LzQvtGC0YDQuNC8INC20LUsINGH0YLQviDRgtCw0Lwg0YMg0L3QsNGBINC90LDQutCw0L/QsNC70L4uDQoNCtCS0YHQtSDQs9GA0LDRhNC40LrQuCDQuNC90YLQtdGA0LDQutGC0LjQstC90YvQtSAtLS0g0LzQvtC20L3QviDRhdC+0LLQtdGA0LjRgtGMLCDQt9GD0LzQuNGC0Ywg0Lgg0YIu0L8uDQoNCmBgYHtyLCBtZXNzYWdlPUZBTFNFLCB3YXJuaW5nPUZBTFNFfQ0KbGlicmFyeSh0aWR5dmVyc2UpDQpsaWJyYXJ5KHBsb3RseSkNCmBgYA0KDQombmJzcDsNCg0K0JLRgdC1INC/0L7RgdC10YnQtdC90LjRjzoNCg0KYGBge3J9DQpkZiA8LSBqc29ubGl0ZTo6ZnJvbUpTT04oImh0dHBzOi8vcmVsYXRpdmlvLWpjY20ucmhjbG91ZC5jb20vYXBpL2RhdGEiKQ0KYGBgDQoNCmBgYHtyfQ0KZGYgJT4lIA0KCW11dGF0ZSgNCgkJdGltZXN0YW1wID0gYXMuUE9TSVhjdCgNCgkJCXN1YnN0cih0aW1lc3RhbXAsIDEsIDE5KSwNCgkJCWZvcm1hdCA9ICIlWS0lbS0lZFQlSDolTTolUyINCgkJKQ0KCSkgJT4lIA0KCXBsb3RfbHkod2lkdGggPSA4MDApICU+JSANCglhZGRfaGlzdG9ncmFtKA0KCQljb2xvciA9IEkoImJsYWNrIiksDQoJCXggPSB+dGltZXN0YW1wDQoJKSAlPiUgDQoJbGF5b3V0KA0KCQl0aXRsZSA9IHNwcmludGYoDQoJCQki0JLRgdC10LPQviDQv9C+0YHQtdGJ0LXQvdC40Lk6ICVzIiwNCgkJCWZvcm1hdChucm93KGRmKSwgYmlnLm1hcmsgPSAiLCIpDQoJCSksDQoJCXhheGlzID0gbGlzdCgNCgkJCWR0aWNrID0gODY0MDAwMDAsDQoJCQl0aXRsZSA9ICIiDQoJCSkNCgkpDQpgYGANCg0KJm5ic3A7DQoNCtCi0L7Qu9GM0LrQviDRgdGC0YDQsNC90LjRhtGLLCDQvdCw0YfQuNC90LDRjtGJ0LjQtdGB0Y8g0YEgYGh0dHA6Ly9ydWxldGthLnNlL2A6DQoNCmBgYHtyfQ0KZGYgJT4lIA0KCWZpbHRlcihncmVwbCgiXmh0dHA6Ly9ydWxldGthLnNlLyIsIGxpbmspKSAlPiUgDQoJY291bnQobGluaykgJT4lIA0KCXBsb3RfbHkod2lkdGggPSA4MDApICU+JSANCglhZGRfYmFycygNCgkJaG92ZXJpbmZvID0gInRleHQiLA0KCQltYXJrZXIgPSBsaXN0KA0KCQkJY29sb3IgPSAiYmxhY2siLA0KCQkJbGluZSA9IGxpc3QoY29sb3IgPSAid2hpdGUiLCB3aWR0aCA9IC41KQ0KCQkpLA0KCQl0ZXh0ID0gfnN0cmluZ3I6OnN0cl9tYXRjaChsaW5rLCAiXmh0dHA6Ly9ydWxldGthLnNlLyguKikiKVssIDJdLA0KCQl4ID0gfm4sDQoJCXkgPSAxDQoJKSAlPiUgDQoJbGF5b3V0KA0KCQliYXJnYXAgPSAwLA0KCQliYXJtb2RlID0gInN0YWNrIiwNCgkJaG92ZXJtb2RlID0gImNsb3Nlc3QiLA0KCQl0aXRsZSA9IHNwcmludGYoDQoJCQkiJS4xZiUlINGB0YLRgNCw0L3QuNGGINGBINC+0LTQvdC40Lwg0L/QvtGB0LXRidC10L3QuNC10LwiLA0KCQkJZGYgJT4lIA0KCQkJCWZpbHRlcihncmVwbCgiXmh0dHA6Ly9ydWxldGthLnNlLyIsIGxpbmspKSAlPiUgDQoJCQkJY291bnQobGluaykgJT4lIA0KCQkJCWNvdW50KG4pICU+JSANCgkJCQlzdW1tYXJpc2Uobm5bbiA9PSAxXSAvIHN1bShubikpICU+JSANCgkJCQkuW1sxXV0gKiAxMDANCgkJKSwNCgkJeGF4aXMgPSBsaXN0KHRpdGxlID0gItCf0L7RgdC10YnQtdC90LjQuSIpDQoJKQ0KYGBgDQoNCiZuYnNwOw0KDQrQodGC0LDRgtC40YHRgtC40LrQsCDQv9C+0YHQtdGJ0LXQvdC40Lkg0YEg0LLQsNC70LjQtNC90YvQvNC4INGC0L7QutC10L3QsNC80LggKGBfcmVsYXRpdmlvXy4uLmApOg0KIA0KYGBge3J9DQpkZiAlPiUgDQoJZmlsdGVyKGdyZXBsKCJeX3JlbGF0aXZpb18iLCB0b2tlbikpICU+JSANCgljb3VudCh0b2tlbikgJT4lIA0KCXBsb3RfbHkod2lkdGggPSA4MDApICU+JSANCglhZGRfYmFycygNCgkJaG92ZXJpbmZvID0gInRleHQiLA0KCQltYXJrZXIgPSBsaXN0KA0KCQkJY29sb3IgPSAiYmxhY2siLA0KCQkJbGluZSA9IGxpc3QoY29sb3IgPSAid2hpdGUiLCB3aWR0aCA9IC41KQ0KCQkpLA0KCQl0ZXh0ID0gfnN0cmluZ3I6OnN0cl9tYXRjaCh0b2tlbiwgIl5fcmVsYXRpdmlvXyguKikiKVssIDJdLA0KCQl4ID0gfm4sDQoJCXkgPSAxDQoJKSAlPiUgDQoJbGF5b3V0KA0KCQliYXJnYXAgPSAwLA0KCQliYXJtb2RlID0gInN0YWNrIiwNCgkJaG92ZXJtb2RlID0gImNsb3Nlc3QiLA0KCQl0aXRsZSA9IHNwcmludGYoDQoJCQkiJS4xZiUlINGC0L7QutC10L3QvtCyINGBINC+0LTQvdC40Lwg0L/QvtGB0LXRidC10L3QuNC10LwiLA0KCQkJZGYgJT4lIA0KCQkJCWZpbHRlcihncmVwbCgiXl9yZWxhdGl2aW9fIiwgdG9rZW4pKSAlPiUgDQoJCQkJY291bnQodG9rZW4pICU+JSANCgkJCQljb3VudChuKSAlPiUgDQoJCQkJc3VtbWFyaXNlKG5uW24gPT0gMV0gLyBzdW0obm4pKSAlPiUgDQoJCQkJLltbMV1dICogMTAwDQoJCSksDQoJCXhheGlzID0gbGlzdCgNCgkJCWR0aWNrID0gMSwNCgkJCXRpdGxlID0gItCf0L7RgdC10YnQtdC90LjQuSINCgkJKQ0KCSkNCmBgYA0KDQombmJzcDsNCg0K0JLQvtGCINGC0LDQutC40LUg0L/QuNGA0L7Qs9C4Lg0KDQombmJzcDsNCg==