




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
数据分析与可视化第七章图结构数据和网络模型7.1有向图和多重图7.2图的聚集系数7.3社会网络分析7.4可平面图的检验7.5有向无环图的检验7.6最大流7.7随机块模型第七章图结构数据和网络模型2《数据分析与可视化》第七章图结构数据和网络模型7.1.1存储图数据7.1.2图形展示7.1有向图和多重图3《数据分析与可视化》第七章图结构数据和网络模型连通图(ConnectedGraph),节点(Node)(也可叫做一个顶点(Vertex)),连通路径为一条边(Edge)。如果只有单向连接,那么它就是有向图(DirectedGraph)7.1有向图和多重图4《数据分析与可视化》第七章图结构数据和网络模型7.1.1存储图数据图数据通常为邻接矩阵,除非它是稀疏的。假设图有V个节点,邻接矩阵是有V行的矩阵。7.1有向图和多重图5《数据分析与可视化》第七章图结构数据和网络模型
ABCDEFA02526---B-085510-C26850--10D---0-11E---9088F---11880
芝加哥波士顿纽约华盛顿迈阿密达拉斯芝加哥01613-1145--波士顿16130338725--纽约-33803832145-华盛顿1145725383017092113迈阿密--2145170902161达拉斯---211321610邻接矩阵1邻接矩阵2importscipy.sparseassparsematrixA=sparse.lil_matrix((6,6))matrixA=sparse.lil_matrix([[0,25,26,0,0,0],[0,0,85,5,10,0],[26,85,0,0,0,10],[0,0,0,0,0,11],[0,0,0,9,0,88],[0,0,0,11,88,0]])print(matrixA)(0,1)25(0,2)26(1,2)85(1,3)5(1,4)10(2,0)26(2,1)85(2,5)10(3,5)11(4,3)9(4,5)88(5,3)11(5,4)887.1有向图和多重图6《数据分析与可视化》第七章图结构数据和网络模型7.1.2图形展示igragh:提供多种格式,如GraphML、GML、LGL和NCOL仅完全支持DL文件格式优点:便捷方式来配置和展示图并将它们以SVG(ScalableVectorGraphics,可缩放图形阵列)格式存储,以便它们可以嵌入HTML文件7.1有向图和多重图7《数据分析与可视化》第七章图结构数据和网络模型使用igraph绘制星形图7.1有向图和多重图8《数据分析与可视化》第七章图结构数据和网络模型fromigraphimport*vertices=["A","B","C","D","E","F","G","H","I","J"]edges=[(0,1),(1,2),(2,3),(3,4),(4,5),(5,6),(6,7),(7,1),(1,8),(8,2),(2,4),(4,9),(9,5),(5,7),(7,0)]graphStyle={'vertex_size':20}g=Graph(vertex_attrs={"label":vertices},edges=edges,directed=True)g.write_svg("simple_star.svg",width=500,height=300,**graphStyle)7.1有向图和多重图9《数据分析与可视化》第七章图结构数据和网络模型使用igraph绘制无向图7.1有向图和多重图10《数据分析与可视化》第七章图结构数据和网络模型fromigraphimportreadg=read("./data/",format="pajek")g.vs["color"]="#3d679d"g.es["color"]="red"graphStyle={'vertex_size':12,'margin':6}#graphStyle["layout"]=g.layout("fr")#optionalg.write_svg("ragusa_graph.svg",width=600,height=600,**graphStyle)7.1有向图和多重图11《数据分析与可视化》第七章图结构数据和网络模型#设置圆形布局graphStyle["layout"]=g.layout("circle")7.1.2图形展示NetworkX:用于网络和图形分析的库找源节点到目的节点的最短路径找度分布以绘制与交汇点相似的节点找图的聚集系数7.1有向图和多重图12《数据分析与可视化》第七章图结构数据和网络模型使用NetworkX配置有向图权重7.1有向图和多重图13《数据分析与可视化》第七章图结构数据和网络模型importmatplotlib.pyplotaspltimportpylabfrompylabimportrcParamsimportnetworkxasnximportnumpyasnp#设置图形显示尺寸为10英寸×10英寸(1英寸=2.54厘米)rcParams['figure.figsize']=10,10G=nx.DiGraph()#添加边和权重G.add_edges_from([('K','I'),('R','T'),('V','T')],weight=3)G.add_edges_from([('T','K'),('T','H'),('I','T'),('T','H')],weight=4)G.add_edges_from([('I','R'),('H','N')],weight=5)G.add_edges_from([('R','N')],weight=6)7.1有向图和多重图14《数据分析与可视化》第七章图结构数据和网络模型#用这些值来决定节点的颜色val_map={'K':1.5,'I':0.9,'R':0.6,'T':0.2}values=[val_map.get(node,1.0)fornodeinG.nodes()]edge_labels=dict([((u,v,),d['weight'])foru,v,dinG.edges(data=True)])#设置边的颜色red_edges=[('R','T'),('T','K')]edge_colors=['green'ifnotedgeinred_edgeselse'red'foredgeinG.edges()]pos=nx.spring_layout(G)nx.draw_networkx_edges(G,pos,width=2.0,alpha=0.65)nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)nx.draw(G,pos,node_color=values,node_size=1500,edge_color=edge_colors,edge_cmap=plt.cm.Reds)pylab.show()7.1有向图和多重图15《数据分析与可视化》第七章图结构数据和网络模型蛋白质相互作用序列空间图7.1有向图和多重图16《数据分析与可视化》第七章图结构数据和网络模型
7.2图的聚集系数17《数据分析与可视化》第七章图结构数据和网络模型
importnetworkxasnxfrompylabimportrcParamsrcParams['figure.figsize']=12,12G=nx.read_gml('./data/lesmiserables.gml')G8=G.copy()dn=nx.degree(G8)forninlist(G8.nodes()):ifdn[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)labels=nx.draw_networkx_labels(G8,pos=pos)18《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数defvaluegetter(*values):iflen(values)==1:item=values[0]defg(obj):returnobj[item]else:defg(obj):returntuple(obj[item]foriteminvalues)returng19《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数defclustering_coefficient(G,vertex):neighbors=G[vertex].keys()iflen(neighbors)==1:return-1.0links=0fornodeinneighbors:foruinneighbors:ifuinG[node]:links+=1ccoeff=2.0*links/(len(neighbors)*(len(neighbors)-1))returnlinks,len(neighbors),ccoeff20《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数defcalculate_centrality(G):degc=nx.degree_centrality(G)nx.set_node_attributes(G,degc,'degree_cent')degc_sorted=sorted(degc.items(),key=valuegetter(1),reverse=True)forkey,valueindegc_sorted[0:10]:print("DegreeCentrality:",key,value)returnG,degcprint("Valjean",clustering_coefficient(G8,"Valjean"))print("Marius",clustering_coefficient(G8,"Marius"))print("Gavroche",clustering_coefficient(G8,"Gavroche"))print("Babet",clustering_coefficient(G8,"Babet"))print("Eponine",clustering_coefficient(G8,"Eponine"))print("Courfeyrac",clustering_coefficient(G8,"Courfeyrac"))print("Comeferre",clustering_coefficient(G8,"Combeferre"))calculate_centrality(G8)21《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数#输出的文本结果Valjean(82,14,0.9010989010989011)Marius(94,14,1.032967032967033)Gavroche(142,17,1.0441176470588236)Babet(60,9,1.6666666666666667)Eponine(36,9,1.0)Courfeyrac(106,12,1.606060606060606)Comeferre(102,11,1.8545454545454545)DegreeCentrality:Gavroche0.708333333333DegreeCentrality:Valjean0.583333333333DegreeCentrality:Enjolras0.583333333333DegreeCentrality:Marius0.583333333333DegreeCentrality:Courfeyrac0.5DegreeCentrality:Bossuet0.5DegreeCentrality:Thenardier0.5DegreeCentrality:Joly0.458333333333DegreeCentrality:Javert0.458333333333DegreeCentrality:Feuilly0.45833333333322《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数#绘制的网格图23《数据分析与可视化》第七章图结构数据和网络模型7.2图的聚集系数《悲惨世界》人物关系图
此时Comeferre恰好具有最大的聚集系数24《数据分析与可视化》第七章图结构数据和网络模型7.3社交网络分析访问流程:身份验证→获取确认链接例:访问Twitter数据使用python-twitter,获取、汇总数据存储在cPickle中25《数据分析与可视化》第七章图结构数据和网络模型7.3社交网络分析importcPickleimportos#使用方法#$设置CONSUMER_KEY,CONSUMER_SECRET,ACCESS_TOKEN_KEYS,ACCESS_TOKEN_SECRET#作为环境变量#$pythonget_data.py#downloadsfriendandfollowerdatato./data#在运行时看到的错误#raiseURLError(err)#urllib2.URLError:<urlopenerror[Errno104]Connectionresetbypeer>DATA_DIR="data"#好友/关注者数据的存储目录#我们要分析的网名列表screen_names=['KirthiRaman','Lebron']26《数据分析与可视化》第七章图结构数据和网络模型7.3社交网络分析defget_filenames(screen_name): """Buildthefriendsandfollowersfilenames""" returnos.path.join(DATA_DIR,"%s.friends.pickle"%(screen_name)),os.path.join(DATA_DIR,"%s.followers.pickle"%(screen_name))if__name__=="__main__": #登录账户
t=twitter.Api(consumer_key='k7atkBNgoGrioMS...',consumer_secret='eBOx1ikHMkFc...', access_token_key='8959...', access_token_secret='O7it0...');printt.VerifyCredentials()
27《数据分析与可视化》第七章图结构数据和网络模型7.3社交网络分析forscreen_nameinscreen_names:fr_filename,fo_filename=get_filenames(screen_name) print"Checkingfor:",fr_filename,fo_filename ifnotos.path.exists(fr_filename): print"Gettingfriendsfor",screen_name fr=t.GetFriends(screen_name=screen_name) cPickle.dump(fr,open(fr_filename,"w"),protocol=2) ifnotos.path.exists(fo_filename): print"Gettingfollowersfor",screen_name fo=t.GetFollowers(screen_name=screen_name) cPickle.dump(fo,open(fo_filename,"w"),protocol=2)
pythonget_data.pypythonsummarise_data.pypythondraw_network.py28《数据分析与可视化》第七章图结构数据和网络模型7.3社交网络分析运行结果如图:图Twitter网络中粉丝信息29《数据分析与可视化》第七章图结构数据和网络模型7.4可平面图的检验定义:可以在没有任何相交的边的平面上绘制的图绘制时必须从一个节点开始,从一条边绘制到另一条边,并在继续绘制时跟踪这些面可平面图示例30《数据分析与可视化》第七章图结构数据和网络模型7.4可平面图的检验
图可平面图示例31《数据分析与可视化》第七章图结构数据和网络模型7.4可平面图的检验importplanarityimportnetworkxasnx#8个节点的完整图,G8G8=plete_graph(8)#G8不是可平面图print(planarity.is_planar(G8))#将显示错误,因为G8不是可平面图K=planarity.kuratowski_subgraph(G8)#将显示边print(K.edges())#将显示图nx.draw(G8)False[(0,4),(0,5),(0,7),(2,4),(2,5),(2,7),(3,5),(3,6),(3,7),(4,6)]32《数据分析与可视化》第七章图结构数据和网络模型7.4可平面图的检验完全图该示例说明下图包含8个节点的完全图不是可平面图33《数据分析与可视化》第七章图结构数据和网络模型7.5有向无环图的检验有向无环图(DirectedAcyclicGraph,DAG)定义:从给定节点A到B的边将指向特定方向(A→B或B→A)并且是无环的,同时,它们不会循环例:字典树34《数据分析与可视化》第七章图结构数据和网络模型7.5有向无环图的检验importmatplotlib.pyplotaspltimportpylabfrompylabimportrcParamsimportnetworkxasnximportnumpyasnp#设置图形显示尺寸为10×10英寸rcParams['figure.figsize']=10,10G=nx.DiGraph()#添加边和权重G.add_edges_from([('K','I'),('R','T'),('V','T')],weight=3)G.add_edges_from([('T','K'),('T','H'),('T','H')],weight=4)#用这些值来决定节点的颜色val_map={'K':1.5,'I':0.9,'R':0.6,'T':0.2}values=[val_map.get(node,1.0)fornodeinG.nodes()]35《数据分析与可视化》第七章图结构数据和网络模型7.5有向无环图的检验edge_labels=dict([((u,v,),d['weight'])foru,v,dinG.edges(data=True)])#设置边颜色red_edges=[('R','T'),('T','K')]edge_colors=['green'ifnotedgeinred_edgeselse'red'foredgeinG.edges()]pos=nx.spring_layout(G)nx.draw_networkx_edges(G,pos,width=2.0,alpha=0.65)nx.draw_networkx_edge_labels(G,pos,edge_labels=edge_labels)nx.draw(G,pos,node_color=values,node_size=1500,edge_color=edge_colors,edge_cmap=plt.cm.Reds)pylab.show()nx.is_directed_acyclic_graph(G)True36《数据分析与可视化》第七章图结构数据和网络模型7.5有向无环图的检验该示例中的有向无环图:有向无环图37《数据分析与可视化》第七章图结构数据和网络模型7.6最大流定义:流向图是从源到目的地的有向图,其容量沿每条边分配边应当有容量,表明该边最多可以支持多少流量。如果该容量不存在,则假定它具有无限容量流向图示例38《数据分析与可视化》第七章图结构数据和网络模型7.6最大流代码示例:importnetworkxasnxG=nx.DiGraph()G.add_edge('p','y',capacity=5.0)G.add_edge('p','s',capacity=4.0)G.add_edge('y','t',capacity=3.0)G.add_edge('s','h',capacity=5.0)G.add_edge('s','o',capacity=4.0)flow_value=nx.maximum_flow_value(G,'p','o')print("Flowvalue",flow_value)nx.draw(G,node_color='#a0cbe2')Flowvalue4.0使用NetworkX包中maximum_flow_value(Graph,from,to)39《数据分析与可视化》第七章图结构数据和网络模型7.6最大流流向图40《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型简单定义:以标量n为特征。这表示组的数量或集群的数量,以及显示节点和其连接的矩阵PyMC包:提供马尔可夫链蒙特卡罗(MarkovChainMonteCarlo,MCMC)和3个概率模型构建块的包StochPy包:可用于随机建模41《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型importpymcasmcfrompylabimportrcParams#设置图形显示尺寸为10英寸×10英寸rcParams['figure.figsize']=12,12z=-1.X=mc.Normal("x",0,1,value=-3.)#可以在这里用未知数来代替1、0.4@mc.potentialdefY(x=X,z=z): returnmc.lognormal_like(z-x,1,0.4,)mcmc=mc.MCMC([X])mcmc.sample(10000,500)mc.Matplot.plot(mcmc)42《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型用很少的代码行显示复杂模型:使用具有正态分布的
PyMC来显示复合图43《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型frompymc.examplesimportdisaster_modelfrompymcimportMCMCfrompylabimporthist,show,rcParamsrcParams['figure.figsize']=10,10M=MCMC(disaster_model)M.sample(iter=65536,burn=8000,thin=16)hist(M.trace('late_mean')[:],color='#b02a2a')show()例:灾难模型(经过MCMC和50000次简单迭代)44《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型利用柱状图显示结果:使用灾难模型利用MCMC的平均值柱状图45《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型importstochpyasstpsmod=stp.SSA()frompylabimportrcParams#设置图形显示尺寸为12英寸×12英寸rcParams['figure.figsize']=12,12smod.Model('模拟平均时间序列图(样本轨道书为2000)')smod.DoStochSim(end=35,mode='时间',trajectories=2000)smod.GetRegularGrid()smod.PlotAverageSpeciesTimeSeries()例:使用随机时间序列轨迹数据进行模拟46《数据分析与可视化》第七章图结构数据和网络模型7.7随机块模型运行结果:模拟随机模型谢谢!ThankYou谢谢!47数据分析与可视化第八章高级可视化8.1文本数据可视化8.2空间数据可视化8.3计算机模拟8.4绘制交互图第八章高级可视化49《数据分析与可视化》第八章高级可视化8.1.1利用TextBlob构造朴素贝叶斯分类器8.1.2利用词云了解电影影评8.1文本数据可视化50《数据分析与可视化》第八章高级可视化8.1.1利用TextBlob构造朴素贝叶斯分类器TextBlob:含用于文本处理的工具,并带有用于自然语言处理(NaturalLanguageProcessing,NLP)任务(例如分类、名词短语提取、词性标记和情感分析)的API可以帮助构造朴素贝叶斯分类器8.1文本数据可视化51《数据分析与可视化》第八章高级可视化$python-mtextblob.download_corpora[nltk_data]Downloadingpackagebrownto[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingcorpora/brown.zip.[nltk_data]Downloadingpackagepunktto[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingtokenizers/punkt.zip.[nltk_data]Downloadingpackagewordnetto[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingcorpora/wordnet.zip.[nltk_data]Downloadingpackageconll2000to[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingcorpora/conll2000.zip.[nltk_data]Downloadingpackagemaxent_treebank_pos_taggerto[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingtaggers/maxent_treebank_pos_tagger.zip.[nltk_data]Downloadingpackagemovie_reviewsto[nltk_data]/Users/administrator/nltk_data...[nltk_data]Unzippingcorpora/movie_reviews.zip.Finished.8.1文本数据可视化52《数据分析与可视化》第八章高级可视化下载语料库TextBlob分类器(1)基本分类器(BaseClassifier)(2)决策树分类器(DecisionTreeClassifier)(3)最大熵分类器(MaxEntClassifier)(4)NLTK分类器(NLTKClassifier)(5)朴素贝叶斯分类器(NaiveBayesClassifier)(6)正向朴素贝叶斯分类器(PositiveNaiveBayesClassifier)8.1文本数据可视化53《数据分析与可视化》第八章高级可视化fromtextblob.classifiersimportNaiveBayesClassifierfromtextblob.blobimportTextBlobfromtextblob.classifiersimportNaiveBayesClassifierfromtextblob.blobimportTextBlobtrain=[('Ilikethisnewtvshow.','pos'),]#训练集中情感类似的句子test=[('Idonotenjoymyjob','neg'),]#测试集中情感类似的句子cl=NaiveBayesClassifier(train)cl.classify("Thenewmoviewasamazing.")#showsifposornegcl.update(test)#分类blob=TextBlob("Thefoodwasgood.Buttheservicewashorrible.""Myfatherwasnotpleased.",classifier=cl)8.1文本数据可视化54《数据分析与可视化》第八章高级可视化例:情感分析(朴素贝叶斯分类器+训练分类系统)print(blob)print(blob.classify())forsentenceinblob.sentences:print(sentence)print(sentence.classify())8.1文本数据可视化55《数据分析与可视化》第八章高级可视化程序运行显示结果如下:posnegThefoodwasgood.posButtheservicewashorrible.negMyfatherwasnotpleased.pos[{"text":"missionimpossiblethreeisawesomebtw","label":"pos"},{"text":"brokebackmountainwasbeautiful","label":"pos"},{"text":"davincicodeisawesomesofar","label":"pos"},{"text":"10thingsihateaboutyou+aknight'stale*brokebackmountain","label":"neg"},{"text":"missionimpossible3isamazing","label":"pos"},{"text":"harrypotter=gorgeous","label":"pos"},{"text":"ilovebrokebackmountaintoo:]","label":"pos"},]8.1文本数据可视化56《数据分析与可视化》第八章高级可视化从文本格式或JSON格式的文件中读取训练数据fromtextblob.classifiersimportNaiveBayesClassifierfromtextblob.blobimportTextBlobfromnltk.corpusimportstopwordsstop=stopwords.words('english')pos_dict={}neg_dict={}withopen('/Users/administrator/json_train.json','r')asfp:cl=NaiveBayesClassifier(fp,format="json")print"DoneTraining"rp=open('/Users/administrator/test_data.txt','r')res_writer=open('/Users/administrator/results.txt','w')8.1文本数据可视化57《数据分析与可视化》第八章高级可视化从文本格式或JSON格式的文件中读取训练数据forlineinrp:linelen=len(line)line=line[0:linelen-1]sentvalue=cl.classify(line)blob=TextBlob(line)sentence=blob.sentences[0]forword,posinsentence.tags:if(wordnotinstop)and(len(word)>3andsentvalue=='pos'): ifpos=='NN'orpos=='V': pos_dict[word.lower()]=word.lower() if(wordnotinstop)and(len(word)>3andsentvalue=='neg'): ifpos=='NN'orpos=='V': neg_dict[word.lower()]=word.lower()res_writer.write(line+"=>sentiment"+sentvalue+"\n")#print(cl.classify(line))print"Lengthsofpositiveandnegativesentiments",len(pos_dict),len(neg_dict)Lengthsofpositiveandnegativesentiments2031288.1文本数据可视化58《数据分析与可视化》第八章高级可视化从文本格式或JSON格式的文件中读取训练数据test=[("missionimpossiblethreeisawesomebtw",'pos'),("brokebackmountainwasbeautiful",'pos'),("thatandthedavincicodeisawesomesofar",'pos'),("10thingsihateaboutyou=",'neg'),("brokebackmountainisaspectacularlybeautifulmovie",'pos'),("missionimpossible3isamazing",'pos'),("theactorwhoplaysharrypotterissobad",'neg'),("harrypotter=gorgeous",'pos'),('Thebeerwasgood.','pos'),('Idonotenjoymyjob','neg'),("Iain'tfeelingverygoodtoday.",'pos'),("Ifeelamazing!",'pos'),('Garyisafriendofmine.','pos'),("Ican'tbelieveI'mdoingthis.",'pos'),("iwenttoseebrokebackmountain,whichisbeautiful(",'pos'),("andilovebrokebackmountaintoo:]",'pos')]print("Accuracy:{0}".format(cl.accuracy(test)))8.1文本数据可视化59《数据分析与可视化》第八章高级可视化添加更多的训练数据,评估分类器的准确性:fromnltk.corpusimportmovie_reviewsreviews=[(list(movie_reviews.words(fileid)),category)forcategoryinmovie_reviews.categories()forfileidinmovie_reviews.fileids(category)]new_train,new_test=reviews[0:100],reviews[101:200]cl.update(new_train)accuracy=cl.accuracy(test+new_test)print("Accuracy:{0}".format(accuracy))#显示4个最有信息量的特征cl.show_informative_features(4)8.1文本数据可视化60《数据分析与可视化》第八章高级可视化添加更多的训练数据,评估分类器的准确性:输出如下:8.1文本数据可视化61《数据分析与可视化》第八章高级可视化绘制样本大小与准确率的关系图8.1.2利用词云了解电影影评词云(WordCloud)
:突出地展示在任何给定文本中出现次数更多的词,也被称为标签云或加权词基于其出现次数,单词的重要性在视觉上映射到其外观的大小8.1文本数据可视化62《数据分析与可视化》第八章高级可视化importrequestsfrombs4importBeautifulSoupimporttimeimportrandomurls=['/subject/35376457/comments?start={}&limit=20&status=P&sort=new_score'.format(str(i))foriinrange(0,200,20)]#通过观察网页翻页的规律,使用for循环得到10个链接,保存到urls列表中print(urls)dic_h={"User-Agent":"Mozilla/5.0(Macintosh;IntelMacOSX10_15_7)AppleWebKit/537.36(KHTML,likeGecko)Chrome/87.0.4280.88Safari/537.36"}comments_list=[]#初始化用于保存短评的列表8.1文本数据可视化63《数据分析与可视化》第八章高级可视化例:电影《爱情神话》影评词云(删除不需要的停用词)forurlinurls:#使用for循环分别获取每个页面的数据,保存到comments_list列表
r=requests.get(url=url,headers=dic_h).textsoup=BeautifulSoup(r,'lxml')ul=soup.find('div',id="comments")lis=ul.find_all('p')list2=[]forliinlis:list2.append(li.find('span').string)#print(list2)comments_list.extend(list2)time.sleep(random.randint(0,3))#暂停0-3秒8.1文本数据可视化64《数据分析与可视化》第八章高级可视化例:电影《爱情神话》影评词云(需删除不需要的停用词)withopen('comments.txt','w',encoding='utf-8')asf:#使用withopen()新建对象f#将列表中的数据循环写入文本文件
foriincomments_list:f.write(i+"\n")#写入数据接下来,利用jieba库对中文进行分词等操作。importjiebaimportwordcloud#读取文本withopen("comments.txt",encoding="utf-8")asf:s=f.read()print(s)ls=jieba.lcut(s)#生成分词列表text=''.join(ls)#连接成字符串8.1文本数据可视化65《数据分析与可视化》第八章高级可视化例:电影《爱情神话》影评词云(需删除不需要的停用词)stopwords=["的","是","了"]#去掉不需要显示的词wc=wordcloud.WordCloud(font_path="msyh.ttc",width=1000,height=700,background_color='white',max_words=100,stopwords=s)#msyh.ttc电脑本地字体wc.generate(text)#加载词云文本wc.to_file("wordcloud.png")#保存词云图片8.1文本数据可视化66《数据分析与可视化》第八章高级可视化例:电影《爱情神话》影评词云(需删除不需要的停用词)8.1文本数据可视化67《数据分析与可视化》第八章高级可视化词云分析结果词云分析Geoplotlib:地理空间数据可视化常用的Python程序包,其中包含大量的地理空间数据常见的可视化工具:dot(点),hist(二维柱状图)、voronoi(维诺图)和delaunay(三角剖分)等8.2空间数据可视化68《数据分析与可视化》第八章高级可视化8.2空间数据可视化69《数据分析与可视化》第八章高级可视化例:以世界地图数据绘制人口情况importpandasaspdimportgeoplotlibasgplfromgeoplotlib.utilsimportDataAccessObjectimportospd_dataset=pd.read_csv('poaching_points_cleaned.csv')gpl.dot(dataset)gpl.hist(dataset,binsize=20)gpl.show()dataset=DataAccessObject(pd_dataset)print(pd_dataset.head())gpl.dot(dataset)gpl.show()#如果没有前面那些操作,则gpl.show()结果为一张世界地图8.2空间数据可视化70《数据分析与可视化》第八章高级可视化例:以世界地图数据绘制人口情况importmatplotlib.pyplotaspltimportpandasaspdimportnumpyasnp'''读取人口信息'''dataset=pd.read_csv(r'world_cities_pop.csv',dtype={'Region':np.str})print(dataset.dtypes)print(dataset.head())(已核对:删除外链)'''输出人口的基本信息'''print('lenofdata:',len(dataset))#print('lenofCity:',len(dataset.groupby(['City'])))#lenofCity值比较大,计算时间比较长print('lenofCountry:',len(dataset.groupby(['Country'])))8.2空间数据可视化71《数据分析与可视化》第八章高级可视化例:以世界地图数据绘制人口情况'''输出每个国家的平均城市数量'''CountryInfo=dataset.groupby(['Country'])print(CountryInfo.size().head(5))print(CountryInfo.size().agg('mean'))print(CountryInfo.size().mean())dataset['lat']=dataset['Latitude']dataset['lon']=dataset['Longitude']gpl.dot(dataset)gpl.show()8.2空间数据可视化72《数据分析与可视化》第八章高级可视化例:以世界地图数据绘制人口情况#有效信息,统计到人口信息的城市/国家才参与后续计算dataset_with_pop=dataset[(dataset['Population']>0)]print('Originaldata:',len(dataset))print('Datawithusefulinformation',len(dataset_with_pop))dataset_100k=dataset_with_pop[(dataset_with_pop['Population']>=100_000)]#注意:数字是这种表达方式print('ThenumberofCitieswithover100,000population:',len(dataset_100k))#人口超过10万的城市个数gpl.dot(dataset_100k)gpl.show()gpl.voronoi(dataset_100k,cmap='hot_r',max_area=1e3,alpha=125)gpl.show()8.2空间数据可视化73《数据分析与可视化》第八章高级可视化部分生成结果
世界上人口数大于10万的城市8.3计算机模拟74《数据分析与可视化》第八章高级可视化8.3.1Python随机相关的程序包8.3.2SciPy中的随机函数8.3.3模拟示例8.3.4信号处理8.3.5动画8.3计算机模拟75《数据分析与可视化》第八章高级可视化计算机模拟(Simulation):试图模拟抽象模型,有助于创建复杂系统,理解和评估隐藏或未知场景模拟的类型:(1)离散模型:在这种情况下,系统的更改仅在特定时间发生。(2)连续模型:在此模型中,系统状态在一段时间内连续变化。(3)混合模型:同时包含离散元素和连续元素。8.3计算机模拟76《数据分析与可视化》第八章高级可视化8.3.1
Python随机相关的程序包random包:(1)生成0.0~1.0或特定开始值和结束值之间的随机实数;(2)生成特定数字范围之间的随机整数;(3)从数字或字母列表中获取随机值。8.3计算机模拟77《数据分析与可视化》第八章高级可视化importrandomprintrandom.random()#生成0-1的随机数printrandom.uniform(2.54,12.2)#生成2.54-12.2的随机数printrandom.randint(5,10)#生成5-10的随机整数(已核对)printrandom.randrange(25)#生成递增基数集合0-25的随机数(已核对)#生成5~500的随机数,步长为5printrandom.randrange(5,500,5)#从列表中抽取3个随机数printrandom.sample([13,15,29,31,43,46,66,89,90,94],3)#从列表中随机抽取random.choice([1,2,3,5,9])使用random生成随机数8.3计算机模拟78《数据分析与可视化》第八章高级可视化8.3.2
SciPy中的随机函数Numpy包:提供了操作大型数字数据数组和矩阵的基本例程Spicy包:通过算法和数学技术扩展了NumPy所含的内容NumPy有一个内置的伪随机数生成器,使用相同的种子数,可以生成相同的随机数集合8.3计算机模拟79《数据分析与可视化》第八章高级可视化importnumpyasnpnp.random.seed(65536)使用相同的种子数,生成相同的随机数集合不指定种子值可以生成不同的随机序列(基于时间)np.random.seed()可以生成区间[0.0,1.0]中的5个随机数的数组,如下所示:importnumpyasnpnp.random.rand(5)#生成如下数组array([0.2611664,0.7176011,0.1489994,0.3872102,0.4273531])rand()函数也可用于生成随机二维数组,如下代码所示:np.random.rand(2,4)array([[0.83239852,0.51848638,0.01260612,0.71026089],[0.20578852,0.02212809,0.68800472,0.57239013]])8.3计算机模拟80《数据分析与可视化》第八章高级可视化生成随机整数,可以使用randint(min,max),其中min和max用于定义数字的范围,必须选定为整数:np.random.randint(4,18)使用以下代码可获得λ=8.0的离散泊松分布的随机数:np.random.poisson(8.0)从均值为μ=1.25且标准差为σ=3.0的连续正态(高斯)分布中抽取随机数:np.random.normal(1.25,3.0)#均值为0,标准差为1np.random.normal()8.3计算机模拟81《数据分析与可视化》第八章高级可视化8.3.3模拟示例示例1:几何布朗运动用随机微分方程(StochasticDifferentialEquation,SDE)对股票价格行为进行建模
8.3计算机模拟82《数据分析与可视化》第八章高级可视化fromnumpy.randomimportstandard_normalfromnumpyimportzeros,sqrtimportmatplotlib.pyplotaspltS_init=20.222T=1tstep=0.0002sigma=0.4mu=1NumSimulation=6colors=[(214,27,31),(148,103,189),(229,109,0),(41,127,214),(227,119,194),(44,160,44),(227,119,194),(72,17,121),(196,156,148)]绘制布朗运动图像8.3计算机模拟83《数据分析与可视化》第八章高级可视化#将RGB数值标准化到[0,1]foriinrange(len(colors)): r,g,b=colors[i] colors[i]=(r/255.,g/255.,b/255.)plt.figure(figsize=(12,12))Steps=round(T/tstep);#按年步进S=zeros([NumSimulation,Steps],dtype=float)x=range(0,int(Steps),1)forjinrange(0,NumSimulation,1):S[j,0]=S_initforiinx[:-1]:S[j,i+1]=S[j,i]+S[j,i]*(mu-0.5*pow(sigma,2))*tstep+sigma*S[j,i]*sqrt(tstep)*standard_normal()plt.plot(x,S[j],linewidth=2.,color=colors[j])plt.title('布朗运动的6次模拟的结果,\n$\sigma$=%.6f$\mu$=%.6f$S_0$=%.6f'%(sigma,mu,S_init),fontsize=18)plt.xlabel('步长',fontsize=16)plt.grid(True)plt.ylabel('股票价格',fontsize=16)plt.ylim(0,90)plt.show()8.3计算机模拟84《数据分析与可视化》第八章高级可视化布朗运动6次模拟结果:8.3计算机模拟85《数据分析与可视化》第八章高级可视化示例2:应用Hodrick–Prescott滤波器来获得属于时间序列数据类的股票价格数据的平滑曲线8.3计算机模拟86《数据分析与可视化》第八章高级可视化frommatplotlibimportfinanceimportmatplotlib.pyplotaspltimportstatsmodels.apiassmtitleStr='FB公司的股票价格(2021年1月 ~2021年12月)'plt.figure(figsize=(11,10))dt1=datetime.datetime(2012,05,01)dt2=datetime.datetime(2014,12,01)sp=finance.quotes_historical_yahoo('FB',dt1,dt2,asobject=None)plt.title(titleStr,fontsize=16)plt.xlabel("日期",fontsize=14)plt.ylabel("股票价格",fontsize=14)xfilter=sm.tsa.filters.hpfilter(sp["Open"],lamb=100000)[1]plt.plot(sp["Open"])plt.plot(xfilter,linewidth=5.)绘制股票价格走势8.3计算机模拟87《数据分析与可视化》第八章高级可视化8.3.4信号处理卷积:两个信号的卷积是一种组合这两种信号以产生具有过滤效果的第三种信号的方法在现实生活中,可应用信号卷积来平滑图像,也可用于计算信号干扰8.3计算机模拟88《数据分析与可视化》第八章高级可视化importmatplotlib.pyplotaspltfromnumpyimportconcatenate,zeros,ones,hamming,convolvedigital=concatenate((zeros(20),ones(25),zeros(20)))norm_hamming=hamming(80)/sum(hamming(80))res=convolve(digital,norm_hamming)plt.figure(figsize=(10,10))plt.ylim(0,0.6)plt.plot(res,color='r',linewidth=2)plt.hold(True)plt.plot(data,color='b',linewidth=3)plt.hold(True)plt.plot(norm_hamming,color='g',linewidth=4)plt.show()例1:展示数字信号的卷积信号,并使用汉明法(hamming())产生模拟信号8.3计算机模拟89《数据分析与可视化》第八章高级可视化数字信号、模拟信号和卷积结果信号运行结果:8.3计算机模拟90《数据分析与可视化》第八章高级可视化importmatplotlib.pyplotaspltfromscipyimportrandnfromnumpyimportfftplt.figure(figsize=(10,10))random_data=randn(500)res=fft.fft(random_data)plt.plot(res,color='b')plt.hold(True)plt.plot(random_data,color='r')plt.show()例2:使用Scipy的randn()函数产生随机信号random_data并应用快速傅里叶变换(FastFourierTransform,FFT)8.3计算机模拟91《数据分析与可视化》第八章高级可视化随机信号与其快速傅里叶变换运行结果:8.3计算机模拟92《数据分析与可视化》第八章高级可视化importscipy.miscasscmfromscipy.misc.pilutilimportImage#打开原始图片orig_image=Image.open('/Users/kvenkatr/Desktop/filter.jpg')#将图片转化为数组image1=scm.fromimage(orig_image)#反转图片数组inv_image=255-image1#使用反转后的数组重新生成图片inverted_image=scm.toimage(inv_image)#保存图片inverted_image.save('/Users/kvenkatr/Desktop/filter_invert.jpg')例3:使用SciPy包创建反转图像(InvertedImage)8.3计算机模拟93《数据分析与可视化》第八章高级可视化运行结果:其他过滤机制的函数使用:convolve():多维卷积correlate():多维相关性gaussian_filter():多维高斯滤波器原始图像和反转图像8.3计算机模拟94《数据分析与可视化》第八章高级可视化8.3.5动画可以使用matplotlib在Python中完成动画制作,结果会保存在MP4格式的文件中,以便后续再播放8.3计算机模拟95《数据分析与可视化》第八章高级可视化#动画的基本设置importnumpyasnpimportmatplo
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 人教版 (新课标)八年级上册第一节 疆域获奖教案及反思
- 安全漏洞修复合规性验证费用重点基础知识点
- 银行新员工一年工作总结汇报
- 高血压急症的个案护理
- 企业保证担保合同
- 集体宿舍租房合同范本
- 二零二五版电商劳动合同书
- 预防近视的知识
- 高薪出国劳务合同范本
- 销售团队管理年终述职
- GB/T 16866-2006铜及铜合金无缝管材外形尺寸及允许偏差
- FZ/T 81010-2018风衣
- DB44-T 2198-2019城乡社区协商工作规范-(高清现行)
- 血液科疾病诊疗规范诊疗指南诊疗常规2022版
- PDCA降低I类切口感染发生率
- 幼儿园《开关门要小心》
- 《运营管理》第2版题库与参考答案
- 基于PLC的自动配料系统毕业设计论文
- 企业事业单位突发环境事件应急预案备案表范本
- 烟花爆竹工程设计安全规范
- 回旋加速器的五个有关问题
评论
0/150
提交评论