2013-01-10 108 views
2

我對R相對比較陌生,而且這是我第一次嘗試使用它來實際分析一些數據。問題是這樣的:我有一個包含日誌的請求數量的CSV文件送達以下形式給定系統:時間序列每秒鐘,每小時,每天的請求

# Unix timestamp, number of requests 
1354810257,241624 
1354810258,244759 
1354810259,245307 
1354810260,248961 

在文件中包含相對於週期間的信息的時刻。現在我需要獲取一張圖表,顯示系統每秒鐘,每小時和每天的請求數量。

+0

請求數實際上是一個單調增加的序列。 – nopper

+0

如果這是真的,那麼應該使用開始和結束值之間的差異來按秒,小時和日期聚合。 @nopper需要爲測試提供一個更好的示例,並需要闡明其數據的基本含義。 –

+0

整個CSV文件是從監控節點集羣的Graphite服務器中提取的。這裏的請求數表示集羣本身處理的項目數。假設它們是HTTP請求的數量,而羣集是HTTP服務器。我需要的東西類似於http://stackoverflow.com/questions/5034513/how-to-graph-requests-per-second-from-web-log-file-using-r,唯一的區別是我需要統計每天,每小時和每秒,以瞭解系統的性能。 – nopper

回答

1

我用Python和matplotlib解決了它。代碼與此類似:

import csv 
from pylab import * 
from itertools import groupby 

def by_hour(value): 
    return value[0] // 3600 

def plot_data_for(data, map_, reduce_): 
    keys = [] 
    values = [] 
    for k,v in groupby(data, key=map_): 
     keys.append(k) 
     values.append(reduce_(v)) 
    return (keys, values) 

times = [] 
requests = [] 
reader = csv.reader(open("results.csv")) 

for row in reader: 
    times.append(int(row[0])) 
    requests.append(int(row[1])) 

increments = map(lambda x: x[1] - x[0], zip(requests, requests[1:] + [requests[-1]])) 
plot(*plot_data_for(zip(times, increments), by_hour, lambda values: sum(map(lambda x: x[1], values))))