我有一个日志文件,我需要在python中绘制不同的数据点作为多线图,每个独特点都有一条线,问题是在某些样本中会丢失一些点并添加新点另一方面,如图所示,每条线表示n个点的样本,其中n是可变的:
2015-06-20 16:42:48,135目前的统计数据= [(' keypasssed',13),('玩具',2),('球&# 39;,2),('鼠标',1)...] 2015-06-21 16:42:48,135当前统计= [(' keypasssed',20,(' toy',5),(' ball',7 ),(' cod',1),(' fish',1)...]
在上面的第1个样品中,小鼠'存在但在第二行中不存在,每个样本中添加了新的数据点,如“鳕鱼”,“鱼”等
那么如何以最快,最干净的方式在python中完成呢?是否有任何现有的python实用程序可以帮助绘制这个定时日志文件?作为日志文件,样本数量为数千,因此可视化应该能够正确显示它。
有兴趣为这个和不同颜色六角形应用多变量hexagonal binning用于每个独特的列"球,鼠标......等等#34;。 scikit提供hexagoanal binning,但无法根据唯一数据点弄清楚如何为每个六边形渲染不同的颜色。任何其他可视化技术也会对此有所帮助。
答案 0 :(得分:1)
将数据导入pandas:
import pandas as pd
df = pd.DataFrame(columns = ['timestamp','name','value'])
with open(logfilepath) as f:
for line in f.readlines():
timestamp = line.split(',')[0]
#the data part of each line can be evaluated directly as a Python list
data = eval(line.split('=')[1])
#convert the input data from wide format to long format
for name, value in data:
df = df.append({'timestamp':timestamp, 'name':name, 'value':value},
ignore_index = True)
#convert from long format back to wide format, and fill null values with 0
df2 = df.pivot_table(index = 'timestamp', columns = 'name')
df2 = df2.fillna(0)
df2
Out[142]:
value
name ball cod fish keypassed mouse toy
timestamp
2015-06-20 16:42:48 2 0 0 13 1 2
2015-06-21 16:42:48 7 1 1 20 0 5
绘制数据:
import matplotlib.pylab as plt
df2.value.plot()
plt.show()