Цикл загрузки данных поиска Google по нескольким ключевым словам с использованием gtrends в r - PullRequest
0 голосов
/ 03 ноября 2019

Я хочу ежедневно загружать данные поиска Google по нескольким ключевым словам, используя пакет gtrends в r. Мне нужны данные для поиска по 30 ключевым словам в период между 2004-18. Поскольку Google позволяет извлекать ежедневные данные только за 9 месяцев, мне приходится загружать данные по 6 месяцев за каждое ключевое слово. Я также делаю некоторые дополнительные расчеты для данных за 6 месяцев (см. Код ниже). После загрузки данных в течение 6 месяцев, я хочу объединить данные в один временной ряд. После этого я хочу опустить NA, регрессировать на манекенах по будням, сохранить остаток и, наконец, масштабировать временные ряды на свое собственное стандартное отклонение. В конце я хотел бы сохранить скорректированные данные в виде вектора с именем поискового запроса (см. Код ниже).

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

#define the keywords
keywords=c("Charity")

#set the geographic area: GB = Great Britain
country=c('GB')

#timeframe
time=("2004-01-01 2004-06-30")
#set channels 
channel='web'
trends = gtrends(keywords, gprop =channel,geo=country, time = time )
#select only interest over time 
time_trend=trends$interest_over_time
time_trend$hits[time_trend$hits=="0"]<-1
time_trend$change <- c(NA,diff(log(time_trend$hits)))
set1=time_trend[which(weekdays(as.Date(time_trend$date, format = "%m/%d/%Y"))
                 %in% c('Monday','Tuesday', 'Wednesday', 'Thursday', 'Friday')), ]

Это продолжается до set30, после чего:

### Combine each 6 month data set ####

set <- rbind(set1,..,set30)

#omit NAs from the set
set <- na.omit(set)

# Regress on weekday and month dummies and keep the residual
set$weekday <- weekdays(set$date) #dummy for weekdays
weekday <- set$weekday

setti$month <- months(setti$date) #dummy for months
month <- set$month
mod <- lm(set$change~month+weekday)

#keep the residuals after the regression
set$residuals <- residuals(mod)

# Scale each by the time-series standard deviation #
sd <- sd(set$residuals)
set$adj_residuals=((set$residuals)/(sd))
adj_svi <- set$adj_residuals

# Save the deseasonalized and standardized ln daily change in keyword search volume as a vector

charity <- adj_svi

1 Ответ

0 голосов
/ 03 ноября 2019

Вы можете сделать это с lappy и определенной функцией

search6m=function(keywords,channel=channel,country=country,time=time){
  trends = gtrends(keywords, gprop =channel,geo=country, time = time )
#select only interest over time 
time_trend=trends$interest_over_time
time_trend$hits[time_trend$hits=="0"]<-1
time_trend$change <- c(NA,diff(log(time_trend$hits)))
set1=time_trend[which(weekdays(as.Date(time_trend$date, format = "%m/%d/%Y"))
                 %in% c('Monday','Tuesday', 'Wednesday', 'Thursday', 'Friday')), ]]
set1
}

# difine time search intervals 
stime="2004-01-02"
etime="2005-12-31"
times=seq.Date(as.Date(stime),as.Date(etime),by="6 months")
tims=sapply(1:(length(times)-1),function(z)paste(times[z],times[z+1],sep=" "))
# get data for each interval and use rbind to combine
set <- lapply(tims,function(zt)search6m(keywords,channel,country,time=zt))
set = do.call("rbind",set)

# do all the rest of your code
...