Google Trends数据一瞥

logo
Google除了给我们提供搜索服务之外,还有大大小小很多的有意思的产品,Google Trends就是其中一个。

前两天beenhero同学花了点时间把Google Trends 每天的热门数据(Hot Trends)全爬过来了,想让我帮忙建立个简单的模型进行一些分析。

Hot TrendsGoogleTrends根据当天用户搜索的关键字,给出的”搜索关键字”排行榜。为了避免数据平庸(最热门往往类似于”天气”等内容),Google自己已经做了一些处理,偏向于显示突然增长的搜索结果。希望能够根据关键字出现的频率、时间和榜上排名,给出一个GoogleTrends中最受关注的前几名。

关于详细的算法,参见文章的后半部分。

这里简单列出部分结果:(如下图)

data2

有意思的是,排名第一的关键字“Missing Money”: http://www.missingmoney.com/ (嗨,都是服务人民,差别咋这么大~)


模型目标:

  1. 频率,同一个关键词,出现次数越高,权重越高
  2. 时间, 时间越新,权重越高
  3. Rank,排名越高,权重越高

模型分析:

抓取后的数据结构:(原始数据:Google Trends )
data

keyword  关键词

rank  当日排名,1~100位

published_at  排名时间

  1. 对每个词条评分 keywords( a , b ,c ) a,b,c分别表示频率、时间、rank的评分。例如obama (0.5,0.8,0.7)表示关键字”Obama”,频率得分0.5,时间得分0.8,rank得分0.7。
    频率评分: 设频率为F 则 F/ 15      (说明15为常数    可修改)
    时间评分: 设距离今天的天数为X    则 (365 – X)/365  (Tip:  认为消息一年后过期 && 多个keyword取rank最近的日期 )
    RANK评分: 设频率为R 则 (101 – X) / 100。(多个keyword取rank最靠前的)
  2. 单个词条计算加权总分Score
    我们认为时间、频率、RANK的权分别为 0.35 ,0.3 ,0.35
    那么keywords( a , b ,c )的总分为: 0.35*a + 0.3*b + 0.35*c   例如Score obama (0.5,0.8,0.7) = 0.35*0.5 + 0.3*0.8 + 0.35*0.7 = 0.66

补充说明:

  1. 参数可调直观、数据意义明确。
  2. 线性模型,简单。
  3. 虽然考虑相同词条  但未考虑相近词条

模型对应的SQL:

SELECT `keyword` ,(
0.35*COUNT(*)/15 +
0.3*(101-MAX(`rank`))/100 +
0.35*(365-DATEDIFF(CURRENT_DATE(),MAX(`published_at`)))/365
) AS myorder
FROM `gtrends`
GROUP BY `keyword`
ORDER BY myorder DESC

Leave a Reply

Your email address will not be published. Required fields are marked *