CNNが国勢調査データから全米の人種・民族マップを制作|Built with Mapbox
見出し画像

CNNが国勢調査データから全米の人種・民族マップを制作|Built with Mapbox

ジョン・キーフ氏はCNNのシニア・データ&ビジュアル編集者で、気候を専門としています。彼はデータジャーナリズムの分野で長い経験があり、初心者に教えることにも力を入れています。彼らが作成した全米の人種と民族に関するドット密度マップに関して、2020年の国勢調査による主要データの発表後、わずか数時間でどのようにしてこのマップを作成したのかをジョン氏にインタビューしました。

以下インタビュー内容(私=ジョン氏)

CNNビジュアル・ニュース・チームは国勢調査データ公開にあたり入念に準備していたため、どんな種類のデータを抽出すべきなのか、自分たちが作りたいものや、他のジャーナリストが必要とするものについても、ある程度把握していました。

2010年の国勢調査の発表以来、私はドット密度の人種・民族マップに触発されてきました。New York Times紙は、2010年の国勢調査の発表後すぐに、地図を作成しました(Flashを使用していたため、現在は見れませんが、2015年に新しいものが作られました)。Cooper Center for Public Serviceは、Washington Postと同様に美しいバージョンを作成しました。

本マップの準備のために、テストデータと2010年の国勢調査データを使って、全米のベースレイヤーを素早く構築できるかどうかを約1週間かけて確認しました。リリースは木曜日の午後1時だったので、週末までに完成させたいと考えていました。


それは可能なのでしょうか?

国勢調査局は、ロードアイランド州のいくつかの郡のダミーデータを、実際に公開する数字と同じ形式で提供してくれました。そのため、Pythonスクリプトを事前に作成し、データの取り込みと処理を迅速に行い、州、郡、場所、国勢調査区に分けて分析を行うことができました。

画像1

画像2

まず2010年のデータを使って、マンハッタンのドットマップを作成しました。マンハッタンは私がよく知っているエリアであり、何度もマッピングしたことがありました。
その後、ニューヨーク市全域、ニューヨーク州、カリフォルニア州も試してみました。最後にロードアイランド州のダミーデータを使ってみました。これらにより、データがあれば、すぐに全米マップが作れると確信しました。


どのようにして全米ドット密度マップを早く作ったか

国勢調査区や郵便番号レベルのデータをズーム可能な地図にするのは、以前は大変な作業でした。なんとかしてデータを処理して、国全体のイメージタイルを有用なズームレベルまで生成し、それらのタイルをすべてホスティングしなければなりませんでした。しかし今回は、3つのコンポーネントを使うことで、素早く作業を進めることができました。

まず一つ目は「Mapshaper」です。
New York Times紙のマシュウ・ブロック氏が開発したこのツールが、他のデータマッピングの世界にどれほどの恩恵を与えているか、計り知れません。ブロック氏は「ドット密度マップを作成するために、ランダムな点で多角形を作成する」という-dotsコマンドを入れていました。そして、そのコマンドをスクリプトに連ねることで、手順を素早く繰り返すことができました。私は、各州の国勢調査票のシェイプファイルをダウンロードし、Mapshaperを使って、そのシェイプと2020年の人種別・民族別(ヒスパニック/ラテン系)の人口データを統合しました。そして、-dotsコマンドを使って、各トラクトに適切な数と色のドットをプロットし、各州のポイントが詰まったGeoJSONファイルを作成しました。

2つ目は「Tippecanoe」です。
Mapboxでは、従来のかさばるイメージタイルではなく、データから構築されたベクタータイルを表示できることを知っていたので、ライアン・マクロウ氏による以前のHow-I-Made-itポストを見つけました。彼は私がやりたかったことを、国勢調査の住宅データを使って正確にやってくれていました。
「Tippecanoe」は私のフォルダにある州のGeoJSONファイルを単一の.mbtilesファイルに変換し、CNN Mapboxアカウントで高速にホスティングできるようにアップロードしてくれました。Mapbox Tiling Serviceは、Tippecanoneをインストールして自分のコンピュータでファイルを処理しなくても、これを行うことができます。

3つ目は、「CNNの山火事マップ」です。
同僚のダニエル・ウルフが率いるビジュアル・ニュース・チームは、すでに人気の高いMapboxベースのマップを持っていたので、ドット密度マップのフロントエンドをゼロから作る必要はありませんでした。これが短期間で完成させるための鍵となりました。


データのチャレンジ

技術的に解決しなければならない課題は2つありました。1つ目は、国勢調査区はしばしば水域周辺に広がっていることです。ドットをランダムに配置すると、湖や川に住んでいる人が出てきてしまうのです。これはニューヨーク市が良いテストケースでした。下手すると、ハドソン川に人が住んでいることになってしまうのです。

ポイントは、ドットを配置する前に、各州の国勢調査区から水域を差し引くことです。そのために、国勢調査のFTPサイトから、全米の各郡の「水域」シェープファイルをダウンロードしました。(ウェブからファイルをダウンロードするよりも、ftp2.census.gov/geo/tiger/TIGER2020/AREAWATERを指す実際のFTPクライアントを使用する方が簡単でした)。その後、Mapshaperの-inputコマンドを使って州の各郡の水ファイルを読み、"combine-files "フラグを使ってそれらを1つの州の水geojsonファイルにマージしました。

以下はそのための makefile のコードです

# usage: make water STATE=06
water:
# note that I've previously downloaded all county water files from /ftp2.census.gov/geo/tiger/TIGER2020/AREAWATER
# to /Volumes/jkeefe-data/2020_Census/AREAWATER on my computer
mkdir -p ./tmp/water
rm ./tmp/water/*.*
cd /Volumes/jkeefe-data/2020_Census/AREAWATER; unzip -o "tl_2020_$(STATE)*.zip" -d /Users/keefe/cnnvis-census2020-dot-maps/tmp/water
npx mapshaper -i './tmp/water/*.shp' combine-files \
-simplify 40% \
-merge-layers \
-proj EPSG:4326 \
-o datawork/water/water_$(STATE).geojson

(この後、全米「areawater」ファイルを発見したので、これが役に立ったかもしれません)
そして、Mapshaper の -erase コマンドを使って、各州の水域をその tracts geojson ファイルから差し引きました。

もう一つの大きなハードルは、アメリカ東海岸では人口密度が非常に高いことです。ズームアウトするとデータポイントの数が多すぎて、1ドットあたり150人でも一部のベクタータイルに収まらないということがおきます。Tippecanoeでは、このような場合に警告を出し、必要に応じて人口密度の高い地域のデータを削除する設定もあります。しかし、私はビジュアライゼーションの中で1つのドットも失いたくありませんでした。

最初に行った修正は、ズームレベルを7に制限し、ニュージャージー州の大きさよりも遠くにはズームアウトできないようにすることでした。同僚から「どうしてもアメリカ全体を見たい」と言われ、それを実現するために、あるアイデアを思いつきました。

Mapshaperコマンドをすべてコード化していたので、-dotパラメータを調整して、スケールが300人/ドットと900人/ドットの2つの新しいGeoJSONファイル(そしてタイルセット)を作るのはとても簡単でした。これらのタイルセットをMapboxにアップロードし、Mapbox Studioを使って各タイルセットを表示する際のズームレベルを制限し、ズームレベルに応じてレジェンドが変わるように設定しました。

画像3

しかし、いざリリースされてみると、予想外のことが起きました。国勢調査局は、私たちが期待していたような「全米」データファイルを作成していませんでした。すべての人口データは州ごとにまとめられていたので、全国的な分析や地図を作るためには、州のデータを集計しなければなりませんでした。

チャットログによると、私は午後4時13分にドット密度マップに目を向け、用意したスクリプトを実行し、ユーザーインターフェースを微調整し、チームからのフィードバックを実装しました。そして6時間後に公開することができました。


マップのスタイリング

ドット密度のベースマップの全体的なデザインには、Mapbox Studioを使用しました。
Mapbox Studioでは、土地、水、道路などの地図の特徴をコントロールできるのがとても気に入っています。色だけでなく、ラベルの密度なども選択できます。
様々な機能があるなかで最も重要なのは、レイヤーの選択ができるという点です。私が好きなのは、一番上のラベル、次にデータ、次にベースレイヤーの順です。そして、フロントエンドのディスプレイを制作する前に、チームからのフィードバックを取り入れながら、すべてをリアルタイムで設定することができました。

とはいえ、Mapbox Studioは、必要なものを作るためにかなりの試行錯誤を要することもあります。もっとわかりやすいドキュメントと、機能の使い方の事例を増やしてほしいと思います。例えば、リリース後に何人かの方から「ドットに使った2色がほとんど同じに見える」というご意見をいただきました。そこで、私たちはそれらを変更することにしました。

画像4

私は制作上の理由から、geojsonファイルに「fill」という変数で色をエンコードしていたのですが、Mapbox studioで「リアルタイム」に変更できると思い込んでいました。しかし、その方法を見つけるのは大変でした。試行錯誤の結果、データ条件を使って必要なものを作る方法がわかりました。


国勢調査のデータを使ってマップを作り続ける

2020年の国勢調査のデータを使ったマップを公開した後、Twitterではたくさんの親切なコメントが寄せられました。閲覧者も、このマップに多くの時間を費やし、国勢調査の発表から数日後、数週間後にも大きな反響があったようです。

国勢調査のネタはまだまだありますし、今年の後半には世帯や遺産などの詳細な国勢調査データが発表されるので、それに向けていろいろと調べてみたいと思います。


・・・


ジョン氏、マップ制作プロセスを教えていただきありがとうございました!次はどんなマップを作ってくれるのか楽しみです。

国勢調査データを使って地図を作っている方は、ぜひチェックしたいので、Twitterにシェアお願いします。

*本記事は、Mapbox Inc. Blogの翻訳記事です。Call for Codeは日本からも参加可能です。


【関連記事】

お問い合わせは下記までご連絡ください
https://www.mapbox.jp/contact

Twitterでは毎日情報を発信しています!ぜひフォローしてください!

嬉しい!ありがとうございます!
Mapbox Japanの公式noteです。地図づくりをスマートにする地図開発プラットフォームを提供しています。主にサービスの最新情報や導入事例などを発信します。 お問い合わせはこちら:https://www.mapbox.jp/contact