我需要计算数据包捕获的TTL分布的伽马分布参数。捕获的大小约为14 GB。
首先,我使用Wireshark的tshark
工具从文件中提取所有TTL值:
tshark -r file -Y ip -T fields -e ip.ttl > ttl_values.txt
生成的文件由TTL值(每行一个)组成,约为。 700 MByte。如果我尝试使用genfromtxt
加载值,则进程会因内存耗尽而被终止。
data = np.genfromtxt('ttl_values.txt')
但是,如果我使用更小的TTL文件(大约56K),它可以正常工作。我读到h5df
和tables
建议用于处理大文件,因此我将文件ttl_values.txt转换为h5p文件,如下所示:
filepath = 'random_vals'
out_file = filepath + '.h5p'
h5 = pd.HDFStore(out_file, 'w')
it = pd.read_csv(filepath + '.txt', iterator=True, chunksize=100000)
for i, chunk in enumerate(it):
h5.append('data', chunk)
h5.close()
但我现在找不到有关如何将这些数据用于gamma.fit
方法的任何信息:
data = # use data from ttl_values.txt
fit_alpha, fit_log, fit_beta=stats.gamma.fit(data)
print('alpha: ', fit_alpha)
print('log: ', fit_log)
print('beta: ', fit_beta)
h5df
和tables
的方法是否合适? gamma.fit
?