歡迎光臨
每天分享高質量文章

10年漫威,到底有多少角色?都什麼關係?

導讀:最近正值復聯4上映,我也發現了一個有趣的網站。主要是關於漫威人物、漫威電影的圖譜。

網站是基於Graph技術開發的。

其實之前我也利用了有關Graph的庫實現了一波人物的關係分析,只不過分析結果比較粗糙而已~

那麼人家能做出這麼酷炫的關係圖,我們自己能不能實現呢?本文就利用網站提供的資料,使用Neo4j(NOSQL圖形資料庫)進行實戰一波。

 

 

作者 / 來源:法納斯特(ID:walker398)

網址:

https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/index.html

(複製到瀏覽器開啟)

 

下麵是網站的概況,大家可以一覽。

那麼人家能做出這麼酷炫的關係圖,我們自己能不能實現呢?

這一期就利用網站提供的資料,使用Neo4j(NOSQL圖形資料庫)進行實戰一波。

01 獲取分析

人物及人物關聯資訊從網站上獲取,具體介面如下。

資料為json格式,分別在「characters」和「relationship」中。

這裡的資訊是分別指託尼·斯達克,關係「0」為朋友斯蒂文·羅傑斯

02 資料獲取

具體程式碼如下。

import json
import requests

essay-headers = {
    'user-agent':'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36'
}

url = 'https://graphics.straitstimes.com/STI/STIMEDIA/Interactives/2018/04/marvel-cinematic-universe-whos-who-interactive/data/marvel-data.json'
response = requests.get(url=url, essay-headers=essay-headers)
result = json.loads(response.text)

num = 0
names = []
item = {0'friend'1'enemy'2'creation'3'family'4'work'5'love'}

for i in result['relationship']:
    subject = result['relationship'][i]['id']
    object = result['relationship'][i]['target_id']

    if subject not in names:
        names.append(subject)
    if object not in names:
        names.append(object)

    relation = int(result['relationship'][i]['relationship'])
    with open('relation_message.csv''a+'as f:
        f.write(subject + ',' + object + ',' + item[relation] + '\n')

for j in names:
    num += 1
    with open('names_message.csv''a+'as f:
        f.write(j + ',' + str(num) + '\n')

for k in result['characters']:
    id = result['characters'][k]['id']
    name = result['characters'][k]['name']
    status = result['characters'][k]['status']
    species = result['characters'][k]['species']
    with open('message.csv''a+'as f:
        f.write(id + ',' + name + ',' + status + ',' + species + '\n')

最後成功獲取資料。

人物名為簡稱,共計182個人物。

1144條人物關係資料,4大型別。

下麵是182個人物的一些詳情資訊。

包含了人物的名字及簡稱,存活狀態,人物屬性。

03 資料視覺化

下麵透過Neo4j對人物關係進行視覺化。

Neo4j的安裝這裡就不細說了,大家可以自行百度。

開啟Neo4j服務後,登陸Neo4j網站,初始化介面如下。

先載入第一個檔案。

具體程式碼如下。

LOAD CSV  WITH HEADERS FROM 'file:///names_message.csv' AS data CREATE (:people{name:data.name, id:data.id});

下麵載入第二個檔案。

具體程式碼如下。

LOAD CSV  WITH HEADERS FROM "file:///relation_message.csv" AS relations
MATCH (entity1:people{name:relations.subject}) , (entity2:people{name:relations.object})
CREATE (entity1)-[:rel{relation: relations.relation}]->(entity2)

點選1144按鈕處,取消限制數,再點選全屏。

(點選可檢視大圖,下同)

 

這裡大致能看出來漫威的人物聚集情況。

第一大反派滅霸(thanos),原來這麼孤立的。

這裡由於人物太多,造成觀察不便,所以對結果進行一些篩選。

比如篩選託尼·斯達克的朋友,執行下麵的程式碼。

match p=(n:people{name:"tonys"})-[:rel{relation:"friend"}]->() return p;

得到下圖結果。

其中「thor」為「雷神」,「stever」為「美隊」,「blackw」為「黑寡婦」,「vision」為「幻視」,「peterp」為「蜘蛛俠」,「bruceb」為「綠巨人」。

下麵再來看一下美隊的女友吧。

佩吉·卡特和她的侄女莎朗·卡特,據說兩人樣貌極為相像。

 

04 總結

本次只是對Neo4j的一些簡單操作,後期或許會去深入瞭解。

此外漫威的這些人物資訊,還可以玩出很多花樣的。

也希望大家能去動手嘗試嘗試,做一枚硬核鐵粉~

    已同步到看一看
    贊(0)

    分享創造快樂