1. import sys
  2. import os
  3. import re
  4. import datetime
  5. import csv
  6.  
  7. def get_datetime(record):
  8. request_time = ""
  9. p = re.compile(r"(?P<time>\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2},\d+)")
  10. # p = re.compile(r"(?P<time>[\d.]+)ms")
  11. m = p.search(record)
  12. if m:
  13. request_time = m.group("time")
  14. dt = datetime.datetime.strptime(request_time, '%Y-%m-%d %H:%M:%S,%f')
  15. return dt
  16.  
  17. def parse(log_file_name, result_csv_name):
  18. start = 0
  19. end = 0
  20. start_time = ''
  21. end_time = ''
  22. md5crc32 = ''
  23. csv_writer = csv.writer(open(result_csv_name, 'wb'),
  24. delimiter = ',')
  25. with open(log_file_name, 'rb') as log_file:
  26. for i, line in enumerate(log_file):
  27. line = line.strip()
  28. if 'folderProcessing() INFO download from' in line:
  29. start = i
  30. start_time = get_datetime(line)
  31. elif 'DownLoadFile() INFO download to' in line:
  32. end = i
  33. end_time = get_datetime(line)
  34. # got one download action
  35. if end - start == 1:
  36. # parse hash
  37. md5crc32 = line.rsplit('/', 1)[1]
  38. print md5crc32, (end_time - start_time).total_seconds()
  39. csv_writer.writerow((md5crc32, (end_time - start_time).total_seconds()))
  40. # assert False
  41.  
  42. def do_statistics(file_name):
  43. import pandas as pd
  44. import numpy as np
  45. import matplotlib.pyplot as plt
  46. df = pd.read_csv(file_name, header = None, names= ['hash', 'time'], dtype = {'time': np.float64},
  47. # nrows = 10000
  48. )
  49. time_series = df.time
  50. print time_series.describe()
  51. plt.figure()
  52. # fig = time_series.hist().get_figure()
  53. # define range
  54. ranges = (0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0, 2.0, 3.0, 4.0, 10.0, 10000)
  55. bins = zip(ranges[:-1], ranges[1:])
  56. labels = ['%s-%s'%(begin, end) for i ,(begin, end) in enumerate(bins) ]
  57. print labels
  58. #print bins
  59. #fig = time_series.plot(kind='bar', xticks = ranges)
  60. results = [0] * len(bins)
  61. for i in time_series:
  62. for j , (begin, end) in enumerate(bins):
  63. if i > begin and i <= end:
  64. results[j] += 1
  65. print results
  66.  
  67. mu = time_series.mean()
  68. median = np.median(time_series)
  69. sigma = time_series.std()
  70.  
  71. ax = pd.Series(results).plot(kind='bar', logy = True, figsize=(25, 13.5))
  72. # dpi = ax.figure.get_dpi()
  73. # print 'dpi = ', dpi
  74. # plt.gcf().set_size_inches(25, 13.5)
  75.  
  76. ax.set_ylabel('Count')
  77. ax.set_xlabel('Time in seconds')
  78. # print dir(fig)
  79. ax.set_xticklabels(labels, rotation = 45)
  80. ax.set_title('MDSS download statistics')
  81.  
  82. textstr = 'count=%s\nmin=%.2f\nmax=%.2f\n$\mu=%.2f$\n$\mathrm{median}=%.2f$\n$\sigma=%.2f$'%(time_series.count(),time_series.min(), time_series.max(),mu, median, sigma)
  83.  
  84. # these are matplotlib.patch.Patch properties
  85. props = dict(boxstyle='round', facecolor='wheat', alpha=0.5)
  86.  
  87. # place a text box in upper right in axes coords
  88. ax.text(0.90, 0.95, textstr, transform=ax.transAxes, fontsize=14,
  89. verticalalignment='top', bbox=props)
  90.  
  91. ax.figure.show()
  92. #
  93. ax.figure.set_size_inches(25, 13.5, forward = True)
  94. print ax.figure.get_size_inches()
  95. ax.figure.savefig('result.png', format='png',)
  96. input('asdfasd')
  97.  
  98. if __name__ == "__main__":
  99. # print get_datetime("2014-10-23 09:19:34,251 pid=27850")
  100. # parse('inpri_p_antiy.log', 'result.csv')
  101. do_statistics('result.csv')

生成图像如下:

使用pandas处理数据并绘图的例子的更多相关文章

  1. 利用Python进行数据分析(12) pandas基础: 数据合并

    pandas 提供了三种主要方法可以对数据进行合并: pandas.merge()方法:数据库风格的合并: pandas.concat()方法:轴向连接,即沿着一条轴将多个对象堆叠到一起: 实例方法c ...

  2. 【转载】使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas对数据进行筛选和排序 目录: sort() 对单列数据进行排序 对多列数据进行排序 获取金额最小前10项 ...

  3. 【转载】使用Pandas进行数据提取

    使用Pandas进行数据提取 本文转载自:蓝鲸的网站分析笔记 原文链接:使用python进行数据提取 目录 set_index() ix 按行提取信息 按列提取信息 按行与列提取信息 提取特定日期的信 ...

  4. 【转载】使用Pandas进行数据匹配

    使用Pandas进行数据匹配 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas进行数据匹配 目录 merge()介绍 inner模式匹配 lefg模式匹配 right模式匹配 outer模式 ...

  5. 【转载】使用Pandas创建数据透视表

    使用Pandas创建数据透视表 本文转载自:蓝鲸的网站分析笔记 原文链接:使用Pandas创建数据透视表 目录 pandas.pivot_table() 创建简单的数据透视表 增加一个行维度(inde ...

  6. Pandas 把数据写入csv

    Pandas 把数据写入csv from sklearn import datasets import pandas as pd iris = datasets.load_iris() iris_X ...

  7. pandas学习(数据分组与分组运算、离散化处理、数据合并)

    pandas学习(数据分组与分组运算.离散化处理.数据合并) 目录 数据分组与分组运算 离散化处理 数据合并 数据分组与分组运算 GroupBy技术:实现数据的分组,和分组运算,作用类似于数据透视表 ...

  8. Pandas DataFrame数据的增、删、改、查

    Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...

  9. pandas 选取数据 修改数据 loc iloc []

    pandas选取数据可以通过 loc iloc  [] 来选取 使用loc选取某几列: user_fans_df = sample_data.loc[:,['uid','fans_count']] 使 ...

随机推荐

  1. ListView.DragEnter触发不了

    经过千百度的搜索之后,终于找到了一点线索,原文是:https://msdn.microsoft.com/en-us/magazine/mt185571.aspx 有能力的可以参阅原文,想省事的可以等待 ...

  2. JavaScript的sleep延时函数

    JavaScript没有像Java的sleep延时函数,所以记录JavaScript的sleep延时函数 function sleep(milliSeconds) { var startTime = ...

  3. Intellij快捷键

  4. 在Linux中使用vi打开文件时如何显示行号,及跳转到指定行

    vi 文件名,打开文件后 如果要显示所有行号,使用 :set nu 如果要显示当前行号,使用 :nu 如果要跳转到指定行,使用 :行号 例如,跳转到第10行,使用 :10

  5. [ie兼容]ie7 margin-bottom失效

    有时候子元素设置了margin,父元素也设置了margin,父元素的margin在ie7下会失效(包括padding) 解决方法:父容器加属性overflow:hidden;zoom:100%;

  6. 黑客长期摇号不中"黑"掉北京小客车摇号网

    新闻链接:http://www.2cto.com/News/201310/248936.html 新闻时间:2013-10-11 新闻正文: 为发泄长期摇号不中的不满,同时也为自己研发的软件打广告,硕 ...

  7. 一个null引发的错误

    写程序时,发生一个unrecognized selector的错误,很显然,这是一个经典错误,运行时找不到可调用的方法. 系统提示的reason是 -[NSNull length] 错误 经过查找,原 ...

  8. JEECMS v8 发布,java 开源 CMS 系统

    JEECMSv8 是国内java开源CMS行业知名度最高.用户量最大的站群管理系统,支持栏目模型.内容模型交叉自定义.以及具备支付和财务结算的内容电商为一体:  对于不懂技术的用户来说,只要通过后台的 ...

  9. linux后台运行和关闭、查看后台任务(转)

    转自:http://www.cnblogs.com/kaituorensheng/p/3980334.html fg.bg.jobs.&.nohup.ctrl+z.ctrl+c 命令 一.&a ...

  10. 转 Flex MXML编译成AS类

    2009-09-22 23:25 Flex MXML编译成AS类 由“Flex 基础”文中可知:每一个mxml文件首先要编译成as文件,然后再译成swf文件.app.mxml文件编译后会产生一系列中间 ...