龙空技术网

自然语言处理N天-Day0402文本可视化技巧(关系图&热力图)

一点点Citespace 147

前言:

眼前各位老铁们对“python包含关系图”大约比较关切,咱们都想要分析一些“python包含关系图”的相关内容。那么小编也在网上收集了一些关于“python包含关系图””的相关资讯,希望小伙伴们能喜欢,各位老铁们快快来学习一下吧!

说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。

第四课 文本可视化技巧文本可视化流程

文本可视化依赖于自然语言处理,因此词袋模型、命名实体识别、关键词抽取、主题分析、情感分析等是较常用的文本分析技术。

文本分析的过程主要包括特征提取,通过分词、抽取、归一化等操作提取出文本词汇级的内容,利用特征构建向量空间模型并进行降维,以便将其呈现在低维空间,或者利用主题模型处理特征,最终以灵活有效的形式表示这些处理过的数据,以便进行可视化呈现。

1.基于内容的可视化

主要包括的就是词频可视化、词汇分布可视化。

2.基于关系的可视化

帮助人们理解文本内容和发现规律。常用的可视化形式有树状图、节点连接的网络图、力导向图、叠式图和 Word Tree 等。

3.基于多层面的可视化

基于多层面信息的可视化主要研究如何结合信息的多个方面帮助用户从更深层次理解文本数据,发现其内在规律。其中,包含时间信息和地理坐标的文本可视化近年来受到越来越多的关注。

介绍了三种可视化方式

词云、关系图、热力图,教程挺鸡贼的,只放了核心代码,也不说源码在哪里……搞笑吧。我这里仅对词云和关系图的代码进行补全。

关系图

关系图法,是指用连线图来表示事物相互关系的一种方法。最常见的关系图是数据库里的 E-R 图,表示实体、关系、属性三者之间的关系。在文本可视化里面,关系图也经常被用来表示有相互关系、原因与结果和目的与手段等复杂关系,下面我们来看看如何用 Python 实现关系图制作。

在这里使用了NetworkX

classes = df['class'].values.tolist()classrooms = df['classroom'].values.tolist()nodes = list(set(classes + classrooms))weights = [(df.loc[index, 'class'], df.loc[index, 'classroom']) for index in df.index]weights = list(set(weights))# 设置matplotlib正常显示中文plt.rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文plt.rcParams['axes.unicode_minus'] = Falsecolors = ['red', 'green', 'blue', 'yellow']# 有向图DG = nx.DiGraph()# 一次性添加多节点,输入的格式为列表DG.add_nodes_from(nodes)# 添加边,数据格式为列表DG.add_edges_from(weights)# 作图,设置节点名显示,节点大小,节点颜色nx.draw(DG, with_labels=True, node_size=1000, node_color=colors)plt.show()

热力图

地理热力图,是以特殊高亮的形式显示用户的地理位置,借助热力图,可以直观地观察到用户的总体情况和偏好。

其实就是将地理名词转为经纬度再与数据大小结合生成热力图,Citespace中调用的是Google接口,教程中调用的是百度接口。

#经纬度转换def getlnglat(address): url = '' output = 'json' ak = 'sqGDDvCDEZPSz24bt4b0BpKLnMk1dv6d' add = quote(address) #由于本文城市变量为中文,为防止乱码,先用quote进行编码 uri = url + '?' + 'address=' + add + '&output=' + output + '&ak=' + ak req = urlopen(uri) res = req.read().decode() #将其他编码的字符串解码成unicode temp = json.loads(res) #对json数据进行解析 return temp

使用Folium库进行热力图绘制地图

lat = np.array(cities["lat"][0:num]) # 获取维度之维度值lon = np.array(cities["lng"][0:num]) # 获取经度值pop = np.array(cities["count"][0:num], dtype=float) # 获取人口数,转化为numpy浮点型data1 = [[lat[i], lon[i], pop[i]] for i in range(num)] # 将数据制作成[lats,lons,weights]的形式map_osm = folium.Map(location=[35, 110], zoom_start=5) # 绘制Map,开始缩放程度是5倍HeatMap(data1).add_to(map_osm) # 将热力图添加到前面建立的map里file_path = dir + "heatmap.html"map_osm.save(file_path)

有兴趣的可以看看这个链接:

标签: #python包含关系图