Grabduck

Статистика по профилям пользователей ВКонтакте

:

В этом посте я приведу статистику по данным, которые указали в своих профилях пользователи социальной сети ВКонтакте. Под катом также содержится ответ на интересующий многих вопрос — сколько всё-таки активных пользователей в этой соцсети? И, разумеется, пара слов о том, как всё это было собрано.

Предыстория


Всё началось с прочтения мной хабратопика Делаем свой сервис по мониторингу пользователей ВКонтакте. Во время сессии, как известно, делать нечего, поэтому я решил подучить C# и познакомиться с API ВКонтакте.

Процесс сбора статистики


Не все id являются действительными: некоторые пользователи были удалены, красивые номера были заблокированы. Для получения списка валидных id было решено использовать каталог, заботливо сделанный для поисковиков.

Для парсинга каталога была использована библиотека Html Agility Pack. Процесс достаточно тривиален, подробно описывать его не вижу смысла.

Список валидных id по состоянию на 18 июня 2011 года содержит 94 072 230 id из 139 132 951 возможных, то есть действительными являются 67,6%.

Распределение валидных id
(сколько действительных из каждого миллиона)

Итак, у нас есть список валидных id, надо получить из него профили. Для этого делаем запрос к https://api.vkontakte.ru/method/getProfiles (один из немногих методов, которые не требуют авторизации, и на которые не распространяется ограничение на три запроса в секунду) с параметрами uids, где указываем список из 750 id (api позволяет тысячу, но при запросе профилей последних пользователей запрашиваемый адрес становится слишком длинным), и fields, где указываем все возможные поля (uid,first_name,last_name,nickname,sex,bdate,city,country,timezone,photo,
photo_medium,photo_big,photo_rec,contacts,home_phone,mobile_phone,education,
university,university_name,faculty,faculty_name,graduation,rate,counters).

Выполнение запросов в один поток нагружает канал только на 100 кбайт/с, поэтому я разбил выполнение на 94 потока, задачей каждого из которых была загрузка миллиона профилей.

На тот момент я не учёл, что сервер ВКонтакте не всегда возвращает верный ответ, поэтому были получены не все профили. Но с ошибкой завершилось получение 0,3% профилей, что несущественно для статистики.

Все полученные профили в JSON занимают 45 ГБ.

Дальше всё это было десериализовано в таблицу с помощью JSON.NET, результат занял 24 ГБ.

Поскольку статистика по всем учётным записям, включая забросивших профиль два года назад и спамеров, мало кого интересует, было решено получить список всех активных пользователей. Для этого циклически в 20 потоков (чтобы гарантированно забить все 10 мегабит/с) делаем запросы к тому же getProfiles для 750 пользователей, но на этот раз запрашиваем только поле online. На каждой итерации берём список пользователей, не замеченных в сети на предыдущей итерации. Этот этап затянулся на 17 дней (21 июня — 7 июля, дальше не вышло по техническим причинам), чтобы гарантированно захватить абсолютное большинство активных пользователей. В связи с недостаточной шириной канала каждый пользователь проверялся раз в полтора — три часа.

Прирост новых активных пользователей по датам
Суммарное количество активных пользователей по датам

Как видим, прирост активных пользователей стал достаточно мал, чтобы ими можно было пренебречь.

Собственно, статистика (по активным пользователям)


Активные пользователи ВКонтакте составляют 29,93%.
Статистика по мужским именам
Имя Обладателей В %
Александр (Саша, Саня, Alex, Санёк, Алекс, Олександр, Сашка, Санек, Alexander) 1106979 8,3%
Сергей (Серёга, Серега, Сергiй, Sergey, сергей, Серёжа) 755885 5,6%
Андрей (Андрiй, Андрюха, Andrey) 622105 4,7%
Алексей (Лёха, Леха, Лёша) 576573 4,3%
Дмитрий (Димон, Dima, Димка, Диман, Дiма) 529432 4,0%
Евгений (Женя, Жека) 417668 3,1%
Максим (Макс, Max) 384803 2,9%
Владимир (Вова, Володя, Вован) 312799 2,3%
Иван (Ваня, Ivan, Iван) 288728 2,2%
Денис (Denis) 275334 2,1%
Роман (Рома, Roman) 245177 1,8%
Игорь (Iгор) 238341 1,8%
Михаил (Миша, Миха, Мiша) 234676 1,8%
Антон (Anton) 233756 1,8%
Олег (Oleg) 208195 1,6%
Павел (Паша) 198175 1,5%
Артём (Тёма) 194117 1,5%
Николай (Коля, Колян) 180639 1,4%
Юрий (Юра) 158678 1,2%
Виталий (Виталик, Виталя) 152539 1,1%
Статистика по женским именам
Имя Обладательниц В %
Екатерина (Катя, Катерина, Катюшка, Катюша, Катюха, Ekaterina, Катенька) 658746 4,8%
Елена (Лена, Леночка, Elena, Lena, Ленка) 658212 4,8%
Ольга (Оля, Оленька, Олечка, Олька, Olga, ольга) 653994 4,7%
Юлия (Юля, Юлька, Юленька, Юлечка, Julia, Юльчик, Юличка, Юляшка) 631431 4,6%
Наталья (Наташа, Наталия, Натали, Наталя, Наташка, Natalia) 628287 4,5%
Анна (Аня, Анюта, Анютка, Анечка, Anna) 605341 4,4%
Анастасия (Настя, Настёна, Настенька, Настюшка, Anastasia, Настена, Nastya, Настёнка, Настюша) 597008 4,3%
Татьяна (Таня, Танюшка, Танюша, Танечка, Tanya) 583525 4,2%
Ирина (Ира, Иришка, Иринка, Irina, Iра, Ириша, Iрина, Ирочка, ирина) 540894 3,9%
Мария (Маша, Maria, Машенька, Машка, Машуля) 385851 2,8%
Светлана (Света, Светик, Svetlana) 365338 2,6%
Марина (Маришка, Marina, Маринка, Мариша) 329941 2,4%
Виктория (Вика, Викуля, Вiкторiя) 269936 2,0%
Дарья (Даша, Дашка, Дашуля, Dasha, Дашенька, Дашулька) 255681 1,8%
Алёна (Алена, Алёнка, Аленка) 223205 1,6%
Ксения (Ксюша, Ксюшка, Ксюха, Ксюня) 201960 1,5%
Оксана 179259 1,3%
Евгения (Женя, Женечка) 177853 1,3%
Александра (Саша, Сашенька) 175563 1,3%
Надежда (Надя, Надюшка, Надюша) 168086 1,2%
Статистика по фамилиям (мужские и женские объединены)
Фамилия Обладателей В %
Иванов 196474 0,70%
Кузнецов 94237 0,34%
Смирнов 92047 0,33%
Петров 84133 0,30%
Васильев 77683 0,28%
Попов 74980 0,27%
Волков 53343 0,19%
Михайлов 51913 0,18%
Новиков 51508 0,18%
Соколов 50988 0,18%
Павлов 50379 0,18%
Андреев 49646 0,18%
Морозов 47689 0,17%
Алексеев 46386 0,17%
Романов 44027 0,16%
Макаров 43505 0,15%
Степанов 43161 0,15%
Николаев 43059 0,15%
Егоров 42537 0,15%
Захаров 40135 0,14%
Козлов 40023 0,14%
Сергеев 39925 0,14%
Никитин 39483 0,14%
Яковлев 38197 0,14%
Зайцев 37744 0,13%
Григорьев 36063 0,13%
Лебедев 36052 0,13%
Орлов 35822 0,13%
Александров 33149 0,12%
Кузьмин 32227 0,11%
Распределение полов
Наличие никнейма/отчества

UPD: Здесь и далее «не указан» может означать также «недоступен для просмотра всем пользователям».

Наличие страны
Распределение пользователей по странам
Активных пользователей в каждой стране
Страна Активных Всего В %
Россия 6552115 32519338 20,15%
Украина 1715898 8976390 19,12%
Беларусь 429023 1680113 25,54%
Казахстан 152117 1088727 13,97%
Молдова 50815 375172 13,54%
США 50501 416430 12,13%
Германия 45283 286761 15,79%
Наличие города
Статистика по городам
Город Пользователей В %
Москва 893857 10,42%
Санкт-Петербург 497324 5,80%
Киев 238863 2,79%
Минск 148782 1,73%
Екатеринбург 129787 1,51%
Новосибирск 116443 1,36%
Харьков 105301 1,23%
Самара 97530 1,14%
Нижний Новгород 94377 1,10%
Омск 88284 1,03%
Наличие аватара
Наличие/валидность мобильного телефона
(телефон считается валидным, если содержит только цифры и символы " +()- ")
Наличие/валидность домашнего телефона
Наличие университета
Статистика по университетам
( UPD3: среди тех, кто его указал)
Университет Поьзователей В %
МГУ 120159 2,4855%
СПбГУ 50500 1,0446%
НТУУ «КПИ» 28607 0,5917%
БГУ 25535 0,5282%
ЮУрГУ 20842 0,4311%
СПбГПУ Политех 19628 0,4060%
БНТУ (Политех) 18472 0,3821%
СГА 17521 0,3624%
ННГУ им. Лобачевского 16791 0,3473%
РГПУ им. Герцена 16226 0,3356%
Наличие/полнота даты рождения
Валидность даты рождения (среди тех, у кого она указана)
Статистика по датам рождения
(Валидными считаются года рождения с 1941 по 2008)

Ожидаемо, что лидирует 1 января, а также наблюдаются скачки 1 числа каждого месяца.

Статистика по годам рождения
Статистика по рейтингу

Средний рейтинг — 69,23.

Портрет среднего пользователя

Типичный пользователь ВКонтакте — девушка, родившаяся 01.01.1988, по имени Екатерина Иванова, проживающая в Москве, обучающаяся/закончившая МГУ, с рейтингом страницы 69. (проверил, такой нет)

Что хотелось бы сделать

  • Получить более точный список активных пользователей.
    К сожалению, с моим текущим каналом это не представляется возможным за приемлемое время.
  • Получить более подробную информацию: количество друзей, альбомов, фотографий, видео...
    Для этого надо делать по одному запросу на пользователя, что с учётом ограничения на три запроса в секунду займёт порядка года.
  • Построить социальный граф и красиво его оформить.
    С учётом недавнего открытия списка друзей это реально сделать. Но опять же, тут действует ограничение на три запроса в секунду. По моим подсчётам, чтобы полностью забить 10-мегабитный канал и выкачать всё (примерно терабайт) за 8,9 суток, понадобится 41 учётная запись. Также не забываем о вычислительных мощностях — для вычисления кратчайшего расстояния от каждого пользователя до каждого потребуется 10^24 итераций, что многовато.

P.S.


Все диаграммы подготовлены в Microsoft Excel.
Об ошибках прошу отписываться мне на хабрапочту.

UPD2: Торрент с базой в виде таблицы, поля разделены табуляциями, размер — 24ГБ.
UPD4: (обновлено 02.10.11) То же самое в .7z, размер — 4.6 ГБ.
Жмём «direct torrent link».
UPD5: Словари для городов (7 столбец) и стран (8 столбец).