以圖形資料建構Star Wars星戰宇宙中的行星們

Lagallin
·
·
IPFS
·

Star Wars Universe(星際大戰宇宙,以下簡稱星戰宇宙)是一個極為龐大的科幻空間/文本。歷經了近半個世紀的集體創作,光是累積出來的虛構單元,例如人物、星球/星系、城市、語文、種族、科技物...等等,就多到難以勝數,加上發生在這龐大的人、事、物之間、橫跨萬年以上的複雜故事情節,規模可說非常壯觀。

從資訊量與知識架構的角度,除了官方資料之外,網路上熱心整理星戰宇宙素材的網友也是多到不勝枚舉,也有許多提供機器可讀取的格式。因為備課的需求,我便想利用這些資料來建立一個星戰宇宙圖(graph),做為大學課程的教材。

在產、官、學合力追求「大型IP」(Intellectual Property) 創造的當下,星戰宇宙可說是非常值得參考的案例。可惜本地劇本創作方式多從劇情線的建構出發,對於不一定直接寫得進劇本的龐大知識體系內容則較缺乏建構的動力,而閱聽人也往往只從末端的成品(如星戰電影九部曲)來體會,有些可惜。

因為故事素材的種類很多,我對於巨觀的星球與星系結構特別感興趣;然而在虛構空間中,資料來自不同來源的故事素材,可能呈現一種紛亂難以整理的狀態。因此在大致瀏覽過網路上的資料後,針對星戰宇宙中的星球歸納了一個簡單的知識架構:

簡單的行星知識架構圖
下載的.csv檔案一隅

若將每個星球本身的資料(重力、半徑、大氣、地表結構、生物、文化地景...)、加上串接出去的、以及歷世歷代的資料等等,可以把玩的空間非常大,做為虛構知識論的教材實在是潛力無窮。

許多資料來源提及行星時都比較扁平,有些則不夠結構化、或是數量未多到足夠吸睛,然而很幸運地,我找到了一份非常精美的互動式星戰宇宙圖:http://www.swgalaxymap.com/,並且作者將背後兩千多顆行星的資料匯集成一份公開的Google Sheet供人瀏覽,雖然不是API形式,但可以匯出成.csv檔案下載,解決了不少問題。

課程使用Neo4j Desktop做為學習工具,因此.csv檔案下載之後,必須放進對應的Import資料夾中準備匯入圖形資料庫(檔名最好改成不含空白的短檔名較易使用,例如planets.csv):

找出對應的Import資料夾

啟動Graph之後,打開Neo4j Browser,以下列Cypher指令將檔案內容讀進資料庫中:

WITH "file:///planets.csv" AS file
LOAD CSV WITH HEADERS FROM file AS line
MERGE (r:Region{name:line.Region})
CREATE (p:Planet{name:line.Planet, grid:line.Grid})-[i:IS_IN]->(r)
WITH r,p,i,line.Sector AS sector  //第5行
WHERE sector IS NOT NULL
MERGE (s:Sector{name:sector})
MERGE (s)-[:IS_IN]->(r)
CREATE (p)-[:BELONGS_TO]->(s)
DELETE i
RETURN p,s,r;  //第10行

這裡用了一些小技巧來解決資料本身的結構問題。由於Cypher這類查詢語言不適合寫複雜的分支,因此我先假設所有的(:Sector)都不存在,也就是先以(:Planet)-[:IS_IN]->(:Region)來創建所有的行星;接下來再針對sector不為NULL值的情形創建三層式的關係(5~9行)、並去掉之前建立的兩層式關係(第10行)。

在這份資料裡其實有不少行星並沒有標示所屬Sector(因而呈現NULL值),尤其是屬於Core World的星球。為了處理這種情形,除了前面描述的Planet-Sector-Region三層結構之外,我多加了一道Planet-Region兩層的知識結構,以避免出現一堆孤兒行星:

(:Planet)-[:BELONGS_TO]->(:Sector)-[:IS_IN]->(:Region)
(:Planet)-[:IS_IN]->(:Region)

依上述步驟成功地匯入資料後,查詢Core Region所屬的行星,得到的結果如下:

Core World,含152個行星

若查詢Outer Rim則更為壯觀了,多了一層綠色節點則是代表Sectors(Core World沒有這個結構)。著名的行星Tatooine也出現在Outer Rim這張圖上,屬於Arkanis Sector,不過因為有點小,若沒有標示出來應該是很難找到(紅色星星處):

Outer Rim的部份星系圖

資料中Outer Rim涵蓋的Sectors共有169個,每個Sector又有自己的一群星球,若能全部顯示出來還頗為壯觀;然而Neo4j的簡易圖形界面有節點數的限制,因此上面這個結構其實並不是Outer Rim的全貌。

以知識架構的角度而言,目前這個圖形還很簡略,必須再配合第二、第三個以上的資料來源才能更為豐富,但做為探索一個故事宇宙的起點、以及啟發同學們的創作慾望,我想應該有一定的效果。

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

LagallinLagallin Huor-Minyatur, Jedi Consular. Coruscant resident in Old Republic Era. 絕地領事。舊共和國時期科羅森居民。
  • 来自作者

泰利斯上城(Upper City Taris)隨想,在瘟疫蔓延時