百度统计是基于cookie的,当呼吁js脚本的下,会以您电脑里保存一个永久cookie,该cookie作为你的用户标识。同时发现,但剥离时参数ep从最开始的0变为了“7289%2C115”,转义后是“7289,115”这是简单个毫秒单位,即7.2秒和0.1秒的意。同时前少糟呼吁hm.gif的时节lt参数(时间,javascript:(new
Date).getTime())是匪换的。rnd随机数每次都转移。

参考资料

ONCOCNV文献:https://academic.oup.com/bioinformatics/article/30/24/3443/2422154
ONCOCNV代码:http://boevalab.com/ONCOCNV/

import urllib2
import urllib
import random
import math
import urlparse
import time
import cookielib

segmentByCBS

  • 输入标准化后的顺序amplicon的染色体,起始位置,logNRC和权重(SigmaForWeights),使用PSCBS中segmentByCBS(内部调用DNAcopy包)函数进行局部划分。划分时,sigma越大权重更小,来避免断点判定在sigma较充分的amplicon。输出是每个segment对应之拷贝数

出口如下,如果该染色体中有NA的多寡,会保留一行NA的价

   sampleName chromosome     start       end nbrOfLoci    mean
1        <NA>          1   2488068 244006378      1363  0.0934
2        <NA>         NA        NA        NA        NA      NA
3        <NA>          2   5833035 234681120      1008  0.0732
4        <NA>         NA        NA        NA        NA      NA
5        <NA>          3   3192502 195622096       939  0.0718
6        <NA>         NA        NA        NA        NA      NA
7        <NA>          4   1800963 153332857       423  0.0313
8        <NA>         NA        NA        NA        NA      NA
9        <NA>          5    223515 180058652       574 -0.3460
10       <NA>         NA        NA        NA        NA      NA
11       <NA>          6    393195 167275553      1378  0.0588
12       <NA>         NA        NA        NA        NA      NA
13       <NA>          7   2946229 152373106       945  0.0507
14       <NA>         NA        NA        NA        NA      NA
15       <NA>          8  30915961 145742416       852  0.0803
16       <NA>         NA        NA        NA        NA      NA
17       <NA>          9   5021975   5072501        21 -0.1446
18       <NA>          9   5072501 134100903       474 -0.3635
19       <NA>          9 134100903 139438447       156  0.0474

第一,使用Wireshark(一慢性网络抓包工具)对浏览器实际的经过进展捕获。首先是使用ie打开一个发生超链接链接到有百度统计的网站,加载了后关门浏览器。最后以Wireshark上获取如此的大网数据包。

测算生物意义的copy number

  • ratio = logNRC – zero,减去zero值(copy number 0 的cluster的均值)
  • 假使有正常细胞污染之比例,那么减去这有的影响: ratio =
    log((exp(ratio)-normalContamination)/(1-normalContamination))
  • 呼吁来copy number 0的amplicon求mad值,作为所有之标准差(sample
    sigma),所有amplicon的control sigma * sample sigma作校正后底方差
  • 用每个segment内的amplicon
    ratio乘以权重求中位值得到权重后获取的weighted.median
    segmean,如果无法要来weighted.median,取wighted.mean作为segmean
  • copy number计算方法
    图片 1

随即段js,实质上是奔页面中引入hm.baidu.com/h.js的即时段代码,该代码的内容会因后面的参数有所不同,h.js?后面的参数就是公以百度统计里的id。

头处理

  • perl脚本统计RC(RC(read counts))
  • 读入control baseline 和 sigma(最后baseline 预测的mad值)
  • 以gc < 0.28或gc >
    0.68,sigma乘及1.5,后来以趁热打铁以6,对于小于0.01要高于0.99划分位数,sigma取0.01以及0.99瓜分位点的sigma
  • 拿sigma转化为权重,SigmaForWeights =
    1/sigma^2/max(1/sigmaforWeithts^2)
  • 因mu值设置有些outlier的amplicon,threshold为-2暨2
  • 一经1/3 amplicon且是NA,该样品为撇下

def __init__(self,baiduID,targetPage=None,refererPage=None):
“””Constructor”””
self.TargetPage=targetPage or self.TargetPage
self.Referer=refererPage or self.Referer
self.BaiduID=baiduID
self.MyData[‘si’]=self.BaiduID
self.MyData[‘su’]=urllib.quote(self.Referer)
pass
def run(self,timeout=5):
cj=cookielib.CookieJar()
opener=urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
opener.addheaders=[(“Referer”,self.TargetPage),(“User-Agent”,self.UserAgent)]
try:
response=opener.open(self.Hjs+self.BaiduID).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘lt’]=int(time.time())
fullurl=self.Hgif+urllib.urlencode(self.MyData)
response2=opener.open(fullurl,timeout=timeout).info()
self.MyData[‘rnd’]=int(random.random()*2147483647 )
self.MyData[‘et’]=’3′
self.MyData[‘ep’]=’2000,100′
response3=opener.open(self.Hgif+urllib.urlencode(self.MyData),timeout=timeout).info()
pass
except urllib2.HTTPError ,ex:
print ex.code
pass
except urllib2.URLError,ex:
print ex.reason
pass
pass

检测segment的outlier

(ratio- segmean)/sigma在N(0,1)双尾的p值
ratio/sigma在N(0,1)双尾的p值
取两者之中较充分的p值作为该amplicon的outlier p值
有着的amplicon outlier值采用fdr方法算q值
于outlier q值<0.01之触发加上注释,outlier p值,outlier copy
number采用round(exp(values[tt])*4)/2

  1. 告一段js脚本。
  2. 加载了时出发一坏呼吁,并传递参数
  3. 离页面下,发出同样浅呼吁,并传递参数,与地方对比,发现ep参数有变动。

文库大小校正,(中位数校正),GC含量校正,长度校正,ICA校正

  • 文库大小校正,(中位数校正),GC含量校正,长度校正,多了同样步着各队数校正,将NRC除以总的NRC值的中位数,作用是同等开始对0拷贝数进行校正
  • ICA标准化:取control样品中之ICA1,ICA2,ICA3运rlm建立线性模型求残差作为条件
    后的价值,对于值为0的logNRC,取最好小logNRC

 

predictCluster,,确定zero(copy number 0对诺之logNRC)和copy number。注:这里呼吁来的copy number并无是生物意义的copynumber 而是是否出现拷贝数异常,0吧未出现拷贝数异常

  • 以每个segment内的amplicon乘以权重求中位值得到权重后获得的weighted.median
    segmean,如果无法请来weighted.median,取wighted.mean作为segmean
  • 原理:对许正在同等copy数的segmean应该聚类在一块
  • 为直接取segmean进行聚类可能会见聚类错误,因此对数码增长高斯噪音:
     第一步,求来要加上的sdError:取出在-2同2之内的amplicon(并且排除x和y染色体),将amplicon的logNRC –
    segmean得到errors,对各一样段segment的errors求方差,得到该段sdNoise,再用sdNoisd比直达该段amplicon长度开到底得到sdError,公式为:sdError
    = sd(logNRC – segmean)/sqrt(n),可以知道啊sdError = ((logNRC –
    segmean) – mean(logNRC – segmean))^2/sqrt( n(segment)*n(in each
    segment) )
     第二步,添加噪音,噪音的均值为0,方差为sdError,每个ampliocn 的值a =
    segmean + rnorm(n(in each segment),0,sdError)
  • 使用mcluser聚类
    设若聚类结果超过1类,将欠拥有项目的方差取出,将死簇给值NA,异常cluster判断方式:每个cluster都出一个相应之标准差(sigma),标准各异大于中位cluster
    sigma加上7*mad(sigma)
  • 计量每个cluster的density
    测算办法:计算该cluster(高斯模型)的density,等于每个cluster(全部高斯模型)的均值在这个cluster下的density的总和再乘以这个cluster的density比重。而每个cluster的density
    = dnorm(x,mean of cluster,var of cluster) * proportion of cluster
  • 将最大density的cluster作为zero copy number
  • 将新近底一个cluster(如果mean值差<0.04)两只cluster乘比重后的均值赋给该cluster(zero),该cluster比重变为这片单cluster相加
    图片 2
  • 检测预测时处于边缘的值
    假设和一个amplicon a 对应之copy number
    mad值为0.5,那么a所对应之amplicon copy number 为1,如果和一个amplicon
    a 对应的copy number mad值为-0.5,那么a所对应的amplicon copy number
    为-1
    若常染色体只发1只cluster,那么分析x,y染色体,如果segmean <
    log(0.75),该amplicon copy number 给-1,如果segmean >
    log(1.25),amplicon copy number给1
  • 求出maxloss 和 maingain
    maxloss:
    copy number是-1的amplicon的segmean,
    copy number 是0 的amcplion segmean -(copy number是0的amplicon
    segmean – mean(copy number 是 -1的 amplicon segmean ))/2
    以上述中取最大值
    mingain:
    copy number是1的amplicon的segmean,
    copy number 是0 的amcplion segmean +(mean(copy number 是 1的
    amplicon segmean )-copy number是0的amplicon segmean)/2
    每当上述中取最小值
  • 将x和y染色体segmean > mingain ,copy
    number赋予1,将x和y染色体segmean < maxloss,copy number 赋予-1
  • 本着predictCluster进行八浅,取最好小的zero值的平破,然后取出zero和展望的copy
    number

百度统计服务端,通过接至之要,并起这个图片的网址附带的参数获取有关信息,记录访客访问记录;当页面被用户关闭的时段,同样会接触一不成呼吁hm.gif的进程,但这个过程不是拥有浏览器与拥有关闭动作还支持。

按照segment进行fixed variance test和t test

  • fixed variance test
    ratio 应服从N(0,sigma),对segment内之amplicon ratio
    进行更换,(logNRC-0)/sigma应该服从N(0,1),根据中心极限定理,mean((logNRC-0)/sigma)服从N(0,1/sqrt(n)),计算该segment的mean((logNRC-0)/sigma)在N(0,1/sqrt(n))双尾的p值
  • t test
    (logNRC-0)/sigma应该服从N(0,1),对每个amplicon进行t test
    如果fixed variance test > 0.01 或者t test > 0.01,copy
    number赋予2
    CNV:copy >= 3 : Gain,copy = 2.5:PotentialGain,copy <
    1:Loss,copy = 1.5:PotentialLoss

########################################################################
class Baidu:
“”””””
Referer=’http://www.lixin.me’
TargetPage=’/www.lixin.me’
BaiduID=”
Hjs=”http://hm.baidu.com/h.js?”
Hgif=”http://hm.baidu.com/hm.gif?”
UserAgent=’Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1;
Trident/5.0)’ #IE9
MyData={‘cc’:’1′,’ck’:’1′,’cl’:’32-bit’,’ds’:’1024×768′,’et’:’0′,’ep’:’0′,’fl’:’11.0′,’ja’:’1′,’ln’:’zh-cn’,’lo’:’0′,’nv’:’1′,’st’:’3′,’v’:’1.0.17′}
#———————————————————————-

遵循基因进行t test

  • 针对每个基因使用t检验,理论及 ratio/sample sigma/control
    sigma,服从均值为0的遍布,如果p值<0.01,对每个基因copynumber进行估算(perGeneEvaluation)
  • 万一基因计算的结果未对等segment的结果,并且断点不在基因内,ratio –
    segmean / (control sigma * sample
    sigma)应依1/sqrt(n)正态分布,作t检验,如果t检验显著,predLarge
    Corrected给perGeneEvaluation
  • 一旦断点在基因内,以第一只segmean(fragratio)作为参照,如果起segmean不均等,将下一个amplicon
    segmean值改呢参考segmean
  • 针对每个基因内之ratio – segmean(fragratio)/(control sigma * sample
    sigma),作t检验,取出最酷的p值作为基因内所有amplicon的pvalRatioCorrected
  • 但是如若基因内设有copy number = 2
    的amplicon,判断是否是round(exp(fragratio)*4)/2 =
    2,如果出从这些amplicon中取出p值最要命之p值作为基因内所有amplicon的pvalRatioCorrected
  • 设该p值>0.05,说明整沾都于拖欠fragratio解释了
  • 使p值<0.05,说明不能够一体说明,对每个fragratios相同的amplicon取出,将她ratio/(control
    sigma * sample
    sigma)作t检验,如果尽小值>0.01,那么pergeneEvaluation=2

接下通过序模拟这无异经过:

当这些参数都设置完毕了(有些参数并无赋值),筛选出已赋值了之参数,并当hm.baidu.com/hm.gif的参数拼凑来一个url,如:http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn
  。然后要该图片。

http://hm.baidu.com/h.js?3266e9d3684e7a1307dc7c4b4a64b0ae
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=0&et=0&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=2889921&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=7289%2C115&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171561&nv=1&rnd=1444115283&si=3266e9d3684e7a1307dc7c4b4a64b0ae&st=3&su=http%3A%2F%2Fwww.zhanghangbo.com%2F&v=1.0.17
http://hm.baidu.com/hm.gif?cc=1&ck=1&cl=32-bit&ds=1366×768&ep=212486%2C4614&et=3&fl=11.0&ja=1&ln=zh-cn&lo=0&lt;=1328171541&nv=1&rnd=1067394506&si=0f9e2caa14d6d0a51371b168d182314a&st=1&v=1.0.17

落该h.js代码的同时,百度统计会向而的浏览器写副一个名字为“HMACCOUNT”的cookie,该cookie的超时时为2038年,所以一旦您从未清空浏览器cookie,基本就是不用过期。

可窥见,浏览器总共向劳动器端发送了4不成呼吁:

 

 

自从js代码中可获,所有参数包括这些:”cc,cf,ci,ck,cl,cm,cp,cw,ds,ep,et,fl,ja,ln,lo,lt,nv,rnd,sb,se,si,st,su,sw,sse,v”。这些参数的意义大致如下:

下面我们就是来拟一不善呼吁,本次用的python语言。

cc: 不知道,一般为1
cf:url参数hmsr的值
ci:url参数hmci的值
ck:是否支持cookie 1:0
cl:颜色深浅 如 “32-bit”
cm:url参数hmmd的值
cp:url参数hmpl的值
cw:url参数hmkw的值
ds:屏幕尺寸,如 ’1024×768′
ep:初始值为’0′,时间变量,反映页面停留时间,格式大概是:现在时间-载入时间+“,”+另一个万分有点的时价值
et:初始值为’0′,如果ep时间变量不是0的讲话,它见面变成任何
fl:flash版本
ja:java支持 1:0
ln:语言 zh-cn
lo: 不知道,一般为0
lt:日期 time.time(),如“1327847756”, 在首蹩脚呼吁没有
nv: 不知道,一般为1或者0
rnd:十各项随机数字
sb:如果是360se浏览器该值等于‘17’
se: 和寻找引擎相关
si:统计代码id
st:
su:上一页document.referrer
sw: 不掌握,估计与找引擎有关,一般也空
sse:不理解,估计与搜索引擎有关,一般也空
v:统计代码的版 ,目前该值为“1.0.17”

率先,百度统计会要求我们当使统计的页面中置放一段子js语句,类似如下:

h.js被下载后,便执行其脚本获取有浏览器相关消息与走访来源,获取的信包括屏幕尺寸、颜色深浅、flash版本、用户语言等。

if __name__ ==”__main__”:
a=Baidu(‘百度统计id’,’http://www.lixin.me/blog/test4','www.lixin.com.cn’)
a.run()

<script type=”text/javascript”>
var _bdhmProtocol = ((“https:” == document.location.protocol) ? ”
https://” : ” http://”);
document.write(unescape(“%3Cscript src=’” + _bdhmProtocol +
“hm.baidu.com/h.js%3F3266e9d3684eaa1337dc7c4b4b64b0ae’
type=’text/javascript’%3E%3C/script%3E”));
</script>