WOLFRAM NOTEBOOK

Mathematica を使って歴史探索

このページでは、Mathematica の初心者向けブログとして、「エンティティ (実体) 」の取り扱い方を紹介します。エンティティとは一定のテーマに沿ってまとめられたデータベースのようなものです。Wolfram のサイトには膨大な数のエンティティが登録されており、ここで紹介するエンティティもインターネットを通じて容易に取得できるものに限りますが、エンティティは独自に作成することも可能です。詳しくは、関連情報をご覧ください。エンティティの取り扱いに慣れてくると、Mathematica を活用できる範囲がぐんと広がります。ここでは人物や国家に関するエンティティの取得から、そのプロパティの値を利用したタイムラインプロットの作成を通じて、歴史を探索してみたいと思います。
  • ここで使用した Mathematica のバージョン:13.3.1.0
  • エンティティ (実体) で人物を取り出そう

    Mathematica で取り扱うことのできる情報にはエンティティ (実体) というものがあります。エンティティとは人物や国家、出来事といった現実世界に存在するモノに属する様々なプロパティ、例えば人物であれば、誕生日や死亡日、身長、父、母、配偶者といった情報、国家であれば人口、国境、GDP といった情報をひとつにまとめた情報の単位です。Mathematica では、Knowledgebase として膨大な数のエンティティを操作・利用することができます。エンティティをノートブック上で取り扱えることができるようになるということは、実世界を対象にした演算をおこなうことができるということになります。今回は、Person (人物) 、エンティティを使った例を中心に歴史的情報の取り扱い方を紹介したいと思います。たとえばナポレオンという歴史的人物を手掛かりにはじめてみましょう。
    まず、Mathematica のノートブックを開いて、キーボードの Ctrl + = キー (Mac なら Cmd + = ) を押して、「Napoleon」 と入力したら Shift + リターンをクリックします。オレンジの枠で囲まれた Napoleon という 「エンティティ」 を取り出すことができます。この表記は、ナポレオン・ボナパルトという固有の人物を指すエンティティであることをあらわしています。このエンティティを右クリックして 「入力テキスト」 としてコピー&ペーストすると Entity["Person", "NapoleonBonaparte::8md95"] となっているのがわかります。つまり、Person というエンティティタイプの中の "NapoleonBonaparte::8md95" というキーで 「ナポレオン」 という人物を特定しているわけです。(ここで日本語に対応していないと嘆くことはありません。人物の名前というものは、必ずしも一定しているのではなくフランス語や英語によっても変わりますので、このようなキーで具体的に誰を指しているのか特定されることが重要です)
    In[]:=
    Napoleon
    Out[]=
    Napoleon
    このようにして取り出した「Napoleon」エンティティにはどのような属性が含まれているでしょうか?ナポレオンは20歳でフランス革命を体験し、35歳で皇帝に即位し、45歳でセントヘレナへ流刑になるという変化に富んだ人生を送ります。ナポレオンによる帝政はわずか10年で終わってしまうものの、その後のヨーロッパや世界に多大な影響を与えました。ナポレオンに影響を受けた人々はその後もなお生き続けていたわけです。ナポレオンのエンティティに [“Properties”] と追記して実行します。そのエンティティに含まれるプロパティの一覧が表示されます。
    In[]:=
    Napoleon
    ["Properties"]
    Out[]=
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    entity type list
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    ,
    1769815
    In[]:=
    EntityValue
    Napoleon
    ,
    ,
    ,
    ,
    Out[]=
    ,
    Tue 15 Aug 1769
    ,Joséphine de Beauharnais,
    Marie Louise
    ,{Carlo Buonaparte}
    使
    Napoleon
    Marie Louise
    1791121222
    In[]:=
    EntityValue
    Marie Louise
    ,
    ,
    ,
    ,
    Out[]=
    ,
    Mon 12 Dec 1791
    ,
    Napoleon
    ,Adam Albert von Neipperg,
    Francis II, Holy Roman Emperor
    ナポレオンのこどもたちをリストであらわします。ナポレオン2世のほかに2人あることがわかります。
    In[]:=
    Napoleon
    Out[]=
    Napoleon II
    ,Eugène de Beauharnais,Charles Léon
    ナポレオンのこどもたちをグラフであらわします。(※特定の2人の関係を家系図であらわすアドオン関数もあります。詳しくは関連情報をご覧ください。)
    In[]:=
    NestGraph#
    &,
    Napoleon
    ,1,VertexLabels->Placed["Name",After,Rotate[#,20Degree,{-3.2,0}]&],ImageSize->Medium
    Out[]=
    全てのプロパティを表示するには "Dataset" とします。
    In[]:=
    Napoleon
    ["Dataset"]
    Out[]=
    {
    16
    }
    Leo
    Tue 15 Aug 1769
    Lucien Bonaparte,
    Joseph Bonaparte
    ,Louis Bonaparte,Jérôme Bonaparte
    Napoleon II
    ,Eugène de Beauharnais,Charles Léon,Stéphanie de Beauharnais
    Ox (Yin Earth)
    {Stéphanie de Beauharnais}
    Sat 5 May 1821
    {}
    entity type list
    {Carlo Buonaparte}
    Napoleone di Buonaparte
    male
    1.7100m
    {}
    rows 120 of
    45
    今から200年前の19 世紀フランスは人類史上最も社会が変化した時代です。フランス革命でブルボン王朝が終了し、ロベスピエールらによる恐怖政治を経て、ナポレオンが登場し、共和制、そしてより独裁的な帝政が始まり、ナポレオン法典、フランス銀行設立、産業の育成、レジオンドヌール勲章、その他現代のフランスの基礎を築きます。その後モスクワ遠征の失敗(トルストイ『戦争と平和』参照)、ワーテルローの戦いの敗北などから第一帝政は終焉します。ウィーン会議でルイ16世の弟ルイ18世が国王となりブルボン朝が復活します。王政が復活したとはいえこれまでの絶対王政ではなく議会からの制限を受けた立憲王政という限定的な権力でしたが、ルイ18世の弟のシャルル10世による反動的な絶対王政が進むと、今度はドラクロアの『民衆を導く自由の女神』で有名な7 月革命が勃発し、ルイ14世の弟の家系にさかのぼる中道的なオルレアン公ルイ=フィリップによる七月王政がはじまります。
    ここで Person 以外のエンティティクラスも利用してみましょう。HistoricalEvent (歴史的事件)です。まず、HistoricalEvent にはどのようなプロパティがあるかを確認します。
    In[]:=
    historical events
    HISTORICAL EVENTS
    ["Properties"]
    Out[]=
    cities involved
    ,
    countries involved
    ,
    date
    ,
    end date
    ,
    ,
    entity type list
    ,
    ,
    people involved
    ,
    start date
    HistoricalEvent
    people involved
    Napoleon
    In[]:=
    EntityListEntityClass"HistoricalEvent",
    people involved
    ->
    Napoleon
    Out[]=
    Battle of Waterloo
    ,
    British and allies march into Paris after defeating Napoleon
    ,
    Code of Napoleon is adopted as French civil law
    ,
    a coup against Napoleon fails
    ,
    Marriage of Napoleon and Josephine is annulled
    ,
    Napoleon exiled to Elba
    ,
    Napoleon abolishes the Inquisition in Spain
    ,
    Napoleon's coup d'état of 18 Brumaire
    ,
    Napoleon begins exile on Saint Helena
    ,
    Napoleon Bonaparte abdicates for the second time
    ,
    Napoleon Bonaparte divorces Josephine
    ,
    Napoleon Bonaparte is proclaimed Emperor of France
    ,
    Napoleon Bonaparte becomes emperor
    ,
    Napoleon is crowned king of Italy
    ,
    Napoleon is defeated at the Battle of Leipzig
    ,
    Napoleon defeats the Russians at the Battle of Eylau
    ,
    Napoleon escapes from exile on Elba
    ,
    Napoleon returns to Paris from exile on Elba
    ,
    Napoleon invades Russia
    ,
    Napoleon occupies Moscow
    ,
    Napoleon reaches the Kremlin
    ,
    Napoleon returns from exile
    ,
    Napoleon Bonaparte surrenders
    ,
    Royalist riots in Paris are crushed by Napoleon Bonaparte

    タイムラインプロット

    エンティティに含まれる情報をタイムラインプロットであらわしてみましょう。方向はテキストの見やすさから縦方向に指定します。スマホの LINE のような感じで歴史的事件がプロットされます。ブリューメル18日のクーデタ、ナポレオン法典 (Code of Napoleon) にはじまり、セントヘレナに島流しにされるまでの一連の事件が時系列でプロットされています。
    In[]:=
    TimelinePlotEntityListEntityClass"HistoricalEvent",
    people involved
    ->
    Napoleon
    ,PlotLayout->"Vertical"
    Out[]=
    エンティティに含まれるプロパティの値を使えば、特定の人物が生きた期間にフランスという歴史的国家がどのように移り変わっていったかを調べることができます。たとえば、文豪バルザックが生存中にフランス国家がどのように変遷していったかを調べてみましょう。Mathematica では、1900年以前の時間形式のデータも問題なく処理することができるのが大きな強みです。紀元前や45億年前でも取り扱えるため、ギリシア時代やエジプト時代、恐竜の歴史にも対応できます。時間については直接的に DateObject[“1850/1/1”] というテキストデータを日付オブジェクトに変換して使うこともできますが、エンティティに含まれる日付に関するプロパティを利用することができます。この場合は、バルザックの「誕生日」と「死亡日」を間隔の指定に使用します。
    このように目まぐるしく変化する政治的状況の中、産業革命で巨万の富を築きあげたブルジョアジーや労働者階級が社会の表舞台に進出してきます。旧来の既得権益や家柄にしがみつく貴族の地位は徐々に衰退していきます。頑張ったものは報われる。民衆の熱い時代です。ユゴーの 『レ・ミゼラブル』、アレクサンドル・デュマ・ペールの 『モンテクリスト伯』、バルザックの一連の 『人間喜劇』 などはこんな時代を反映した小説です。ロマン主義を代表する音楽家も周辺諸国から続々とパリに集まってきます。ハンガリーからはリスト、ポーランドからはショパン。オペラでは、ロッシーニ、マイヤベーアなどです。ショパンはナポレオンが建てたワルシャワ公国で生まれますが、ウィーン会議でロシア、プロイセン、オーストリアに分割統治されたポーランドで民衆が起こした11月蜂起の失敗を嘆き『革命のエチュード』を1831年に発表しました。ショパンは20歳から39歳で亡くなるまでの人生の半分をパリで過ごしました。
    バルザックは 『従妹ベット』で1830~40年代のパリの上流階級の生活を描いています。たとえば、ユロ男爵の妻アドリアーヌが夫の放蕩生活を嘆く場面に次のような一文があります。
    Je suis tout bonnement la Joséphine de mon Napoléon, répondit - elle avec une teinte de mélancolie .
    私はまさにナポレオンのジョゼフィーヌです、と彼女は少し憂鬱そうに答えた。[Google翻訳]
    出典:Wikisource La Cousine Bette (ed. Houssiaux)
    市民の日常生活にナポレオンが生きていることをうかがい知ることができます。
    ブルジョアに有利な状況が進みすぎると、こんどは二月革命でナポレオンの甥であるルイ = ナポレオンによる第二共和制、そして、「ナポレオン3世」 と名乗ってからはより強力な権力を握った第二帝政がはじまります。1850年代にはパリの大改造がおこなわれ、放射状の通り、下水道の整備、街路照明、パリの近代化がぐんと進みます。パリ・オペラ座もサル・ルペティエから現在のガルニエ宮に移っていく時期です。渋沢栄一がパリ万博を視察したのは1867年です。
    フローヴェルは『ボヴァリー夫人』の中で、1850 年代の地方都市(ルーアン)に住む女性が示すパリへの憧れの様子を描いています。
    Elle s' abonna à la Corbeille, journal des femmes, et au Sylphe des salons . Elle dévorait, sans en rien passer, tous les comptes rendus de premières représentations, de courses et de soirées, s' intéressait au début d' une chanteuse, à l' ouverture d' un magasin . Elle savait les modes nouvelles, l' adresse des bons tailleurs, les jours de Bois ou d' Opéra . Elle étudia, dans Eugène Sue, les descriptions d' ameublements; elle lut Balzac et George Sand, y cherchant des assouvissements imaginaires pour ses convoitises personnelles .
    彼女は女性新聞 『ラ・コルベイユ』 と 『ル・シルフ・デ・サロン』 を購読していた。彼女は、芝居の初演、競馬、夜会の記事をすべて欠かさず読み、歌手のデビューや店の開店に興味を持っていた。彼女は新しいファッション、一流洋服店の住所、ブローニュの森やオペラ座の社交日を知っていました。彼女はウジェーヌ・スーの家具の描写を研究しました。彼女はバルザックやジョルジュ・サンドを読み、個人的な欲望を満たす想像上の満足を求めました。(Google 翻訳)
    出典:Wikisource Madame Bovary/Première partie/9
    エトワール凱旋門は、ナポレオンがアウステルリッツの戦いを記念して1806年に建設がはじまりますが、完成するのは1836年です。エッフェル塔ができるのは1889年のパリ万博です。

    一枚の写真から

    この写真はウィキペディア の ドビュッシー のページで紹介されている一枚です。撮影されたのは1910年、場所はパリのドビュッシーの邸宅です。左側に立っているのがドビュッシー、中央の椅子に座っているのはストラヴィンスキー、撮影はエリック・サティです。いずれもフランス近代音楽を代表する作曲家で、ドビュッシー48歳、サティ44歳、そして、ストラヴィンスキーは28歳です!画面右上の壁には葛飾北斎の浮世絵が掛かっています。ドビュッシーはこの写真に先立って1903年から1905年の間に浮世絵からインスピレーションを受けたといわれる「ラ・メール (海)」 を仕上げています。撮影されたのは1910年としか書かれていませんが、ストラヴィンスキーを一躍有名にしたバレエ曲「火の鳥」がパリ・オペラ座で初演されたのが同じ年の6月25日なので、3人がそろう機会としてはおそらく「火の鳥」の発表前後ではないかと思います。もしかすると、公演のあと3人そろってこのドビュッシーの家で「火の鳥」について議論を交わしたのかもしれません(「火の鳥」はこのあと何回か異なるバージョンが作成されています)。ドビュッシーには一時代を築いた巨匠としての風格が、ストラヴィンスキーには若手作曲家としての将来への意気込みが感じられます。
    Debussy with Igor Stravinsky : photograph by Erik Satie, June 1910, taken at Debussy' s home in the Avenue du Bois de Boulogne
    写真が発明されたのは19 世紀初頭ですが、広く普及しはじめたのは1850年代以降です。3人のエンティティから生存期間データを取得して、時系列でプロットしてみましょう。また、個々の代表作も追加してみましょう。
    近代の象徴たるドビュッシーをバックに、現代へまなざしを向ける若きストラヴィンスキーをとらえた良い写真です。「いやあ、火の鳥、大盛況だったね」「どうも先輩」「さあさあ、イーゴリ君、これからは君の時代だよ。君が真ん中の椅子に掛けたまえ」「ハイ!チーズ!」「バシッ」・・・こんな会話が取り交わされたのかもしれません。タイムラインプロットを作成してみると、ドビュッシーが没した1918年の直後に「火の鳥 1919年版」が作成されているのに気が付くでしょう。ストラヴィンスキーは亡き先輩を悼み、何か思い出したことがあったのではないかと想像が膨らみます。
    いかがだったでしょうか。今回は、エンティティを使って19世紀を中心にフランスの歴史的時間の流れを概観してみました。エンティティに登録されているデータは必ずしも充分なものとは言い切れませんが、それでも「一般的」な情報量ではあると思います。コンピュータが普及しはじめた20年前に比べると、ウィキペディアをはじめとする圧倒的な量の情報が今日では容易に取得できるようになっています。こうした情報をどう活用するか、どのような切り口でまとめていくかが今後の課題になると思いますが、 Mathematica はそんな情報時代に欠かせないツールのひとつになりそうな予感がしました。

    関連情報

    エンティティ (実体) の一般的情報については下記をご参照ください。
    https://reference.wolfram.com/language/guide/KnowledgeRepresentationAndAccess.html.ja
    エンティティの種類については下記ページをご参考にしてください。
    https://reference.wolfram.com/language/guide/EntityTypes.html.ja?source=footer
    エンティティを作成する方法については下記をご参考にしてください。
    https://reference.wolfram.com/language/workflow/SetUpAnEntityStore.html.ja
    特定の2人の関係を家系図であらわす Mathematica のアドオン関数も利用できます。
    https://resources.wolframcloud.com/FunctionRepository/resources/GenealogyTreePlot/
    たとえば、ナポレオン3世にとってナポレオン・ボナパルトは叔父にあたるので以下のような式であらわすことができます。
    WikidataData を使えば、ウィキデータの SPARQL エンドポイントからデータを取り出すことができます。
    https://reference.wolfram.com/language/ref/WikidataData.html
    Wolfram Cloud

    You are using a browser not supported by the Wolfram Cloud

    Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.


    I understand and wish to continue anyway »

    You are using a browser not supported by the Wolfram Cloud. Supported browsers include recent versions of Chrome, Edge, Firefox and Safari.