只需 20 行程式碼,就能讀懂復仇者聯盟的人物關係!| 技術頭條
作者 | beyondma,CSDN 部落格專家
筆者雖不算是漫威迷,不過剛剛在看完了復仇者聯盟4以後還是感覺非常非常震撼的,具體情節就不劇透了,可以負責的給出五星推薦指數。現在就讓我懷著激動的心情,用R語言寫觀後感吧。
復聯4中人物的基本關係
那麼首先我們還是先來分析漫威宇宙中的人物關係,維基百科去下載相關人物關係,也可以用我直接整理好的檔案:
-
地址:https://pan.baidu.com/s/1uEbGDKNxgLTdvQVVktEiFw
-
提取碼:rqb3
將其中的net.1.csv和characters1.csv')讀出來,就可以用visNetwork去建立人物關係圖了,程式碼如下:
edges =read.csv('f:/avengers/net1.csv') nodes=read.csv('f:/avengers/characters1.csv') visNetwork(nodes, edges, width = "100%")
visNetwork是一款非常優秀的關係圖渲染外掛,在之前的部落格中已經有所介紹了,詳見https://blog.csdn.net/BEYONDMA/article/details/89431724,這裡不加贅述了。我們可以看到,滅霸、鋼鐵俠、雷神均是各自陣營的核心節點,具體效果如下:讀者大可以按照上面的程式碼自己試一下。
復聯4中人物的深入分析
想要深入分析人物的性格與關係,還是需要有大量的影評及語料資料做為基礎的,這裡我們還是選取豆瓣上的影評資料,由於很多評論都涉及相關劇情了,為避免劇透,具體的爬蟲過程就省略了,抓取到影評的文字資料後,我先做了個詞雲。具體過程詳見部落格文章:https://blog.csdn.net/BEYONDMA/article/details/85400923,可以看到“最後、最終、最好”成為了關鍵詞,從這個角度也可以看出,這次的復聯4的確是漫威的巔峰之作。
想了解一個人物,看他和身邊的朋友就能瞭解個大概,而文字分析中的wordtovector就是這樣一種演算法,用一個長度固定window來用觀察一個詞經常和哪些其它詞同時出現,來將詞轉為向量,詳見部落格文章https://blog.csdn.net/BEYONDMA/article/details/88074516的第四部分。那麼這時候我們就可以將剛剛抓取到的影評文字,訓練為詞向量模型。
> model<-word2vec(layer1_size=200,train_file='f:/avengers/豆瓣1.txt',save_vocab_file='f:/avengers/beyondma.txt',binary=1,cbow=0,alpha=0,output_file='f:/avengers/beyondma.bin',window=5,sample=0.0001,min_count=6,num_threads=2) Starting training using file f:/avengers/豆瓣1.txt Vocab size: 512 Words in train file: 8417
當然讀者也可以用我之前分享的beyondma.bin檔案,就可以直接使用distance函式,那麼就可以知道,比如“蜘蛛俠”這個詞和哪些詞的距離最近。其結果如下。
> dist<-distance(file_name='f:/avengers/beyondma.bin',search_word='蜘蛛俠',num=10) Entered word or sentence: 蜘蛛俠 Word: 蜘蛛俠Position in vocabulary: 45 > dist worddist 1奧創 0.194927796721458 2霍華德 0.188055962324142 3鋼鐵俠 0.169346332550049 4英雄 0.160935759544373 5他們 0.156465873122215
為避免劇透,本文其實刪除了很多關鍵的資料展示,不過如果讀者還沒看過復聯4,那麼在觀影前看看本文,就算補習一下相關背景吧。
本文已獲CSDN 部落格專家 beyondma 授權,如需轉載,請聯絡作者。
原文: https://blog.csdn.net/BEYONDMA/article/details/89553279
【End】
作為碼一代,想教碼二代卻無從下手:
聽說少兒程式設計很火,可它有哪些好處呢?
孩子多大開始學習比較好呢?又該如何學習呢?
最新的程式設計教育政策又有哪些呢?
下面給大家介紹CSDN新成員: 極客寶寶(ID: geek_baby)
戳他了解更多↓↓↓
熱 文推 薦
☞ 19 歲當老闆,20 歲 ICO 失敗,程式設計少年的創業辛酸史
☞ 開啟阿茲海默之門:華裔張復倫利用RNN成功解碼腦電波,合成語音 | Nature
☞ 澳洲生活7年, 前阿里程式設計師談我們的區塊鏈差距究竟在哪?
System.out.println("點個在看吧!"); console.log("點個在看吧!"); print("點個在看吧!"); printf("點個在看吧!\n"); cout << "點個在看吧!" << endl; Console.WriteLine("點個在看吧!"); Response.Write("點個在看吧!"); alert("點個在看吧!") echo "點個在看吧!
點選閱讀原文,輸入關鍵詞,即可搜尋您想要的 CSDN 文章。
你點的每個“在看”,我都認真當成了喜歡