Heim  >  Artikel  >  Backend-Entwicklung  >  php+R语言分析网站响应时间

php+R语言分析网站响应时间

巴扎黑
巴扎黑Original
2016-11-12 15:28:231668Durchsuche

 要做一个网络爬虫,抓取网页上的特定内容。以前有高年级研究生学长写过一个,但是老师嫌弃时间太久,上千个数据而已,竟然要用一夜,这次要我来做,我想先进行一下可行性的研究,要用到R语言进行统计。 

    这次试验的难点有两个,或者说实际上就只有一个,那就是数据的规范化表示。以前没用过php进行文件读写操作,这是头一次。需要考虑的是文件读写的频率,虽然只是一个实验,但是效率还是要考虑的。过于频繁的文件读写,对磁盘过于耗时的操作,是个大问题。所以这个要考虑。其实是数据的格式问题,以什么样的格式存储。要考虑后续R语言处理的问题,R语言可以处理纯文本,数据之间可以使用分隔符,比喻逗号、甚至是制表符。所以文件里面的数据打算用逗号分隔了。 

     首先贴上PHP代码 
include ("php_lib/LIB_http.php");
error_reporting(E_ALL^E_NOTICE);
$target ="http://www.*****";
$ref = "http://www.*****";
$filename = 'sitevisitors.txt';


$first=microtime(get_as_float);
for($n=0;$n<5000;$n++){
$betime=microtime(get_as_float);
$return_arry = http_get_withheader($target,$ref);
$finidown = microtime(get_as_float);
$resulttime = $finidown - $betime;
$count[$n] = $resulttime;
//echo $count[$n]."\n";
echo"\n".$n;
}
$fp = fopen("data.txt", "a");
//fputs ($fp, "$count[0]");
for($n=0;$n<5000;$n++){
fputs($fp, "\r\n".$count[$n]);
}
$last=microtime(get_as_float);
$result=$last-$first;
fclose ($fp);
echo"\nend this test";
echo"\n the time is:".$result;
?> 

    由于这个网站不便公布,所以上连接地址和主机地址用*号代替,还请谅解。程序会先设计一个5000个元素的数组,然后发5000次http请求,记录下每次的时间。http报文中好像会有这个时间,但自己记不真切了,所以用的是microtime()函数,注意要加上get_as_float才可以做减法,而且加上include ("php_lib/LIB_http.php");屏蔽掉所有的php notice. 
    
    所有的数据全都写进data.txt文件,要注意的是,文件数据格式应该是矩阵,就算只有一个数据源,即只有一列,也要每个数据独占一行,不能连着写,比如不能1,2,3,4……,而应该是: 




…… 
    
    之所以这么做是因为R语言的缘故,R语言是对矩阵进行读写,所以这么写最方便(也有可能有更好的办法,只是我不知道而已)。 

    得到时间后,打开R语言环境,接着做统计: 
    ①读取数据: 
data<-read.table("data.txt",header=FALSE,sep=",",col.names=c('num')) 
    ②求平均值: 
mean(data[,1]) 
注意不能是 mean(data),否则会出现如下警告: 
[1] NA 
警告信息: 
In mean.default(data) : 参数不是数值也不是逻辑值:回覆NA 
data[,1]表示矩阵data的第一列(其实这里也就仅有一列,但也要这么写)。 
    ③想画出散点图,但是坐标精度太小,分辨不出,这还要继续研究: 
c<-data[,1] 
mydata<-rbind(c,c) 
mydata<-as.data.frame(mydata) 
namse(mydata)<-c("x","y") 
with(mydata,plot(x,y,pch=19,main="the result")) 

图倒是画出来了,但是坐标精度只到小数点后2位,如何提高坐标精度,目前正在研究,options(digits)是不行了。接着想吧。 

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Vorheriger Artikel:PHP中文乱码解决方法Nächster Artikel:PHP代码重用方法