Краткое описание общей идеи.

Мы строим рекомендательную систему креативных кластеров в Санкт-Петербурге по выбираемым пользователям критериям. Если пользователю приоритетнее университеты, то будет построена одна рекомендация, если библиотеки — другая. Таких категорий шесть. Пользователи системы: девелоперы, предприниматели в сфере креативной экономики, государственные структуры, которые занимаются архитектурным и экономическим планирвоанием города и другие заинтересованные лица (студенты, ученые, журналисты).

Описание используемых данных.

В качестве мест, на которых рекомендуются кластеры, используется данные объектно-адресной книги Санкт-Петербурга, данные по промышленным предприятиям и зонам промышленной застройки и данные по инвестиционным проектам Комитета по информатизации и связи Санкт-Петербурга. Источник: http://data.gov.ru/ .

##                                                           address      lon
## 1 191126, г.Санкт-Петербург, Загородный проспект, д. 36, литера А 30.33779
## 2     195009, г.Санкт-Петербург, улица Комсомола, д. 33, литера А 30.35819
## 3   191104, г.Санкт-Петербург, улица Жуковского, д. 7-9, литера А 30.35141
## 4 191025, г.Санкт-Петербург, улица Маяковского, д. 2/94, литера А 30.35366
## 5      191123, г.Санкт-Петербург, Кирочная улица, д. 23, литера А 30.36167
## 6   191104, г.Санкт-Петербург, Литейный проспект, д. 46, литера А 30.34863
##        lat
## 1 59.92415
## 2 59.95499
## 3 59.93579
## 4 59.93244
## 5 59.94367
## 6 59.93758

В качестве категорий, на основании которых выстариваются рекомендации, по ключевым словам были выгружены геоточки с сайта http://overpass-turbo.eu/ .

##                        name      lon      lat
## 1                   Буквоед 33.07197 68.96246
## 2                 Дом Книги 30.32577 59.93574
## 3                   Буквоед 33.07197 68.96246
## 4    ДВК(Дом военной книги) 37.51288 55.77880
## 5 Дом университетской книги 29.82350 59.88268
## 6                 Дом книги 30.32577 59.93574
##                                                          name       lon
## 952                                                Зазеркалье  30.34392
## 953                                                  Скороход  38.70568
## 954                         Театр Эстрады им. Аркадия Райкина  30.32224
## 955                                                    Остров 115.18892
## 956 Государственный академический театр балета им Л. Якобсона  30.35546
## 957                                          УЖАСЫ Петербурга  30.33895
##           lat
## 952 59.929475
## 953 47.519960
## 954 59.937071
## 955 -8.409518
## 956 59.937919
## 957 59.918945

Подробное описание своей роли и своей части работы.

Как руководитель проекта я предложила саму идею проекта, мы сформировали с Алиной концептуальное видение системы: какие данные нужны, что с ними делать. Затем я раздавала планы и руководства к действию для каждой команды. Нашла датасет со зданиями. Написала 70% интерфейса Shiny. Все решения принимались непосредственно либо мной, либо командой по согласованию со мной.

Подробное рефлексивное описание проделанной работы (что удалось, что не удалось, что можно было бы сделать по-другому).

На самом деле удалось почти всё, просто тяжело. Не думали, что проект окажется таким трудоъемким. Пару раз жалели, что не вяли Амазон. Но в целом не получается распределять время в течение семестра равномерно, получаются все равно моменты нагрева и спада: хотелось бы меньше такого, но это очень сложно и зависит напряму от руководителя проекта.

Предложения по развитию (что можно сделать еще и какими методами).

Во-первых, провести семинары по Shiny и не один. Оказалось, что там так много подводных камней,(если действительно делать сложный и раблочий интерфейс), что самим разобраться крайне сложно.

Во-вторых, более серьезно настроить студентов на разделение по ролям и максимально приблизить его к реальному (как в IT-проектах). Сделать так, чтобы не один человек делал 80% работы по проекту. Менеджер проекта и think-tank возможно нужно разделить.

Код

#----------------------------------Рекомендательная модель----------------------------------
points <- read.csv("~/creative/ml-latest-small/TOTAL_POINTS.csv",stringsAsFactors=FALSE)
areas <- read.csv("~/creative/ml-latest-small/TOTAL_AREAS.csv")

points <- points %>% filter(!is.na(lon))
areas  <- areas  %>% filter(!is.na(lon))


points <- points[,3:4]
areas <- areas[,3:4]

dist <- distm(areas, points)

d <- data.frame(dist)


dist.m <- as(dist, "realRatingMatrix")
dist.m


recommender_models <- recommenderRegistry$get_entries(dataType ="realRatingMatrix")
recommender_models$IBCF_realRatingMatrix$parameters

which_train <- sample(x = c(TRUE, FALSE), 
                      size = nrow(dist.m),
                      replace = TRUE, 
                      prob = c(0.8, 0.2))
#head(which_train)

recc_data_train <- dist.m[which_train, ]
recc_data_test <- dist.m[!which_train, ]

recc_model <- Recommender(data = recc_data_train, 
                          method = "UBCF")

recc_model

n_recommended <- 10 # the number of items to recommend to each user


recc_predicted <- predict(object = recc_model, 
                          newdata = recc_data_test, 
                          n = n_recommended)
recc_predicted

recc_user_1 <- recc_predicted@ratings[[1]] # recommendation for the first user
movies_user_1 <- recc_predicted@itemLabels[recc_user_1]
movies_user_2 <- movies_user_1

#----------------------------------Shiny----------------------------------
library(ggfortify)
library(plotly)
library(ggplot2)
library(ggmap)
library(rgdal)
library(sp)
library(leaflet)
library(jsonlite)
library(dplyr)
library("ggmap")
library("tidyr")
library("dplyr")


function(input, output, session) {
  
  museums <- read.csv("~/Downloads/creative-master/museums.csv")
  museums <- museums[-c(17, 3, 9, 47), ]
  df <- museums
  coordinates(df) <- ~lon+lat
  
  output$mymap <- renderLeaflet({
    
    leaflet(df) %>%
      addTiles() %>%
      addMarkers(data = df,
                 popup = paste0("<strong>Название: </strong>",
                                df$name,
                                "<br><strong>Адрес: </strong>",
                                df$fulladdress
                 ),
                 clusterOptions = markerClusterOptions()
      ) 
  })
}

library(shiny)
library(recommenderlab)
library(shinydashboard)
library(leaflet)
library(shiny)
library(shinythemes)

tags <- c("Библиотеки", "Университеты","Музеи","Бары", "Книжные магазины", "Отели", "Мосты", "Парки", "Театры")

fluidPage(
  headerPanel("Где построить новый креативный кластер в Санкт-Петербурге?"),
  leafletOutput("mymap"),
  hr(),
  fluidRow(
    column(2,
           sliderInput('sampleSize', 'Цена квадратного метра, руб.', 
                       min=1, max=nrow(museums), value=min(1000, nrow(museums)), 
                       step=500, round=0),
           br(),
           checkboxInput('jitter', 'Рядом с метро'),
           checkboxInput('smooth', 'В центре')
    ),
    column(4, offset = 1,
           selectInput("name_en", "Приоритет:", 
                       choices=tags),
           hr(),
           helpText("Выберите категорию, в соответствии с которой будет строиться рекомендация")
    )
)
)