Узнайте, как и в какой степени вы разрешили Google отслеживать вас, используя копию ваших личных данных.

Благодаря Google Maps сегодня очень сложно заблудиться, даже если вы находитесь в неизвестном месте, если у вас есть хорошее интернет-соединение, GPS и ваш смартфон с достаточным зарядом батареи, верно? Цена: позвольте ему читать ваши данные, вашу географическую информацию. Вы долгое время доверяли Google ценную информацию, даже не подозревая об этом, и это также включает долгую историю вашего местоположения.

В 2005 году мир впервые встретил Карты Google на рабочем столе, которые тогда сильно отличались от того, что мы знаем сегодня, однако это важная веха, которую следует отметить. С того года мир начал забывать об огромных печатных картах и ​​планах, которые мы бережно хранили, таких как «Guía Roji» (Guia Roji в то время была большой компанией, производившей планы и путеводители со всей Мексики). .

Однако только в 2012 году, когда произошла мобильная революция и появились смартфоны с более широкими возможностями (в том числе геолокация по GPS), наряду с запуском более совершенных мобильных соединений для передачи данных, это популярное приложение стало частью вашей жизни. Карты Гугл. Вы не можете мне отрицать, дорогой читатель, что просто на этой неделе вы хотя бы раз помогали себе с Картами.

Мало кто знает, что Google вышел далеко за рамки Google Maps, постоянно прослушивая ваши местоположения по умолчанию, даже без использования приложения Maps или даже без отключения геолокации на вашем смартфоне, но в любом случае это уже другая тема. В любом случае, если в любой момент вы захотите отключить эти параметры по умолчанию для защиты вашей конфиденциальности, вы можете следовать инструкциям, которые описывает Google: https://support.google.com/accounts/answer/3118687.

По этой причине, движимый любопытством, сегодня я хочу поделиться с вами тем, как вы можете взглянуть на данные, которые есть у Google о вашем местоположении прямо сейчас, изучить и проанализировать их самостоятельно, чтобы вы могли получить что-нибудь интересное. выводы. И что может быть лучше, чем иметь возможность сделать это с помощью R.

Как получить копию вашей истории местоположений?

Как я уже упоминал в других своих статьях, я сообщаю, что существует Google Takeout, инструмент Google для просмотра ваших данных, хранящихся в любых продуктах, которые вы использовали, и это, конечно же, включает ваше местоположение. Вам необходимо ввести URL: https://takeout.google.com/settings/takeout, чтобы войти в свою личную учетную запись.

Здесь вы можете запросить полную копию ваших данных или побочный продукт. Для этой статьи достаточно выбрать «История местоположений».

После этого следующим шагом будет выбор «Экспорт один раз» и установка формата доставки .zip.

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

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

После того, как вы выполните инструкции по загрузке, у вас будет файл .zip, которому предшествует слово «takeout».

Когда вы разархивируете .zip, вы увидите файл с именем «Location History.json».

Что ж, этот файл .json содержит полные данные вашей истории местоположений, которые Google зарегистрировал о вас, с момента, когда вы впервые разрешили ему доступ, до момента, когда вы сгенерировали эту копию данных с помощью Google Takeout.

Чтение данных, полученных из вашей истории местоположений

Теперь вы можете начать работу с информацией, полученной из вашей истории местоположений, в новом скрипте R. Вы начнете с включения необходимых пакетов и настройки чтения вашей истории в формате .json для создания нового фрейма данных.

# REQUIRED LIBRARIES
library(dplyr)
library(lubridate)
library(ggplot2)
library(jsonlite)
library(leaflet)
library(leaflet.extras)
library(kableExtra)
# READING JSON DATA
myHistory <- fromJSON("Takeout/Location History/Location History.json")
# EXTRACT LOCATION DATAFRAME
myData <- myHistory$locations

Вы можете подробно изучить полученные переменные и в процессе получить обзор данных с пропущенными значениями.

# NA'S IN DATAFRAME
lostData = t(t(sapply(myData,function(x)(sum(is.na(x))))))
colnames(lostData)<-c("NAs")
kable(lostData,caption="Number of NA's in Dataframe") %>% 
  kable_styling(bootstrap_options = c("striped", "hover", "condensed", "responsive"), 
                full_width = F )

Вы обнаружите, что ваш фрейм данных имеет 9 переменных. Это нормально, если вы обнаружите много пропущенных значений или NA.

Краткое объяснение каждой переменной:

  • timeStampMs: отметка времени в миллисекундах, когда было записано наблюдение.
  • latitudeE7: целое число, широта места наблюдения.
  • longitudeE7: целое число долготы места наблюдения.
  • точность. Оценка Google точности данных.
  • activity: сведения о зарегистрированной активности (activity.type: Google определяет, что делает пользователь, activity.confidence: Google присваивает значение доверия,
  • activity.timestampMs: отметка времени в миллисекундах для зарегистрированного действия).
  • скорость: скорость устройства в момент захвата местоположения.
  • высота: высота места наблюдения.
  • заголовок: Направление, в котором движется устройство.
  • verticalAccuracy: Вертикальная точность местоположения устройства.

Очистка и преобразование данных из истории вашего местоположения

Для практических целей вы будете учитывать только те записи, активность которых отличается от NULL. Скорее всего, ваше общее количество наблюдений сильно сократится. Вы также конвертируете данные о местоположении и временные метки в более удобочитаемую форму чтения.

# CLEANING AND TRANSFORMING DATA
myData <- myData %>% 
  filter(activity!="NULL")
myData <- myData %>% 
  mutate(time  = as_datetime(as.numeric(myData$timestampMs)/1000),
                    date = date(time),
                    hour  = paste(hour(time),minute(time),sep=":"),
                    week = isoweek(time),
                    month = paste(month(time)),
                    year = isoyear(time),
                    latitude = latitudeE7/1e7,
                    longitude= longitudeE7/1e7) %>%
  select(-timestampMs,-latitudeE7,-longitudeE7,-time)
timestamp <- as.character(sapply(myData$activity, function(x) (x[[1]][[1]])))
# EXTRACT FIRST ACTIVITY HIGHEST CONFIDENCE
myActivity <-(sapply(myData$activity, function(x) (x[[2]][[1]][1])))
myActivity <- sapply(myActivity,function(x) (x[[1]][1]))
myActivity <- unlist(myActivity)
myData <- myData %>% 
  mutate(activityTime = as_datetime(as.numeric(timestamp)/1000),
                    activityDate = date(activityTime),
                    activityHour  = hour(activityTime),
                    activityMonth = paste(month(activityTime)),
                    activityHour = paste(activityHour,minute(activityTime),sep=":"),
                    activityWeekday = wday(activityTime, label=T,week_start=1, abbr = F),
                    mainActivity = myActivity)

Сколько данных о вашем местоположении собирает Google каждый год?

Вы можете сделать первый обзор количества наблюдений в год, то есть объема данных, которые Google собирал каждый год о вашем местоположении до сегодняшнего дня.

# DATA COLLECTED BY YEAR
kable(myData %>% group_by(year) %>% 
        summarise(n=n()),col.names=c("Year","No. Observations"), 
      align=c('c','r'),caption="Data collected by year") %>% 
  kable_styling(bootstrap_options = c("striped", "hover", "condensed","responsive"), full_width = F )

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

Сколько местоположений сканировал Google каждый год в неделю?

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

# TRACKS PER WEEK BY YEAR
myData %>%  group_by(week,year) %>% 
  summarise(n = n()) %>%
  ggplot( aes(x=week, y=n)) +
  geom_bar(stat="identity", aes(fill = n)) +
  scale_fill_gradient(low = "yellow", high = "red") +
  facet_grid(facets = year ~ .) +
  scale_x_continuous(breaks = c(1:54)) +
  labs(x = "Week", y = "Count", 
       title="How many locations have Google tracked about me?", 
       subtitle = "Tracks per week by year") +
  theme_bw()

Вы получите график, подобный представленному ниже, где таким же образом, например, визуально в моем случае, очень очевидно, что почти во второй половине 2014 года я предоставил Google больший объем данных о моем местоположении по сравнению с остальные годы.

Сколько точек местоположения получил от вас Google за день, месяц и год?

Еще один способ визуализировать информацию более подробно - это использовать ящичные диаграммы, чтобы наблюдать такие данные, как медиана, минимум и максимум, по дням, месяцам и годам.

# DATA POINTS COLLECTED BY GOOGLE
myData$monthYear <- strftime(myData$date,"%Y%m")
pointsDay <- data.frame(table(myData$date), group = "day")
pointsMonth <- data.frame(table(myData$monthYear), group = "month")
pointsYear <- data.frame(table(myData$year), group = "year")
points <- rbind(pointsDay[, -1], pointsMonth[, -1], pointsYear[, -1])
ggplot(points, aes(x = group, y = Freq)) + 
  geom_point(position = position_jitter(width = 0.2), alpha = 0.3) + 
  geom_boxplot(aes(color = group), size = 1, outlier.colour = NA) + 
  facet_grid(group ~ ., scales = "free") + 
  labs(x = " ", y = "Count", 
       title="How many data points did Google collect about me?", 
       subtitle = "Tracking per day, month and year") +
  theme_bw()

Например, в моем случае, среди других данных, я вижу, что у меня есть минимум 1 точка местоположения, собранная Google, и максимум 608 точек за один день со средним значением 26.

Насколько точны данные о вашем местоположении Google?

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

# ACCURACY LEVEL
myData$accuracyLevel <- ifelse(myData$accuracy<100, "high", ifelse(myData$accuracy<10000, "middle", "low"))
myData$accuracyLevel <- factor(myData$accuracyLevel, levels = c("high", "middle", "low"))
myData$accuracy <-as.numeric(unlist(myData$accuracy))
ggplot(myData, aes(x = as.numeric(accuracy), fill = accuracyLevel)) + 
  geom_histogram() + 
  labs(x = "Accuracy level in meters", y = "Count", 
         title="How accurate is the Google location data collected about me?", 
       subtitle = "Accuracy of location points") +
  theme_bw()

Вы получите график, подобный следующему, где вы можете увидеть расчетную точность в метрах. Например, в моем случае очень мало данных с расчетной точностью менее пятисот метров, что отражает высокую точность большинства точек местоположения, собранных Google.

Изменения высоты, собранные Google для вашего местоположения

Высота - это расстояние по вертикали между объектом или точкой в ​​космосе и поверхностью уровня моря. Это также информация о вашем местонахождении у Google. Вы можете визуализировать детали в вариациях, скажем, за месяц, с помощью диаграммы разброса.

# ALTITUDE VARIATION
myData %>% 
  filter(!is.na(altitude)) %>% arrange(date) %>%
  ggplot(aes(x=as.Date(date),y=altitude, color=altitude)) +
  geom_point() +
  theme_bw() + 
  labs(x = "Date", y = "Height above sea level", 
       title="Altitude variations that Google collected about me", 
       subtitle = "Altitude variation by month") +
  theme(axis.text.x = element_text(angle = 90, hjust = 1))+
  scale_x_date(breaks = function(x) seq.Date(from = min(x), to = max(x), by = "1 month"),
               minor_breaks = function(x) seq.Date(from = min(x), to = max(x), by = "1 month"))

Я живу в Мехико, что на высоте около 2200 метров над уровнем моря. Я стараюсь хотя бы раз в год ходить на пляж, с полученным сюжетом, как видите, из-за пандемии covid-19 это изменилось больше года назад. Боже, я скучаю по этой подзарядке у моря!

Какими основными видами деятельности, по сведениям Google, вы занимаетесь?

Вы помните, что ваш фрейм данных также содержит переменную, которая считывает действия, которые, по мнению Google, вы выполняете в каждой собранной точке местоположения. Он делает оценки, особенно с учетом изменений скорости на вашем устройстве, чтобы определить соответствующую активность. Вы можете просматривать детали в общем виде с помощью гистограмм.

# TRACKING ACTIVITIES
myData %>%  
  ggplot(aes(x=(mainActivity), group=(mainActivity))) +
  geom_bar(aes(fill=..count..)) + 
  scale_fill_gradient(low = "yellow", high = "red") +
  labs(x = "Activity", y = "Count", 
         title="What main activities does Google know that I do?", 
       subtitle = "Activity type collected by Google") +
  theme_bw()

Это нормально, если вы обнаружите, что большая часть «ЕЩЕ» активности является преобладающей полосой. Я очень сомневаюсь, что ваши устройства всегда под рукой.

Какие основные виды деятельности, по сведениям Google, вы выполняете каждый день недели?

Вы можете присмотреться поближе и ответить на этот вопрос, используя ранее полученную информацию.

# ACTIVITY BY TYPE AND WEEKDAY
myData %>% 
  select(mainActivity,activityWeekday) %>%
  filter((!is.na(mainActivity)) & (!is.na(activityWeekday))) %>%
  ggplot(aes(x=mainActivity)) + 
  geom_bar(aes(fill=..count..)) + 
  scale_fill_gradient(low = "yellow", high = "red") +
  facet_wrap(~activityWeekday, scales = 'free', ncol=4) +
  labs(x = "Activity", y = "Count", 
       title="What main activities does Google know that I do", 
       subtitle = "Activity type collected by Google per week day") +
  theme_bw() + theme(axis.text.x = element_text(angle = 90, hjust = 1))

Например, Google известно, что в моем случае суббота - это дни, когда я обычно садюсь в машину. Связано ли это с тем, что по субботам я получаю больше информации от Uber и Didi?

Карта местоположений, полученная от вас Google

Вы можете очень легко создать карту для визуализации этого с помощью самой популярной библиотеки R для карт: «Leaflet».

# MAP OF LOCATIONS COLLECTED BY GOOGLE
leaflet(myData) %>% 
  addTiles() %>%
  addWebGLHeatmap(size=10,units='px')

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

Карта кликов, полученная от вас Google

Еще один способ визуализировать ваши местоположения - это тепловая карта, также с библиотекой Leaflet.

# HEATMAP OF LOCATIONS COLLECTED BY GOOGLE
myMap = leaflet(myData) %>% 
  addProviderTiles(providers$CartoDB.Positron) %>%
  fitBounds(~min(longitude), ~min(latitude), ~max(longitude), ~max(latitude)) %>%  
  addHeatmap(lng = ~longitude, lat = ~latitude, group = "HeatMap", blur = 20, max = 0.01, radius = 15) %>%
  addMarkers(data = myData, ~longitude, ~latitude, clusterOptions = markerClusterOptions(), group = "Points")
myMap

В результате вы сможете наблюдать детали в RStudio Viewer аналогично следующему, в зависимости от точек, в которых вы путешествовали по миру.

Большое спасибо за ваше любезное чтение. Как и в большинстве моих статей, я делюсь графиками, созданными с помощью plotly, в flexdashboard, который я собрал немного более эстетично: https://rpubs.com/cosmoduende / google-location-history-analysis

А здесь вы можете найти полный код: https://github.com/cosmoduende/r-google-location-history

Я благодарю вас за то, что вы добрались до конца, желаю вам удачного анализа, чтобы вы могли применить все на практике, и чтобы вы были удивлены и получили такое же удовольствие, как и я, от результатов!