Описание задания: https://docs.google.com/document/d/1kfzBlrCyFhtA1aSzKcFF_TkRYd76iLXvmdto1mruFLU/edit#
{
"gender": {
"male": "135710",
"female": "92329",
"?": "10855"
},
"age": {
"<=10": "0",
"11-20": "23004",
"21-30": "44487",
">31": "15264",
"?": "156139"
},
"top5_interest": [ // Комментарий ниже
"музыка",
"спорт",
"путешествия",
"книги",
"психология"
]
}
Сначала мы через метод groups.getMembers получаем всех участников группы, заодно выгружая информацию о поле и дату рождения. У некоторых пользователей дата рождения возвращается без года, у некоторых не возвращается вообще – в таких случаях считаем, что дата рождения неизвестна. Все результаты сохраняем в таблицу MySQL с полями id, vk_id, sex, birth_date
Затем перебираем полученных пользователей, получаем их интересы. В VK интересы хранятся простым текстом, но сам VK разбивает этот текст по запятым, мы поступим также. Все интересы пользователей также сохраняем в таблицу.
Имея все данные, можем сделать запросы в БД с группировкой для подсчета результатов:
Информация о поле
SELECT sex, COUNT(*) as count FROM members GROUP BY sex ORDER BY count DESC;
Информация о возрасте. Точные даты формируются в скрипте в зависимости от даты сборы статистики, здесь приведены уже готовые запросы.
SELECT COUNT(*) as count FROM `members` WHERE `birth_date` >= '2006-01-20'
SELECT COUNT(*) as count FROM `members` WHERE `birth_date` >= '1996-01-20' AND `birth_date` < '2006-01-20'
SELECT COUNT(*) as count FROM `members` WHERE `birth_date` >= '1986-01-20' AND `birth_date` < '1996-01-20'
SELECT COUNT(*) as count FROM `members` WHERE `birth_date` < '1986-01-20'
SELECT COUNT(*) as count FROM `members` WHERE `birth_date` IS NULL
Информация об интересах. В данном случае в топе интересов оказались интересы музыка и music – по сути это одинаковые интересы, так что в скрипте я их объеденил.
SELECT interest, COUNT( * ) AS count FROM interests GROUP BY interest ORDER BY count DESC LIMIT 0 , 5
Вся логика написана на PHP, запустить их можно, выполнив следующие команды
$ git clone https://github.com/HarryLyu/nlp-bigdata-test-app.git
Затем необходимо настроить доступ к БД в файле config/config.php
Загрузка данных:
$ php parse.php
Подсчет результатов
$ php count.php