當前位置:首頁 » 編程語言 » pythonneo4j

pythonneo4j

發布時間: 2024-04-22 10:16:18

『壹』 有哪些輕型的非關系型資料庫

常見的非關系型資料庫有:1、mongodb;2、cassandra;3、redis;4、hbase;5、neo4j。其中mongodb是非常著名的Nosql資料庫,它是一個面向文檔的開源資料庫。
常見的幾種非關系型資料庫:
1、MongoDB
MongoDB是最著名的NoSQL資料庫。它是一個面向文檔的開源資料庫。MongoDB是一個可伸縮和可訪問的資料庫。它在c++中。MongoDB同樣可以用作文件系統。在MongoDB中,JavaScript可以作為查詢語言使用。通過使用sharding MongoDB水平伸縮。它在流行的JavaScript框架中非常有用。
人們真的很享受分片、高級文本搜索、gridFS和map-rece功能。驚人的性能和新特性使這個NoSQL資料庫在我們的列表中名列第一。
特點:提供高性能;自動分片;運行在多個伺服器上;支持主從復制;數據以JSON樣式文檔的形式存儲;索引文檔中的任何欄位;由於數據被放置在碎片中,所以它具有自動負載平衡配置;支持正則表達式搜索;在失敗的情況下易於管理。
優點:易於安裝MongoDB;MongoDB Inc.為客戶提供專業支持;支持臨時查詢;高速資料庫;無模式資料庫;橫向擴展資料庫;性能非常高。
缺點:不支持連接;數據量大;嵌套文檔是有限的;增加不必要的內存使用。
2、Cassandra
Cassandra是Facebook為收件箱搜索開發的。Cassandra是一個用於處理大量結構化數據的分布式數據存儲系統。通常,這些數據分布在許多普通伺服器上。您還可以添加數據存儲容量,使您的服務保持在線,您可以輕松地完成這項任務。由於集群中的所有節點都是相同的,因此不需要處理復雜的配置。
Cassandra是用Java編寫的。Cassandra查詢語言(CQL)是查詢Cassandra資料庫的一種類似sql的語言。因此,Cassandra在最佳開源資料庫中排名第二。Facebook、Twitter、思科(Cisco)、Rackspace、eBay、Twitter、Netflix等一些最大的公司都在使用Cassandra。
特點:線性可伸縮;;保持快速響應時間;支持原子性、一致性、隔離性和耐久性(ACID)等屬性;使用Apache Hadoop支持MapRece;分配數據的最大靈活性;高度可伸縮;點對點架構。
優點:高度可伸縮;無單點故障;Multi-DC復制;與其他基於JVM的應用程序緊密集成;更適合多數據中心部署、冗餘、故障轉移和災難恢復。
缺點:對聚合的有限支持;不可預知的性能;不支持特別查詢。
3、Redis
Redis是一個鍵值存儲。此外,它是最著名的鍵值存儲。Redis支持一些c++、PHP、Ruby、python、Perl、Scala等等。Redis是用C語言編寫的。此外,它是根據BSD授權的。
特點:自動故障轉移;將其資料庫完全保存在內存中;事務;Lua腳本;將數據復制到任意數量的從屬伺服器;鑰匙的壽命有限;LRU驅逐鑰匙;支持發布/訂閱。
優點:支持多種數據類型;很容易安裝;非常快(每秒執行約11萬組,每秒執行約81000次);操作都是原子的;多用途工具(在許多用例中使用)。
缺點:不支持連接;存儲過程所需的Lua知識;數據集必須很好地適應內存。
4、HBase
HBase是一個分布式的、面向列的開源資料庫,該技術來源於 Fay Chang 所撰寫的Google論文「Bigtable:一個結構化數據的分布式存儲系統」。就像Bigtable利用了Google文件系統(File System)所提供的分布式數據存儲一樣,HBase在Hadoop之上提供了類似於Bigtable的能力。
HBase是Apache的Hadoop項目的子項目。HBase不同於一般的關系資料庫,它是一個適合於非結構化數據存儲的資料庫。另一個不同的是HBase基於列的而不是基於行的模式。
5、neo4j
Neo4j被稱為原生圖資料庫,因為它有效地實現了屬性圖模型,一直到存儲層。這意味著數據完全按照白板的方式存儲,資料庫使用指針導航和遍歷圖。Neo4j有資料庫的社區版和企業版。企業版包括Community Edition必須提供的所有功能,以及額外的企業需求,如備份、集群和故障轉移功能。
特點:它支持唯一的約束;Neo4j支持完整的ACID(原子性、一致性、隔離性和持久性)規則;Java API: Cypher API和本機Java API;使用Apache Lucence索引;簡單查詢語言Neo4j CQL;包含用於執行CQL命令的UI: Neo4j Data Browser。
優點:容易檢索其相鄰節點或關系細節,無需連接或索引;易於學習Neo4j CQL查詢語言命令;不需要復雜的連接來檢索數據;非常容易地表示半結構化數據;大型企業實時應用程序的高可用性;簡化的調優。
缺點:不支持分片

『貳』 基於社區發現演算法和圖分析Neo4j解讀《權力的游戲》下篇

其中的分析和可視化是用Gephi做的,Gephi是非常流行的圖分析工具。但作者覺得使用Neo4j來實現更有趣。

節點中心度
節點中心度給出網路中節點的重要性的相對度量。有許多不同的方式來度量中心度,每種方式都代表不同類型的「重要性」。

度中心性(Degree Centrality)
度中心性是最簡單度量,即為某個節點在網路中的聯結數。在《權力的游戲》的圖中,某個角色的度中心性是指該角色接觸的其他角色數。作者使用Cypher計算度中心性:
MATCH (c:Character)-[:INTERACTS]- RETURN c.name AS character, count(*) AS degree ORDER BY degree DESC

character
degree

Tyrion
36

Jon
26

Sansa
26

Robb
25

Jaime
24

Tywin
22

Cersei
20

Arya
19

Joffrey
18

Robert
18

從上面可以發現,在《權力的游戲》網路中提利昂·蘭尼斯特(Tyrion)和最多的角色有接觸。鑒於他的心計,我們覺得這是有道理的。

加權度中心性(Weighted Degree Centrality)
作者存儲一對角色接觸的次數作為 INTERACTS 關系的 weight 屬性。對該角色的 INTERACTS 關系的所有 weight 相加得到加權度中心性。作者使用Cypher計算所有角色的這個度量:
MATCH (c:Character)-[r:INTERACTS]- RETURN c.name AS character, sum(r.weight) AS weightedDegree ORDER BY weightedDegree DESC

character
weightedDegree

Tyrion
551

Jon
442

Sansa
383

Jaime
372

Bran
344

Robb
342

Samwell
282

Arya
269

Joffrey
255

Daenerys
232

介數中心性(Betweenness Centrality)
介數中心性:在網路中,一個節點的介數中心性是指其它兩個節點的所有最短路徑都經過這個節點,則這些所有最短路徑數即為此節點的介數中心性。介數中心性是一種重要的度量,因為它可以鑒別出網路中的「信息中間人」或者網路聚類後的聯結點。

圖6中紅色節點是具有高的介數中心性,網路聚類的聯結點。
為了計算介數中心性,作者使用Neo4j 3.x或者apoc庫。安裝apoc後能用Cypher調用其170+的程序:
MATCH (c:Character) WITH collect(c) AS charactersCALL apoc.algo.betweenness(['INTERACTS'], characters, 'BOTH') YIELD node, scoreSET node.betweenness = scoreRETURN node.name AS name, score ORDER BY score DESC

name
score

Jon
1279.7533534055322

Robert
1165.6025171231624

Tyrion
1101.3849724234349

Daenerys
874.8372110508583

Robb
706.5572832464792

Sansa
705.1985623519137

Stannis
571.5247305125714

Jaime
556.1852522889822

Arya
443.01358430043337

Tywin
364.7212195528086

緊度中心性(Closeness centrality)
緊度中心性是指到網路中所有其他角色的平均距離的倒數。在圖中,具有高緊度中心性的節點在聚類社區之間被高度聯結,但在社區之外不一定是高度聯結的。

圖7 :網路中具有高緊度中心性的節點被其它節點高度聯結
MATCH (c:Character) WITH collect(c) AS charactersCALL apoc.algo.closeness(['INTERACTS'], characters, 'BOTH') YIELD node, scoreRETURN node.name AS name, score ORDER BY score DESC

name
score

Tyrion
0.004830917874396135

Sansa
0.004807692307692308

Robert
0.0047169811320754715

Robb
0.004608294930875576

Arya
0.0045871559633027525

Jaime
0.004524886877828055

Stannis
0.004524886877828055

Jon
0.004524886877828055

Tywin
0.004424778761061947

Eddard
0.004347826086956522

使用python-igraph
Neo4j與其它工具(比如,R和Python數據科學工具)完美結合。我們繼續使用apoc運行 PageRank和社區發現(community detection)演算法。這里接著使用python-igraph計算分析。Python-igraph移植自R的igraph圖形分析庫。 使用 pip install python-igraph 安裝它。

從Neo4j構建一個igraph實例
為了在《權力的游戲》的數據的圖分析中使用igraph,首先需要從Neo4j拉取數據,用Python建立igraph實例。作者使用 Neo4j 的Python驅動庫py2neo。我們能直接傳入Py2neo查詢結果對象到igraph的 TupleList 構造器,創建igraph實例:
from py2neo import Graphfrom igraph import Graph as IGraph graph = Graph query = ''' MATCH (c1:Character)-[r:INTERACTS]->(c2:Character) RETURN c1.name, c2.name, r.weight AS weight '''ig = IGraph.TupleList(graph.run(query), weights=True)

現在有了igraph對象,可以運行igraph實現的各種圖演算法來。

PageRank
作者使用igraph運行的第一個演算法是PageRank。PageRank演算法源自Google的網頁排名。它是一種特徵向量中心性(eigenvector centrality)演算法。
在igraph實例中運行PageRank演算法,然後把結果寫回Neo4j,在角色節點創建一個pagerank屬性存儲igraph計算的值:
pg = ig.pagerank pgvs = for p in zip(ig.vs, pg): print(p) pgvs.append({"name": p[0]["name"], "pg": p[1]}) pgvs write_clusters_query = ''' UNWIND {nodes} AS n MATCH (c:Character) WHERE c.name = n.name SET c.pagerank = n.pg '''graph.run(write_clusters_query, nodes=pgvs)

現在可以在Neo4j的圖中查詢最高PageRank值的節點:
MATCH (n:Character) RETURN n.name AS name, n.pagerank AS pagerank ORDER BY pagerank DESC LIMIT 10

name
pagerank

Tyrion
0.042884981999963316

Jon
0.03582869669163558

Robb
0.03017114665594764

Sansa
0.030009716660108578

Daenerys
0.02881425425830273

Jaime
0.028727587587471206

Tywin
0.02570016262642541

Robert
0.022292016521362864

Cersei
0.022287327589773507

Arya
0.022050209663844467

社區發現(Community detection)

圖8
社區發現演算法用來找出圖中的社區聚類。作者使用igraph實現的隨機遊走演算法( walktrap)來找到在社區中頻繁有接觸的角色社區,在社區之外角色不怎麼接觸。
在igraph中運行隨機遊走的社區發現演算法,然後把社區發現的結果導入Neo4j,其中每個角色所屬的社區用一個整數來表示:
clusters = IGraph.community_walktrap(ig, weights="weight").as_clustering nodes = [{"name": node["name"]} for node in ig.vs]for node in nodes: idx = ig.vs.find(name=node["name"]).index node["community"] = clusters.membership[idx] write_clusters_query = ''' UNWIND {nodes} AS n MATCH (c:Character) WHERE c.name = n.name SET c.community = toInt(n.community) '''graph.run(write_clusters_query, nodes=nodes)

我們能在Neo4j中查詢有多少個社區以及每個社區的成員數:
MATCH (c:Character) WITH c.community AS cluster, collect(c.name) AS members RETURN cluster, members ORDER BY cluster ASC

cluster
members

0
[Aemon, Alliser, Craster, Eddison, Gilly, Janos, Jon, Mance, Rattleshirt, Samwell, Val, Ygritte, Grenn, Karl, Bowen, Dalla, Orell, Qhorin, Styr]

1
[Aerys, Amory, Balon, Brienne, Bronn, Cersei, Gregor, Jaime, Joffrey, Jon Arryn, Kevan, Loras, Lysa, Meryn, Myrcella, Oberyn, Podrick, Renly, Robert, Robert Arryn, Sansa, Shae, Tommen, Tyrion, Tywin, Varys, Walton, Petyr, Elia, Ilyn, Pycelle, Qyburn, Margaery, Olenna, Marillion, Ellaria, Mace, Chataya, Doran]

2
[Arya, Beric, Eddard, Gendry, Sandor, Anguy, Thoros]

3
[Brynden, Catelyn, Edmure, Hoster, Lothar, Rickard, Robb, Roose, Walder, Jeyne, Roslin, Ramsay]

4
[Bran, Hodor, Jojen, Luwin, Meera, Rickon, Nan, Theon]

5
[Belwas, Daario, Daenerys, Irri, Jorah, Missandei, Rhaegar, Viserys, Barristan, Illyrio, Drogo, Aegon, Kraznys, Rakharo, Worm]

6
[Davos, Melisandre, Shireen, Stannis, Cressen, Salladhor]

7
[Lancel]

角色「大合影」
《權力的游戲》的權力圖。節點的大小正比於介數中心性,顏色表示社區(由隨機遊走演算法獲得),邊的厚度正比於兩節點接觸的次數。現在已經計算好這些圖的分析數據,讓我們對其進行可視化,讓數據看起來更有意義。
Neo4j自帶瀏覽器可以對Cypher查詢的結果進行很好的可視化,但如果我們想把可視化好的圖嵌入到其它應用中,可以使用Javascript可視化庫Vis.js。從Neo4j拉取數據,用Vis.js的neovis.js構建可視化圖。Neovis.js提供簡單的API配置,例如:
var config = { container_id: "viz", server_url: "localhost", labels: { "Character": "name" }, label_size: { "Character": "betweenness" }, relationships: { "INTERACTS": }, relationship_thickness: { "INTERACTS": "weight" }, cluster_labels: { "Character": "community" } }; var viz = new NeoVis(config); viz.render;

其中:
節點帶有標簽Character,屬性name;

節點的大小正比於betweenness屬性;

可視化中包括INTERACTS關系;

關系的厚度正比於weight屬性;

節點的顏色是根據網路中社區community屬性決定;

從本地伺服器localhost拉取Neo4j的數據;

在一個id為viz的DOM元素中展示可視化。

『叄』 鑷瀛﹀ぇ鏁版嵁闇瑕佸叿澶囩殑鍩虹鍜岃兘鍔涙湁鍝浜

瀵逛簬鏈変竴瀹氳$畻鏈哄熀紜鐨勪漢鏉ヨ達紝澶ф暟鎹娌℃湁閭d箞闅懼︼紝瀵逛簬娌℃湁鍩虹鐨勪漢鏉ヨ達紝鏈濂借繕鏄鎶ヤ竴涓杈呭肩彮錛屾墠鑳藉︾殑娓呮櫚閫忓交銆

瀛﹀ぇ鏁版嵁闇瑕佸叿澶囦粈涔堢煡璇

璁$畻鏈哄熀鏈鐞嗚虹煡璇

浜嗚В璁$畻鏈虹殑鍩烘湰鍘熺悊錛岃$畻鏈虹殑鍙戝睍鍘嗗彶絳夎$畻鏈虹殑鍩烘湰甯歌瘑鍜岀悊璁恆

鍩烘湰鏁版嵁搴撴搷浣滅煡璇

鑳藉熷疄鐜板父瑙佹暟鎹搴撶殑澧炲姞鏁版嵁銆佸垹闄ゆ暟鎹銆佷慨鏀規暟鎹銆佹煡璇㈡暟鎹鑳藉姏銆傝兘鐔熺粌浣跨敤MySQL銆丱racle錛屾惌寤篗ySQL銆丱racle鐨勫紑鍙戠幆澧冦

鎺屾彙綆楁硶涓庢暟鎹緇撴瀯

鍏峰囦竴瀹氱殑緙栫▼鑳藉姏錛屾湁杈冨ソ閫昏緫鎬濈淮鑳藉姏錛岃兘澶熺啛緇冩帉鎻JAVA錛宑錛孭ython榪欎笁縐嶈璦涓鐨勪換鎰忎竴縐嶏紝鏈濂芥槸Python銆

緇撴瀯鍖栨暟鎹搴撴搷浣滆兘鍔

鑳藉熷圭粨鏋勫寲鏁版嵁搴撹繘琛屽熀鏈鎿嶄綔錛屼簡瑙neo4j絳夋暟鎹搴

鏁版嵁鍒嗘瀽鍙婃暟鎹鍙瑙嗗寲鑳藉姏

鑳藉熷皢鏁版嵁緇樺埗鎴愮敓鍔ㄥ艦璞$殑鍥捐〃錛岃兘鏍規嵁鍥捐〃鍒嗘瀽鍑烘暟鎹鐨勬綔鍦ㄤ環鍊兼垨鑰呮暟鎹鐨勫叡鍚岀偣錛屾葷粨鏁版嵁瑙勫緥銆

澶ф暟鎹鐨勫氨涓氬墠鏅鍙婃柟鍚

榪戝勾鏉ワ紝澶ф暟鎹琛屼笟閫夋墠鐨勬爣鍑嗕篃鍦ㄤ笉鏂鍙樺寲銆傚垵鏈燂紝澶ф暟鎹浜烘墠鐨勯渶奼備富瑕侀泦涓鍦‥TL鐮斿彂銆佺郴緇熸灦鏋勫紑鍙戙佹暟鎹浠撳簱鐮旂┒絳夊嚲紜浠墮嗗煙錛屼互IT銆佽$畻鏈鴻儗鏅鐨勪漢鎵嶅眳澶氥傞殢鐫澶ф暟鎹寰鍚勫瀭鐩撮嗗煙寤朵幾鍙戝睍錛屽圭粺璁″︺佹暟瀛︿笓涓氱殑浜烘墠錛屾暟鎹鍒嗘瀽銆佹暟鎹鎸栨帢銆佷漢宸ユ櫤鑳界瓑鍋忚蔣浠墮嗗煙鐨勯渶奼傚姞澶с

澶ф暟鎹灝變笟鐨勯嗗煙涔熷緢騫匡紝涓昏佹湁鍒濈駭Java宸ョ▼甯堛佷腑綰Java宸ョ▼甯堛佸ぇ鏁版嵁寮鍙戝伐紼嬪笀銆佸ぇ鏁版嵁Spark寮鍙戝伐紼嬪笀銆佷腑綰уぇ鏁版嵁宸ョ▼甯堢瓑銆

『肆』 知識圖譜可以用python構建嗎

知識圖譜可以用python構建嗎?

答案當然是可以的!!!

那麼如何使用python構建

什麼是知識圖譜

從Google搜索,到聊天機器人、金融風控、物聯網場景、智能醫療、自適應教育、推薦系統,無一不跟知識圖譜相關。它在技術領域的熱度也在逐年上升。
互聯網的終極形態是萬物的互聯,而搜索的終極目標是對萬物的直接搜索。傳統搜索引擎依靠網頁之間的超鏈接實現網頁的搜索,而語義搜索是直接對事物進行搜索,如人物、機構、地點等。這些事物可能來自文本、圖片、視頻、音頻、IoT設備等各種信息資源。而知識圖譜和語義技術提供了關於這些事物的分類、屬性和關系的描述,使得搜索引擎可以直接對事物進行索引和搜索。
知識圖譜是由Google公司在2012年提出來的一個新的概念。從學術的角度,我們可以對知識圖譜給一個這樣的定義:「知識圖譜本質上是語義網路(Semantic Network)的知識庫」。但這有點抽象,所以換個角度,從實際應用的角度出發其實可以簡單地把知識圖譜理解成多關系圖(Multi-relational Graph)。
那什麼叫多關系圖呢? 學過數據結構的都應該知道什麼是圖(Graph)。圖是由節點(Vertex)和邊(Edge)來構成,但這些圖通常只包含一種類型的節點和邊。但相反,多關系圖一般包含多種類型的節點和多種類型的邊。
本項目利用pandas將excel中數據抽取,以三元組形式載入到neo4j資料庫中構建相關知識圖譜。

運行環境

基於Neo4j能夠很容易構建知識圖譜,除了用neo4j自帶的cypher,也支持Python包py2neo創建節點和關系從而構建知識圖譜。本項目是基於發票信息,將發票數據中結構化數據抽象成三元組,分別創建節點和關系從而構建成知識圖譜。
具體包依賴可以參考文件requirements.txt

neo4j-driver==1.6.2numpy==1.15.3pandas==0.23.4parso==0.3.1pickleshare==0.7.5pluggy==0.8.0prompt-toolkit==1.0.15py==1.7.0py2neo==3Pygments==2.2.0pytest==3.9.3python-dateutil==2.7.5wcwidth==0.1.7wincertstore==0.2xlrd==1.1.0

將所需依賴安裝到pyton中:pip install -r requirements.txt

Pandas抽取excel數據

python中pandas非常適用於數據分析與處理,可以將excel文件轉換成dataframe格式,這種格式類似於Spark中的Dataframe結構,可以用類sql的形式對數據進行處理。
Excel數據結構如下

通過函數data_extraction和函數relation_extrantion分別抽取構建知識圖譜所需要的節點數據以及聯系數據,構建三元組。
數據提取主要採用pandas將excel數據轉換成dataframe類型
invoice_neo4j.py

建立知識圖譜所需節點和關系數據

DataToNeo4jClass.py

具體代碼請移步到GitHub上下載

詳細內容請到github下載,項目名neo4j-python-pandas-py2neo-v3

更多Python知識,請關註:Python自學網!!

『伍』 圖計算引擎Neo4j和Graphscope有什麼區別

Neo4j是單機系統,主要做圖資料庫。GraphScope是由阿里巴巴達摩院智能計算實驗室研發的圖計算平台,是全球首個一站式超大規模分布式圖計算平台,並且還入選了中 國科學技術協會「科創中 國」平台。Graphscope的代碼在github.com/alibaba/graphscope上開源。SSSP演算法上,GraphScope單機模式下平均要比Neo4j快176.38倍,最快在datagen-9.2_zf數據集上快了292.2倍。

熱點內容
nginx訪問403 發布:2024-05-06 05:56:39 瀏覽:676
android上傳圖片參數 發布:2024-05-06 05:56:04 瀏覽:219
360控制上傳流量 發布:2024-05-06 05:38:11 瀏覽:998
幾代演算法 發布:2024-05-06 05:33:43 瀏覽:352
安卓怎麼查看iculd照片 發布:2024-05-06 05:18:24 瀏覽:90
shell腳本減法 發布:2024-05-06 05:18:22 瀏覽:352
中文解壓縮文件 發布:2024-05-06 05:13:24 瀏覽:196
android簡訊刪除 發布:2024-05-06 04:58:42 瀏覽:260
安卓手機236開發者選項在哪裡 發布:2024-05-06 04:11:13 瀏覽:260
sql過濾條件 發布:2024-05-06 04:05:18 瀏覽:563