实验七 图分析(Gephi与Python的使用) 小组成员: 一、实验目的 1. 熟悉Python图可视化; 2. 熟悉Gephi的使用; 3. 将Gephi 与Python结合实现可视化。 二、实验要求 1. 学生提前熟悉资料; 2. 由小组成员集体完成实验,成员分块写实验报告,代码后写注释。 三、实验内容及步骤 1. 悲惨世界人物关系图(Python实现) 代码 import networkx as nx #用于创造、操作复杂网络,以及学习复杂网络的结构、动力学及其功能 import pylab from pylab import rcParams #pylab 模块是一款由python提供的可以绘制二维,三维数据的工具模块 #指定此图片的大小,和像素 rcParams['figure.figsize']=12,12 G=nx.read_gml('C:/Users/Administrator/Desktop/悲惨世界/lesmiserables.gml') #读取gml文件,记为G G8=G.copy() #G的内容复制给G8 dn=nx.degree(G8) #得到G8内节点的度 #选出G8内所有节点的度小于8的节点,并删除这些节点 for n in list(G8.nodes()): if dn[n]<=8: G8.remove_node(n) pos=nx.spring_layout(G8) #布局指定节点排列形式 nx.draw(G8,node_size=10,edge_color='b',alpha=0.45,font_size=9,pos=pos) #画图,节点大小10,边的颜色为蓝色,透明度0.45,节点标签字体大小9 labels=nx.draw_networkx_labels(G8,pos=pos) #绘制网络G8的边图 pylab.show() 结果展示 2.科幻作者关系图(Python与Gephi与实现) 代码 import csv nodemap={} #创建一个空的列表 #此函数功能是:找、添加节点,并计数 def addNode(name): if name in nodemap: node=nodemap[name] node[\ #在nodemap中,假如有此节点,此节点计数+1 else: node={\ nodemap[name]=node #如果没有该节点,则记录该节点名称,数量记为1,添加到nodemap return with open(\科幻作者/SciFiWriters.txt\ #打开txt文件,把它作为inputfile文件,r为只读模式 datareader=csv.reader(inputfile,delimiter=\ #从csv文件中读取数据,记录为datareader,分隔符:横向制表符 next(datareader,None) #跳过第一行数据 #过每一行数据,添加起点,和目标点 for row in datareader: addNode(row[0]) addNode(row[1]) with open(\ as nodefile: #打开文件记为nodefile文件,以w的方式,newline=\为不写入空行 formatter=csv.writer(nodefile,delimiter=\ #从csv文件中写入数据,记录为formatter,分隔符:横向制表符 formatter.writerow([\第一行写为 ID Count #把nodemap内所有节点,名称和数量写入formatter内 for name in nodemap: node=nodemap[name] formatter.writerow([node[\ 结果展示 3.红楼梦人物词云图 代码 import jieba.analyse from os import path from scipy.misc import imread import matplotlib as mpl import matplotlib.pyplot as plt from wordcloud import WordCloud, STOPWORDS, ImageColorGenerator mpl.rcParams['font.sans-serif'] = ['FangSong'] #识别中文字体,默认设为仿宋 content = open(\词云图/hongloumeng.txt\ #打开红楼梦的txt文件,以content记录 tags = jieba.analyse.extract_tags(content, topK=100, withWeight=False) #提取content中的关键词,返回K个权重最大的关键词,不返回权重 text =\ #text变量中存入tags的内容 trump_coloring = imread(path.join(\ #生成词云 wc = WordCloud(font_path='simsun.ttc',background_color=\ max_words=300,mask=trump_coloring,max_font_size=40, random_state=42) #设置词云样式,背景色为白色,最大字数为300,字体最大为40 #其中font_path部分为设定中文字体(识别中英文),random_state为42种配色方案 wc.generate(text) #以text生成单词云 image_colors = ImageColorGenerator(trump_coloring) #改变字体颜色,从图像中 plt.imshow(wc) #显示词云图 plt.axis(\ #不显示x轴、y轴下标 plt.show() 结果展示 四、思考 1、关于图的逻辑(存储)表示不是能很好的呈现顶点之间的关系,而通过python读取gml文件,对其文件的内容,进行图的描绘,可以有效的观察到各个顶点之间的关系。 2、python中有许多方法可以对许多东西进行统计,而读取文件,把文件中的数据进行清洗、处理,然后再对其数据进行有规律的保存,也可以对保存的文件进行不同格式之间的转换。拿到数据、提取数据,这是数据可视化中数据的重要的环节。 五、实验总结 1. 收获 学习了networkx库的部分函数,对于用图的方式来表示关系,有了进一步的认识。学习了数据读取,并且处理数据的方式,和写入数据格式等等。 2. 存在的问题 在安装库的时候,出现了很多问题,比如用pip直接安装不了,安装的库,在使用上出现错误等等,怎么去解决这些问题用了很长时间,但更进一步的熟悉了安装的几个方法。 内容 1悲惨世界人物关系图30 成 绩 评 定 2科幻作者关系图30 3红楼梦词云图20 4思考10 5总结10 得分
得分 评语