{"id":2524,"date":"2024-09-21T23:43:06","date_gmt":"2024-09-21T14:43:06","guid":{"rendered":"https:\/\/secondlife.lol\/?p=2524"},"modified":"2024-09-22T00:07:04","modified_gmt":"2024-09-21T15:07:04","slug":"pachinko-human-relationships-python","status":"publish","type":"post","link":"https:\/\/secondlife.lol\/zh\/pachinko-human-relationships-python\/","title":{"rendered":"Python \u4e2d\u7684\u67cf\u9752\u54e5\u4eba\u7269\u5173\u7cfb\u56fe"},"content":{"rendered":"<p class=\"wp-block-paragraph\">\u5c0f\u8bf4 <strong>\u67cf\u9752\u54e5<\/strong>\u60a8\u53ef\u80fd\u60f3\u4e00\u76ee\u4e86\u7136\u5730\u770b\u5230\u4eba\u7269\u4e4b\u95f4\u7684\u590d\u6742\u5173\u7cfb\u3002\u8de8\u4ee3\u4eba\u7269\u4e4b\u95f4\u7684\u5173\u7cfb\u4f1a\u8ba9\u5c0f\u8bf4\u66f4\u6709\u8da3\uff0c\u4f46\u4e5f\u53ef\u80fd\u5f88\u590d\u6742\uff0c\u96be\u4ee5\u7406\u89e3\u3002 Python \u53ef\u4ee5\u8f7b\u677e\u5730\u5c06\u8fd9\u4e9b\u67cf\u9752\u54e5\u8868\u5173\u7cfb\u53ef\u89c6\u5316\u5e76\u52a0\u4ee5\u7406\u89e3\u3002<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5c06\u4f7f\u7528 <strong>Python \u4e2d\u7684\u67cf\u9752\u54e5\u4eba\u7269\u5173\u7cfb\u56fe<\/strong>\u4e00\u6b65\u4e00\u6b65\u6765\uff0c\u9010\u4e00\u5206\u89e3\u4ee3\u7801\u7684\u5173\u952e\u90e8\u5206\u3002\u5728\u6587\u7ae0\u7684\u6700\u540e\uff0c\u4f60\u4f1a\u53d1\u73b0\u6574\u4e2a\u4ee3\u7801\u90fd\u96c6\u4e2d\u5728\u4e00\u8d77\uff0c\u6240\u4ee5\u8bf7\u52a1\u5fc5\u901a\u8bfb\u5168\u6587\uff01<\/p>\n\n\n<style>.kb-image2524_500151-0d .kb-image-has-overlay:after{opacity:0.3;border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;}.kb-image2524_500151-0d img.kb-img, .kb-image2524_500151-0d .kb-img img{border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}<\/style>\n<div class=\"wp-block-kadence-image kb-image2524_500151-0d\"><figure class=\"aligncenter size-full\"><a href=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc.jpg\" class=\"kb-advanced-image-link\"><img decoding=\"async\" width=\"1200\" height=\"639\" src=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc.jpg\" alt=\"\ud30c\uce5c\ucf54 \uc778\ubb3c \uad00\uacc4\ub3c4 \ud3ec\uc2a4\ud2b8 \uadf8\ub9bc\" class=\"kb-img wp-image-2525\" srcset=\"https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc.jpg 1200w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc-300x160.jpg 300w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc-600x320.jpg 600w, https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c-\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uadf8\ub9bc-768x409.jpg 768w\" sizes=\"(max-width: 1200px) 100vw, 1200px\" \/><\/a><\/figure><\/div>\n\n\n<style>.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{padding-top:var(--global-kb-spacing-sm, 1.5rem);padding-right:var(--global-kb-spacing-sm, 1.5rem);padding-bottom:var(--global-kb-spacing-sm, 1.5rem);padding-left:var(--global-kb-spacing-sm, 1.5rem);border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);border-top-left-radius:5px;border-top-right-radius:5px;border-bottom-right-radius:5px;border-bottom-left-radius:5px;box-shadow:0px 0px 14px 0px rgba(0, 0, 0, 0.2);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title-wrap{color:var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{color:var(--global-palette2, #2B6CB0);font-size:28px;font-weight:regular;font-style:normal;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list{color:var(--global-palette1, #3182CE);line-height:2em;font-weight:regular;font-style:normal;margin-top:var(--global-kb-spacing-sm, 1.5rem);margin-right:0px;margin-bottom:0px;margin-left:0px;}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap .kb-table-of-content-list .kb-table-of-contents__entry:hover{color:var(--global-palette6, #718096);}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}}@media all and (max-width: 1024px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}@media all and (max-width: 767px){.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-content-wrap{border-top:3px solid var(--global-palette2, #2B6CB0);border-right:3px solid var(--global-palette2, #2B6CB0);border-bottom:3px solid var(--global-palette2, #2B6CB0);border-left:3px solid var(--global-palette2, #2B6CB0);}.kb-table-of-content-nav.kb-table-of-content-id83_5f28a6-34 .kb-table-of-contents-title{font-size:28px;}}<\/style>\n\n\n<h2 class=\"wp-block-heading\">\u67cf\u9752\u54e5\u300b\u5c0f\u8bf4\u6982\u8ff0<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5c0f\u8bf4 <em>\u67cf\u9752\u54e5<\/em>\u8fd9\u90e8\u53f2\u8bd7\u822c\u7684\u5c0f\u8bf4\u8bb2\u8ff0\u4e86\u4ece\u65e5\u672c\u6b96\u6c11\u65f6\u671f\u5230 20 \u4e16\u7eaa 80 \u5e74\u4ee3\u97e9\u56fd\u548c\u65e5\u672c\u7684\u4e00\u4e2a\u79fb\u6c11\u5bb6\u5ead\u56db\u4ee3\u4eba\u7684\u6545\u4e8b\u3002\u4e3b\u8981\u4eba\u7269\u4e4b\u95f4\u7684\u590d\u6742\u5173\u7cfb\u4e0e\u90a3\u4e2a\u65f6\u4ee3\u7684\u51b2\u7a81\u4ea4\u7ec7\u5728\u4e00\u8d77\uff0c\u7406\u89e3\u5b83\u4eec\u4e4b\u95f4\u7684\u8054\u7cfb\u5bf9\u4e8e\u6b23\u8d4f\u8fd9\u90e8\u5c0f\u8bf4\u81f3\u5173\u91cd\u8981\u3002 <a href=\"https:\/\/tv.apple.com\/kr\/show\/%E1%84%91%E1%85%A1%E1%84%8E%E1%85%B5%E1%86%AB%E1%84%8F%E1%85%A9---pachinko\/umc.cmc.17vf6g68dy89kk1l1nnb6min4\" target=\"_blank\" rel=\"noopener\">\u82f9\u679c\u539f\u521b\u67cf\u9752\u54e5<\/a>).<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u63cf\u8ff0\u5173\u952e\u4eba\u7269<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u6d2a\u4e49<\/strong>\u7985\u5e08\uff1a\u7985\u5e08\u7684\u7236\u4eb2\uff0c\u4ee3\u8868\u5bb6\u65cf\u7684\u7b2c\u4e00\u4ee3\u3002<\/li>\n\n\n\n<li><strong>\u6768\u8fdb<\/strong>\u5979\u662f Sun-ja \u7684\u6bcd\u4eb2\u548c Hoon-i \u7684\u59bb\u5b50\uff0c\u662f\u4e00\u4f4d\u5c3d\u804c\u5c3d\u8d23\u7684\u6bcd\u4eb2\u3002<\/li>\n\n\n\n<li><strong>\u7985\u5b97<\/strong>\u5c0f\u8bf4\u7684\u4e3b\u4eba\u516c\uff0c\u5728\u56f0\u96be\u9762\u524d\u4e3a\u5bb6\u4eba\u505a\u51fa\u727a\u7272\u3002<\/li>\n\n\n\n<li><strong>Hansu Koh<\/strong>\u4ed6\u662f\u65e5\u672c\u4e00\u4f4d\u6210\u529f\u7684\u5546\u4eba\uff0c\u662f\u7985\u5e08\u7684\u521d\u604b\u60c5\u4eba\uff0c\u4e5f\u662f\u5c0f\u8bf4\u51b2\u7a81\u7684\u4e3b\u8981\u6839\u6e90\u3002<\/li>\n\n\n\n<li><strong>\u5df4\u57fa\u8428\u514b<\/strong>\u4ed6\u662f\u5979\u7684\u4e08\u592b\uff0c\u4e00\u4f4d\u7267\u5e08\uff0c\u4ed6\u4eec\u6b63\u5728\u4e00\u8d77\u5efa\u8bbe\u65b0\u751f\u6d3b\u3002<\/li>\n\n\n\n<li><strong>\u5e3d\u5b50\u6570\u91cf<\/strong>\u4ed6\u662f Sunza \u548c Baek Isaac \u7684\u513f\u5b50\uff0c\u4e5f\u662f\u5176\u5bb6\u65cf\u5728\u65e5\u672c\u7ecf\u8425\u5f39\u73e0\u673a\u4e1a\u52a1\u7684\u7b2c\u4e09\u4ee3\u4f20\u4eba\u3002<\/li>\n\n\n\n<li><strong>\u8bfa\u4e9a<\/strong>\u4ed6\u662f\u5ba3\u5b50\u548c\u9ad8\u6c49\u79c0\u7684\u513f\u5b50\uff0c\u4e00\u76f4\u5728\u4e3a\u81ea\u5df1\u7684\u8eab\u4efd\u800c\u6323\u624e\u3002<\/li>\n\n\n\n<li><strong>\u6240\u7f57\u95e8<\/strong>\u4ed6\u662f\u65cf\u957f\u7684\u513f\u5b50\uff0c\u4ee3\u8868\u7b2c\u56db\u4ee3\uff0c\u5728\u65e5\u672c\u548c\u7f8e\u56fd\u4e4b\u95f4\u8fc7\u7740\u590d\u6742\u7684\u751f\u6d3b\u3002<\/li>\n\n\n\n<li><strong>\u60a6\u5b50<\/strong>\u4e00\u4e2a\u65e5\u672c\u5973\u4eba\uff0c\u5979\u662f\u58a8\u7956\u7684\u60c5\u4eba\uff0c\u6709\u7740\u590d\u6742\u7684\u5bb6\u65cf\u53f2\u3002<\/li>\n\n\n\n<li><strong>\u4e00\u79cd<\/strong>:\u60a6\u5b50\u7684\u5973\u513f\uff0c\u4e0e\u6240\u7f57\u95e8\u6709\u611f\u60c5\u7ea0\u845b\u3002<\/li>\n\n\n\n<li><strong>\u7531\u7f8e<\/strong>:\u6240\u7f57\u95e8\u7684\u60c5\u4eba\uff0c\u4ed6\u4e0e\u6240\u7f57\u95e8\u7684\u5173\u7cfb\u4f7f\u6545\u4e8b\u66f4\u52a0\u590d\u6742\u3002<\/li>\n\n\n\n<li><strong>\u5e86\u7199<\/strong>\u96c5\u5404\u5e03\u7684\u59bb\u5b50\uff0c\u96c5\u5404\u5e03\u7684\u5144\u5f1f\uff0c\u96c5\u5404\u5e03\u5bb6\u65cf\u7684\u53e6\u4e00\u4f4d\u91cd\u8981\u4eba\u7269\u3002<\/li>\n\n\n\n<li><strong>Changsoo Kim<\/strong>Hansoo Goh \u7684\u5fe0\u5b9e\u4e0b\u5c5e\uff0c\u662f\u4ed6\u7684\u4e3b\u8981\u52a9\u624b\u3002<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">\u73b0\u5728\uff0c\u8ba9\u6211\u4eec\u7528 Python \u6765\u76f4\u89c2\u5730\u63cf\u8ff0\u8fd9\u4e9b\u5b57\u7b26\u4e4b\u95f4\u7684\u5173\u7cfb\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Python \u4e2d\u7684\u67cf\u9752\u54e5\u4eba\u7269\u5173\u7cfb\u56fe<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. \u5b89\u88c5\u6240\u9700\u8f6f\u4ef6\u5305\u5e76\u8bbe\u7f6e\u97e9\u6587\u5b57\u4f53<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u9996\u5148\uff0c\u60a8\u9700\u8981\u5b89\u88c5\u5fc5\u8981\u7684\u8f6f\u4ef6\u5305\u5e76\u8bbe\u7f6e\u97e9\u6587\u5b57\u4f53\uff0c\u8fd9\u5c06\u786e\u4fdd\u5173\u7cfb\u56fe\u4e2d\u7684\u97e9\u6587\u5b57\u7b26\u4e0d\u4f1a\u65ad\u5f00\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import networkx as nx\nimport matplotlib.pyplot as plt\nfrom adjustText import adjust_text\nimport matplotlib.font_manager as fm\n\n\u8bbe\u7f6e # \u97e9\u6587\u5b57\u4f53\nfont_path = 'C:\/Windows\/Fonts\/NanumGothic.ttf' # \u9700\u8981\u68c0\u67e5\u5b9e\u9645\u5b57\u4f53\u8def\u5f84\nfontprop = fm.FontProperties(fname=font_path, size=12)\n\nplt.rc('font', family=fontprop.get_name())<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><code>matplotlib<\/code> \u5e93\u7528\u4e8e\u5c06\u56fe\u5f62\u53ef\u89c6\u5316\u3001 <code>\u8c03\u6574\u6587\u672c<\/code>\u662f\u4e00\u4e2a\u9632\u6b62\u6587\u672c\u91cd\u53e0\u7684\u8f6f\u4ef6\u5305\u3002\u5b57\u4f53\u8def\u5f84\u5e94\u8bbe\u7f6e\u4e3a\u5b9e\u9645\u5b89\u88c5\u7684\u5b57\u4f53\u8def\u5f84\uff0c\u672c\u4f8b\u4e2d\u4e3a NanumGothic\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">\u5b9a\u4e49\u4eba\u9645\u5173\u7cfb\u5e76\u8bbe\u7f6e\u8282\u70b9<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u5b9a\u4e49 Pachinko \u4e2d\u4e3b\u8981\u4eba\u7269\u4e4b\u95f4\u7684\u5173\u7cfb\uff0c\u5efa\u7acb\u56fe\u4e2d\u7684\u8282\u70b9\uff08\u4eba\u7269\uff09\u548c\u8fb9\uff08\u5173\u7cfb\u7ebf\uff09\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u521b\u5efa # \u56fe\u5f62\nG = nx.Graph()\n\n\u5b9a\u4e49 # \u5b57\u7b26\u5173\u7cfb\uff08\u8bbe\u7f6e\u5b57\u7b26\u4e4b\u95f4\u7684\u5173\u7cfb\uff09\n\u4eba\u7269 = [\n    (\"Hoon Yi\"\uff0c\"\u7985\u5e08\"\uff0c\"\u7236\u5973\")\u3001\n    (\u6768\u747e\"\uff0c\"\u7985\u5e08\"\uff0c\"\u6bcd\u5973\"\uff09\u3001\n    (\"Baek Isaac\"\uff0c\"Mohasu\"\uff0c\"\u5bcc\u4eba\")\u3001\n    \uff08\"Goh Hansu\"\uff0c\"\u8bfa\u4e9a\"\uff0c\"\u5bcc\u4eba\"\uff09\u3001\n    (\u7985\u5e08\"\u3001\"\u7231\u4eba\"\uff09\u3001\n    (\u7985\u5e08\"\u3001\"\u5e3d\u5b50\"\u3001\"\u5e3d\u5b50\"\uff09\u3001\n    \uff08\"\u5e3d\u5b50\"\uff0c\"\u8bfa\u4e9a\"\uff0c\"\u5144\u5f1f\"\uff09\u3001\n    (\u5e3d\u5b50\"\u3001\"\u6240\u7f57\u95e8\"\u3001\"\u5bcc\u4eba\"\uff09\u3001\n    \uff08\"\u6240\u7f57\u95e8\"\u3001\"\u7531\u7f8e\"\u3001\"\u7231\u4eba\"\uff09\u3001\n    (\u60a6\u5b50\"\u3001\"\u9e20\"\u3001\"\u7231\u4eba\"\uff09\u3001\n    \uff08\"\u60a6\u5b50\"\u3001\"\u82b1\"\u3001\"\u6bcd\u5973\"\uff09\uff0c\n    \uff08\"\u8bfa\u4e9a\"\u3001\"\u79cb\u5b50\"\u3001\"\u7231\u4eba\"\uff09\uff0c\n    \uff08\"\u6240\u7f57\u95e8\"\u3001\"\u4e00\"\u3001\"\u7231\u4eba\"\uff09\uff0c\n    \uff08\"\u767d-\u7ea6\u745f\u592b\"\u3001\"\u4eac\u59ec\"\u3001\"\u60c5\u4fa3\"\uff09\u3001\n    (\u767d\u7ea6\u745f\u592b\"\u3001\"\u767d\u4ee5\u6492\"\u3001\"\u5144\u5f1f\"\uff09\u3001\n    (\u9ad8\u6c49\u6d19\"\u3001\"\u91d1\u660c\u6d19\"\u3001\"\u6731\u949f\"\uff09\u3002\n]\n\n# \u6dfb\u52a0\u5b57\u7b26\u548c\u5173\u7cfb\u884c\nfor characters1, character2, relation in characters\uff1a\n    G.add_edge(character1, character2, relation=relation)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u8be5\u4ee3\u7801\u88ab\u79f0\u4e3a <code>\u7f51\u7edcx<\/code> \u56fe\u4e66\u9986\u5c06\u4eba\u4e0e\u4eba\u4e4b\u95f4\u7684\u5173\u7cfb\u4f5c\u4e3a\u8282\u70b9\u548c\u8fb9\u8fde\u63a5\u8d77\u6765\u3002\u4f8b\u5982 <code>(\u300a\u6d2a\u5d16\u300b\u3001\u300a\u7985\u5e08\u300b\u3001\u300a\u7236\u5973\u300b)<\/code>\u4ee3\u8868\u4e86\u52cb\u548c\u5b59\u5b50\u4e4b\u95f4\u7684\u7236\u5973\u5173\u7cfb\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. \u8bbe\u7f6e\u4e16\u4ee3\u989c\u8272\u548c\u5e03\u5c40<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u73b0\u5728\u5c06\u8fd9\u4e9b\u5b57\u7b26\u5206\u6210\u51e0\u4ee3\uff0c\u5e76\u6839\u636e\u5b83\u4eec\u7684\u8f88\u5206\u7ed9\u5b83\u4eec\u4e0a\u8272\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># \u4e16\u4ee3\u4fe1\u606f\u5b9a\u4e49\ngeneration_dict = {\n    \"Hunyi\"\uff1a\"\u7b2c\u4e00\u4ee3\"\u3001\n    \"Yangjin\"\uff1a\"\u7b2c 1 \u4ee3\"\u3001\n    \u5ba3\u5b50\"\u7b2c\u4e8c\u4ee3\"\n    \"\u767d\u4ee5\u6492\"\"\u7b2c\u4e8c\u4ee3\"\n    \"\u5e3d\u5b50\u7684\u6570\u91cf\"\"\u7b2c\u4e09\u4ee3\"\n    \u8bfa\u4e9a\"\u7b2c\u4e09\u4ee3\"\n    \"\u609f\u996d\"\uff1a\"\u7b2c\u4e8c\u4ee3\"\n    \"\u6240\u7f57\u95e8\"\u7b2c\u56db\u4ee3\n    \"\u7531\u7f8e\"\"\u7b2c\u4e09\u4ee3\n    \u60a6\u5b50\"\u7b2c\u4e09\u4ee3\"\n    \"\u82b1\"\"\u7b2c\u56db\u4ee3\n    \u79cb\u5b50\"\u7b2c\u4e09\u4ee3\n    \"\u767d\u7ea6\u745f\u592b\"\"\u7b2c\u4e8c\u4ee3\"\n    \"\u4eac\u7199\"\"\u7b2c\u4e8c\u4ee3\"\n    \"Changsoo Kim\"\uff1a\"\u5176\u4ed6\"\n}\n\n\u6839\u636e # \u4ee3\u8bbe\u7f6e\u989c\u8272\ncolor_map = {\n    \"\u7b2c\u4e00\u4ee3\"\uff1a\"\u6d45\u84dd\u8272\n    \"\u7b2c\u4e8c\u4ee3\"\u6d45\u7eff\u8272\n    \"\u7b2c\u4e09\u4ee3\"\u6d45\u82b1\u8272\n    \"\u7b2c\u56db\u4ee3\"\u6d45\u7c89\u8272\n    \u5176\u4ed6\u7070\u8272\n}\n\n# \u4e3a\u6bcf\u4e2a\u8282\u70b9\u6307\u5b9a\u7279\u5b9a\u4e16\u4ee3\u7684\u989c\u8272\nnode_colours = [color_map[generation_dict[node]]] \u4e3a Node in G.nodes()for node in G.nodes()]\n\n# \u8bbe\u7f6e\u5e03\u5c40\uff08\u4f7f\u7528 spring_layout \u5747\u8861\u5e03\u5c40\uff09\npos = nx.spring_layout(G)<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u7684\u4ee3\u7801\u662f\u6309\u7167\u6bcf\u4e2a\u4eba\u7684\u4e16\u4ee3\u6765\u7740\u8272\u7684\u3002\u4f8b\u5982\uff0c\u7b2c\u4e00\u4ee3\u4eba\u7684\u989c\u8272\u662f <code>\u6d45\u84dd\u8272<\/code>\u7b2c\u4e8c\u4ee3\u662f <code>\u6d45\u7eff<\/code>\u7b2c\u4e00\u6b21\u3002 <code>\u5f39\u7c27\u5e03\u5c40<\/code>\u6709\u52a9\u4e8e\u786e\u4fdd\u4ee5\u5e73\u8861\u7684\u65b9\u5f0f\u653e\u7f6e\u8282\u70b9\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. \u7ed8\u5236\u56fe\u5f62\u5173\u7cfb\u56fe<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">\u73b0\u5728\uff0c\u6211\u4eec\u5c06\u5b9e\u9645\u7ed8\u5236\u56fe\u5f62\uff0c\u6dfb\u52a0\u8282\u70b9\u548c\u8fb9\uff08\u5173\u7cfb\u7ebf\uff09\u4ee5\u53ca\u5173\u7cfb\u63cf\u8ff0\u3002<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>\u7ed8\u5236 # \u56fe\u5f62\nplt.figure(figsize=(12, 8))\n\n\u7ed8\u5236 # \u8282\u70b9\nnx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)\n\n\u7ed8\u5236 # \u5173\u7cfb\u7ebf\nnx.draw_networkx_edges(G, pos)\n\n\u5728 # \u5173\u7cfb\u7ebf\u4e4b\u4e0a\u6dfb\u52a0\u5173\u7cfb\u63cf\u8ff0\nedge_labels = nx.get_edge_attributes(G, 'relation')\nnx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)\n\n\u5728 # \u8282\u70b9\u4e0a\u663e\u793a\u4eba\u540d\nnx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())\n\n# \u6dfb\u52a0\u6807\u9898\nplt.title(\"Pachinko \u7684\u4e3b\u8981\u4eba\u7269\u5173\u7cfb\u56fe\", size=20, fontweight='bold')\n\n# \u6dfb\u52a0\u56fe\u4f8b\nimport matplotlib.lines as mlines\nlegend_elements = [mlines.Line2D([], [], color=colour, marker='o', linestyle='', markersize=10, label=gen)\n                   for gen, color in color_map.items()] [plt.legend(handles='')\nplt.legend(handles=legend_elements, title=\"Generation\", loc=\"lower center\", bbox_too_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)\n\n\u8f93\u51fa # \u56fe\u5f62\nplt.axis('off')\nplt.tight_layout()\nplt.show()<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">\u4e0a\u9762\u7684\u4ee3\u7801\u4f1a\u5728\u56fe\u8868\u4e2d\u663e\u793a\u6bcf\u4e2a\u4eba\u7684\u4e16\u4ee3\u989c\u8272\u3001\u59d3\u540d\u548c\u5173\u7cfb\u63cf\u8ff0\u3002 <code>draw_networkx_nodes<\/code>, <code>draw_networkx_edges<\/code>, <code>draw_networkx_labels<\/code>\u5206\u522b\u6dfb\u52a0\u8282\u70b9\u3001\u5173\u7cfb\u7ebf\u548c\u4eba\u540d\uff0c\u5e76\u4f7f\u7528 <code>draw_networkx_edge_labels<\/code>\u5728\u5173\u7cfb\u63cf\u8ff0\u4e2d\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">\u5b8c\u6574\u4ee3\u7801<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>import networkx as nx\nimport matplotlib.pyplot as plt\nfrom adjustText import adjust_text\nimport matplotlib.font_manager as fm\n\n\u8bbe\u7f6e # \u97e9\u6587\u5b57\u4f53\nfont_path = 'C:\/Windows\/Fonts\/NanumGothic.ttf' \u5b57\u4f53\u8def\u5f84\nfontprop = fm.FontProperties(fname=font_path, size=12)\n\nplt.rc('font', family=fontprop.get_name())\n\n\u521b\u5efa # \u56fe\u5f62\nG = nx.Graph()\n\n\u5b9a\u4e49 # \u5b57\u7b26\u5173\u7cfb\n\u5b57\u7b26 = [\n    (\"\u5f18\u4e00\"\u3001\"\u7985\u5e08\"\u3001\"\u7236\u5973\")\u3001\n    (\"Yang Jin\"\uff0c\"\u7985\u5e08\"\uff0c\"\u6bcd\u5973\")\uff0c\u3001\n    (\u767d\u4ee5\u6492\"\u3001\"\u5a46\u5a46\"\u3001\"\u7236\u4eb2\"\u3001\"\u6bcd\u4eb2\"\u3001\"\u5973\u513f\"\uff09\u3002\n\n\uc790\"),\n    \uff08\"\u5434\u6c49\u82cf\"\u3001\"\u8bfa\u4e9a\"\u3001\"\u5bcc\u4eba\"\uff09\u3001\n    (\u7985\u5e08\"\u3001\"\u60c5\u4eba\"\uff09\u3001\uff08\"\u7985\u5e08\"\u3001\"\u60c5\u4eba\"\uff09\u3001\n    (\u7985\u5e08\"\u3001\"\u5e3d\u5b50\"\u3001\"\u5e3d\u5b50\"\uff09\u3001\n    \uff08\"\u5e3d\u5b50\"\uff0c\"\u8bfa\u4e9a\"\uff0c\"\u5144\u5f1f\"\uff09\u3001\n    (\u5e3d\u5b50\"\u3001\"\u6240\u7f57\u95e8\"\u3001\"\u5bcc\u4eba\"\uff09\u3001\n    \uff08\"\u6240\u7f57\u95e8\"\u3001\"\u7531\u7f8e\"\u3001\"\u7231\u4eba\"\uff09\u3001\n    (\u60a6\u5b50\"\u3001\"\u9e20\"\u3001\"\u7231\u4eba\"\uff09\u3001\n    \uff08\"\u60a6\u5b50\"\u3001\"\u82b1\"\u3001\"\u6bcd\u5973\"\uff09\uff0c\n    \uff08\"\u8bfa\u4e9a\"\u3001\"\u79cb\u5b50\"\u3001\"\u7231\u4eba\"\uff09\uff0c\n    \uff08\"\u6240\u7f57\u95e8\"\u3001\"\u4e00\"\u3001\"\u7231\u4eba\"\uff09\uff0c\n    \uff08\"\u767d-\u7ea6\u745f\u592b\"\u3001\"\u4eac\u59ec\"\u3001\"\u60c5\u4fa3\"\uff09\u3001\n    (\u767d\u7ea6\u745f\u592b\"\u3001\"\u767d\u4ee5\u6492\"\u3001\"\u5144\u5f1f\"\uff09\u3001\n    (\u9ad8\u6c49\u6d19\"\u3001\"\u91d1\u660c\u6d19\"\u3001\"\u6731\u949f\"\uff09\u3002\n]\n\n# \u6dfb\u52a0\u5b57\u7b26\u548c\u5173\u7cfb\u884c\nfor characters1, character2, relation in characters\uff1a\n    G.add_edge(character1, character2, relation=relation)\n\n\u5b9a\u4e49 # \u751f\u6210\u4fe1\u606f\ngeneration_dict = {\n    \"\u6d2a\u4e49\"\uff1a\"\u7b2c 1 \u4ee3\"\u3001\n    \"Yangjin\"\uff1a\"\u7b2c 1 \u4ee3\"\u3001\n    \u5ba3\u5b50\"\u7b2c\u4e8c\u4ee3\"\n    \"\u767d\u4ee5\u6492\"\"\u7b2c\u4e8c\u4ee3\"\n    \"\u5e3d\u5b50\u7684\u6570\u91cf\"\"\u7b2c\u4e09\u4ee3\"\n    \u8bfa\u4e9a\"\u7b2c\u4e09\u4ee3\"\n    \"\u609f\u996d\"\uff1a\"\u7b2c\u4e8c\u4ee3\"\n    \"\u6240\u7f57\u95e8\"\u7b2c\u56db\u4ee3\n    \"\u7531\u7f8e\"\"\u7b2c\u4e09\u4ee3\n    \u60a6\u5b50\"\u7b2c\u4e09\u4ee3\"\n    \"\u82b1\"\"\u7b2c\u56db\u4ee3\n    \u79cb\u5b50\"\u7b2c\u4e09\u4ee3\n    \"\u767d\u7ea6\u745f\u592b\"\"\u7b2c\u4e8c\u4ee3\"\n    \"\u4eac\u7199\"\"\u7b2c\u4e8c\u4ee3\"\n    \"Changsoo Kim\"\uff1a\"\u5176\u4ed6\"\n}\n\n\u6839\u636e # \u4ee3\u8bbe\u7f6e\u989c\u8272\ncolor_map = {\n    \"\u7b2c\u4e00\u4ee3\"\uff1a\"\u6d45\u84dd\u8272\n    \"\u7b2c\u4e8c\u4ee3\"\u6d45\u7eff\u8272\n    \"\u7b2c\u4e09\u4ee3\"\u6d45\u82b1\u8272\n    \"\u7b2c\u56db\u4ee3\"\u6d45\u7c89\u8272\n    \u5176\u4ed6\u7070\u8272\n}\n\n# \u4e3a\u6bcf\u4e2a\u8282\u70b9\u6307\u5b9a\u7279\u5b9a\u4e16\u4ee3\u7684\u989c\u8272\nnode_colours = [color_map[generation_dict[node]]] \u4e3a Node in G.nodes()for node in G.nodes()]\n\n\u8bbe\u7f6e # \u5e03\u5c40\npos = nx.spring_layout(G)\n\n\u7ed8\u5236 # \u56fe\u5f62\nplt.figure(figsize=(12, 8))\n\n\u7ed8\u5236 # \u8282\u70b9\nnx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)\n\n\u7ed8\u5236 # \u5173\u7cfb\u7ebf\nnx.draw_networkx_edges(G, pos)\n\n\u5728 # \u5173\u7cfb\u7ebf\u4e4b\u4e0a\u6dfb\u52a0\u5173\u7cfb\u63cf\u8ff0\nedge_labels = nx.get_edge_attributes(G, 'relation')\nnx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)\n\n\u5728 # \u8282\u70b9\u4e0a\u663e\u793a\u4eba\u540d\nnx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())\n\n# \u6dfb\u52a0\u6807\u9898\nplt.title(\"Pachinko \u7684\u4e3b\u8981\u4eba\u7269\u5173\u7cfb\u56fe\", size=20, fontweight='bold')\n\n# \u6dfb\u52a0\u56fe\u4f8b\nimport matplotlib.lines as mlines\nlegend_elements = [mlines.Line2D([], [], color=colour, marker='o', linestyle='', markersize=10, label=gen)\n                   for gen, color in color_map.items()] [plt.legend(handles='')\nplt.legend(handles=legend_elements, title=\"Generation\", loc=\"lower center\", bbox_too_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)\n\n\u8f93\u51fa # \u56fe\u5f62\nplt.axis('off')\nplt.tight_layout()\nplt.show()<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">\u603b\u7ed3<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">\u5728\u672c\u6587\u4e2d\uff0c\u6211\u4eec\u5b66\u4e60\u4e86\u5982\u4f55\u4f7f\u7528 Python \u6765\u53ef\u89c6\u5316 Pachinko \u4e2d\u7684\u4eba\u7269\u5173\u7cfb\u3002 \u7528\u56fe\u5f62\u8868\u793a\u590d\u6742\u7684\u4eba\u7269\u5173\u7cfb\u53ef\u4ee5\u66f4\u5bb9\u6613\u5730\u7406\u89e3\u5c0f\u8bf4\u7684\u6d41\u7a0b\u3002\u5229\u7528 Python \u5f3a\u5927\u7684\u6570\u636e\u53ef\u89c6\u5316\u529f\u80fd\uff0c\u60a8\u5c31\u80fd\u5bf9\u590d\u6742\u7684\u53d9\u4e8b\u7ed3\u6784\u4e00\u76ee\u4e86\u7136\u3002 <a href=\"https:\/\/secondlife.lol\/zh\/vs-code-install\/\" data-type=\"post\" data-id=\"372\">\u5b89\u88c5 VS CODE - Windows<\/a> \u8fd9\u7bc7\u6587\u7ae0\u4f1a\u5e2e\u4f60\u4e0a\u8def\uff0c\u52a0\u6cb9\u5427\uff01<\/p>","protected":false},"excerpt":{"rendered":"<p>\u9605\u8bfb\u5c0f\u8bf4\u300aPachinko\u300b\u65f6\uff0c\u6211\u4eec\u5f88\u5bb9\u6613\u88ab\u4e66\u4e2d\u4eba\u7269\u4e4b\u95f4\u590d\u6742\u7684\u5173\u7cfb\u6240\u5438\u5f15...<\/p>","protected":false},"author":3,"featured_media":2532,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kad_blocks_custom_css":"","_kad_blocks_head_custom_js":"","_kad_blocks_body_custom_js":"","_kad_blocks_footer_custom_js":"","_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[3],"tags":[241,240,164,238,33,239],"class_list":["post-2524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-python-coding","tag-data-science","tag-240","tag-164","tag-238","tag-33","tag-239"],"taxonomy_info":{"category":[{"value":3,"label":"\ud30c\uc774\uc36c(Python)"}],"post_tag":[{"value":241,"label":"Data Science"},{"value":240,"label":"\ub124\ud2b8\uc6cc\ud06c \uadf8\ub798\ud504"},{"value":164,"label":"\ub370\uc774\ud130 \uc2dc\uac01\ud654"},{"value":238,"label":"\uc778\ubb3c \uad00\uacc4\ub3c4"},{"value":33,"label":"\ud30c\uc774\uc36c"},{"value":239,"label":"\ud30c\uce5c\ucf54"}]},"featured_image_src_large":["https:\/\/secondlife.lol\/wp-content\/uploads\/2024\/09\/\ud30c\uce5c\ucf54-\uc778\ubb3c\uad00\uacc4\ub3c4-\ud3ec\uc2a4\ud2b8-\uc378\ub124\uc77c-1-600x600.webp",600,600,true],"author_info":{"display_name":"TERE","author_link":"https:\/\/secondlife.lol\/zh\/author\/tere\/"},"comment_info":0,"category_info":[{"term_id":3,"name":"\ud30c\uc774\uc36c(Python)","slug":"python-coding","term_group":0,"term_taxonomy_id":3,"taxonomy":"category","description":"","parent":20,"count":119,"filter":"raw","cat_ID":3,"category_count":119,"category_description":"","cat_name":"\ud30c\uc774\uc36c(Python)","category_nicename":"python-coding","category_parent":20}],"tag_info":[{"term_id":241,"name":"Data Science","slug":"data-science","term_group":0,"term_taxonomy_id":241,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":240,"name":"\ub124\ud2b8\uc6cc\ud06c \uadf8\ub798\ud504","slug":"%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-%ea%b7%b8%eb%9e%98%ed%94%84","term_group":0,"term_taxonomy_id":240,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":164,"name":"\ub370\uc774\ud130 \uc2dc\uac01\ud654","slug":"%eb%8d%b0%ec%9d%b4%ed%84%b0-%ec%8b%9c%ea%b0%81%ed%99%94","term_group":0,"term_taxonomy_id":164,"taxonomy":"post_tag","description":"","parent":0,"count":52,"filter":"raw"},{"term_id":238,"name":"\uc778\ubb3c \uad00\uacc4\ub3c4","slug":"%ec%9d%b8%eb%ac%bc-%ea%b4%80%ea%b3%84%eb%8f%84","term_group":0,"term_taxonomy_id":238,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"},{"term_id":33,"name":"\ud30c\uc774\uc36c","slug":"%ed%8c%8c%ec%9d%b4%ec%8d%ac","term_group":0,"term_taxonomy_id":33,"taxonomy":"post_tag","description":"","parent":0,"count":30,"filter":"raw"},{"term_id":239,"name":"\ud30c\uce5c\ucf54","slug":"%ed%8c%8c%ec%b9%9c%ec%bd%94","term_group":0,"term_taxonomy_id":239,"taxonomy":"post_tag","description":"","parent":0,"count":1,"filter":"raw"}],"_links":{"self":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/2524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/comments?post=2524"}],"version-history":[{"count":4,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/2524\/revisions"}],"predecessor-version":[{"id":2533,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/posts\/2524\/revisions\/2533"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/media\/2532"}],"wp:attachment":[{"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/media?parent=2524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/categories?post=2524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/secondlife.lol\/zh\/wp-json\/wp\/v2\/tags?post=2524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}