<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          送書 | 用 Neo4j 理一理王者榮耀英雄之間千絲萬縷的關(guān)系,挺好玩!

          共 3295字,需瀏覽 7分鐘

           ·

          2021-10-28 23:24

          本次送書之前先給大家介紹我的好友周蘿卜,他是一個(gè)非常有趣的人,經(jīng)常使用python做一些騷操作!今天這篇文章就是他給大家?guī)淼姆窒?。下面是他的公眾?hào),大家感興趣的可以關(guān)注一下他哦!

          正文開啟

          當(dāng)我們進(jìn)入王者榮耀游戲客戶端,是可以在英雄關(guān)系頁(yè)面看到不同英雄之間的關(guān)聯(lián)信息的,比如花木蘭和蘭陵王之間的宿命,安其拉和亞瑟的單戀以及露娜與鎧那命運(yùn)弄人的兄妹之情等等

          要厘清這些英雄之間的關(guān)系,還是比較困難的,尤其是還有很多中心英雄,與其有關(guān)系的英雄多大數(shù)十個(gè)。今天我們就通過 neo4j 數(shù)據(jù)庫(kù)來處理這些錯(cuò)綜復(fù)雜的關(guān)系,看看一直伴隨我們每個(gè)王者峽谷的英雄都有著怎樣的“朋友圈”呢

          數(shù)據(jù)獲取

          找了很久,還是在網(wǎng)上找到了一個(gè)比較全面的英雄關(guān)系數(shù)據(jù)

          https://www.haosix.com/gonglue/411


          d3904e2717ec7586dfd1010775c78d31.webp

          網(wǎng)頁(yè)很簡(jiǎn)單,直接上 requests 爬取即可

          import?requests
          from?bs4?import?BeautifulSoup
          import?pandas?as?pd
          import?os
          import?csv


          res?=?requests.get("https://www.haosix.com/gonglue/411")

          然后我們通過 beautifulsoup 來解析網(wǎng)頁(yè)

          soup?=?BeautifulSoup(res.text)
          div?=?soup.find('div',?class_="bbcode-body?bbcode-body-v2?markdown-body")
          p_list?=?div.find_all("p")[2:-1]

          現(xiàn)在列表 p_list 當(dāng)中就是我們需要的數(shù)據(jù)了

          接下來我們編寫一個(gè)處理數(shù)據(jù)的函數(shù),把網(wǎng)頁(yè)上的數(shù)據(jù)轉(zhuǎn)換成我們需要的形式

          def?deal_str(data):
          ????rel_dict?=?{}
          ????name?=?data.split(":")
          ????name1?=?name[0]
          ????name_rel?=?name[1].split("、")
          ????if?r"("?in?name_rel[0]:
          ????????for?i?in?name_rel:
          ????????????tmp?=?i.split("(")
          ????????????rel_dict[tmp[0]]?=?tmp[1].split(")")[0]
          ????????return?[name1,?rel_dict]
          ????return?[name1,?"無"]

          我們來看下函數(shù)效果

          deal_str('裴擒虎:楊玉環(huán)(女神與同伴)、公孫離(收留之人與同伴)、弈星(互補(bǔ)的同伴)、明世隱(下屬與首領(lǐng))、蘇烈(下屬與曾經(jīng)上司)')


          69344d22083732cc7bf446c212323f6c.webp

          得到了英雄名稱以及和他有關(guān)系的英雄關(guān)系信息

          再下來就是保存到 csv 文件

          def?save_data_name(data_name,?list_info):
          ????if?not?os.path.exists(data_name?+?r'.csv'):
          ????????#?表頭
          ????????name?=?["name","id"]
          ????????#?建立DataFrame對(duì)象
          ????????file_test?=?pd.DataFrame(columns=name,?data=list_info)
          ????????#?數(shù)據(jù)寫入
          ????????file_test.to_csv(data_name?+?r'.csv',?encoding='utf-8',?index=False)
          ????else:
          ????????with?open(data_name?+?r'.csv',?'a+',?newline='',?encoding='utf-8')?as?file_test:
          ????????????#?追加到文件后面
          ????????????writer?=?csv.writer(file_test)
          ????????????#?寫入文件
          ????????????writer.writerows(list_info)

          一切準(zhǔn)備工作完畢之后,就可以整合代碼了

          content?=?{}
          index?=?0
          for?p?in?p_list:
          ????content?=?deal_str(p.text)
          ????save_data_name("name",?[[content[0],?index]])
          ????if?type(content[1])?==?dict:
          ????????for?k,v?in?content[1].items():
          ????????????print([content[0],?k,?v])
          ????????????save_data_relation("relation",?[[content[0],?k,?v]])
          ????index?+=?1

          處理過程如下

          21f9846e89625c6a00d738927d7c377e.webp

          這要我們就得到了兩個(gè) csv 文件,一個(gè)保存了英雄名稱,另一個(gè)保存了英雄關(guān)系信息

          247eabe03d7c61f4c088d889bf33bd3a.webp


          c3d5cd916aea9ebb57a380bc6d45ce0a.webp


          Neo4j 使用簡(jiǎn)介

          Neo4j 是目前最為流行的圖數(shù)據(jù)庫(kù),用于存儲(chǔ)豐富的關(guān)系數(shù)據(jù)。圖是由頂點(diǎn)(Vertex),邊(Edge)和屬性(Property)組成的,頂點(diǎn)和邊都可以設(shè)置屬性,頂點(diǎn)也稱作節(jié)點(diǎn),邊也稱作關(guān)系,每個(gè)節(jié)點(diǎn)和關(guān)系都可以由一個(gè)或多個(gè)屬性

          對(duì)于 Neo4j 的安裝就不再贅述了,想我這里就是在自己本地的 Windows 上安裝了一個(gè),還是比較簡(jiǎn)單的

          安裝完成之后,我們一般可以在本地開發(fā) Neo4j 控制瀏覽器

          http://localhost:7474/browser/


          cd573c7cb85bf49f2f98b88e5f9538bf.webp

          然后我們把前面生成的兩個(gè)文件放到 Neo4j 安裝目錄的 import 文件夾下(安全考慮,Neo4j 默認(rèn)只能從該目錄下導(dǎo)入文件)

          a1d650550a7a8744b71f21203048653a.webp

          接下來我們?cè)?Neo4j 命令行中編寫 Cypher 命令,先導(dǎo)入 csv 文件
          英雄名稱文件:

          LOAD?CSV?WITH?HEADERS?FROM?"file:///name.csv"?AS?line?MERGE?(p:person{name:line.name,id:line.id})


          074fc99ef46df7e0049900561adefda5.webp

          英雄關(guān)系文件:

          LOAD?CSV?WITH?HEADERS?FROM?"file:///relation.csv"?AS?relations?MATCH?(entity1:person{name:relations.name1}),?(entity2:?person{name:relations.name2})?CREATE?(entity1)-[:rel{relation:relations.relation}]->(entity2)


          b55f7cc9a7f26565e52dc85b13b07384.webp

          如果一切不出意外,我們就已經(jīng)完成了數(shù)據(jù)導(dǎo)入,下面就可以查看關(guān)系了

          MATCH?p=()-->()?return?p;


          fd5a4be9cdbe0c29c6ddc14dcf545c92.webp

          我們先來看一張整體圖

          bf99580da2379371ff0242fc05587c45.webp

          不是特別清晰,我們來看看局部

          00e8380582a2bcd425f03c3d37176084.webp


          7f5c13cf525984fce51aa73277de22d5.webp


          9f7695bcaaacfa691d170f5b024eb905.webp


          好了,今天的分享就到這里,我們下次見,不要忘記一鍵三連哦!


          送書時(shí)間


          本次送書是《對(duì)比Excel,輕松學(xué)習(xí)Python報(bào)表自動(dòng)化》,這本書的主題就是數(shù)據(jù)分析師角度的報(bào)表自動(dòng)化。

          全書主要分為?4?個(gè)部分:

          • 第 1 部分介紹 Python 基礎(chǔ)知識(shí),讓讀者對(duì) Python 中常用的操作和概念有所了解;

          • 第 2 部分介紹格式相關(guān)的設(shè)置方法,包括字體設(shè)置、條件格式設(shè)置等內(nèi)容;

          • 第 3 部分介紹各種類型的函數(shù);

          • 第 4 部分介紹自動(dòng)化相關(guān)的其他技能,比如自動(dòng)發(fā)送郵件、自動(dòng)打包等操作。

          真正做過數(shù)據(jù)分析師的人應(yīng)該知道,一份報(bào)表大體其實(shí)就部分:數(shù)據(jù)處理+格式設(shè)置。

          數(shù)據(jù)處理就是對(duì)數(shù)據(jù)進(jìn)行缺失值、重復(fù)值、異常值、還有加減乘除等處理。

          格式設(shè)置主要就是字體設(shè)置、單元格設(shè)置、條件格式這些。

          關(guān)于數(shù)據(jù)處理,第一本書《對(duì)比Excel,輕松學(xué)習(xí)Python數(shù)據(jù)分析》講得差不多了,《對(duì)比Excel,輕松學(xué)習(xí)Python報(bào)表自動(dòng)化》一書更多講述格式設(shè)置和函數(shù)運(yùn)算等內(nèi)容。



          公眾號(hào)回復(fù):送書?,參與抽獎(jiǎng)(共3本)

          點(diǎn)擊下方回復(fù):送書? 即可!



          大家如果有什么建議,歡迎掃一掃二維碼私聊小編~回復(fù):加群?可加入Python技術(shù)交流群


          瀏覽 71
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  国产三级国产精品 | 色婷婷五月综合 | 日韩一级性爱 | 国产综合内射日韩久 | 熟女作爱一区二区视频 |