パイソンで描くパチンカスの人物関係図

小説 ぱちんこを読んでいると、登場人物の複雑な関係を一目で見たくなることがあります。様々な世代に渡る登場人物の関係は小説をより面白くしますが、それだけ複雑で理解しにくいこともあります。 しかし、Pythonを活用すれば、このようなパチンコの人物関係図を視覚的に表現して簡単に理解することができます。

この記事では Pythonでパチンカスの人物関係図を描く方法を段階的に説明し、主要なコードを一つずつ詳しく説明します。記事の最後でコード全体を一度に確認することができるので、最後まで読んでください!

파친코 인물 관계도 포스트 그림

ぱちんこ小説の概要

小説 ぱちんこは、日本統治時代から1980年代まで、韓国と日本を舞台にした移民家族の4世代を描いた叙事小説です。主要登場人物間の複雑な関係と時代的な葛藤が絡み合っており、登場人物間のつながりを理解することが小説を鑑賞する上で非常に重要です(お時間があるとき アップルオリジナルパチンコもお楽しみください)

主な登場人物の説明

  • フンイ禅師の父であり、一族の第一世代を代表する人物です。
  • ヤンジン禅子の母であり、フンイの妻であり、献身的な母親の姿を見せます。
  • 禅寺:小説の主人公で、苦難の中で家族のために犠牲を払いながら生きている人物です。
  • コハンス禅子の初恋の相手であり、小説の中で葛藤を呼び起こす主要人物で、日本で成功した実業家です。
  • 白イサク禅子の夫であり、牧師であり、禅子と一緒に新しい人生を歩んでいきます。
  • 帽子の数: 仙沢白石さんの息子で、日本でパチンカス事業を営んでおり、家系の3代目を代表しています。
  • ノア:サンザとコハンスの息子で、自分のアイデンティティに対する葛藤を抱えながら生きている人物です。
  • ソロモン:母子家庭の息子で、4世代を代表し、日本とアメリカを行き来する複雑な生活を送っています。
  • エツコ:母子の恋人であり、日本人女性で、複雑な家庭史を持つ人物です。
  • 一つ......:エツコの娘で、ソロモンと恋人関係になる人物です。
  • ユミ.ソロモンの恋人:ソロモンの恋人であり、ソロモンとの関係が物語をさらに複雑にします。
  • 慶應義塾大学白イサクの兄弟である白ヨセフの妻で、家系内のもう一つの重要な人物です。
  • 金昌秀:コハンスの忠実な部下で、彼の主な助っ人です。

それでは、この登場人物の関係をPythonを使って視覚的に描いてみましょう。

パイソンで描くパチンカスの人物関係図

1.必要なパッケージのインストールとハングルフォントの設定

まず、必要なパッケージをインストールし、ハングルフォントを設定する必要があります。 関係図でハングルが崩れないようにフォントを指定します。

import networkx as nx
matplotlib.pyplot as plt をインポートします。
from adjustText import adjust_text
matplotlib.font_manager を fm としてインポートします。

# ハングルフォント設定
font_path = 'C:/Windows/Fonts/NanumGothic.ttf' # 実際のフォントパスを確認する必要があります。
fontprop = fm.FontProperties(fname=font_path, size=12)

plt.rc('font', family=fontprop.get_name())

matplotlib ライブラリはグラフを可視化するために使用されます、 adjustTextはテキストの重なりを防ぐためのパッケージです。フォントパスは実際インストールされたフォントパスに設定する必要があり、ここではNanumGothic(NanumGothic)を使います。

2.人物関係の定義とノード設定

Pachinkoの主要登場人物間の関係を定義して、グラフのノード(人物)とエッジ(関係線)を設定します。

# グラフ生成
G = nx.Graph()

# 人物関係定義 (人物間の関係を設定)
characters = [.
    ("フンイ", "善子", "父娘")、
    ("良進", "善子", "母娘")、
    ("白イサク", "母子", "父子")、
    ("고한수", "노아", "부자")、
    ("고한수", "선자", "恋人")、
    ("선자", "모자수", "모자")、
    ("모자수", "노아", "兄弟")、
    (「母子数」、「ソロモン」、「金持ち」)、
    (「ソロモン」、「ユミ」、「恋人」)、
    ("エツコ", "モザス", "恋人")、
    (「悦子」、「花」、「母と娘」)、
    (ノア」、「アキコ」、「恋人」)、
    (ソロモン」、「ハナ」、「恋人」)、
    ("白ヨセフ", "キョンヒョン", "夫婦")、
    (「白ヨセフ」、「白イサク」、「兄弟」)、
    ("고한수", "김창수", "주종")
]

# 人物と関係線追加
for character1, character2, relation in characters:
    G.add_edge(character1, character2, relation=relation)

このコードは networkx ライブラリを使用して、人物間の関係をノードとエッジで接続します。例えば、 ("훈이", "선자", "부녀")はフンイとサンザの親子関係を表します。

3.世代別の色とレイアウトの設定

ここで、登場人物を世代別に分け、世代によって色を指定します。

# 世代情報の定義
generation_dict = { {。
    "フンイ":"第1世代"、
    "ヤンジン":"第1世代"、
    "善子":"第2世代"、
    "白イサク":"第2世代"、
    "母数":"第3世代"、
    "ノア":"第3世代"、
    "コハンス":"第2世代"、
    「ソロモン」:「第4世代」、
    "ユミ":「第3世代」、
    "エツコ":"第3世代"、
    "ハナ":"第4世代"、
    "アキコ":"第3世代"、
    "白ヨセフ":"第2世代"、
    "キョンヒョン":"第2世代"、
    "金昌秀":"その他"
}

# 世代による色設定
color_map = { color_map
    "第1世代":"lightblue"、
    "第2世代":"lightgreen"、
    "第3世代":"lightcoral"、
    "第4世代""lightpink"、
    "その他":"gray"
}

# 各ノードに世代別カラーを指定する
node_colors = [color_map[generation_dict[node]]]。for node in G.nodes()]]

# レイアウト設定 (spring_layoutを使用してバランスよく配置)
pos = nx.spring_layout(G)

上のコードは各人物を世代別に分けて色を指定します。例えば、1世代は ライトブルー第2世代は ライトグリーンに設定されます。 spring_layoutは、ノードがバランスよく配置されるのを助けます。

4.人物関係図を描く

今度は実際にグラフを描き、ノードとエッジ(関係線)、そして関係説明を追加します。

# グラフを描く
plt.figure(figsize=(12, 8))

# ノードの描画
nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)

# 関係線の描画
nx.draw_networkx_edges(G, pos)

#関係線の上に関係説明を追加します。
edge_labels = nx.get_edge_attributes(G, 'relation')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)

#ノードに人物名を表示
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())

# タイトル追加
plt.title("パチン子主要登場人物関係図", size=20, fontweight='bold')

# 凡例を追加
import matplotlib.lines as mlines
legend_elements = [mlines.Line2D([], [], color=color, marker='o', linestyle='', markersize=10, label=gen)
                   for gen、color_map.items() の色]].
plt.legend(handles=legend_elements, title="generation", loc="lower center", bbox_to_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)

# グラフ出力
plt.axis('off')
plt.tight_layout()
plt.show()

上記のコードでは、各人物の世代別色、名前、そして関係説明をグラフに表示します。 draw_networkx_nodes, draw_networkx_edges, draw_networkx_labelsを使用してそれぞれノード、関係線、人物の名前を追加し、関係線の上には draw_networkx_edge_labelsで関係説明を入れます。

全コード

import networkx as nx
matplotlib.pyplot as plt をインポートします。
from adjustText import adjust_text
matplotlib.font_manager を fm としてインポートします。

# ハングルフォント設定
font_path = 'C:/Windows/Fonts/NanumGothic.ttf'
fontprop = fm.FontProperties(fname=font_path, size=12)

plt.rc('font', family=fontprop.get_name())

# グラフ生成
G = nx.Graph()

# 人物関係定義
characters = [.
    ("훈이", "선자", "부녀")、
    ("양진", "선자", "母娘")、
    ("백이삭", "모자수", "富", "부

子」)、
    (「고한수」, 「노아」, 「부자」)、
    (고한수」、「선자」、「恋人」)、
    (「선자」, 「모자수」, 「모자」)、
    ("모자수", "노아", "兄弟")、
    (「母子数」、「ソロモン」、「金持ち」)、
    (「ソロモン」、「ユミ」、「恋人」)、
    ("エツコ", "モザス", "恋人")、
    (「悦子」、「花」、「母と娘」)、
    (ノア」、「アキコ」、「恋人」)、
    (ソロモン」、「ハナ」、「恋人」)、
    ("白ヨセフ", "キョンヒョン", "夫婦")、
    (「白ヨセフ」、「白イサク」、「兄弟」)、
    ("고한수", "김창수", "주종")
]

# 人物と関係線追加
for character1, character2, relation in characters:
    G.add_edge(character1, character2, relation=relation)

# 世代情報の定義
generation_dict = { { "フンイ": "フンイ
    "フンイ":"第1世代"、
    "ヤンジン":"第1世代"、
    "善子":"第2世代"、
    "白イサク":"第2世代"、
    "母数":"第3世代"、
    "ノア":"第3世代"、
    "コハンス":"第2世代"、
    「ソロモン」:「第4世代」、
    "ユミ":「第3世代」、
    "エツコ":"第3世代"、
    "ハナ":"第4世代"、
    "アキコ":"第3世代"、
    "白ヨセフ":"第2世代"、
    "キョンヒョン":"第2世代"、
    "金昌秀":"その他"
}

# 世代による色設定
color_map = { color_map
    "第1世代":"lightblue"、
    "第2世代":"lightgreen"、
    "第3世代":"lightcoral"、
    "第4世代""lightpink"、
    "その他":"gray"
}

# 各ノードに世代別カラーを指定する
node_colors = [color_map[generation_dict[node]]]。for node in G.nodes()]]

# レイアウト設定
pos = nx.spring_layout(G)

# グラフ描画
plt.figure(figsize=(12, 8))

# ノードの描画
nx.draw_networkx_nodes(G, pos, node_color=node_colors, node_size=2000, edgecolors='black', linewidths=2)

# 関係線描画
nx.draw_networkx_edges(G, pos)

#関係線の上に関係説明を追加します。
edge_labels = nx.get_edge_attributes(G, 'relation')
nx.draw_networkx_edge_labels(G, pos, edge_labels=edge_labels, font_family=fontprop.get_name(), font_size=12)

#ノードに人物名を表示
nx.draw_networkx_labels(G, pos, font_size=12, font_weight='bold', font_family=fontprop.get_name())

# タイトル追加
plt.title("パチン子主要登場人物関係図", size=20, fontweight='bold')

# 凡例を追加
import matplotlib.lines as mlines
legend_elements = [mlines.Line2D([], [], color=color, marker='o', linestyle='', markersize=10, label=gen)
                   for gen、color_map.items() の色]].
plt.legend(handles=legend_elements, title="generation", loc="lower center", bbox_to_anchor=(0.5, -0.05), ncol=5, fontsize=12, title_fontsize=12)

# グラフ出力
plt.axis('off')
plt.tight_layout()
plt.show()

仕上げ

この記事では、Pythonを使ってパチンコの人物関係図を視覚化する方法を学びました。 複雑な人物間の関係をグラフ形式で表すと、小説の流れをより簡単に理解することができます。Pythonの強力なデータ可視化機能を活用して、複雑な物語の構造も一目で把握できる方法を自分で実行してみましょう。 VS CODEのインストール - ウィンドウズ基準 ポストが皆さんをその道に導いてくれますよ、頑張りましょう!

類似の投稿