软工作业 3:个人编程练习——词频统计

一、程序分析

(1)读文件到缓冲区

(2)处理缓冲区 ,统计每个单词的频率

(3)输出 Top 10 的单词

(4)设置一个main函数,将前面的函数进行调用封装

(5)具体性能分析

二、代码规范说明

(1)python3与python2在一些函数方面调用有区别:例如 python3在print函数的调用上是print(s),而python2在print函数的调用上是print“s”。

(2)python语言对空行有严格的限制,不像C语言有很多的大括号。

三、程序运行结果

(1)对文件Gone_with_the_wind的词频统计的结果:

(2)对文件A_Tale_of_Two_Cities的词频统计的结果:

四、性能分析结果及改进

(1)性能分析结果

  1.1.寻找执行时间、次数最多的部分代码分析如下:

  【参考博客:https://blog.csdn.net/asukasmallriver/article/details/74356771】

           总的运行时间是0.95s。截图如下:

    

    ncalls:表示函数调用的次数;
    tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
    percall:(第一个percall)等于 tottime/ncalls;
    cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
    percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
    filename:lineno(function):每个函数调用的具体信息;

  1.2.每个函数具体占用时间截图如下:

      我们看出在这几个函数当中,我们发现process_buffer函数运行的时间最长。

    

  1.3.我们具体看一下process_buffer函数调用了什么

    截图如下:

    

  从分析结果的截图中我们可以看出process_buffer函数在lower上花费了巨大的时间。因此,我们下面将对此函数代码进行改进

    

(2)代码改进

  

  接下来我们看一下总的运行时间是否进行了改变?

    截图如下:

    

  由此我们可以看出比之前运行减少了0.631s。

五、使用可视化分析

(1)graphviz安装和gprof2dot.py下载

  【参考:http://www.graphviz.org/  和  https://pypi.org/project/gprof2dot/#files】

(2)可视化操作

  执行下述步骤:

  1.性能分析:``` python -m cProfile -o result.out -s cumulative word_freq.py Gone_with_the_wind.txt``` ;分析结果保存到 result.out 文件;
  2.转换为图形;gprof2dot 将 result.out 转换为 dot 格式;再由 graphvix 转换为 png 图形格式。 命令:```python gprof2dot.py -f pstats result.out | dot -Tpng -o result.png```

  转换得到图如下:

  

  

 

posted @ 2018-10-08 20:18  陈原1928374655  阅读(185)  评论(0编辑  收藏  举报