我想使用 R 对日志文件信息进行一些统计分析,但发现即使是“有限”的 R-core RPM 也有很多依赖项尚未安装。我不想为了外围需求而安装这么多软件包。
是否有适用于 RHEL 6 上简单统计分析的轻量级替代方案?我有一个 R 脚本,它在 stdin 上接受大量值(每行一个值),并打印出最小值、最大值、平均值、中位数、95 百分位数和标准差。
为了了解更多背景信息,我使用 grep 和 awk 在我们的 Web 服务器日志文件中查找特定路径的 GET 请求,获取响应时间,并计算上面列出的指标,以衡量对 Web 应用程序更改对性能的影响。
我不需要任何绘图功能,只需要简单的计算。我是否忽略了什么?
答案1
使用 pythonNumPy您应该能够使用yum install numpy
或轻松安装该软件包pip install numpy
:
import numpy
n = numpy.random.rand(100)
print 'min:', n.min()
print 'max:', n.max()
print 'mean:', n.mean()
print 'median:', numpy.median(n)
print '95th:', numpy.percentile(n, 95)
print 'stddev:', n.std()
这将节省您从头开始重新实现基本统计的时间。一般来说,Python 具有NumPy和科学是 R 的一个功能丰富的替代品,而且通常还具有更好的性能。
另外,您不必编写自己的日志文件解析grep
,而是awk
可以使用以下命令:pylogsparser它是“一个包含一组可立即使用的解析器(DHCPd、Squid、Apache 等)的日志解析器库”。
答案2
以下是最小值、最大值、总计、平均值和中位数awk
:
BEGIN {
min="unset"
max=0
}
{
values[NR] = $1
total += $1
average = total/NR
if ($1 > max) max = $1
if (min == "unset" || $1 < $min) min = $1
}
END {
median=values[int(NR/2)]
print "MIN:", min
print "MAX:", max
print "TOTAL:", total
print "MEAN:", average
print "MEDIAN:", median
}
标准差和 95 百分位数留给读者作为练习。
答案3
任何编程/脚本语言(例如 Perl、Python 或 Ruby)都可以轻松完成此操作,并且bc
可用。