тепловая карта с R, ggmap и ggplot

Я хочу нанести инциденты на карту (Сан-Франциско). Поскольку у меня слишком много инцидентов (800 тыс. Баллов), у меня возникает проблема с перепланированием. Чтобы избежать этого, я хочу создать двухмерную плотность, чтобы получить желаемое понимание. Проблема в том, что, хотя инциденты разбросаны по всей карте, geom_de density2d иллюстрирует только небольшую часть города. Конечно, ожидаемый результат - плотность, которая покрывает почти весь город. Есть идеи, почему это происходит?

КОД

 a<-get_map("San Francisco",zoom=12,source='osm')

 ggmap(a,extent='device')+    geom_density2d(data=train,aes(x=X,y=Y))+  
 stat_density2d(data=train,aes(x=X,y=Y,fill=..level..,alpha=..level..),
                  geom='polygon')

введите здесь описание изображения

--------------------------------------------------------------

Во-первых, @ajrwhite, спасибо за твой ответ и отношение, чувак. Вы также правы, когда имеете дело с такими большими наборами данных, чтобы экспериментировать. Что касается количества бинов, я подумал, что, как и geom_de density, оптимальная ширина бина ядра / количество бинов вычисляется внутренне. Кажется, что в 2-х мерном случае вам придется настраивать его самостоятельно.

Как вы упомянули, моя проблема заключалась в том, что я никогда не думал, что преступность в городе будет такой концентрированной. Открытие было настолько очевидным, что мой результат казался ложным. Как выясняется, в городе так и есть. Этот парень также предлагает более подробный подход к различным визуализациям этого набора данных.

https://www.kaggle.com/mircat/sf-crime/violent-crime-mapping

Наконец, спасибо за перенаправление. Это действительно обширное освещение этой темы.


person Alex Karvouniaris    schedule 06.05.2016    source источник
comment
Не могли бы вы сделать ссылку на набор данных о поездах, чтобы мы могли воспроизвести ваш пример? Geom_de density2d - контурный график, поэтому вполне возможно, что все немаркированные области имеют такой же низкий уровень преступности (я недостаточно знаю о Сан-Франциско, чтобы сказать, правдоподобно ли это).   -  person ajrwhite    schedule 07.05.2016


Ответы (1)


Поэтому я взял данные о преступности Сан-Франциско с Kaggle, которые, как я подозреваю, являются набор данных, который вы используете.

Во-первых, предложение - учитывая, что в этом наборе данных 878 049 строк, возьмите выборку из 5000 и используйте ее для экспериментов с графиками. Это сэкономит вам много времени:

train_reduced = train[sample(1:nrow(train), 5000),]

Затем вы можете легко составить график отдельных случаев, чтобы лучше понять, что происходит:

ggmap(a,extent='device') + geom_point(aes(x=X, y=Y), data=train_reduced)

И теперь мы видим, что координаты и данные правильно выровнены:

Карта преступности Сан-Франциско

Итак, ваша проблема просто в том, что преступность сконцентрирована на северо-востоке города.

Возвращаясь к вашим контурам плотности, мы можем использовать аргумент bins, чтобы увеличить точность наших интервалов контура:

ggmap(a,extent='device') +
  geom_density2d(data=train_reduced,aes(x=X,y=Y), bins=30) +
  stat_density2d(data=train_reduced,aes(x=X,y=Y,fill=..level.., alpha=..level..), geom='polygon')

Это дает нам более информативный сюжет, охватывающий районы города с низким уровнем преступности:

Контурная карта преступности Сан-Франциско с 30 ячейками

Существует бесчисленное множество способов улучшить эстетику и согласованность этих графиков, но они уже были рассмотрены в другом месте на StackOverflow, например:

Если вы используете меньшую выборку из своего набора данных, вы сможете очень быстро поэкспериментировать с этими идеями и найти параметры, которые лучше всего соответствуют вашим требованиям. Между прочим, ggplot2 отличная документация.

person ajrwhite    schedule 06.05.2016