30日Python #6 もし、この値だったら(if)
「読むデータ」は、臨床医・医学研究者のための、Pythonと機械学習の連載。プログラミングの技術を身につけることから始め、自分のデータを「読み解く」力を鍛える。今回の#6では、条件によって処理を分ける「条件分岐(if)」を学ぶ。基準値を超えた患者だけを見つける、その第一歩だ。所要時間は5分。読むのに3分、手を動かすのに2分。
全員が、同じ扱いではない
前回、リストの中身を一つずつ処理できるようになった。だが臨床では、全員を同じように扱うわけではない。
採血の結果に目を通すとき、私たちは無意識に線を引いている。「カリウムが5.5を超えていたら要注意」「血圧が140以上なら高い」。基準値と照らし、超えていれば手を止め、そうでなければ流す。
この「もし〜だったら」という枝分かれの判断を毎日くり返している。
同じことを、コンピュータにもさせたい。値を見て、条件に当てはまるときだけ処理する。そのしくみが、条件分岐の if である。
要点
「if 条件: 」と書くと、その条件が成り立つときだけ、字下げした処理が実行される。
条件には比較を使う。「以上」は >=、「より大きい」は >、「等しい」は ==(イコールを2つ重ねる)。
else を添えれば、「そうでなければ」の処理も書ける。for と組み合わせれば、全員から条件に合う人だけを拾える。
1. 条件が成り立つときだけ、動かす
新しいセルに、こう書いて実行してみよう。
k = 5.8
if k >= 5.5:
print("高カリウム血症の疑い")これを実行すると
高カリウム血症の疑いと表示される。if k >= 5.5: は「もし k が5.5以上なら」という意味。条件が成り立つので、字下げした print が実行された。
ためしに k = 4.2 に変えて実行すると、今度は何も表示されない。
k = 4.2
if k >= 5.5:
print("高カリウム血症の疑い")条件に当てはまらないので、字下げの中身が飛ばされたのだ。if も for と同じく、字下げが「条件に当てはまったとき実行する範囲」を示す。
なお、等しいかを調べるときは == とイコールを2つ重ねる。一つの = は「箱に入れる」(第2回)で使ってしまったので、比較の際にはイコールを2つ重ねることで区別されている。
2. そうでなければ、を加える
「当てはまるとき」と「そうでないとき」で処理を分けるには、else を使う。
bp = 130
if bp >= 140:
print("高い")
else:
print("基準内")bp は130なので、条件に当てはまらず else の側
基準内が表示される。if と else、2つの道のどちらか一方が必ず表示される。
3. 繰り返しと、組み合わせる
ここからが本題だ。前回の for と組み合わせると、「全員の中から、条件に合う人だけを拾う」ことができる。
bp_list = [120, 145, 138, 162]
for bp in bp_list:
if bp >= 140:
print(bp)を実行すると
145
1624人分の血圧から、140以上の2人だけが表示された。for で一人ずつ取り出し、if で条件を確かめ、当てはまる人だけ print する。字下げが2段になっているのは、「繰り返しの中の、さらに条件の中」という入れ子を表している。
これは、何千人分のデータから基準を超えた患者を抽出する処理の、最も素朴な原型だ。実際にデータを扱うとき、この考え方がまたそのまま必ず生きてくる。
今日の実習(2分)
新しいセルで、次をやってみよう。
age = 70 を用意し、if age >= 65: のときだけ print("高齢") と表示させる。
else を加えて、65未満なら print("非高齢") と出るようにし、age の値を変えて両方の道を試す。
余裕があれば、age_list = [60, 72, 45, 80] を for で回し、65以上の人だけ表示させてみる。
字下げの段数(if だけなら1段、for の中の if なら2段)には、特に意識して、気をつけよう。
今日のまとめ
if は、条件によって処理を分けるしくみ。for と組み合わせれば、大勢の中から基準に合う人だけを拾い出せる。臨床で毎日くり返している「もし〜だったら」という判断を、コンピュータに肩代わりさせることができる。その入り口に立てた。
次回、第7回「ひとまとまりの作業に、名前をつける」
よく使う処理をまとめて呼び出せる「関数」を学ぶ。基礎編も、いよいよ終盤だ。
