非理性繁荣!

正在检查要实施的Web分析(重新发布)

6月21日,2007。申请下写作

这是一种原始的非理性繁荣的移植,写于2007年年中:近两年前。使用互联网就是成为一个数字。不仅仅是被机器的无形之手剥夺了区分和对待(或虐待)的意义上的数字,但我们也变成了数字,我们被标记了,跟踪,不经意间留下了大量关于我们自己的数据。在一个 进入谷歌操作系统博客作者提到谷歌拥有来自谷歌分析程序的220 tb的信息。它的大小仅次于搜索爬虫使用的数据库,它有850 TB的信息。(Google Earth仅使用80.5 TB)以目前的增长速度,分析条目的大小将超过网络爬虫——这是关于谁一直在做什么的大量数据,他们在哪里做的。好的,这很可怕,我们该怎么办?好吧,我们编写自己的分析系统,当然!最近,我一直在构建一个用于 Django,在早期,它有着很高的潜力——就像大多数编程项目一样——死于上千次小的削减。本文着眼于web分析系统的总体设计,以及如何实施。它将在一些特别关键的细节上停留一段时间,但不会试图用代码实现Web分析系统。(对于那些好奇的人,我将在未来几天为Django刷一刷我的Web分析系统,然后将发布它(使用开源许可)。我不会在这篇文章中进一步讨论,但是打算在上面写几个条目(实现/设计,安装,使用情况,缺陷)。

“为什么不使用谷歌分析?”

因为这是那种我在夜晚保持清醒恐惧的反应,我想我会事先回答这个问题;有人要朝我扔过来。我的答案由两个论点组成,第一个是关于谷歌分析的技术限制,第二个问题是谷歌分析项目的广泛范围引发的隐私问题。我在谷歌分析中发现的最大技术限制是它每天只更新一次你的统计数据,我经常希望它能提供实时反馈,而事实并非如此。这导致了谷歌分析的另一个技术限制:这是一个我无法访问的专有系统,因此,我不能更改它的代码,使其按照我希望的方式运行。我无法访问原始数据来运行我自己的分析,我不能改变视觉效果,我只需要把它拿走或留下。鉴于我不在乎他们的选择,这不是纯粹的意识形态上的反对,但这也是一个现实的问题(他们的许多选择都是受项目范围的影响,他们根本没有处理能力产生实时更新,然而,通过将计算分配到本地服务器,我们可以负担得起他们做不到的事情。这是对隐私的严重威胁。谷歌分析用于很多,很多网站(包括这个,(就目前而言),这个(以及它对第三方cookie的使用)允许谷歌在大量站点中跟踪单个用户。我们大多数人都知道,互联网的匿名性远没有我们想象的那么强,但是,意识到我们的行动被记录得如此彻底仍然令人不安。读者可能会指出,开发另一个Web分析解决方案似乎很难恢复互联网的匿名性,但事实上,这是有贡献的。通过使用许多只跟踪特定网站访问者的非联合分析部署,网站所有者仍然可以维护网站统计数据,但是每个用户的行为只会在一个站点上被跟踪。因此,即使用户被几个不同的网站跟踪,不可能知道访问者12312在站点A与访问者34455在站点B是同一个人。对于许多人来说,谷歌分析的易用性将继续是唯一重要的论点,我完全意识到了这一点。因此,我的目标是改进Django的分析工具包,使其功能更加强大,而且比谷歌分析更容易使用。也许其他人也会效仿,为PHP实现类似的包,铁轨上的红宝石,和其他web开发框架(如果你的梦想很容易实现,为什么还要做梦呢?对吧?)…预先阻止批评的徒劳尝试已经够多了,以及检查开发Web分析框架所涉及的陷阱和各种决策。

Web分析解决方案的类别

web分析实现有两大类。第一个是由服务器日志软件,以及分析服务器日志以提取统计数据的软件。第二种方法是在页面中嵌入一个javascript文件,将数据传输到服务器,与cookie一起识别访问者(这是Google Analytics使用的方法)。两者都有其谬误:日志软件无法区分具有相同ip地址的多个访问者,嵌入的javascript被禁用了javascript的用户阻止,以及那些拒绝cookie的用户。尽管失败了,实现javascript/cookie方法要比编写自己的服务器容易得多,或者分析服务器日志(不同的服务器以不同的格式创建日志,这将使分析这些日志成为一次毫无乐趣的探险)。(在我的实现中,我最终采用了某种混合方法,但那是另一篇文章,因此,我必须坚强,不要讨论它。)因此,下面的大部分讨论将集中在如何设计一个JavaScript/cookie方法。

第一方的饼干vs第三方的饼干

谷歌分析能够跨多个站点跟踪用户的原因是它使用第三方cookie。这意味着所有使用谷歌分析的网站在您的计算机上共享相同的cookie。另一方面,使用第一次聚会cookie意味着每个网站都有自己的cookie——为最终用户提供更多的cookie,但在多个网站上跟踪用户习惯的可能性较小。在实施小规模的Web分析系统时,第一次聚会的饼干是一个更简单的选择。为您的用户提供更大的隐私权。A赢了实现者,对来访者来说是一场胜利,剩下谁来抱怨呢?

都是关于便雅悯人的……嗯……数据

在一天结束的时候,不管其他细节,web分析是关于收集关于站点流量的信息。在设计web分析系统时,决定跟踪哪些数据可能是最重要的决策。需要考虑的两个问题是: 什么数据是有用的?和 什么数据是可靠的?不幸的是,这两个问题可以产生非常不同的答案。我们首先尝试回答什么是有用的:我们想知道每个页面接收多少流量,我们想知道什么时候能收到交通信号,交通如何找到我们,我们接待了多少访客,以及我们接待的游客的质量。所有这些信息都可以很容易地收集到,但是可靠性差异很大,我们可以非常可靠地记录哪些页面接收流量(每页点击量)。以及流量如何找到我们(引用者和搜索关键字),但是,跟踪和评价访问者的精确度要低得多。我们仍然希望跟踪这些统计数据,但我们必须承认,无论我们最终使用谁的分析,记录和评估访客与其说是一门科学,不如说是一门艺术。这些困难来自于互联网的基本设计。我们有相对贫乏的工具来区分个人和乌合之众:我们有互联网协议地址,我们有饼干,而且根本没有其他东西(除非我们能说服访问者在他们的机器上安装我们糟糕的跟踪软件,也就是说,除非我们有访客)。IP地址会随着时间变化,可以在多个个体之间共享,此外,他们可能会被那些愿意尝试的人所欺骗。cookie很容易被删除,经常拒绝,而且非常不可靠的。删除cookie的用户似乎是新的访问者,而拒绝饼干的访客总是会以新访客的身份出现。有些黑客存在,但它们都是在某个方向上的妥协(要么太宽大,要么太严格,完美永远不会成为互联网节目的商标。同样,访问者的质量也是令人痛苦的主观。通过测量在同一个浏览器会话中加载的最后一个页面和第一个页面之间的差异,可以测量花费在站点上的时间。每个用户浏览的页面数量取决于跟踪用户的准确性(因此从一开始就注定是不准确的)。回弹率(只看了一个页面就离开的用户的百分比)也取决于对用户的准确跟踪。不要把这一点敲得太响,但这些统计数据都不会特别准确(这是Alexa的解决方案有点诱人的原因之一:他们可以准确地跟踪用户,从而使这些统计数据保持准确,达到任何服务器端的独创性都无法比拟的程度)。好吧,认识到我们正在跟踪的大部分数据至多将是中等精度的,我们仍然需要决定要跟踪哪些信息。在设计我的系统时,我将这些统计数据用于跟踪:访客数量,每页的页面视图,点击/上线,以及每段时间内的页面浏览数(我还打算跟踪搜索引擎查询,但是需要收集关于识别和区分查询的进一步原始数据)。一个人当然可以保留更多的数字,例如,可能想要精确地跟踪每次页面浏览量发生的时间。这似乎很合理,但是——至少在最初——我想创建一个系统,它可以创建分析数据的摘要,而不需要执行许多数据库查询,也不需要将数据强制转换为有意义的形式。如何处理数据的最终决定是如何以易于分配的格式显示收集的数据。谷歌分析使用自定义Flash界面,事实上,是肯定的,非常光滑。尽管如此,您的跟踪数据的许多细节都是不可用的。因此,一个令人愉悦的图形和硬数字的组合似乎是可取的:一些可以满足一个经验丰富的网站管理员和一个不太精明的新手的需要。(就我个人而言,我一直在利用 普洛特javascript库,我对此很满意)。

结束的想法

上周我深入研究了网络分析,这是一个令人耳目一新的浸泡。像所有有趣的问题一样,Web分析具有非常有用的潜力,同时也有一些棘手的限制,必须加以解决。它(像所有互联网相关领域一样)仍然是一个年轻的领域,这当然是一个需要更好解决方案的领域。正如我在文章中多次提到的,我一直在为Django框架开发一个web分析系统,这是一次非常有启发性的经历。在像Google Analytics那样发挥功能之前,它当然还有很长的路要走,但它已经可以做一些谷歌分析不能做的事情(例如,实时更新统计信息,而不是每24小时更新一次)。它是开源的,所以如果你有问题,你可以根据你的需要改变它。在本文讨论了web分析中的一些问题之后,我认为人们可以很容易地想象,两个同样理性的人可能希望以不同的方式处理跟踪访客的问题,或者想按小时而不是按天计算页面浏览量。开源的好处是他们可以启动Emacs并创建自己的版本,和 那谷歌分析永远无法与之匹配。