国際部 静永 誠

グローバルといえば、世界を震撼させる感染症も存在します。今回はワクチンなどが使えない19世紀に疫学・統計手法を活用してコレラ感染対策で成果を上げたSnowの事例を紹介したいとおもいます。

 

大分前になるのですが、ソフトウェアプロセス改善のコンサルという仕事をしていたとき、ソフトウェア開発で発生・蓄積するデータ(例えば、ソースコードの変更履歴など)を統計的に分析し、開発プロセスの改善、ソフトウェアの品質改善に役立てられないか試みたことがありました。

その際、統計が役立った参考事例として聞いた、コンピュータも無いような頃の疫病予防に統計を活用した事例が今でも印象に残っていた内容だったので、今回の執筆機会に改めて少し調べてみました。

現在でも気付きが得られる事例だと改めて思いましたし、現在手軽に利用できるデータやツールを使用すれば当時の統計処理結果の一部も再現できることも合わせて紹介していますので、よければご一読ください。

 

John Snowのコレラ対策事例

記憶をもとに関係ありそうなキーワードを使って検索エンジンで調べたところ(今時は、こういうときにもAIを使うんですかね)、該当事例は、19世紀のロンドンでコレラの流行について調査したJohn Snowの事例でした。

コッホによりコレラ菌も特定されてない時代に、疫学・統計学の手法を使い、コレラ感染の拡大防止に効果を上げた事例になります。

 

19世紀ロンドンのコレラの大流行

19世紀にはロンドン以外にも様々な場所でコレラが大流行していたようです。さながら、現在のコロナ大流行をほうふつさせる状況だったのかもしれません。さらに恐ろしいことに、当時のコレラは感染後に症状が現れると、わずか数日で死に至るような病気であり、致死率も高かったようです(現在でも恐ろしい病気なんだとは思いますが、身近で発病者の話をまず聞きませんし、私は身近で恐怖を感じることはないですね)。

 

John Snowはロンドンで来流行したコレラの状況について、その調査結果と考察をまとめた「On the mode of communication of cholera」を1855年に出しています。こちら、現在では著作権も切れ米国でPublic Domainとなっているようです。「Project Gutenberg」というWebからアクセスできるライブラリでテキストなどをダウンロードでき、さらに翻訳されたものも「青空文庫」でアクセスできます(邦題「コレラの伝染様式について」(こちらは「クリエイティブ・コモンズ 表示 2.1 日本 ライセンス」として提供されています)。

当時の文章にアクセスできるということで、試しに感染率や死亡率の恐ろしさがうかがわれる記述を引用してみます。

 

1849年にはホースリーダウンのトマス街に互いの近くに2つの袋小路があり、貧しい人たちが住む数多くの小さな家、小屋が建っていた。(中略)この路地におけるコレラの最初の例は7月20日に起き小さな女の子であり、4日のあいだ下痢に悩んでいた。この例は治癒した。翌日の7月21日に老女が罹患し、同じ晩の10時に虚脱状態になった。

(中略)

この2例が起きた1週後に多くの患者がほとんど同時に病気になった。すなわち、土曜日7月28日に4人、29日に7人か8人、そして次の日には何人か、であった。死亡は次のように起きた。すなわち、29日に1人、30日に4人、7月31日に1人、8月1日に2人、8月2日、5日、10日にそれぞれ1人であり、全部で11人であった。死者が起きたのは路地にある14軒の小さな家のうちの7軒であった。

「コレラの伝染様式について」より引用

 

1週間で、近所の14軒中7軒で感染が広がり、十数人が感染し、11人が死亡しています。これは相当恐ろしい。なお、これは人数自体は少人数ですが、実際にはもっと大人数の大規模な感染拡大が何事例もあったようです。

 

ゴールデン・スクエアのブロード・ストリートの近くの例

John Snowによるコレラ感染の調査と対策に関する、おそらく最も有名な事例が、前述の報告の中で「ゴールデン・スクエアのブロード・ストリートの近くの例」として取り上げられている事例になります。Snowの記述によると、500人以上の致死的なコレラ発生が、250ヤード以内のところで10日のあいだに起きたということです。

 

Snowはこのコレラ患者の大発生に対し、人々がよく使う街路ポンプの水の汚染を疑います。しかし、現地で調査したとき、初めは、そのポンプの水を調べても少ししか異物が無かったため、結論を出せず保留します。しかし、ここでSnowは、ポンプの水質が時間とともに変化している可能性があることをみつけ、さらに詳細に調査を進めます。コレラ死亡者のリスト作成などを進めた結果、特定のポンプの水を使用しているとコレラ発症率が高いことを突き止め、コレラ対策として、1854年9月8日にそのポンプのハンドルを取り外して使えないようにします。

 

さらに、調査を継続して進めた結果作られたのが、コレラ死亡者とポンプの場所を示した地図と、コレラ発病の日毎の状態をまとめた表です。地図・表ともに、前述の「コレラの伝染様式について」のページからアクセスできるので、こちらに引用しておきます。

 

image001図表 1 1854/8/30-9/19のブロードストリート・ゴールデンスクウェア近隣のコレラ死亡者

 

図表 2 コレラ発病および死亡者の日毎の状態

Date. No. of Fatal Attacks. Deaths.
August 19 1 1
20 1 0
21 1 2
22 0 0
23 1 0
24 1 2
25 0 0
26 1 0
27 1 1
28 1 0
29 1 1
30 8 2
31 56 3
September 1 143 70
2 116 127
3 54 76
4 46 71
5 36 45
6 20 37
7 28 32
8 12 30
9 11 24
10 5 18
11 5 15
12 1 6
13 3 13
14 0 6
15 1 8
16 4 6
17 2 5
18 3 2
19 0 3
20 0 0
21 2 0
22 1 2
23 1 3
24 1 0
25 1 0
26 1 2
27 1 0
28 0 2
29 0 1
30 0 0
Date unknown 45 0
Total 616 616

※表は「コレラの伝染様式について」にある表から引用、加工

 

表から見て取れるように、ポンプのハンドルを取り外した9月8日以降は、コレラ発症者が減少し、対策に効果があったことが見て取れます。

 

Snowはコレラ菌のワクチンなどを使えない19世紀中頃という状況で、当時としては現実的な調査を詳細に行い、統計的な手法も活用しながら、現実的な対策を講じて効果を上げています。

 

このSnowの事例は、疫学・統計学の手法を使った歴史的な事例として知られ、現在でも先駆的な事例として紹介することがあります。

 

疫学的・統計的手法の活用について

正確な言い方ではないですが、疫学の手法はある集団・グループを対象にして分析用のデータを収集し、統計手法などで役に立つ結果を出すものかと思います。

 

John Snowの事例は、コレラの大流行という当時目の前にあった問題に対し、どうにかして問題に対処したい(コレラの流行を収束させたい)という状況で、疫学的・統計的手法を使った取り組みといえます。

 

ここで、コレラ患者の大量発生という現象に対する原因は何だったかを考えます。

 

  • コレラ菌に感染した
  • ある井戸を使った

 

Snowの事例・状況では、どちらも原因だったと言えます。

 

ここで「どちらが対策を打てるか?」を考えた場合、Snowの事例、19世紀のロンドンでは間違いなく後者の「井戸」になります。

 

「疫学+統計」という世界では、このように「因果関係がある」かつ「対策を打てるもの」を探すのに使われているそうです。「喫煙とガン発生の因果関係」「排水と公害病との因果関係」「ある薬とある病気治療との因果関係」など。

 

大分前に感じるかもしれませんが、この記事の冒頭の方で書いた、統計が役立ったという事例紹介では、ある現象があったとき、その対策を打つことができそうな原因と、その間に相関関係があることをデータで示すために、統計学を役立たせることができる、ということを示すためにSnowの事例を紹介されていたと記憶しています。

 

最近では非常に大量なデータを高度な分析手法で分析したり、AIに学習させたりという話を耳にすることが多いと思います。それらを活用できるに越したことはないですが、もっと身近な事例・利用可能なデータ・コンピュータの無い19世紀でも使えるような基礎的な統計手法でも、現実的な成果を出せることも意外と多いのではないかと、Snowの事例を改めて調べて思いました。

 

Snowの地図を再現してみる

ここからはSnowの事例に少し関連しますが、ここまでとは別の話になります。

 

今回Snowの事例を調査していたとき、コンピュータでSnowのプロットした地図と同じようなものを自分で作成している様子を、Pythonのコードと合わせて紹介している記事がありました(偶然見つけただけで、推奨しているわけではないです)。

 

そちらの記事では、Web上の学習コースのようなもので説明されている手順に沿って進めていたようです。自分でも試してみようかと思ったのですが、実際に受講しようとすると有料アカウントを購入する必要がありそうだったので、見送りました。

 

学習コース受講はしなかったのですが、プロットした地図の作成には、元ネタになるデータは必要なはずであり、有名な事例なのでデータ自体は公開されていたり、そのような公開データを使って何かしらの図を作るツールやサンプルコードなどがあるのではないかと思い、自分でSnowの地図と似たような図が作れないかを調べてみました。

 

結果、やはりデータが公開されていて、公開されているツールを入れれば思ったよりも簡単に地図が再現できました。理屈やバックグラウンドになる統計手法・データ解析手法は分からなくても、有名な図が手元で再現できると思っていたよりも楽しかったので、やり方などを簡単にご紹介します。

統計解析ツールRを使ったSnowの地図の再現

今回使ったのは、R(アール)というツールになります。統計処理の分野では比較的歴史もあり、関連書籍も出版されている有名なツールだと思いますので、この記事ではツールの詳細な紹介は省略します。(気になる方は総務省統計局のサイトや検索してみてください)

Rのインストール

Rのサイトから移動できるダウンロード用のページ(図表3)で、Linux用、macOS用、Windows用のインストール用があると説明されているので、私はWindows用のページ(図表4)へ進み、「This is what you want to install R for the first time」と紹介されているページ(図表5)に進んでインストール用ファイルをダウンロード。ダウンロード用ページから3つくらいリンクを進めないとダウンロードまでたどり着けないので、少し面倒くさい。

image002図表 3 ダウンロード用ページ

 

image003 図表 4 Windows用ファイルのダウンロード用ページ

image004

図表 5 「This is what you want to install R for the first time」と紹介されているページ

 

ファイルがダウンロード出来たら、ダブルクリックしてインストールしました。

 

Rを使ったSnowのデータの取得と地図の作成

Rを起動すると、図表6のような画面が表示されます(設定やバージョンで多少変わるかもしれません)。この画像にある「R Console」で、プロンプトに対しコマンドを入力して操作していきます。

 

image005

図表 6 R起動画面

 

この記事で紹介したいことはRの使い方ではなくSnowの地図を表示させることなので、細かいことは抜きにして、R consoleで入力していくコマンドを紹介していきます。以下のコマンドを入力していきます。

 

※細かな確認はしていないので無駄なコマンドが含まれているかもしれません

install.packages(“HistData”)

library(“HistData”)

install.packages(“lubridate”)

library(“lubridate”)

SnowMap()

 

※途中で「— このセッションで使うために、CRAN のミラーサイトを選んでください —」のようなメッセージが出てミラーサイトを選ぶダイアログが出たときは、日本のサイトを選んでおきました。

 

問題無く実行できれば、キャプチャ画像のように、Snowの地図を作成してくれます。自分で作れると、何となく嬉しいもんでした。

 

image006

図表 7 Rで再現したSnowの地図

 

 

さらに、以下のコマンドをR consoleで入力すると、補助線みたいなものを入れてくれます。どの区画で集中的にコレラが発症しているか分かりやすくなりました。

# add polygons

SnowMap(polygons=TRUE, main=”Snow’s Cholera Map with Pump Polygons”)

 

image007 図表 8 Polygonを追加したSnowの地図

 

さらに、以下のコマンドを入力すると、密度みたいなものを標高線のような線と合わせて表示します。「Broad St」の井戸の密度が最も高く、Broad Stが山頂であるかのように標高線のような補助線が、井戸から離れると段々密度が低くなっていく様子を表現しています。

# zoom in a bit, and show density estimate

SnowMap(xlim=c(7.5,16.5), ylim=c(7,16), polygons=TRUE, density=TRUE,

main=”Snow’s Cholera Map, Annotated”)

 

image008 図表 9 密度を可視化したSnowの地図

 

白地図からも作れます。次のコマンドを入力すると、路地が記入された白地図を作成。

install.packages(“sp”)

library(“sp”)

 

# streets

slist <- split(Snow.streets[,c(“x”,”y”)],as.factor(Snow.streets[,”street”]))

Ll1 <- lapply(slist,Line)

Lsl1 <- Lines(Ll1,”Street”)

Snow.streets.sp <- SpatialLines(list(Lsl1))

plot(Snow.streets.sp, col=”gray”)

title(main=”Snow’s Cholera Map of London (sp)”)

 

 

image009

図表 10 Snowの地図(路地のみの白地図)

 

次のコマンドを入力すると、コレラ死亡患者の場所を追加。

# deaths

Snow.deaths.sp = SpatialPoints(Snow.deaths[,c(“x”,”y”)])

plot(Snow.deaths.sp, add=TRUE, col =’red’, pch=15, cex=0.6)

 

image010

図表 11 Snowの地図(路地と死亡者の場所)

 

次のコマンドを入力すると、井戸の場所を追加。

# pumps

spp <- SpatialPoints(Snow.pumps[,c(“x”,”y”)])

Snow.pumps.sp <- SpatialPointsDataFrame(spp,Snow.pumps[,c(“x”,”y”)])

plot(Snow.pumps.sp, add=TRUE, col=’blue’, pch=17, cex=1.5)

text(Snow.pumps[,c(“x”,”y”)], labels=Snow.pumps$label, pos=1, cex=0.8)

image011

図表 12 Snowの地図(路地・死亡者の場所・井戸の場所)

 

使用したデータとサンプルコード

今回使用したデータは、Rの「HistData」というパッケージで用意されているものになります。統計やデータ可視化における歴史的なデータで代表的なものを一通りそろえたパッケージのようです。パッケージはGPLで公開されています。パッケージの詳細については、Webサイトを参照ください。

 

この記事で紹介したコード(R-consoleで入力したコマンド)も、「HistData」パッケージのページで例として紹介されているものになります。

 

最後に

この記事では、ワクチンなどが使えない19世紀に疫学・統計手法を活用してコレラ感染対策で成果を上げたSnowの事例を紹介しました。また、公開されているツールやデータを使って、Snowの事例で作成されたコレラ感染者の地図データを再現してみました。

 

特に後半は、自分がやってみたら意外と楽しかったという学生みたいな理由で紹介した内容でしたが、この記事が皆様の気づきになったり、少しでもお役に立ってたりしていれば幸いです。

 

 

■静永 誠(しずなが まこと)

メーカー系・独立系ソフトウェアハウスで、開発工程全般の実務に携わったほか、航空宇宙業界のソフトウェア開発プロセス調査や自動車業界でプロセスアセスメント、ソフトウェアベンダーでのアジャイル開発の推進など、開発プロセスの改善や標準化に従事。近年は開発者としてスクラムを利用した開発も推進している。

———————————————-

記事上の各データ・解説は作成時の公開情報等に基づき、編集・記載したものですが、その正確性・完全性を保証するものではありません。また、本資料の情報を利用されたことにより生じるいかなる損害についても責任を負うものではありません。