美文网首页
用接口数据生成词云与关系图

用接口数据生成词云与关系图

作者: c4a1d989518e | 来源:发表于2017-10-15 13:32 被阅读319次

Python是非常适合用来处理数据的,当我在写我的接口框架的适合,我看着那些测试用例的数据,忽然想换个玩法。

接口数据生成词云

词云看起来好看,也直观,会根据不同词汇出现的比重大小,来在图片中呈现不同的大小。我的数据来自于我自己用yaml编写的yaml文件,里面有许多接口数据的字段。

image.png

有一点值得注意的是,我把所有接口字段拼接为一个list,然后用WordCloud是不能解析成功的。WordCloud解析的是一个完整的字符串,如一篇文章中出现的某个词的出现的频率。

bb=""
    for i in Atest:
        bb=bb+str(i)+" "
    wordcloud=WordCloud().generate(bb)

用上面这种方法可以把list中的接口字段,拼接成个彼此用空格隔开的字符串
绘制生成的词云可以用

plt.imshow(wordcloud,interpolation='bilinear')
    plt.axis("off")
    plt.show()

这样可以直接绘制出图片,显示出来,而我想要保存下图片来

wordcloud.to_file(os.getcwd()+"/myfiles/static/img/word.jpg")

生成接口依赖关系图

生成关系图,是用的graphviz。Graphviz 是基于 DOT 语言的绘图工具,可以绘制有向图、无向图、关系图、目录图、流程图等图形。

image.png
至于graphviz的用法,直接看这篇教程Python 使用 Graphviz 绘制关系图
这里的技术点,也是分两部分,一个是找出所有节点,另一个是找出节点之间的传递数据。
#生成接口关系list表
def cmp_hh(file_chart):
    file_chart=file_chart
    AD=cmp_relation(file_chart)
    #print AD
    list_have=[]
    for i in AD:
        list_a=AD[i][0]
        for a in AD:
            if a!=i:
                list_b=AD[a][1]
                list_c=[k for k in list_a if k in list_b]
                if list_c!=[]:
                    #a to i
                    list_has=[]
                    list_has.append(a)
                    list_has.append(i)
                    list_has.append(list_c)
                    list_have.append(list_has)
    return list_have

我就把所有元素都便利了一遍,通过一个for循环,找出对应关系。其中AD的的元素是啥?

{“接口名称”:[['入参‘],['响应数据'],“接口名称”:[['入参‘],['响应数据']}

最后处理出来后的list_have的数据格式是啥?

[ [”接口名称“,”接口名称“,[”接口传递的数据“] ] ,  [ ”接口名称“,”接口名称“,[”接口传递的数据“] ] ]

这一部分是造数据,接下来就调用下面的生成图像的函数

#用graphviz生成关系表
import graphviz as gv
import functools
graph=functools.partial(gv.Graph,format='svg')
digraph=functools.partial(gv.Digraph,format='svg')
def add_nodes(graph, nodes):
    for n in nodes:
        if isinstance(n, tuple):
           graph.node(n[0], **n[1])
        else:
           graph.node(n)
    return graph

def add_edges(graph, edges):
    for e in edges:
        if isinstance(e[0], tuple):
            graph.edge(*e[0], **e[1])
        else:
            graph.edge(*e)
    return graph


def mkgraph(list_one,list_two):
    root_note=os.getcwd()
    add_edges(
        add_nodes(digraph(),list_one),list_two
        ).render(root_note+'/myfiles/static/img/g4')

这一部分,在graphviz的文档中有示例,改改就行,然后在想办法调用

#list_one为去重,将接口元素去重,list_two是用来表示接口传递关系
    list_one=[]
    for i in a:
        list_one.append(i[0])
        list_one.append(i[1])
    list_one=list(set(list_one))
    list_two=[]
    for b in a:
        bet=""
        for c in b[2]:
            bet=bet+"+"+c

        list_two.append(((b[0],b[1]),{'label':bet}))
    mkgraph(list_one,list_two)
    return render(request,'chart.html')

参考文章:
Python 使用 Graphviz 绘制关系图

相关文章

  • 用接口数据生成词云与关系图

    Python是非常适合用来处理数据的,当我在写我的接口框架的适合,我看着那些测试用例的数据,忽然想换个玩法。 接口...

  • 关于IDEA看源码的一些操作补充

    作者学习阅读源码使用的方式 以及步骤查看类与类的UML关系图生成UML图Uml图类型 查看该接口的所有实现imag...

  • 用Python生成词云

    以下为简单的Python生成词云代码。基于Python3.7,macOS 10.14.2

  • Python jieba分词、词云、文件读取、函数调用、匿名函数

    词云的生成 使用wordcloud 库生成词云 安装wordcloud 调用wordcloud类,生成词云对象 词...

  • UML使用方法

    1、类图、对象图、接口 在类中存在几种关系,是我们必须要掌握的: 一般化关系:表示类与类的继承、接口与接口之间...

  • Python分析《我不是药神》豆瓣评论

    读取 Mongo 中的短评数据,进行中文分词 对分词结果取 Top50 生成词云 生成词云效果 看来网上关于我不是...

  • 博客

    hexo GitHub 搭建博客 词云 数据库 淘宝数据清洗导出表格生成词云 十万数量级 喜马拉雅爬取 搜狗翻译爬...

  • UML建模

    用例图 作用:主要用于描述系统的功能,参与者与用例之间的关系 类图 用于项目的建模-->搭建基本框架正向生成代码逆...

  • NLTK之统计词频,去除停用词,生成词云(一)

    导包 获取网络文本,清除干扰词 获取词频 去除停用词,画词频曲线图 中文分词 生成中文词云 生成英文词云 生成效果图

  • python-词云

    1、写词云的思路:数据采集-分词-生成词云 2、用到的模块:wordcloud。如果没有这个模块,cmd进入pyt...

网友评论

      本文标题:用接口数据生成词云与关系图

      本文链接:https://www.haomeiwen.com/subject/zkdpyxtx.html