- A+
之前有几篇文章,提到了尤对于SEO的数据分析思路,主要是这篇:http://www.SEOqianxian.com/36.seo
但实际情况中,虽然没人乐意,但技术上如何去实现分析却仍往往是最耗时的。
越深入数据分析,越容易发现现有的工具无法满足需求。哪怕Google Analytics等专业工具,在经过针对性的配置后,也只能在其界面上完成日常性的分析需求。更不论各公司内部自己开发的报表系统,绝大多数情况下比GA等差距很远,数据的可靠性尚待验证,想在报表上面进行细致的分析更无法苛求。
报表系统,需要事先定义其可能需要的功能,总是不可能满足临时的奇怪的需求。所以需要一直备着原始数据,在有特殊需求时就要靠它。(一般来说SEO做得越深入,特殊分析需求就越多)
以下是我对于SEO流量的原始数据,使用的技术解决方案概述:
1. 原始数据
1.1. 从Hadoop或服务器日志等原始数据源,仅抽取出核心维度与指标。(主要维度如着陆页URL、来源关键词,主要指标如访问深度)
1.2. 将维度与指标以制表符分隔,每行一条访问记录,将每日数据存到单独文件中。文件名需要包含日期信息。
数据如:域名 URL 关键词 访问深度
www /shouji/ 二手手机 5
1.3. 如果有需要的话,将文件以ftp等方式传到其它服务器上面去。
2. 数据计算(Python实现)
2.1. 通过命令行参数等方式来确定各维度的筛选规则,然后将各维度合并成一整个正则,编译正则后过用它筛选数据。
'''计算满足筛选条件的总访问次数'''
filters = {
'host': '^www$',
'url': '^/shouji/$',
}
filter = merge_filter(filters)
# filter = '^www\t/shouji/\t.*?\t.*?$'
filter = re.compile(filter)
count = 0
for line in open(log_file):
if not filter.search(line):
continue
count += 1
print count
2.2. 如果有额外的指标,将它/它们提取出来并累加。
2.3. 给定起始日期、截止日期,应能输出期间所有日期的流量。
def date_range(start, end, input_format='%y%m%d', output_format='%y%m%d'):
'''如print date_range(140130, 140202)
输出['140130', '140131', '140201', '140202']
'''
start = str(start)
end = str(end)
start = datetime.datetime.strptime(start, input_format)
end = datetime.datetime.strptime(end, input_format)
one_day = datetime.timedelta(days=1)
range_ = []
d = start - one_day
while 1:
d = d + one_day
if d > end:
break
range_.append(datetime.datetime.strftime(d, output_format))
return range_
3. 分析系统
web界面的分析系统虽然我也是做过,无奈前端技术糟糕,实现的比较凑合,此处便不展开提了。只要前面一步完成,那么把输出的数值放到Excel里面画图表也是种解决方案。