竹磬网-邵珠庆の日记 生命只有一次,你可以用它来做些更多伟大的事情–Make the world a little better and easier


309月/118

网站运营一定要做的八件事

发布在 邵珠庆

一、内容建设

一个成功的网站核心是什么?那就是内容,如何去建设呢,下面介绍几点:

1、提供内容

内容是围绕用户的需求创建的,通过数据分析,市场调研来分析用户的行为,确定用户的需求.给用户提供有用的内容,这是主要的方向。

2、激励用户贡献内容

内容的建设起初是运营人员去创建内容,吸引用户,当网站有一定人气后,一定要做的是内容的日常维护和管理,主要通过运营策略去刺激用户不断地创造更多的内容,通过不断循环,带来新用户,产生更多内容。

3、挖掘忠实用户:

产品发展成熟后,可实行管理制度,主要是交流社区这一块,让忠实的用户去管理和交流,引导用户去维护,让内容和讨论都有针对性。

二、用户维护

用户维护是管理产品与用户群之间的关系,以社区类网站说明以下几点:

1、建立和完善帮助系统,发布友好的产品公告

2、及时解决用户的反馈的问题,为他们提供更好的服务(客服)

3、主动邀请用户来体验和尝试新产品,让用户参与到我们网站中来

4、对虚拟系统和等级系统进行合理的设置,并在运营中对其进行优化改进

5、在社区交友中,会存在一些用户之间的情绪问题,要调节用户之间的矛盾,争议并能调和氛围

6、社区管理员在用户群中会有一定的权威性,一定要树立一个好的形象,让用户建立对网站的信任度很重要,这样不仅能提高用户的忠诚度,而且能提高产品的品牌形象,为口碑营销打下好的基础。

三、产品需求

产品虽然是产品人员的工作,但是在运营过程中,运营人员与用户接触的最多,这样更能理解用户的需求,不断给产品提出建议,也是运营人员要做的事情,产品和运营人员共同策划出的产品,才能更好的满足用户的需求。

四、数据分析

数据分析是产品运营中最重要的一部分,以下介绍几点:

1、通过数据能了解产品的问题

每个产品都会有要分析的数据指标:pv,uv,登录数,会员数,帖子数,回帖数等,这些数据根据产品的不同,会有所改变的,通过分析这些数据的变化可以了解到产品目前存在哪些问题,发现问题所在,则需要对产品提出优化需求。

2、通过数据能了解用户的行为

通过一些特定的数据指标,分析用户在网站上的操作情况,更有利于了解用户的行为,如用户最喜欢进入的页面,最喜欢看的内容是哪些,通过一系列的分析,更能对产品进行深层次的优化。

3、作数据分析需要出的文档

数据记录表格(excel)和数据报告(word)

五、活动计划

产品发展到一定阶段是需要活动来维系的,一般有几种活动目的,第一个是引导用户创造内容;第二个活跃社区的气氛,增加用户群关系;第三个通过对外合作的方式,增强产品的品牌。

下面介绍下运营人员需要作的具体工作:

1、制定半年的活动计划:大概的了解下产品可能需要做什么活动,优先在脑海中思考下,当然这也随着时间的变化,活动也会有改变的。

2、活动的收集:多参考其它产品,看看其它产品做了什么活动并做收集,以便以后在做具体方案时,能够做参考。

3、活动方案制定:具体执行方案的文档内容包括主题,内容,时间地点,目的,奖项设置,说明,活动投入预算等。

4、活动总结:对结束的活动进行总结,输出总结报告,包括主题,时间地点,目的,实现效果,活动的优缺点,实际的预算。

六、营销计划

产品在推广过程中需要对外营销,提高产品的品牌形象,以下说明几点:

1、广告合作

2、渠道合作

3、病毒营销

4、事件营销

对于营销做的不是很多,只大概的说明几点,希望与有经验的高手一起学习探讨。

七、产品分析

分析同类产品是所有运营人员也需要做的

从产品角度:主要借鉴其它产品的优势和弥补我们产品的不足,多看多用能够给我们带来更多的灵感,也更能给产品提出好的建议。

从运营角度:在使用其它产品的同时,多多思考其它网站的运营思路和盈利模式,通过怎样的运营策略运用到自己的产品中。

产品分析的要点: 产品的内容,用户群,产品风格,发展方向,流量,盈利模式等。

八、运营总结

运营人员在做一段时间后,都会有一些运营的心得体会,感受等,可以将自己的想法记录下来,这也是一个成长的经历,如果能够发表到网站上与大家一起分享,交流,学习,与同行业的人沟通的越多,才能跑的更快,更远!

289月/114

十道海量数据处理面试题与十个方法总结

发布在 邵珠庆

第一部分、十道海量数据处理面试题

1、海量日志数据,提取出某日访问百度次数最多的那个IP。

      首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同样可以采用映射的方法, 比如模1000,把整个大文件映射为1000个小文件,再找出每个小文中出现频率最大的IP(可以采用hash_map进行频率统计,然后再找出频率最大 的几个)及相应的频率。然后再在这1000个最大的IP中,找出那个频率最大的IP,即为所求。

或者如下阐述(雪域之鹰):
算法思想:分而治之+Hash
1.IP地址最多有2^32=4G种取值情况,所以不能完全加载到内存中处理;
2.可以考虑采用“分而治之”的思想,按照IP地址的Hash(IP)%1024值,把海量IP日志分别存储到1024个小文件中。这样,每个小文件最多包含4MB个IP地址;
3.对于每一个小文件,可以构建一个IP为key,出现次数为value的Hash map,同时记录当前出现次数最多的那个IP地址;
4.可以得到1024个小文件中的出现次数最多的IP,再依据常规的排序算法得到总体上出现次数最多的IP;

2、搜索引擎会通过日志文件把用户每次检索使用的所有检索串都记录下来,每个查询串的长度为1-255字节。
    假设目前有一千万个记录(这些查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个。一个查询串的重复度越高,说明查询它的用户越多,也就是越热门。),请你统计最热门的10个查询串,要求使用的内存不能超过1G。

    典型的Top K算法,还是在这篇文章里头有所阐述,详情请参见:十一、从头到尾彻底解析Hash表算法。
   
    文中,给出的最终算法是:
    第一步、先对这批海量数据预处理,在O(N)的时间内用Hash表完成统计之前写成了排序,特此订正。July、2011.04.27);
    第二步、借助堆这个数据结构,找出Top K,时间复杂度为N‘logK。
        即,借助堆结构,我们可以在log量级的时间内查找和调整/移动。因此,维护一个K(该题目中是10)大小的小根堆,然后遍历300万的Query,分别 和根元素进行对比所以,我们最终的时间复杂度是:O(N) + N'*O(logK),(N为1000万,N’为300万)。ok,更多,详情,请参考原文。

    或者:采用trie树,关键字域存该查询串出现的次数,没有出现为0。最后用10个元素的最小推来对出现频率进行排序。

3、有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。

    方案:顺序读文件中,对于每个词x,取hash(x)%5000,然后按照该值存到5000个小文件(记为x0,x1,...x4999)中。这样每个文件大概是200k左右。

    如果其中的有的文件超过了1M大小,还可以按照类似的方法继续往下分,直到分解得到的小文件的大小都不超过1M。
    对每个小文件,统计每个文件中出现的词以及相应的频率(可以采用trie树/hash_map等),并取出出现频率最大的100个词(可以用含100个结 点的最小堆),并把100个词及相应的频率存入文件,这样又得到了5000个文件。下一步就是把这5000个文件进行归并(类似与归并排序)的过程了。

4、有10个文件,每个文件1G,每个文件的每一行存放的都是用户的query,每个文件的query都可能重复。要求你按照query的频度排序。

    还是典型的TOP K算法,解决方案如下:
    方案1:
    顺序读取10个文件,按照hash(query)%10的结果将query写入到另外10个文件(记为)中。这样新生成的文件每个的大小大约也1G(假设hash函数是随机的)。
   
    找一台内存在2G左右的机器,依次对用hash_map(query, query_count)来统计每个query出现的次数。利用快速/堆/归并排序按照出现次数进行排序。将排序好的query和对应的 query_cout输出到文件中。这样得到了10个排好序的文件(记为)。

    对这10个文件进行归并排序(内排序与外排序相结合)。

    方案2:
     一般query的总量是有限的,只是重复的次数比较多而已,可能对于所有的query,一次性就可以加入到内存了。这样,我们就可以采用trie树/hash_map等直接来统计每个query出现的次数,然后按出现次数做快速/堆/归并排序就可以了。

    方案3:
    与方案1类似,但在做完hash,分成多个文件后,可以交给多个文件来处理,采用分布式的架构来处理(比如MapReduce),最后再进行合并。

5、 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?

    方案1:可以估计每个文件安的大小为5G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。

    遍历文件a,对每个url求取hash(url)%1000,然后根据所取得的值将url分别存储到1000个小文件(记为a0,a1,...,a999)中。这样每个小文件的大约为300M。

    遍历文件b,采取和a相同的方式将url分别存储到1000小文件(记为b0,b1,...,b999)。这样处理后,所有可能相同的url都在对应的小 文件(a0vsb0,a1vsb1,...,a999vsb999)中,不对应的小文件不可能有相同的url。然后我们只要求出1000对小文件中相同的 url即可。

    求每对小文件中相同的url时,可以把其中一个小文件的url存储到hash_set中。然后遍历另一个小文件的每个url,看其是否在刚才构建的hash_set中,如果是,那么就是共同的url,存到文件里面就可以了。

    方案2:如果允许有一定的错误率,可以使用Bloom filter,4G内存大概可以表示340亿bit。将其中一个文件中的url使用Bloom filter映射为这340亿bit,然后挨个读取另外一个文件的url,检查是否与Bloom filter,如果是,那么该url应该是共同的url(注意会有一定的错误率)。

    Bloom filter日后会在本BLOG内详细阐述。

6、在2.5亿个整数中找出不重复的整数,注,内存不足以容纳这2.5亿个整数。

    方案1:采用2-Bitmap(每个数分配2bit,00表示不存在,01表示出现一次,10表示多次,11无意义)进行,共需内存2^32 * 2 bit=1 GB内存,还可以接受。然后扫描这2.5亿个整数,查看Bitmap中相对应位,如果是00变01,01变10,10保持不变。所描完事后,查看 bitmap,把对应位是01的整数输出即可。

    方案2:也可采用与第1题类似的方法,进行划分小文件的方法。然后在小文件中找出不重复的整数,并排序。然后再进行归并,注意去除重复的元素。

7、腾讯面试题:给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中?

    与上第6题类似,我的第一反应时快速排序+二分查找。以下是其它更好的方法:
    方案1:oo,申请512M的内存,一个bit位代表一个unsigned int值。读入40亿个数,设置相应的bit位,读入要查询的数,查看相应bit位是否为1,为1表示存在,为0表示不存在。

    dizengrong:
    方案2:这个问题在《编程珠玑》里有很好的描述,大家可以参考下面的思路,探讨一下:
又因为2^32为40亿多,所以给定一个数可能在,也可能不在其中;
这里我们把40亿个数中的每一个用32位的二进制来表示
假设这40亿个数开始放在一个文件中。

    然后将这40亿个数分成两类:
      1.最高位为0
      2.最高位为1
    并将这两类分别写入到两个文件中,其中一个文件中数的个数<=20亿,而另一个>=20亿(这相当于折半了);
与要查找的数的最高位比较并接着进入相应的文件再查找

    再然后把这个文件为又分成两类:
      1.次最高位为0
      2.次最高位为1

    并将这两类分别写入到两个文件中,其中一个文件中数的个数<=10亿,而另一个>=10亿(这相当于折半了);
    与要查找的数的次最高位比较并接着进入相应的文件再查找。
    .......
    以此类推,就可以找到了,而且时间复杂度为O(logn),方案2完。

   附:这里,再简单介绍下,位图方法:
    使用位图法判断整形数组是否存在重复
    判断集合中存在重复是常见编程任务之一,当集合中数据量比较大时我们通常希望少进行几次扫描,这时双重循环法就不可取了。

    位图法比较适合于这种情况,它的做法是按照集合中最大元素max创建一个长度为max+1的新数组,然后再次扫描原数组,遇到几就给新数组的第几位置上 1,如遇到5就给新数组的第六个元素置1,这样下次再遇到5想置位时发现新数组的第六个元素已经是1了,这说明这次的数据肯定和以前的数据存在着重复。这 种给新数组初始化时置零其后置一的做法类似于位图的处理方法故称位图法。它的运算次数最坏的情况为2N。如果已知数组的最大值即能事先给新数组定长的话效 率还能提高一倍。

    欢迎,有更好的思路,或方法,共同交流。

8、怎么在海量数据中找出重复次数最多的一个?
  
    方案1:先做hash,然后求模映射为小文件,求出每个小文件中重复次数最多的一个,并记录重复次数。然后找出上一步求出的数据中重复次数最多的一个就是所求(具体参考前面的题)。

9、上千万或上亿数据(有重复),统计其中出现次数最多的钱N个数据。

    方案1:上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个出现次数最多的数据了,可以用第2题提到的堆机制完成。

10、一个文本文件,大约有一万行,每行一个词,要求统计出其中最频繁出现的前10个词,请给出思想,给出时间复杂度分析。

    方案1:这题是考虑时间效率。用trie树统计每个词出现的次数,时间复杂度是O(n*le)(le表示单词的平准长度)。然后是找出出现最频繁的前10 个词,可以用堆来实现,前面的题中已经讲到了,时间复杂度是O(n*lg10)。所以总的时间复杂度,是O(n*le)与O(n*lg10)中较大的哪一 个。

附、100w个数中找出最大的100个数。

    方案1:在前面的题中,我们已经提到了,用一个含100个元素的最小堆完成。复杂度为O(100w*lg100)。

    方案2:采用快速排序的思想,每次分割之后只考虑比轴大的一部分,知道比轴大的一部分在比100多的时候,采用传统排序算法排序,取前100个。复杂度为O(100w*100)。

    方案3:采用局部淘汰法。选取前100个元素,并排序,记为序列L。然后一次扫描剩余的元素x,与排好序的100个元素中最小的元素比,如果比这个最小的 要大,那么把这个最小的元素删除,并把x利用插入排序的思想,插入到序列L中。依次循环,知道扫描了所有的元素。复杂度为O(100w*100)。

致谢:http://www.cnblogs.com/youwang/

 

第二部分、十个海量数据处理方法大总结

    ok,看了上面这么多的面试题,是否有点头晕。是的,需要一个总结。接下来,本文将简单总结下一些处理海量数据问题的常见方法,日后,本BLOG内会具体阐述这些方法。

    下面的方法全部来自http://hi.baidu.com/yanxionglu/blog/博客,对海量数据的处理方法进行了一个一般性的总结,当然这些方法可能并不能完全覆盖所有的问题,但是这样的一些方法也基本可以处理绝大多数遇到的问题。下面的一些问题基本直接来源于公司的面试笔试题目,方法不一定最优,如果你有更好的处理方法,欢迎讨论。

一、Bloom filter

  适用范围:可以用来实现数据字典,进行数据的判重,或者集合求交集

  基本原理及要点:
  对于原理来说很简单,位数组+k个独立hash函数。将 hash函数对应的值的位数组置1,查找时如果发现所有hash函数对应位都是1说明存在,很明显这个过程并不保证查找的结果是100%正确的。同时也不 支持删除一个已经插入的关键字,因为该关键字对应的位会牵动到其他的关键字。所以一个简单的改进就是 counting Bloom filter,用一个counter数组代替位数组,就可以支持删除了。

  还有一个比较重要的问题,如何根据输入元素个数n,确定位数组m的大小及hash函数 个数。当hash函数个数k=(ln2)*(m/n)时错误率最小。在错误率不大于E的情况下,m至少要等于n*lg(1/E)才能表示任意n个元素的集 合。但m还应该更大些,因为还要保证bit数组里至少一半为0,则m应该>=nlg(1/E)*lge 大概就是nlg(1/E)1.44倍(lg表示以2为底的对数)。

  举个例子我们假设错误率为0.01,则此时m应大概是n的13倍。这样k大概是8个。

  注意这里m与n的单位不同,m是bit为单位,而n则是以元素个数为单位(准确的说是不同元素的个数)。通常单个元素的长度都是有很多bit的。所以使用bloom filter内存上通常都是节省的。

  扩展:
  Bloom filter将集合中的元素映射到位数组中,用k(k为哈希函数个数)个映射位是否全1表示元素在不在这个集合中。Counting bloom filter(CBF)将位数组中的每一位扩展为一个counter,从而支持了元素的删除操作。Spectral Bloom Filter(SBF)将其与集合元素的出现次数关联。SBF采用counter中的最小值来近似表示元素的出现频率。

  问题实例:给你A,B两个文件,各存放50亿条URL,每条URL占用64字节,内存限制是4G,让你找出A,B文件共同的URL。如果是三个乃至n个文件呢?

  根据这个问题我们来计算下内存的占用,4G=2^32大概是40亿*8大概是340 亿,n=50亿,如果按出错率0.01算需要的大概是650亿个bit。现在可用的是340亿,相差并不多,这样可能会使出错率上升些。另外如果这些 urlip是一一对应的,就可以转换成ip,则大大简单了。

二、Hashing

  适用范围:快速查找,删除的基本数据结构,通常需要总数据量可以放入内存

  基本原理及要点:
  hash函数选择,针对字符串,整数,排列,具体相应的hash方法。
  碰撞处理,一种是open hashing,也称为拉链法;另一种就是closed hashing,也称开地址法,opened addressing。

      扩展:
  d-left hashing中的d是多个的意思,我们先简化这个问题,看一看2-left hashing。2-left hashing指的是将一个哈希表分成长度相等的两半,分别叫做T1和T2,给T1和T2分别配备一个哈希函数,h1和h2。在存储一个新的key时,同 时用两个哈希函数进行计算,得出两个地址h1[key]和h2[key]。这时需要检查T1中的h1[key]位置和T2中的h2[key]位置,哪一个 位置已经存储的(有碰撞的)key比较多,然后将新key存储在负载少的位置。如果两边一样多,比如两个位置都为空或者都存储了一个key,就把新key 存储在左边的T1子表中,2-left也由此而来。在查找一个key时,必须进行两次hash,同时查找两个位置。

  问题实例:
  1).海量日志数据,提取出某日访问百度次数最多的那个IP。
  IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。

三、bit-map

  适用范围:可进行数据的快速查找,判重,删除,一般来说数据范围是int的10倍以下

  基本原理及要点:使用bit数组来表示某些元素是否存在,比如8位电话号码

  扩展:bloom filter可以看做是对bit-map的扩展

  问题实例:
  1)已知某个文件内包含一些电话号码,每个号码为8位数字,统计不同号码的个数。
  8位最多99 999 999,大概需要99m个bit,大概10几m字节的内存即可。
  2)2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。

  将bit-map扩展一下,用2bit表示一个数即可,0表示未出现,1表示出现一次,2表示出现2次及以上。或者我们不用2bit来进行表示,我们用两个bit-map即可模拟实现这个2bit-map。

四、堆

  适用范围:海量数据前n大,并且n比较小,堆可以放入内存

  基本原理及要点:最大堆求前n小,最小堆求前n大。方法,比如求前n小,我们比较当前 元素与最大堆里的最大元素,如果它小于最大元素,则应该替换那个最大元素。这样最后得到的n个元素就是最小的n个。适合大数据量,求前n小,n的大小比较 小的情况,这样可以扫描一遍即可得到所有的前n元素,效率很高。

  扩展:双堆,一个最大堆与一个最小堆结合,可以用来维护中位数。

  问题实例:
  1)100w个数中找最大的前100个数。
  用一个100个元素大小的最小堆即可。

 

五、双层桶划分----其实本质上就是【分而治之】的思想,重在“分”的技巧上!

  适用范围:第k大,中位数,不重复或重复的数字
  基本原理及要点:因为元素范围很大,不能利用直接寻址表,所以通过多次划分,逐步确定范围,然后最后在一个可以接受的范围内进行。可以通过多次缩小,双层只是一个例子。

  扩展:
  问题实例:
  1).2.5亿个整数中找出不重复的整数的个数,内存空间不足以容纳这2.5亿个整数。
  有点像鸽巢原理,整数个数为2^32,也就是,我们可以将这2^32个数,划分为2^8个区域(比如用单个文件代表一个区域),然后将数据分离到不同的区域,然后不同的区域在利用bitmap就可以直接解决了。也就是说只要有足够的磁盘空间,就可以很方便的解决。

  2).5亿个int找它们的中位数。
  这个例子比上面那个更明显。首先我们 将int划分为2^16个区域,然后读取数据统计落到各个区域里的数的个数,之后我们根据统计结果就可以判断中位数落到那个区域,同时知道这个区域中的第 几大数刚好是中位数。然后第二次扫描我们只统计落在这个区域中的那些数就可以了。

  实际上,如果不是int是int64,我们可以经过3次这样的划分即可降低到可以接受 的程度。即可以先将int64分成2^24个区域,然后确定区域的第几大数,在将该区域分成2^20个子区域,然后确定是子区域的第几大数,然后子区域里 的数的个数只有2^20,就可以直接利用direct addr table进行统计了。

六、数据库索引

  适用范围:大数据量的增删改查

  基本原理及要点:利用数据的设计实现方法,对海量数据的增删改查进行处理。

七、倒排索引(Inverted index)

  适用范围:搜索引擎,关键字查询

  基本原理及要点:为何叫倒排索引?一种索引方法,被用来存储在全文搜索下某个单词在一个文档或者一组文档中的存储位置的映射。

 以英文为例,下面是要被索引的文本:
    T0 = "it is what it is"
    T1 = "what is it"
    T2 = "it is a banana"

我们就能得到下面的反向文件索引:

    "a":      {2}
    "banana": {2}
    "is":     {0, 1, 2}
    "it":     {0, 1, 2}
    "what":   {0, 1}

 检索的条件"what","is"和"it"将对应集合的交集。

  正向索引开发出来用来存储每个文档的单词的列表。正向索引的查询往往满足每个文档有序 频繁的全文查询和每个单词在校验文档中的验证这样的查询。在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。也就是说文档 指向了它包含的那些单词,而反向索引则是单词指向了包含它的文档,很容易看到这个反向的关系。

  扩展:
  问题实例:文档检索系统,查询那些文件包含了某单词,比如常见的学术论文的关键字搜索。

八、外排序

  适用范围:大数据的排序,去重

  基本原理及要点:外排序的归并方法,置换选择败者树原理,最优归并树

  扩展:

  问题实例:
  1).有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16个字节,内存限制大小是1M。返回频数最高的100个词。

  这个数据具有很明显的特点,词的大小为16个字节,但是内存只有1m做hash有些不够,所以可以用来排序。内存可以当输入缓冲区使用。

九、trie树

  适用范围:数据量大,重复多,但是数据种类小可以放入内存

  基本原理及要点:实现方式,节点孩子的表示方式

  扩展:压缩实现。

  问题实例:
  1).有10个文件,每个文件1G,每个文件的每一行都存放的是用户的query,每个文件的query都可能重复。要你按照query的频度排序。
  2).1000万字符串,其中有些是相同的(重复),需要把重复的全部去掉,保留没有重复的字符串。请问怎么设计和实现?
  3).寻找热门查询:查询串的重复度比较高,虽然总数是1千万,但如果除去重复后,不超过3百万个,每个不超过255字节。

十、分布式处理 mapreduce

  适用范围:数据量大,但是数据种类小可以放入内存

  基本原理及要点:将数据交给不同的机器去处理,数据划分,结果归约。

  扩展:
  问题实例:
  1).The canonical example application of MapReduce is a process to count the appearances of
each different word in a set of documents:
  2).海量数据分布在100台电脑中,想个办法高效统计出这批数据的TOP10。
  3).一共有N个机器,每个机器上有N个数。每个机器最多存O(N)个数并对它们操作。如何找到N^2个数的中数(median)?

经典问题分析
  上千万or亿数据(有重复),统计其中出现次数最多的前N个数据,分两种情况:可一次读入内存,不可一次读入。

  可用思路:trie树+堆,数据库索引,划分子集分别统计,hash,分布式计算,近似统计,外排序

  所谓的是否能一次读入内存,实际上应该指去除重复后的数据量。如果去重后数据可以放入 内存,我们可以为数据建立字典,比如通过 map,hashmap,trie,然后直接进行统计即可。当然在更新每条数据的出现次数的时候,我们可以利用一个堆来维护出现次数最多的前N个数据,当 然这样导致维护次数增加,不如完全统计后在求前N大效率高。

  如果数据无法放入内存。一方面我们可以考虑上面的字典方法能否被改进以适应这种情形,可以做的改变就是将字典存放到硬盘上,而不是内存,这可以参考数据库的存储方法。

  当然还有更好的方法,就是可以采用分布式计算,基本上就是map-reduce过程, 首先可以根据数据值或者把数据hash(md5)后的值,将数据按照范围划分到不同的机子,最好可以让数据划分后可以一次读入内存,这样不同的机子负责处 理各种的数值范围,实际上就是map。得到结果后,各个机子只需拿出各自的出现次数最多的前N个数据,然后汇总,选出所有的数据中出现次数最多的前N个数 据,这实际上就是reduce过程。

  实际上可能想直接将数据均分到不同的机子上进行处理,这样是无法得到正确的解的。因为 一个数据可能被均分到不同的机子上,而另一个则可能完全聚集到一个机子上,同时还可能存在具有相同数目的数据。比如我们要找出现次数最多的前100个,我 们将1000万的数据分布到10台机器上,找到每台出现次数最多的前 100个,归并之后这样不能保证找到真正的第100个,因为比如出现次数最多的第100个可能有1万个,但是它被分到了10台机子,这样在每台上只有1千 个,假设这些机子排名在1000个之前的那些都是单独分布在一台机子上的,比如有1001个,这样本来具有1万个的这个就会被淘汰,即使我们让每台机子选 出出现次数最多的1000个再归并,仍然会出错,因为可能存在大量个数为1001个的发生聚集。因此不能将数据随便均分到不同机子上,而是要根据hash 后的值将它们映射到不同的机子上处理,让不同的机器处理一个数值范围。

  而外排序的方法会消耗大量的IO,效率不会很高。而上面的分布式方法,也可以用于单机版本,也就是将总的数据根据值的范围,划分成多个不同的子文件,然后逐个处理。处理完毕之后再对这些单词的及其出现频率进行一个归并。实际上就可以利用一个外排序的归并过程。

  另外还可以考虑近似计算,也就是我们可以通过结合自然语言属性,只将那些真正实际中出现最多的那些词作为一个字典,使得这个规模可以放入内存。

289月/115

关键词:软文

发布在 邵珠庆

软文的定义

1.基本定义

  软文,是一种不拘泥于形式的文字表达方式;它是为了推广而出现的一系列的文字性操作方法。同时也是这种表达方式下的文字、文章等产物的代称。

2.狭义的

  指企业花钱在报纸或杂志等宣传载体上刊登的纯文字性的广告。这种定义是早期的一种定义,也就是所谓的付费文字广告。

3.广义的

   指企业通过策划在报纸、杂志、DM、网络、手机短信等宣传载体上刊登的可以提升企业品牌形象和知名度,或可以促进企业销售的一些宣传性、阐释性文章,包 括特定的新闻报道、深度文章、付费短文广告、案例分析等。在大部分报刊、杂志都会提供登一块广告,付送一大块软文的地方。有的电视节目会以访谈、坐谈方式 进行宣传,这也归软文。   软文的最高境界就是把广告写的不像广告

 

软文的几种形式

  软文之所以备受推崇,第一个原因就是硬广告的效果下降、电视媒体的费用上涨,第二个原因就是媒体最初对软文的收费比硬广告要低好多,在资金不是很雄厚的情况下软文的投入产出比较科学合理。所以企业从各个角度出发愿意以软文试水,以便使市场快速启动。   软文虽然千变万化,但是万变不离其宗,主要有以下几种方式:

1.悬念式

   也可以叫设问式。核心是提出一个问题,然后围绕这个问题自问自答。例如“人类可以长生不老?”、“什么使她重获新生?”、“牛皮癣,真的可以治愈吗?” 等,通过设问引起话题和关注使这种方式的优势。但是必须掌握火候,首先提出的问题要有吸引力,答案要符合常识,不能作茧自缚漏洞百出。

2.故事式

   通过讲一个完整的故事带出产品,使产品的“光环效应”和“神秘性”给消费者心理造成强暗示,使销售成为必然。例如“1.2亿买不走的秘方”、“神奇的植 物胰岛素”、“印第安人的秘密”等。讲故事不是目的,故事背后的产品线索是文章的关键。听故事是人类最古老的知识接受方式,所以故事的知识性、趣味性、合 理性是软文成功的关键。

3.情感式

   情感一直是广告的一个重要媒介,软文的情感表达由于信息传达量大、针对性强,当然更可以叫人心灵相通。“老公,烟戒不了,洗洗肺吧”、“女人,你的名字 是天使”、“写给那些战‘痘'的青春”等,情感最大的特色就是容易打动人,容易走进消费者的内心,所以“情感营销”一直是营销百试不爽的灵丹妙药。

4.恐吓式

  恐吓式软文属于反情感式诉求,情感诉说美好,恐吓直击软肋——“高血脂,瘫痪的前兆!”、“天啊,骨质增生害死人!”、“洗血洗出一桶油”。实际上恐吓形成的效果要比赞美和爱更具备记忆力,但是也往往会遭人诟病,所以一定要把握度,不要过火。

5.促销式

   促销式软文常常跟进在上述几种软文见效时——“北京人抢购***”、“***,在香港卖疯了”、“一天断货三次,西单某厂家告急”……这样的软文或者是 直接配合促销使用,或者就是使用"买托"造成产品的供不应求,通过“攀比心理”、“影响力效应”多种因素来促使你产生购买欲。

6.新闻式

  所谓事件新闻体,就是为宣传寻找一个由头,以新闻事件的手法去写,让读者认为就仿佛是昨天刚刚发生的事件。这样的文体有对企业本身技术力量的体现,但是,告诫文案要结合企业的自身条件,多与策划沟通,不要天马行空地写,否则,多数会造成负面影响。   上述六类软文绝对不是孤立使用的,是企业根据战略整体推进过程的重要战役,如何使用就是布局的问题了。

 

-------------------------------------

广告阵风吹,公关春光浴;   

广告点到面,公关点到线;   

广告予于形;公关在于实;   

广告自以为是,公关以众为是;   

广告无人不及,公关有的放矢;   

广告狂轰烂炸,公关日积月累;   

广告办多少事就得花多少钱,公关花小钱就办大事;   

广告创意难寻,公关新意不断;   

广告钟情老品牌,公关热恋新品牌;   

广告形迹可疑,公关诚信有加;   

广告诡异,公关严谨;   

广告维护品牌,公关树立品牌;   

广告潮退,公关潮起。   

---------------------------------------

软文操作的八大技巧

论点一:提前做好软文广告计划   

论点二:给软文拟一个新闻标题   

论点三:用新闻体组织正文结构   

论点四:善于运用新闻惯用词汇   

论点五:广告信息要巧妙地融合   

论点六:遵循新闻排版风格设计   

论点七:发布时和新闻粘在一起   

论点八:媒体公关工作必不可少

269月/119

值得开发人员关注的jQuery技术网站和博客20个

发布在 邵珠庆

1. John Resig - http://ejohn.org

毫无疑问,jQuery的缔造者的博客是你首先必须关注的。

2. Filmament Group Lab

这个也是必看之一,因为jQuery UI类库就出自这个网站

3.  Learning jQuery

老牌的学习jQuery的网站之一,这个网站是由几个作者联合建立

4.  Soh Tnaka Blog

非常酷的一个jQuery设计和分享网站,风格非常酷,里面的教程和插件实现非常有艺术感,本人这里强烈推荐。

5.  nettuts

老牌的网页设计网站,里面包含了非常多的jQuery教程和技巧。同时这个网站也有大量的设计相关的文章,大家可以学习。

6. jQuery4u

老牌的jQuery网站学习网站,里面有很多jQuery的教程,及其收集的jQuery插件。

7. WebResourceDepot

收集了许多jQuery插件教程及其信息

8.  The Sea of ideas - personal blog of Paul Bakus

Paul Bakus是jQueryUI的创始者并且也是很多著名插件的开发人,在他的博客中我们可以找到大量javascript,jQuery,jQueryUI开发的信息和文章

9.  James Padolsey

Jame是一个具有丰富开发经验的前端开发工程师,在他的博客中,他经常介绍最新的开发技术和价格,并且分享很多jQuery代码及其实现

10.  jankoatwarpspeed

Janko的博客发布有很多写的非常好的jQuery开发文章,并且也有新书的发布

11. jQueryhowto

jQueryHowto提供了大量的代码片段帮助你解决jQuery编程中的个实现问题,非常实用的开发查询网站,GBin1这里强烈推荐

12.  Marcofolio

这个博客拥有很多不错的教程,帮助大家实现非常实用的jQuery功能, 例如,如何实现TechCrunch的像素Logo

13.  Build internet

Build internet拥有很多书写的非常好的jQuery教程,当然由于它是一个综合性的网站,也拥有很多其它的web开发教程和资料

14. W3CSchools

比较老牌的一个网站,主要提供各种W3C相关教程,包括HTML,XML,CSS,Javascript,也包括jQuery等其它教程

15. Addy Osmani Blog

Addy Osmani拥有很多详细讲解的jQuery教程及其相关Javascript toolkit。

16. jQuery style

一个完全讲解jQuery类库的网站,分享代码片段及其各种jQuery插件。

17. The Ultimate jQuery List

一个非常完整的jQuery类库,插件,演示及其教程说明, 完全值得大家去查看内容

18. Queness

这个个人blog拥有很多实用的jQuery资源

19. Tutorialzine

这个博客有很多实用的资源,可以直接在代码中实用

20. GBin1

GBin1是提供互联网相关技术的综合类博客,我们提供最新的互联网信息,技术及其教程,希望能帮助大家了解最新的互联网技术和信息

229月/118

同比、环比、定基比的含义和对比

发布在 邵珠庆

今天收集需求遇到了几个很专业的名词 同比、环比、定基比

1、综述

  发展速度由于采用基期的不同,可分为同比发展速度、环比发展速度和定基发展速度。均用百分数或倍数表示。

2、同比

  同比("相同时期相比"的简称)发展速度主要是为了消除季节变动的影响,用以说明本期发展水平与去年同期发展水平对比而达到的相对发展速度。如,本期2月比去年2月,本期6月比去年6月等。   其计算公式为:同比发展速度=(本期发展水平-去年同期发展水平)/去年同期发展水平×100%   在实际工作中,经常使用这个指标,如某年、某季、某月与上年同期对比计算的发展速度,就是同比发展速度。

3、环比

  环比分为日环比、周环比、月环比和年环比。   环比发展速度是以报告期水平与其前一期水平对比(相邻期间的比较),所得到的动态相对数。表明现象逐期的发展变动程度。如计算一年内各月与前一个月对比,即2月比1月,3月比2月,4月比3月 ……12月比11月,说明逐月的发展程度。   环比计算公式=本期数据/上期数据*100%   环比增长率=(本期数据-上期数据)/上期数据*100%

4、定基比

  定基比发展速度也叫总速度。是报告期水平与某一固定时期水平之比,表明这种现象在较长时期内总的发展速度。如"九五"期间各年水平都以1995年水平为基期进行对比,一年内各月水平均以上年12月水平为基期进行对比,就是定基发展速度。

5、三者的区别

  与历史同时期比较,例如2009年11月份与2008年11月份相比,叫同比。   与上一个统计周期比较,例如2009年11月份与2009年10月份相比较,称为环比。   定基比发展速度,也简称总速度,一般是指报告期水平与某一固定时期水平之比,表明这种现象在较 长时期内总的发展速度。同比发展速度,一般指是指本期发展水平与上年同期发展水平对比,而达到的相对发展速度。环比发展速度,一般是指报告期水平与前一时 期水平之比,表明现象逐期的发展速度。   同比和环比,这两者所反映的虽然都是变化速度,但由于采用基期的不同,其反映的内涵是完全不同的;一般来说,环比可以与环比相比较,而不能拿同比与环比相比较;而对于同一个地方,考虑时间纵向上发展趋势的反映,则往往要把同比与环比放在一起进行对照。

189月/1154

几个不错的国外网站,职业上有帮助

发布在 邵珠庆

Offers users the ability to upload and share publicly or privately PowerPoint presentations, Word documents and Adobe PDF Portfolios.

 

http://www.slideshare.net/

 

 

120 million+ members | Manage your professional identity. Build and engage with your professional network. Access knowledge, insights and opportunities.

 

www.linkedin.com/

159月/114

[信息图表]2012世界末日

发布在 邵珠庆

http://shaozhuqing.com/wp-content/uploads/auto_save_image/2011/09/0813243ly.gif

149月/1126

分享一篇文章:我的职业理想:成为数据分析师

发布在 邵珠庆

很不错的文章,建议大家都看看,特别是菜鸟们!

       我小时候的理想是将来做一名数学家,可惜长大了发现自己天赋不够,理想渐行渐远,于是开始考虑现实,开始做一些人生规划,我一直在思考将来从事何种职业,专注什么样的领域,重新定义着自己的职业理想。我现在的职业理想,比较简单,就是做一名数据分析师。

 

我的职业理想:成为数据分析师(Z)

 

为什么要做数据分析师:

在通信、互联网、金融等这些行业每天产生巨大的数据量(长期更是积累了大量丰富的数据,比如客户交易数据等等),据说到2020年,全球每年产生的数据量 达到3500万亿GB;海量的历史数据是否有价值,是否可以利用为领导决策提供参考依据?随着软件工具、数据库技术、各种硬件设备的飞快发展,使得我们分 析海量数据成为可能。

 

而数据分析也越来越受到领导层的重视,借助报表告诉用户什么已经发生了,借助OLAP和可视化工具等分析工具告诉用户为什么发生了,通过 dashboard监控告诉用户现在在发生什么,通过预报告诉用户什么可能会发生。数据分析会从海量数据中提取、挖掘对业务发展有价值的、潜在的知识,找 出趋势,为决策层的提供有力依据,为产品或服务发展方向起到积极作用,有力推动企业内部的科学化、信息化管理。

 

我们举两个通过数据分析获得成功的例子:

(1) Facebook广告与微博、SNS等网络社区的用户相联系,通过先进的数据挖掘与分析技术,为广告商提供更为精准定位的服务,该精准广告模式收到广大广 告商的热捧,根据市场调研机构eMarketer的数据,Facebook年营收额超过20亿美元,成为美国最大的在线显示广告提供商。

(2) Hitwise发布会上,亚太区负责人John举例说明: 亚马逊30%的销售是来自其系统自动的产品推荐,通过客户分类,测试统计,行为建模,投放优化四步,运营客户的行为数据带来竞争优势。

 

此外,还有好多好多,数据分析,在营销、金融、互联网等方面应用是非常广泛的:比如在营销领域,有数据库营销,精准营销,RFM分析,客户分群,销量预测 等等;在金融上预测股价及其波动,套利模型等等;在互联网电子商务上面,百度的精准广告,淘宝的数据魔方等等。类似成功的案例会越来越多,以至于数据分析 师也越来越受到重视。

 

然而,现实却是另一种情况。我们来看一个来自微博上的信息:在美国目前面临14万~19万具有数据分析和管理能力的专业人员,以及150万具有理解和决策 能力(基于对海量数据的研究)的管理人员和分析人员的人才短缺。而在中国,受过专业训练并有经验的数据分析人才,未来三年,分析能力人才供需缺口将逐渐放 大,高级分析人才难寻。也就是说,数据分析的需求在不断增长,然而合格的为企业做分析决策的数据分析师却寥寥无几。好多人想做数据分析却不知道如何入手, 要么不懂得如何清洗数据,直接把数据拿来就用;要么乱套模型,分析的头头是道,其实完全不是那么回事。按俗话说就是:见过猪跑,没吃过猪肉。

 

我的职业规划:

对于数据分析,有一句话说的非常好:spss/sql之类的软件、决策树、时间序列之类的方法,这些仅仅就都是个工具而已,最重要的是对业务的把握。没有 正确的业务理解,再牛的理论,再牛的工具,都是白搭。做一名合格的数据分析师,除了对数据需要有良好的敏感性之外,对相关业务的背景的深入了解,对客户或 业务部门的需求的清晰认识。根据实际的业务发展情况识别哪些数据可用,哪些不适用,而不是孤立地在“真空环境”下进行分析。

 

为此,我对自己的规划如下:

第一步:掌握基本的数据分析知识(比如统计,概率,数据挖掘基础理论,运筹学等),掌握基本的数据分析软件(比 如,VBA,Matlab,Spss,Sql等等),掌握基本的商业经济常识(比如宏微观经济学,营销理论,投资基础知识,战略与风险管理等等)。这些基 础知识,在学校里尽量的学习,而且我来到了和君商学院,这样我可以在商业分析、经济分析上面领悟到一些东西,增强我的数据分析能力。

第二步:参与各种实习。研一开始我当时虽然有课,不过很幸运的找到一份一周只需去一两天的兼职,内容是为三星做竞争对手分析,当然分析框架是leader 给定了,我只是做整合资料和往ppt里填充的内容的工作,不过通过兼职,我接触到了咨询行业,也向正式员工学习了很多商业分析、思考逻辑之类的东西。之后 去西门子,做和VBA的事情,虽然做的事情与数据分析无关,不过在公司经常用VBA做一些自动化处理工作,为自己的数据分析工具打好了基础。再之后去了易 车,在那里兼职了一个多月,参与了大众汽车销量数据短期预测的项目,一个小项目下来,数据分析的方法流程掌握了不少,也了解了企业是如何用一些时间序列模 型去参与预测的,如何选取某个拟合曲线作为预测值。现在,我来到新的地方实习,也非常幸运的参加了一个央企的码头堆场优化系统设计,其实也算数据分析的一 种吧,通过码头的数据实施调度,通过码头的数据进行决策,最后写成一个可操作的自动化系统。而这个项目,最重要的就是业务流程的把握,我也参与项目最初的 需求调研,和制定工作任务说明书SOW,体会颇多。

第三步:第一份工作,预计3-5年。我估计会选择咨询公司或者IT公司吧,主要是做数据分析这块比较强的公司,比如Fico,埃森哲,高沃,瑞尼 尔,IBM,AC等等。通过第一份工作去把自己的知识打得扎实些,学会在实际中应用所学,学会数据分析的流程方法,让自己成长起来。

第四步:去自己喜欢的一个行业,深入了解这个行业,并讲数据分析应用到这个行业里。比如我可以去电子商务做数据分析师。我觉得我选择电子商务,是因为未来 必将是互联网的时代,电子商务必将取代传统商务,最显著的现象就是传统零售商老大沃尔玛正在受到亚马逊的挑战。此外,电子商务比传统的零售商具有更好的数 据收集和管理能力,可以更好的跟踪用户、挖掘潜在用户、挖掘潜在商品。

第五步:未知。我暂时没有想法,不过我希望我是在一直的进步。

 

有一位数据分析牛人曾经总结过数据分析师的能力和目标:

能力:一定要懂点战略、才能结合商业;一定要漂亮的presentation、才能buying;一定要有global view、才能打单;一定要懂业务、才能结合市场;一定要专几种工具、才能干活;一定要学好、才能有效率;一定要有强悍理论基础、才能入门;一定要努力、才能赚钱;最重要的:一定要务实、才有reputation;不懂的话以后慢慢就明白了。

目标:1-做过多少个项目?2-业务背景有哪些,是否跨行业?3-做过多少种类型的模型?做了多少个模型?4-基于模型做过多少次完整的marketing闭环?以上四个问题,足以秒杀95%以上的忽悠和菜鸟!

我仅以此为努力之坐标,时刻提醒自己。

路在前方,漫漫前行。

 

 

139月/116

Google Analytics cookie内容详解

发布在 邵珠庆

cookie在WiKi上的解释是:指某些网站为了辨别用户身份而储存在用户本地终端(Client Side)上的数据(通常经过加密)。

Cookie分为两种类型,第一方cookie和第三方cookie。Google Analytics使用第一方cookie

Google Analytics设置了5个不同的cookie,_utma, _utmb, _utmc, _utmz和 _utmv。分别用来存储不同的信息。所有的cookie统一使用_u-t-m开头,所以我们看到这三个字母就知道是google的cookie。

下面逐个介绍Google Analytics的cookie和功能。

_utma的主要功能:识别唯一身份访客

_utma的生存周期为2年。其中第二组的随机唯一ID和第三组的时间戳联合组成了访问者ID,Google Analytics通过这个ID来辨别网站的唯一访问者。而后面的几个时间戳用户计算网站停留时间访问次数

_utma Cookie存储的内容:127635166.1360367272.1264374807.1264374807.1264374807.1
第一组数字被叫做“域哈希”,是GA表示这个域的唯一代码。同一域中每个cookie的第一组数据都是“域哈希”,并且值都是一样的。
第二组数字是一个随机产生的唯一ID。
第三,四,五组数字是时间戳,其中第三组数字表示初次访问的时间。第四组数字表示上一次访问的时间,第五组数字表示本次访问开始的时间。
第六组数字是访问次数计数器。这个数字随着访问次数的增加而增加。
PS:上面的三个时间戳数字相同,并且最后的访问次数计数器是1,表示这是第一次访问。

_utmb的主要功能:和_utmc一起决定访客的Session

_utmb的生存周期为30分钟,当访问者在你的网站持续30分钟静止时,utmb将被删除。Google Analytics使用_utmb 和_utmc一起辨别一个session。

_utmb Cookie存储的内容:127635166.2.10.1264374807
第一组数字和_utma一样,是“域哈希”。
后面的几组数字是一些附加值。

_utmc的主要功能:和_utmb一起决定访客的Session

google analyitcs cookie utmc

_utmc是一个临时cookie,当用户关闭浏览器时_utmc将一起被删除

_utmc和_utmb一起来识别一个session,当用户访问一个网站时,Google Analytics会检查这两个cookie,如果缺少其中任何一个,Google Analytics都将认为这是一个新的session。
_utmc的内容:127635166 代表“域哈希”。

_utmz的主要功能:存储流量来源信息和链接标记的变量值。

_utmz的生存周期是6个月,_utmz中存储了所有流量的来源信息。
_utmz的内容中一共有4组数字:127635166.1264374807.1.1
第一组数字是“域哈希”。
第二组数字是时间戳。
第三组数字是session number。
第四组数字是campaign number 记录通过不同来源访问网站的次数。
utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
这些信息代表流量的来源,因为我是直接输入域名直接访问的,所以来源和媒介都是direct

_utmv的主要功能:自定义访问者的属性。

_utmv的生存周期是2年,存储通过_setVar()自定义用户属性。
_utmv的内容:127635166.user
第一组数字是“域哈希”。
第二个值user是通过_setVar()设置的用户属性。
PS:_utmv只有在调用了_setVar()时才会出现。
此外,还有两个cookie __utmx和__utmxx。这两个cookie不是由Google Analytics设置的,而是由Google的Website Optimizer用来做A/B测试或多变量测试用的。如果在访问某个页面后看到这两个cookie,那就说明这个页面正在进行页面优化测试,而你访问的 页面可能是测试中的某一个版本。

Google Analytics中的cookie比较多,每个cookie的属性和功能也各不一样。我做了一个Google Analytics cookie速查表,请在这里下载

 

 

Google Analytics(分析)如何使用 Cookie

Google Analytics(分析)利用 Cookie 定义用户会话,并提供 Google Analytics(分析)报告中的多种关键功能。Google Analytics(分析)设置或更新 Cookie 的目的仅在于收集报告所需数据。此外,Google Analytics(分析)仅使用第一方 Cookie。也就是说 Google Analytics(分析)针对您的域设置的所有 Cookie 仅会向您的域的服务器发送数据。这一做法有效地保证了 Google Analytics(分析)Cookie 成为您网站域的私有财产,来自其他域的任何服务器都无法篡改或获取其中的数据。

下表中列出了通过 Google Analytics(分析)Cookie 获取并在 Google Analytics(分析)报告中使用的信息类型。

功能 Cookie 说明 使用的 Cookie
设置您网站内容的范围 因为任何 Cookie 读/写访问都会同时受到 Cookie 名称和其所在域的限制,所以通过 Google Analytic(分析)进行的访问者跟踪会默认限制在安装跟踪代码网页所在域。一般来说,跟踪代码将安装在单个域中(并且没有其他子域),在这种情况下,通用设置是适用的。如果您希望跨多个域或子域跟踪内容,或将跟踪范围限制在单个域中更为具体的部分,您可以使用 ga.js 跟踪代码中的其他方法定义内容范围。有关详情,请参阅 Collection API 文档中的域和目录 所有 Cookie
确定访问者会话 针对 ga.js 的 Google Analytics(分析)跟踪使用两个 Cookie 来建立会话。如果这两个 Cookie 中的任一个缺失,用户的后续活动将会导致启动一个新会话。有关详细的定义以及将会终止会话的情景的列表,请参阅帮助中心中的会话一文。您可以使用 _setSessionCookieTimeout() 方法自定义默认会话时间的长度。

该描述专门针对网页的 ga.js 跟踪代码。如果您在其他环境(如 Flash 或移动设备)中使用 Google Analytics(分析)进行跟踪,请务必参阅说明文件中有关这些环境的内容,以了解其中的会话计算或建立的方式。

__utmb
__utmc
识别唯一身份访问者 __utma Cookie 会为访问您网站网页的每一个浏览器指定唯一的 ID。通过这种方式,使用同一浏览器对您网站进行的后续访问,将会视为同一(唯一身份)访问者的访问而被记录下来。因此,如果某用户同时使用 Firefox 和 Internet Explorer 与您的网站互动,Google Analytics(分析)报告会将其视为两位唯一身份访问者的活动进行跟踪。同样,如果两位访问者使用同一浏览器,但登录到各自的计算机帐户,那么这些 活动将按照两个唯一身份访问者 ID 进行记录。另一方面,如果两位访问者恰巧使用同一浏览器,同时共享同一计算机帐户,那么将按照一个唯一身份访问者 ID 进行记录,尽管事实上访问是由两个人分别进行的。 __utma
跟踪流量来源和浏览过程 当用户通过搜索引擎结果、直接链接或链接到您网页的广告到达您的网站时,Google Analytics(分析)会在 Cookie 中储存引荐类型的信息。Cookie 值字符串中的参数将得到解析,并通过 GIF 请求(utmcc 变量)发送。Cookie 的有效期为 6 个月。此 Cookie 会在用户对您网站的每个网页进行后续浏览时获得更新,进而确定访问者对您网站的浏览过程。 __utmz
自定义变量 您可以根据具体数据定义自己的报告细分。如果您在跟踪代码中使用 _setCustomVar() 方法定义了自定义变量,Google Analytics(分析)将使用此 Cookie 跟踪并报告这一信息。通常情况下,您可以使用此方法根据用户在您网站上选择的自定义人口统计学特点(收入、年龄范围、产品性能),对网站访问者进行细分。 ___utmv
Website Optimizer 您可以将 Google Analytics(分析)与 Google 网站优化工具配合使用,该工具可帮助您确定最有效的网站设计。网站优化脚本在您的网页中执行时,会将一个 _utmx Cookie 写入到浏览器中,并将其值发送给 Google Analytics(分析)。有关详情,请参阅 Google 网站优化工具帮助中心 ___utmx

一旦在网络浏览器中设置/更新了 Cookie,其中包含的报告所需数据将通过 utmcc 参数发送到 GIF 请求网址中记录的 Google Analytics(分析)服务器。


Google Analytics(分析)设置的 Cookie

Google Analytics(分析)会设置下表中介绍的 Cookie。在默认的配置和使用情况下,Google Analytics(分析)仅会设置表中的前 4 个 Cookie。

名称 说明 有效期
__utma 此 Cookie 通常会在该网络浏览器首次访问您的网站时写入其中。如果此 Cookie 被浏览器操作者删除,而该浏览器又对您的网站进行了后续访问,一个拥有不同唯一 ID 的 __utma Cookie 将会写入其中。此 Cookie 用于确定您网站的唯一身份访问者,并会在每次网页浏览时获得更新。此外,Google Analytics(分析)会将为此 Cookie 指定的唯一 ID 作为额外的安全措施,以确保此 Cookie 的有效性和可访问性。 设置/更新后 2 年。
__utmb 此 Cookie 用于建立和保持用户与您的网站之间的会话。当用户浏览您网站的某个网页时,Google Analytics(分析)代码会尝试更新此 Cookie。如果未能找到此 Cookie,Google Analytics(分析)会写入一个新的该 Cookie 并建立新的会话。每当用户访问您网站中的其他网页时,此 Cookie 的有效期会重新更新为 30 分钟,因此只要在 30 分钟周期内重复发生了用户活动,单个会话就会一直持续下去。如果用户在您网站中某网页的停留时间超过了 30 分钟,此 Cookie 就会过期。您可以通过 _setSessionCookieTimeout() 方法修改默认的用户会话时间的长度。 设置/更新后 30 分钟。
__utmc 此 Cookie 会和 __utmb Cookie 结合使用,确定是否为用户建立新的会话。具体来说,此 Cookie 没有特定的有效期,所以它将在用户退出浏览器时失效。如果某用户访问过您的网站后退出了浏览器并在 30 分钟内再次访问了您的网站,该用户将会由于缺少 __utmc Cookie 而必须建立新的会话,尽管事实上 __utmb Cookie 还尚未失效。 未设置。
__utmz 此 Cookie 会储存访问者到达您的网站通过的引荐类型,即是否通过直接方法、引荐连接、网站搜索或广告系列(例如广告或电子邮件)到达。这些信息会用来计算您网站的搜索引擎流量、广告系列和网页的导航方式。此 Cookie 会在每次网页浏览时获得更新。 设置/更新后 6 个月。
__utmv 此 Cookie 正常情况下在默认跟踪代码配置中不会出现。__utmv Cookie 通过 _setVar() 方法传递所提供的信息,您可以使用该方法创建自定义用户细分。然后,此字符串将通过 utmcc 参数传递到 GIF 请求网址中记录的 Google Analytics(分析)服务器。仅当您将 _setVar() 方法添加到您网站页面的跟踪代码中时,此 Cookie 才会写入浏览器中。 设置/更新后 2 年。
__utmx 此 Cookie 用于 Google 网站优化工具,并且仅当您的网页正确安装并配置了 Google 网站优化工具跟踪代码时才会设置。当优化脚本执行时,此 Cookie 会储存该访问者针对每个实验所分配到的变量,确保用户在您的网站体验的一致性。有关详情,请参阅 Google 网站优化工具帮助中心 设置/更新后 2 年。
139月/111

Google Analytics的能与不能

发布在 邵珠庆

        关于Google Analytics的Exit Rate的,我的错误在于我此前自己认识的定义其实一直是错误的。   我一直以为,某个页面的Exit Rate=该页面上离开网站的PV÷经过该页面的Visit,但实际上公式是Exit Rate=该页面上离开网站的PV÷该页面的总PV。为什么是这个定义的原因我觉得很明确,因为对于GA,很严谨地区分了页面级的度量和网站级的度 量,visit是一个网站级别的度量,而exit rate是页面级的,所以exit rate只能用page view来定义。

  不过,请大家注意,Omniture跟GA在这个地方的定义不同,Omniture的定义是以前一个公式为准。我个人更倾向于前一个公式的定义,因为这能够让Exit Rate保持跟Bounce Rate的一致性。

  好了,步入正题,今天要讲的是给初入网站分析大门的朋友们的,话题不深,但是挺有趣,关于Google Analytics,关于我们应该用什么工具做网站分析。

  在我开始发表意见前,我要做一个免责声明:)。我非常了解Omniture,但我不愿意偏袒任何一种工具,因为我知道网站分析工具是全人类 (咳,准确说是全部网站分析师)的财富,我们在享用这个财富之前,了解它,读懂它,扬长避短为我所用,就是大好,至于其他的主观色彩,我不会卷入。只是分 享,为快乐而分享,为搞定抑郁症而分享。:)

image

  今天这个话题关于Google Analytics,我们最常使用也最熟悉的网站分析工具,它给我的感觉如同一个十七八岁的年轻人,朝气蓬勃,富有主见和创造。这个工具擅长于做什么,又有哪些不能够做到的地方呢?今天愿以此文跟大家聊个尽兴,也是对我敬佩的导师Avinash Kaushik先生的致敬!

  这个文章分为三个主要部分。第一部分是Google Analytics的长处;第二部分是Google Analytics的不足;第三部分是Google Analytics所适宜和不适宜的网站领域

Google Analytics的能

牛B第一:界面

  工具界面这东西,是个见仁见智的事情,不过我觉得Google Analytics的界面绝对是易用的,因为它符合人们的惯常思维。这一点对于初学者非常好。

牛B第二:度量

  我认为Google Analytics在度量方面有长处的地方在于,它比较认真地系统考虑的度量的设置。由于是一个免费的通用的工具,所以在度量的设置上注意了三点,第一点 是尽量采用约定俗成的度量名称;第二点是尽量采用约定俗成的度量定义(但不完全是);第三点是区分了网站级和页面级的度量。所以,度量入门学习用 Google Analytics很好。

牛B第三:细分

  Google Analytics不能说具有最好的细分能力,但是其他免费系统,甚至很多付费系统都没有它的细分能力。Google Analytics之所以在细分上如此给力,是因为Avinash非常强调网站分析中的细分分析。对于我而言,大家也看到了我的想法——“无细分,毋宁 死”,做最深入的一些分析,细分数据的确非常重要。

image Google Analytics在推出新版之前,细分其实做的很差,但是我记得去年推出新的版本之后,细分功能大大增强。最棒的就是增加了高级细分功能,即你自己可以 定义你需要的细分规则,即我给它起的名字——规则细分。规则细分是网站分析中最重要的工具之一,能够在免费工具中看到这样的功能,你除了感动还是感动。虽 然Google Analytics细分的结果很多需要做采样,但是如果看了Avinash的第二本书就知道,采样数据未必不能提供好的insight。

此外,Google Analytics还提供了其他的细分方法,例如过滤(filter)。值得注意的是,过滤是一种“事前细分”,即把监测数据放入报告之前进行筛选,一旦筛选不通过的数据,通过任何方法都将不能再获得。

牛B第四:响应

image   这里要提醒的一点是,响应是指你操作Google Analytics时的界面反应的速度,即你打开任意一个报告所需要花费的时间,而不是Google Analytics提供数据的实时性。在响应速度上,Google Analytics拜Google强大的服务器集群所赐,以及自身算法的优化,速度让人满意!毕竟Google Analytics是提供的SAAS(software as a service)服务,数据要在遥远的服务器端打个来回,响应上能够跟本地端的监测工具有得一拼,相当厉害。

牛B第五:集成AdWords

  这个不值得多说,毕竟都是一家人,近水楼台先得月。Google Analytics集成了监测AdWords流量的功能,并且能够把关键词投放的成本整合其中,这对做Google SEM的用户有很大帮助。

牛B第六:异步代码

  Google Analytics升级了自己的标准代码添加方式,原先必须添加在<body>…</body>中的代码现在可以添加 在<head>…</head>中。这让GATC(Google Analytics Tracking Code)与其他JavaScript代码之间发生冲突的可能性大大降低,而且受到页面载入速度而影响监测的可能性也大大降低。

牛B第七:免费

  这个优点不用多说了,反正谷歌的服务器肯定会为无数免费的账户增加数千台到数万台。也许,我估计的可能还是保守的了。

Google Analytics的不能

不牛B第一:路径

  Google Analytics其实并无路径分析功能。Entrance Path,或者Navigation Summary都不是路径,只是前后页功能而已,甚至不是前后页的路径。路径功能是能够统计到网站访问者各条路径的功能,从他/她进入网站的那一页,直到 他/她离开网站的那一页。这个功能的作用在于,帮助我们发现一些被很多访问者经过,但却超出我们预计的路径,这十分有助于我们分析网站的页面结构和链接结 构,并据此优化它们。商用网站分析工具,例如Omniture的SiteCatalyst和Discover均很强调这个功能,它有专门的路径报告即 paths报告,支持无限层级的路径。

image

图:Omniture SiteCatalyst的Next Page Flow报告

不牛B第二:转化

  这个不牛B之处不是很给力,因为Google Analytics并不是没有转化监测,事先预定10个转化页面对一般网站已经足够。不过,在数据报告中任意自定义页面之间的转化功能Google Analytics还不具备。对于有多种可能转化路径的网站(这种站其实很多,尤其是大量商品的电子商务网站)而言,灵活的转化自定义功能是很必要的。部 分商用网站分析工具具有这个功能。

题外话:为什么Google Analytics的路径转化功能不强大

  今天我还跟武凯讨论了这个话题,我们并无法知道Google Analytics在这两个方面做得不到的真实原因,但我们相信算法对Google而言绝对不是问题。我们推测,由于这两个功能的运算随着路径长度的增 长,而变成天文级数字的可能性,Google Analytics实现这个功能需要更强大的运算和更多的服务器,这会使报告的响应时间变长,而影响用户体验,并且增加大量的成本开销。

不牛B第三:交易监测

  Google Analytics在小型电子商务网站中占有大量的份额,但电子商务所重视的交易监测却不是它的长项,主要在于Google Analytics只提供了Add Trans和Add Item两种event,对于灵活多变,而且品类管理复杂的电子商务而言,这一点功能只能称得上“聊胜于无”。另外,Google Analytics没有提供以产品为中心的产品监测(product tracking),因为这个功能需要更灵活的自定义。

image

不牛B第四:自定义

  毕竟只是免费工具,所以Google Analytics自定义并不强大,目前只提供自定义报告功能,虽然实际上这个功能很实用。自定义度量是一个令人期待的功能,但是Google Analytics似乎短时间内并不想把它放进去。此外,真正的自定义功能是结合网站业务需求的,尽管Event Tracking的出现改变了这一状况,但灵活性不足,而且称不上易用,实际上并无法涵盖网站中的业务功能——例如按照产品细分的添加购物车行为的监测, 或者按照用户ID细分的支付监测等;或者也无法探知访问者填写表单的情况;在Campaign Tracking方面,Google Analytics提供的6个utm属性仍然有限,且不能自定义属性;Google Analytics也无法根据一个网站上用户的各种属性进行自定义细分。所以,Google Analytics的自定义能力是非常有限的。

image

不牛B第五:特殊链接监测

  在Google Analytics中,特殊链接的监测并不是默认实现的,需要你动手添加Virtual Page或者Event Tracking。但商用网站分析工具,例如Omniture的SiteCatalyst,这些功能是默认自动实现的。也就是说,当你装上了 SiteCatalyst,Exit Link(也就是点击你网站上的外链的行为)的数据是自动监测的。同样,下载链接也是自动实现监测。

不牛B第六:数据关联

  Google Analytics的数据关联不能说做的不好,不过,毕竟这个工具受制于自定义功能的薄弱,因此能够监测到的度量有限,数据关联也就相对比较简单。另外, 由于细分功能出色,因此GA对数据关联的强调相对较小。不过,对任何一个网站分析工具而言,数据关联都是一个非常高的要求,毕竟3维的数据关联要比2维的 关联多出Cnn(打不出来这个概率的符号,大家明白意思就好)种可能性,对服务器的要求太高了。Omniture利用Data Warehouse实现复杂的数据关联,但牺牲了实时性,它的另一个专门做细分和数据关联的产品——Discover——可以实现复杂而实时的数据关联, 但能够涵盖的范围通常不超过数个月的数据。而Google Analytics则只提供预定的数据关联。

  不过,从目前Google Analytics的一些界面微调情况看,这个部分的重要性逐渐被它认识到,相信未来有更多的改变。

image

不牛B第七:Raw Data

  Google Analytics不提供Raw Data或者是未经报告再加工的数据。这些数据的好处在于,能够帮助解决一些对于数据报告中出现的疑问,也能够帮助进行深入的数据分析。

不牛B第八:数据接口

  没错,Google Analytics为我们提供了API,但是这个API实在是很有限,至少,在跟一个企业的CRM或者是ERP系统对接的时候,根本派不上太多用场。由于 并没有开放Raw Data,所以实际上这些API并不足以帮助用户将自己的其他商用系统与Google Analytics的数据报告进行对接。这也就意味着,Google Analytics只是一个封闭系统。

Google Analytics所适宜的和不适宜的网站

Google Analytics适宜的网站image

  GA实际上非常适用于博客网站以及内容网站。有时候我甚至觉得,sina.com.cn用GA在功能上应该也是够用的(除了路径分析之外),毕竟现在GA没有了月度Page View监测数量的上限。

  小型的电子商务网站也可以使用GA,利用GA有限的电子商务监测功能、转化预定功能还是能够给出不少不错的insight。

  朋友们会问我,我们男科医院的网站用Google Analytics行不行。我觉得,完全行,因为你那个网站也不涉及交易,而且转化也比较单一清晰,所以这一类的网站同样适宜Google Analytics。

Google Analytics不适宜的网站

  大型电子商务网站很少用Google Analytics,因为Google Analytics对特质性和复杂性的支持有限。大型公司的网站,例如Intel、HP或者Sony的网站也不会使用Google Analytics,原因同前。另外,平台型的网站,比如淘宝、猪八戒、世纪佳缘之类,用Google Analytics肯定非常麻烦,因为这些网站有很复杂的分类和转化,GA同样力不从心。

  SNS类的网站呢?GA也不易用,因为这些网站上的应用太多,如果要添加Event Tracking,人会疯掉。简单讲,随着网站复杂程度的提升,Google Analytics就会越来越不宜用。

   下一页