说明:本文依据《中文自然语言处理入门实战》完成。目前网上有不少转载的课程,我是从GitChat上购买。
第四课 文本可视化技巧
关系图
关系图法,是指用连线图来表示事物相互关系的一种方法。最常见的关系图是数据库里的 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'] = False
colors = ['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 = 'http://api.map.baidu.com/geocoder/v2/'
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)
有兴趣的可以看看这个链接:https://zhuanlan.zhihu.com/geoman-blog
网友评论