1

次のようなファイルがありtxtます。

0.065998       81   
0.319601      81   
0.539613      81  
0.768445      81  
1.671893      81  
1.785064      81  
1.881242      954  
1.921503      193  
1.921605      188  
1.943166      81  
2.122283      63  
2.127669      83  
2.444705      81  

最初の列はパケットの到着と2番目のパケットサイズ(バイト単位)です。

1秒あたりのバイトの平均値を取得する必要があります。たとえば、最初の1秒間は、値が81のパケットしかないため、平均ビットレートは81*8= 648bit/sです。次に、グラフのx軸の時間を秒単位でプロットし、y軸の平均ビットレートを1秒ごとにプロットする必要があります。

これまでのところ、データを配列としてアップロードすることしかできませんでした。

import numpy as np

d = np.genfromtxt('data.txt')

x = (d[:,0])  
y = (d[:,1 ])

print x  
print(y*8)

私はPythonを初めて使用するので、どこから始めればよいか助けていただければ幸いです。

結果のスクリプトは次のとおりです。

import matplotlib.pyplot as plt  
import numpy as np  
x, y = np.loadtxt('data.txt', unpack=True)  
bins = np.arange(60+1)  
totals, edges = np.histogram(x, weights=y, bins=bins)  
counts, edges = np.histogram(x, bins=bins)  

print counts  
print totals*0.008/counts  

plt.plot(totals*0.008/counts, 'r')  
plt.xlabel('time, s')  
plt.ylabel('kbit/s')  
plt.grid(True)  
plt.xlim(0.0, 60.0)  
plt.show()      

スクリプトは、パケットサイズ(バイト)と到着時間を含む.txtファイルを読み取り、一定期間の平均ビットレートをプロットします。サーバーの着信/発信トラフィックを監視するために使用されます!

4

3 に答える 3

5

あなたのデータはすでに時間でソートされているので、私はitertools.groupbyこれに使用するかもしれません:

from itertools import groupby
with open('data.txt') as d:
     data = ([float(x) for x in line.split()] for line in d)
     for i_time,packet_info in groupby(data,key=lambda x:int(x[0])):
         print i_time, sum(x[1] for x in packet_info)

出力は次のとおりです。

0 324.0
1 1578.0
2 227.0
于 2013-02-01T18:17:52.567 に答える
4

を使用したい場合は、 numpy.histogramnumpyを使用できます。

>>> import numpy as np
>>> x, y = np.loadtxt('data.txt', unpack=True)
>>> bins = np.arange(10+1)
>>> totals, edges = np.histogram(x, weights=y, bins=bins)
>>> totals
array([  324.,  1578.,   227.,     0.,     0.,     0.,     0.,     0.,
           0.,     0.])

これにより、各ビンの合計が得られ、ビンの幅で割って、おおよその瞬間的な速度を得ることができます。

>>> totals/np.diff(bins)
array([  324.,  1578.,   227.,     0.,     0.,     0.,     0.,     0.,
           0.,     0.])

(さて、ビンの幅はすべて1だったので、それはあまり面白くありません。)

[アップデート]

1秒あたりの平均パケットサイズが必要であるというあなたのフォローアップコメントを理解しているかどうかはわかりません-質問のどこにも言及されていませんが、明らかなものを見逃していることで有名です..:-/いずれの場合も、タイムビン内のパケット数が必要な場合は、重みを設定する必要はありません(デフォルトは1)。

>>> counts, edges = np.histogram(x, bins=bins)
>>> counts
array([4, 6, 3, 0, 0, 0, 0, 0, 0, 0])

ここで、countsは、各ビンに到着したパケットの数です。

于 2013-02-01T18:38:11.673 に答える
0

到着時間は不規則なので、秒の整数に量子化してから、特定の秒のすべての到着の合計バイト数を集計することをお勧めします。これを行うと、プロットやその他の分析がはるかに簡単になります。

于 2013-02-01T18:20:21.990 に答える