30日Python #9 表を、まるごと読み込む(pandas)
「読むデータ」は、臨床医・医学研究者のための、Pythonと機械学習の連載。プログラミングの技術を身につけることから始め、自分のデータを「読み解く」力を鍛える。今回の#9では、医療データの表を扱う道具「pandas」に出会う。基礎編で集めた道具が、ここから「本物のデータ」に向き合いはじめる。所要時間は5分。読むのに3分、手を動かすのに2分。
Excelの表を、コードの中へ
前回、辞書を束ねれば表になると話した。年齢・性別・検査値を項目名つきで記録し、何人分も並べる。
この手順は、私たちが日頃Excelで見ている表そのものだ。
だが、辞書のリストを手で書き続けるのは現実的ではない。何千人分ものデータは、たいていExcelのファイルや、もう少し汎用的なファイル形式であるCSVとして存在している。それを、コードの中に丸ごと読み込んで扱いたい。
そのための道具が、pandas(パンダス)だ。Pythonでデータを扱うとき、ほぼ必ず使われる定番の道具で、表形式のデータを驚くほど簡単に操れる。
今日はまず、実際にExcelの表を読み込む前の段階として、より簡単な表を読み込み、目で眺めるところまで進める。
要点
pandasは、表形式データを扱う道具。import pandas as pd の一行で呼び出して使う。
読み込んだ表は「データフレーム」と呼ばれる。行が患者、列が項目に対応する。前回の「辞書を束ねた表」そのものだ。
.head() で先頭数行を、.shape で行数・列数を確認できる。まず全体を眺めるのが、データを読む第一歩。
1. pandasを、呼び出す
新しいセルで、まずこの一行を実行する。
import pandas as pdこれは「pandasという道具を読み込み、これからは pd という短い名前で呼ぶ」という意味だ。
関数(第7回)が誰かの用意した処理だったように、pandasも誰かが作った道具一式で、import で呼び出して使う。as pd は、毎回 pandas と打つ代わりの略称で、世界共通の慣習になっている。
つまりpandasを使うにあたって、import pandas as pd はひとつながりの魔法の決まり文句だ。
2. 表を、作って読み込む
本来はファイルから読み込むことが多いが、今日はまず、前回の「辞書を束ねた表」をそのままpandasに渡してみよう。
data = {
"age": [65, 70, 58, 80],
"sex": ["F", "M", "F", "M"],
"k": [4.2, 5.8, 3.9, 4.5],
}
df = pd.DataFrame(data)
df実行すると、行と列のそろった、きれいな表がこう表示される。
age sex k
0 65 F 4.2
1 70 M 5.8
2 58 F 3.9
3 80 M 4.5pd.DataFrame( ) が、項目名と値の集まりを「データフレーム」(pandasの表)に変えてくれた。左端の0,1,2,3は行番号(第4回と同様に0始まり)で、各行が一人の患者にあたる。いちばん上の age sex k が列の見出し、つまり前回覚えた辞書のキーがそのまま列名になっている。
この df(データフレームの慣用的な名前)が、これから何度も登場する主役だ。
3. 解析前にまず、全体を眺める
Pythonで解析をするためにデータを入手したら、いきなり解析から始めるのではなく、まずデータの概要を眺めるのが賢明だ。
これは臨床でカルテをまず通読するのと同じ、最初の作法だ。必ず解析する前にデータを外観するクセをつけること、これは非常に重要である。
データフレームの先頭数行を見るには .head() を用いる。
df.head()実行すると、こう表示される。
age sex k
0 65 F 4.2
1 70 M 5.8
2 58 F 3.9
3 80 M 4.5今回は4行しかないので全ての行が表示されているが、.head() は何千行のデータであっても先頭5行だけを返す。だから、ファイルを開いた直後でも画面が埋め尽くされることなく、「どんな列があり、どんな値が入っているか」をひと目で確かめられる。
表の大きさは .shape で分かる。
df.shapeを実行すると、こう表示される。
(4, 3)「4行・3列」、つまり患者4人、項目3つ、とわかる。
ファイルを読み込んだ直後、「何人分のデータで、項目はいくつあるか」を真っ先に確認する。そその癖が、後の大きな失敗を未然に防いでくれる。
今日の実習(2分)
新しいセルで、以下を上から順にやってみよう。
本文の data(列で持つ辞書)から df = pd.DataFrame(data) を作り、df を実行して表が表示されることを確かめる。
df.shape を実行し、(4, 3)、患者4人で、項目3つであることを確かめる。
data に検査項目を一つ増やす。"bp": [120, 145, 138, 162] を加えてから df = pd.DataFrame(data) を作り直す。df.shape が (4, 4) に変わることを確かめる。列が一つ増えると、右側の数字が増える。
参考.
data = {
"age": [65, 70, 58, 80],
"sex": ["F", "M", "F", "M"],
"k": [4.2, 5.8, 3.9, 4.5],
"bp": [120, 145, 138, 162],
}列を足すたびに .shape の二つ目の数字が動く。表の形が数字で見える、この感覚を、実際に指でも掴んでおこう。
今日のまとめ
pandasは、表形式データを扱う定番の道具である。
読み込んだ表(データフレーム)は、行が患者・列が項目で、前回の「辞書を束ねた表」と同じ構造をしている。データを受け取ったら、まず .head() と .shape で全体を眺める。それが、データを読む最初の一歩になる。
次回、第10回「ファイルから、データを開く」
手元のCSVファイルを実際に読み込む。あなた自身のデータを、コードの中へ招き入れる回だ。
