Skip to content

HarryLyu/npl-bigdata-test-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Конкурсное задание для New Professions Lab, программа “Специалист по большим данным”

Описание задания: 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages