搜狐 PVInsight 运算系统 刘凯毅  ; 尤春
PVInsight  系统简介 <ul><li>公司向用户提供的价值 </li></ul><ul><li>获取的商业价值 </li></ul>
PVInsight 运系统简介 什么样的用户认可提供的价值? 这些用户有商业价值吗? 有多认可? 开始认识用户吧 !
系统简介  /  用户 关键字 :  响应用户  /  新用户  /  活跃用户  /  流失用户
系统简介  /  用户 关键字  : 连续访问
系统简介  /  sohu  企邮 一个企邮用户的连续访问 >  登入  > [ 管理此域 ] >  员工列表 >  广播邮件  * >>> .....  一通点击 >  群组列表  >  新建群组 >  广播邮件  * >  发送 想发广播邮...
系统简介  /  sohu  企邮 如何发现 此类连续访问问题 ? <ul><li>产品经理提出: 希望看到发“广播邮件”的用户都怎么时候 ? </li></ul><ul><li>从数据仓库中找出连续访问中  </li></ul><ul><li...
<ul><li>这样做对商业价值有利吗? </li></ul>系统简介  /  商业价值 各个职位上对商业价值的帮助  广告给我们带来效果怎么样 ?
系统简介  /  商业价值角度
名词解释 Pv : page view  浏览次数 Uv : unique visitor  独立访客 Ip :  独立 Ip 数 新老访客 /  回头用户  /  会话次数  /  访问间隔  /  停留时长  /  访问深度  /  回访率...
名词解释 现实是很残酷的 :  其实  UV  就很难算  ~ 我们的  UID  是一个  16 位的字符串  一般一个小小的统计就上亿条的记录 ( 16*8* (10**8) ) / ((2**10)**3) =  12 G
PVInsight 运系统简介 <ul><li>系统架构 </li></ul><ul><ul><li>收 集  </li></ul></ul><ul><ul><li>存 储  </li></ul></ul><ul><ul><li>结构化  </...
系统架构  /  图
系统架构  /  使用语言 <ul><li>Python  </li></ul><ul><ul><li>ETL : 数据清洗  /  数据完整性  </li></ul></ul><ul><ul><li>中间数据:结构维护(分时 / 治) / 统...
Py  细节  /  预处理
Py  细节  /  预处理  /  数据完整性  url url =>  栏目 ID ,频道 ID
Py  细节  /  预处理  /  数据完整性  url 域名 +url auto.sohu.com/ /20090914/n266706777.shtml   域名  auto.sohu.com/ 泛域名 i.auto.sohu.com/ ...
Py  细节  /  预处理  /  数据完整性  url <ul><li>存储  btree  需要匹配 url </li></ul><ul><ul><li>Key  = domain 倒序 |url </li></ul></ul><ul><...
Py  细节  /  预处理  /  数据完整性  url Btree  key  url  moc.uhos.otua |  / 20090913/n237706498.shtml moc.uhos.otua  |  moc.uhos.otu...
Py  细节  /  预处理  /  数据清洗 流水线——预处理 0908251329265655 [26/Aug/2009:13:25:01 +0800] 123.15.49.138 &quot;GET /pv.gif?t?=12512642...
Py  细节  /  预处理  /  数据清洗 Py  的一些特性正则 >>> re.findall( r’b(?:ab)+b’ , ’ababab abbabb aabaab’) 输出  : ['ababab'] >>> re.findall...
Py  细节  /  预处理  /  数据清洗 合理使用正则
Py  细节  /  预处理  /  中间结果  /  分时分治
PVInsight 运算系统实现 流水线——分时处理
Py  细节  /  分时 流水线——分时处理
Py  细节 分治
计算  UV 好吧已经知道 UV  就很难算  ~ 我们先来看看 ,目前非常火的  Mapreduce  解决方案!
UV  计算, mapreduce  解决方案 目前我这里使用的, mapreduce  很粗暴!
UV  计算, mapreduce  解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1  SUV1 频道 1  SUV1 频道 1  SUV2 频道 1  SUV3 频道 2...
UV  计算, mapreduce  解决方案 频道 1,IP1,SUV1 频道 2, IP1,SUV2 频道 1, IP2,SUV3 频道 1  ‘SUV’  SUV1 频道 1  ‘IP’  IP1 频道 2  ‘SUV’  SUV2 频道...
Py  细节  /  预处理  /  中间结果  /  分时分治 Python  : marshal
UV  计算, python  解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV1 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1  001001… 频道 2  100111 … 频道 1  110011...
UV  计算, python  解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV1 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1  001001… 频道 2  100111 … 频道 1  110011...
UV  计算, python  解决方案 现实又一次的残酷了! 我们的  UID  是一个  16 位的字符串 ~
UV  计算, python  解决方案 bc=bitarray() for n in xrange( 1000 ) :     bc.extend(bitarray(10**6)) #120M f1=open('/tmp/bc1.ba','w...
UV  计算, python  解决方案
UV  计算, python  调度 这么多任务 , 我们需要以个 .. 调度
Py  细节  /  调度  - gearman
Py  细节  /  调度 – 想象远没现实美好
Py  细节  /  胶水  R / rpy2  import rpy2.robjects as robjects r = robjects.r robjects.globalenv[&quot;x&quot;] = robjects.Floa...
数据的重要性  -  数据可视化 Twitter  上我们的关系
数据的重要性  -  数据可视化 facebook 人物关系链图
数据的重要性  -  数据可视化 Yahoo Research 针对地震发生后一小时 twitter 相关微博数据研究
数据的重要性  -  数据可视化 高转帖子的传播环: 二环为粉丝转发  5%  , 三环为粉丝们的粉丝转发  55%  , 四环是粉丝们的粉丝加泛粉丝  25% , 五环是随机粉丝  15%  。
数据的重要性  -  数据可视化
数据的重要性  -  数据可视化 twitter 上的 love 有关的关键词
数据的重要性  -  数据可视化 twitter 上的 hate 有关的关键词
数据的重要性  -  数据可视化 Yahoo Research 针对地震发生后一小时 twitter 相关微博数据研究
 
Upcoming SlideShare
Loading in …5
×

搜狐Pv insight(py)技术交流

1,212 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,212
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
9
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide
  • 1 正如哲学由最基本的三个问题引申出了很多 2 不同岗位、层级 对广度、深度和持久度要求不一样
  • 1 物以类聚、人以群分,具有相同特征的往往是一起的。 2 栏目由具有相同特征的若干 url 组成。 3 频道由具有相同特征的若干栏目组成,一个栏目可能属于多个频道
  • 第三点 1 python 全局锁的存在,导致使用多线程不如使用单进程来处理 2 节省空间,避免冗余,浪费资源; 减少服务器运算压力, 加快运算速度;相当于多了 9 台服务器 3 (可点击)将访问的 url 处理为 id , 加网址。 不存在的归为第 0 类。 对于 refer 是处理:搜狐内的为 id ,加网址,搜索引擎转化为关键字,其他转化为域名, www2 的转化为 www 的 4 uv 表面只少了一个 0 , 实际上市由字符串变为了整形,节省的空间意义重大。 当然为了记录一些的实际信息, 有些还是需要保存的。 例如来源
  • 1 5 分钟时,根据前面预处理的结果,计算 suv , pv , 并使用集合保留 suv 2 由于 python 的特性, 1 小时和 1 天只需简单加载数据进行归并即可 3 每周、每月
  • 1 人无远虑, 必有近忧 2 所谓分时处理就是将数据分摊到各时间片上进行处理 (翻页)
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 第四点 1 全部数据拿来求交并、量太大 2 以奇偶进行讲解 3 对于频道数据 分 10 份存储,对于全站和各域数据分 50 份存储 4 使用多进程方式, 无锁交互
  • 1 知无不言、言无不尽 2 有请韩道亮同学上来和我一起回答大家的问题
  • 搜狐Pv insight(py)技术交流

    1. 1. 搜狐 PVInsight 运算系统 刘凯毅 ; 尤春
    2. 2. PVInsight 系统简介 <ul><li>公司向用户提供的价值 </li></ul><ul><li>获取的商业价值 </li></ul>
    3. 3. PVInsight 运系统简介 什么样的用户认可提供的价值? 这些用户有商业价值吗? 有多认可? 开始认识用户吧 !
    4. 4. 系统简介 / 用户 关键字 : 响应用户 / 新用户 / 活跃用户 / 流失用户
    5. 5. 系统简介 / 用户 关键字 : 连续访问
    6. 6. 系统简介 / sohu 企邮 一个企邮用户的连续访问 > 登入 > [ 管理此域 ] > 员工列表 > 广播邮件 * >>> ..... 一通点击 > 群组列表 > 新建群组 > 广播邮件 * > 发送 想发广播邮件的用户 想做了些什么?
    7. 7. 系统简介 / sohu 企邮 如何发现 此类连续访问问题 ? <ul><li>产品经理提出: 希望看到发“广播邮件”的用户都怎么时候 ? </li></ul><ul><li>从数据仓库中找出连续访问中 </li></ul><ul><li>> 广播邮件 > 发送 ;之前的 操作 </li></ul><ul><li>3. 并清洗数据为 </li></ul><ul><li>离发送广播邮件最后 10 步 : </li></ul><ul><ul><li>> a_url 访问人数 ; </li></ul></ul><ul><ul><li>> b_url 访问人数 </li></ul></ul><ul><li>离发送广播邮件最后 9 步 : </li></ul><ul><li>> c_url 访问人数 </li></ul><ul><li>> d_url 访问人数 …… . </li></ul>
    8. 8. <ul><li>这样做对商业价值有利吗? </li></ul>系统简介 / 商业价值 各个职位上对商业价值的帮助 广告给我们带来效果怎么样 ?
    9. 9. 系统简介 / 商业价值角度
    10. 10. 名词解释 Pv : page view 浏览次数 Uv : unique visitor 独立访客 Ip : 独立 Ip 数 新老访客 / 回头用户 / 会话次数 / 访问间隔 / 停留时长 / 访问深度 / 回访率 / 跳出率 / 入口率 计费方式 : cpc : 每次点击计费 cpm : 千次效果展现 计费 cpa : 用户行为计费 cps : 销售成本计费
    11. 11. 名词解释 现实是很残酷的 : 其实 UV 就很难算 ~ 我们的 UID 是一个 16 位的字符串 一般一个小小的统计就上亿条的记录 ( 16*8* (10**8) ) / ((2**10)**3) = 12 G
    12. 12. PVInsight 运系统简介 <ul><li>系统架构 </li></ul><ul><ul><li>收 集 </li></ul></ul><ul><ul><li>存 储 </li></ul></ul><ul><ul><li>结构化 </li></ul></ul><ul><ul><li>可视化 </li></ul></ul>
    13. 13. 系统架构 / 图
    14. 14. 系统架构 / 使用语言 <ul><li>Python </li></ul><ul><ul><li>ETL : 数据清洗 / 数据完整性 </li></ul></ul><ul><ul><li>中间数据:结构维护(分时 / 治) / 统计 </li></ul></ul><ul><ul><li>胶水 : c / r /mysql/ infob / bdb </li></ul></ul><ul><li>Java </li></ul><ul><ul><li>Hdfs / mapreduce / hbase </li></ul></ul><ul><li>Shell </li></ul><ul><ul><li>调度 / 维护运行环境配置 </li></ul></ul>
    15. 15. Py 细节 / 预处理
    16. 16. Py 细节 / 预处理 / 数据完整性 url url => 栏目 ID ,频道 ID
    17. 17. Py 细节 / 预处理 / 数据完整性 url 域名 +url auto.sohu.com/ /20090914/n266706777.shtml 域名 auto.sohu.com/ 泛域名 i.auto.sohu.com/ 20090913/n237706498.shtml 特例 http://cs.focus.cn/news/2005-09-14/128510.html
    18. 18. Py 细节 / 预处理 / 数据完整性 url <ul><li>存储 btree 需要匹配 url </li></ul><ul><ul><li>Key = domain 倒序 |url </li></ul></ul><ul><li>def pointerDrift_domain (self,domain,url,loop=10) : </li></ul><ul><li>if loop < 0 : return ('0','0') </li></ul><ul><li>dk2,dv2 = btree_url. previous() # next() </li></ul><ul><li>dtype,ddmain,durl = dk2.split('|')[:3] </li></ul><ul><li>if ddmain != domain : return ('0','0') </li></ul><ul><li>if url.startswith( durl ) : </li></ul><ul><li>return dv2.split('t') </li></ul><ul><li>else : </li></ul><ul><li>return self. pointerDrift_domain (domain,url,loop-1) </li></ul>
    19. 19. Py 细节 / 预处理 / 数据完整性 url Btree key url moc.uhos.otua | / 20090913/n237706498.shtml moc.uhos.otua | moc.uhos.otua. i | /20090914/n266706777.shtml | = 174 特例 cs.focus.cn/news/2005-09-14/128510.html
    20. 20. Py 细节 / 预处理 / 数据清洗 流水线——预处理 0908251329265655 [26/Aug/2009:13:25:01 +0800] 123.15.49.138 &quot;GET /pv.gif?t?=1251264295765164_1024_768?r?=http://www.sohu.com/ HTTP/1.1&quot; &quot;http://news.sohu.com/20090826/n266231388.shtml&quot; pv.sohu.com CN4107 - - &quot;Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; QQDownload 570; .NET CLR 1.1.4322; InfoPath.2; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)&quot; iamyp78@sohu.com news.sohu.com 0908251329265655 20090826/n266231388.shtml 26/Aug/2009:13:25:01 0|2|1|1|iamyp78@sohu.com www.sohu.com CN2301 908251329265655 1252922376 900 /20090707/n265035120.shtml 11 / 0|2|1|1|iamyp78@sohu.com CN2301 news.sohu.com 0908251329265655 20090826/n266231388.shtml 26/Aug/2009:13:25:01 0|2|1|1|iamyp78@sohu.com www.sohu.com CN2301 908251329265655 1252922376 900 /20090707/n265035120.shtml 11 / 0|2|1|1|iamyp78@sohu.com CN2301 news.sohu.com 0908251329265655 20090826/n266231388.shtml 26/Aug/2009:13:25:01 0|2|1|1|iamyp78@sohu.com www.sohu.com CN2301 908251329265655 1252922376 900 /20090707/n265035120.shtml 11 / 0|2|1|1|iamyp78@sohu.com CN2301 news.sohu.com 0908251329265655 20090826/n266231388.shtml 26/Aug/2009:13:25:01 0|2|1|1|iamyp78@sohu.com www.sohu.com CN2301 908251329265655 1252922376 900 /20090707/n265035120.shtml 11 / 0|2|1|1|iamyp78@sohu.com CN2301 news.sohu.com 0908251329265655 20090826/n266231388.shtml 26/Aug/2009:13:25:01 0|2|1|1|iamyp78@sohu.com www.sohu.com CN2301 908251329265655 1252922376 900 /20090707/n265035120.shtml 11 / 0|2|1|1|iamyp78@sohu.com CN2301
    21. 21. Py 细节 / 预处理 / 数据清洗 Py 的一些特性正则 >>> re.findall( r’b(?:ab)+b’ , ’ababab abbabb aabaab’) 输出 : ['ababab'] >>> re.findall( ’/*.*?*/’ , ‘/* part 1 */ code /* part 2 */ ‘) 输出 : ['/* part 1 */', '/* part 2 */']     ‘ (?<=…)’ 前向界定 , ‘(?=…)’  后向界定 >>> s=r’/* comment 1 */  code  /* comment 2 */’ >>> re.findall( r’(?<=/*).+?(?=*/)’ , s ) [' comment 1 ', ' comment 2 '] # py 条件正则 大家请注意 。。。
    22. 22. Py 细节 / 预处理 / 数据清洗 合理使用正则
    23. 23. Py 细节 / 预处理 / 中间结果 / 分时分治
    24. 24. PVInsight 运算系统实现 流水线——分时处理
    25. 25. Py 细节 / 分时 流水线——分时处理
    26. 26. Py 细节 分治
    27. 27. 计算 UV 好吧已经知道 UV 就很难算 ~ 我们先来看看 ,目前非常火的 Mapreduce 解决方案!
    28. 28. UV 计算, mapreduce 解决方案 目前我这里使用的, mapreduce 很粗暴!
    29. 29. UV 计算, mapreduce 解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1 SUV1 频道 1 SUV1 频道 1 SUV2 频道 1 SUV3 频道 2 SUV1 频道 1 SUV1 频道 1 SUV1 频道 1 SUV2 频道 1 SUV3 频道 2 SUV1 频道 1,SUV1 频道 2,SUV2 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1 SUV1 频道 1 SUV3 频道 1 SUV1 频道 1 SUV2 频道 2 SUV1 频道 1 SUV1 频道 1 SUV3 频道 1 SUV2 频道 2 SUV1
    30. 30. UV 计算, mapreduce 解决方案 频道 1,IP1,SUV1 频道 2, IP1,SUV2 频道 1, IP2,SUV3 频道 1 ‘SUV’ SUV1 频道 1 ‘IP’ IP1 频道 2 ‘SUV’ SUV2 频道 2 ‘IP’ IP1 频道 1 ‘SUV’ SUV3 频道 1 ‘IP’ IP2 … …
    31. 31. Py 细节 / 预处理 / 中间结果 / 分时分治 Python : marshal
    32. 32. UV 计算, python 解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV1 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1 001001… 频道 2 100111 … 频道 1 110011… 频道 1 00100… 频道 1 0001010… 频道 2 1001000…
    33. 33. UV 计算, python 解决方案 频道 1,SUV1 频道 2,SUV2 频道 1,SUV1 频道 1,SUV3 频道 1,SUV1 频道 1,SUV2 频道 1 001001… 频道 2 100111 … 频道 1 110011… 频道 1 00100… 频道 1 0001010… 频道 2 1001000…
    34. 34. UV 计算, python 解决方案 现实又一次的残酷了! 我们的 UID 是一个 16 位的字符串 ~
    35. 35. UV 计算, python 解决方案 bc=bitarray() for n in xrange( 1000 ) :     bc.extend(bitarray(10**6)) #120M f1=open('/tmp/bc1.ba','wa') bc.tofile(f1) # 我测试在 160k 左右 sio = StringIO() f2=open('/tmp/bc2.ba','wb') w = GzipFile('/tmp/bc3.ba','wb',9,sio) w.write(bc.tostring()) w.close()
    36. 36. UV 计算, python 解决方案
    37. 37. UV 计算, python 调度 这么多任务 , 我们需要以个 .. 调度
    38. 38. Py 细节 / 调度 - gearman
    39. 39. Py 细节 / 调度 – 想象远没现实美好
    40. 40. Py 细节 / 胶水 R / rpy2 import rpy2.robjects as robjects r = robjects.r robjects.globalenv[&quot;x&quot;] = robjects.FloatVector([1,2, 3, 4, 5, 6, 7, 8, 9, 10]) robjects.globalenv[&quot;y&quot;] = robjects.FloatVector([0,30,44,57,65,78,68,97,99,120]) lm_d9 = r.lm(&quot;y ~ 1+x&quot;) r.predict( lm_d9, robjects.r(&quot; data.frame(x=11) &quot;), interval=&quot;prediction&quot;,level=0.95)[0] 输出 : 128.26666666666668
    41. 41. 数据的重要性 - 数据可视化 Twitter 上我们的关系
    42. 42. 数据的重要性 - 数据可视化 facebook 人物关系链图
    43. 43. 数据的重要性 - 数据可视化 Yahoo Research 针对地震发生后一小时 twitter 相关微博数据研究
    44. 44. 数据的重要性 - 数据可视化 高转帖子的传播环: 二环为粉丝转发 5% , 三环为粉丝们的粉丝转发 55% , 四环是粉丝们的粉丝加泛粉丝 25% , 五环是随机粉丝 15% 。
    45. 45. 数据的重要性 - 数据可视化
    46. 46. 数据的重要性 - 数据可视化 twitter 上的 love 有关的关键词
    47. 47. 数据的重要性 - 数据可视化 twitter 上的 hate 有关的关键词
    48. 48. 数据的重要性 - 数据可视化 Yahoo Research 针对地震发生后一小时 twitter 相关微博数据研究

    ×