プログラミングは、データを「変数」という名前付きの箱に入れ、その中身の種類である「データ型」を理解することから始まります。これは、カルテ項目に情報を書き込む作業と同じです。この基礎を固めることが、AI開発の全ての土台となります。
データに名前を付けて記憶させる仕組み。= を使い「変数名 = データ」の形でデータを代入します。patient_age のように意味のある名前を付けることが重要です。
int: 整数 (年齢, 回数)
float: 小数 (体温, 検査値)
str: 文字列 (氏名, ID)
bool: 真偽値 (True/False)
データ型が意図しないものだと計算エラーの原因になります。type()で型を確認し、int()やstr()などで適切な型に変換(キャスト)するスキルは不可欠です。
はじめに:コンピュータとの対話、最初の言葉
皆さん、こんにちは。前回の講義でAI開発のための環境構築、お疲れ様でした!準備が整ったところで、いよいよPythonという言語を使って、コンピュータと「対話」を始める時が来ました。
プログラミングの世界では、どんなに複雑なAIモデルを作るとしても、その第一歩は、データを「箱」に入れ、その箱に「ラベル」を貼ることから始まります。この「ラベル」が今回学ぶ変数であり、箱の中に何が入っているかの「種類」がデータ型です。
これは、皆さんが日常的に行っている作業と非常によく似ています。例えば、患者さんのカルテに「氏名」「年齢」「体温」「アレルギーの有無」といった項目(ラベル)を作り、それぞれに具体的な情報(文字列、数値、Yes/No)を書き込んでいく作業、まさにそれそのものです。
この講義では、AI開発の最も基本的な要素である、これら変数とデータ型について、医療現場での具体例を交えながら、一つ一つ丁寧に解き明かしていきます。この基礎をしっかり固めることが、今後の学習をスムーズに進めるための鍵となります。さあ、一緒にPythonの世界へ飛び込んでみましょう!
1. 変数 (Variables) – データに名前(ラベル)をつける
まず、プログラミングにおける最も基本的な概念、「変数」から始めましょう。
1.1 変数とは? 〜データをしまう「ラベル付きの箱」〜
変数とは、数値や文字列といったデータを一時的に記憶しておくための「箱」のようなものです。そして、その箱には、後から中身を簡単に見つけたり使ったりできるように、「名前(ラベル)」を付けます。この「名前付きの箱」そのものが変数です。
例えば、「patient_age」という名前の箱(変数)を用意して、そこに 65 という数値を入れる、といった具合です。こうすることで、私たちは後から「patient_ageという箱の中身を見せて」とコンピュータに指示するだけで、65という値をいつでも取り出すことができます。
1.2 変数の作り方(代入)と命名ルール
Pythonで変数を作るのはとても簡単です。=(イコール)記号を使います。
変数名 = データ
注意したいのは、プログラミングにおける = は、数学の「等しい」という意味ではなく、「右側のデータを、左側の名前の変数(箱)に入れる」という代入を意味する、ということです。
変数の名前は自由につけられますが、誰が見ても分かりやすいように、いくつかのルールと慣習があります。
- ルール:
- アルファベット、数字、アンダースコア
_が使えます。 - ただし、名前の先頭に数字は使えません(例:
2nd_patientはNG)。 - 大文字と小文字は区別されます(
ageとAgeは別の変数です)。
- アルファベット、数字、アンダースコア
- 慣習(PEP 8 スタイルガイドより(3)):
- スネークケース:
patient_ageのように、単語間をアンダースコア_で繋ぐのが一般的です。 - 意味のある名前:
aやxのような一文字の変数名ではなく、body_temperatureのように、何が入っているか一目でわかる名前をつけましょう。これは、後から自分や他の人がコードを読んだときの理解を大いに助けます。
- スネークケース:
Pythonコード例:変数を作って使ってみる
実際に、医療現場で扱うようなデータを変数に入れて、その中身を表示してみましょう。
# --- 1. 様々な種類のデータを持つ変数を作成します ---
# 患者さんの年齢を 'patient_age' という名前の変数に代入します。
patient_age = 65
# 患者さんの体温を 'body_temperature' という変数に代入します。
body_temperature = 36.8
# 患者さんの名前を 'patient_name' という変数に代入します。
# 日本語のような文字列も、クォーテーション "..." や '...' で囲めば問題なく扱えます。
patient_name = "田中 太郎"
# アレルギーの有無を 'has_allergy' という変数に代入します。
# True(真)か False(偽)のどちらかの値です。
has_allergy = False
# --- 2. 変数の中身を表示してみましょう ---
# print()関数は、()の中身を画面に出力する命令です。
print("--- 患者情報 ---")
# f-string(フォーマット済み文字列リテラル)という書き方を使うと、
# 文字列の中に {変数名} を埋め込んで、きれいに表示できます。非常によく使うテクニックです。
print(f"名前: {patient_name}")
print(f"年齢: {patient_age} 歳")
print(f"体温: {body_temperature} 度")
print(f"アレルギーの有無: {has_allergy}")
# === ここから下が上記のprint文による実際の出力 ===
# --- 患者情報 ---
# 名前: 田中 太郎
# 年齢: 65 歳
# 体温: 36.8 度
# アレルギーの有無: False
2. データ型 (Data Types) – 箱の中身の種類を知る
変数という「箱」には、様々な「種類」のデータを入れることができます。Pythonは、箱の中身の種類を自動で認識してくれる賢い言語です。ここでは、医療AI開発で特によく使う4つの基本的なデータ型を見ていきましょう。
2.1 整数 (`int`) – 個数や回数を数える
整数(integer)は、... -2, -1, 0, 1, 2 ... のような、小数点のつかない数値のことです。
- 医療における例: 患者さんの年齢、入院日数、来院回数、脈拍数など。
コード例:
# 来院回数を変数に代入
visit_count = 5
# type()関数を使うと、変数のデータ型を調べることができます。
print(f"変数 visit_count の値: {visit_count}")
print(f"visit_count のデータ型: {type(visit_count)}")
# === 出力 ===
# 変数 visit_count の値: 5
# visit_count のデータ型: <class 'int'>
2.2 浮動小数点数 (`float`) – 精密な測定値を扱う
浮動小数点数(float)は、36.8 や 120.5 のような、小数点以下の部分を持つ数値です。「浮動」という名前は、コンピュータ内部での表現方法に由来しますが、まずは「小数点のある数値」と覚えておけば大丈夫です。
- 医療における例: 体温、身長・体重、血圧、血液検査の結果(例: 血糖値、コレステロール値)、薬剤の投与量など、精密な測定値のほとんどがこれにあたります。
コード例:
# BMIを計算した結果を変数に代入
bmi = 22.75
print(f"変数 bmi の値: {bmi}")
print(f"bmi のデータ型: {type(bmi)}")
# === 出力 ===
# 変数 bmi の値: 22.75
# bmi のデータ型: <class 'float'>
2.3 文字列 (`str`) – 言葉やIDを記録する
文字列(string)は、「田中 太郎」や「循環器内科」のような、文字の連なりです。シングルクォーテーション '...' またはダブルクォーテーション "..." で囲んで表現します。
- 医療における例: 患者氏名、患者ID、診療科名、薬剤名、臨床メモ、遺伝子配列(例: “ATGC…”)など、テキストで表現されるもの全般。
コード例:
# 診療科名を変数に代入
department = "循環器内科"
# 文字列同士は + 記号で連結することができます。
full_info = department + "の田中さん"
print(f"変数 full_info の値: {full_info}")
print(f"department のデータ型: {type(department)}")
# === 出力 ===
# 変数 full_info の値: 循環器内科の田中さん
# department のデータ型: <class 'str'>
2.4 真偽値 (`bool`) – Yes/Noを判断する
真偽値(boolean)は、True(真)かFalse(偽)の、二つの値しか取りません。これは、プログラムが条件に基づいて判断を下す際の、まさに心臓部となる非常に重要なデータ型です。
- 医療における例: 特定の疾患の有無 (
has_diabetes = True)、アレルギーの有無、検査結果の陽性/陰性 (is_positive = True)、あるいは「血圧が140以上か?」といった比較の結果など。
コード例:
# 検査結果が陽性であったことを変数に代入
is_positive = True
print(f"変数 is_positive の値: {is_positive}")
print(f"is_positive のデータ型: {type(is_positive)}")
# 比較演算子(> や < など)の結果も、真偽値になります。
high_blood_pressure = 150 > 140 # 150は140より大きいので、結果はTrueになるはず
print(f"\n150 > 140 の結果は?: {high_blood_pressure}")
print(f"そのデータ型は?: {type(high_blood_pressure)}")
# === 出力 ===
# 変数 is_positive の値: True
# is_positive のデータ型: <class 'bool'>
#
# 150 > 140 の結果は?: True
# そのデータ型は?: <class 'bool'>
3. 型の確認と変換 (Type Checking and Conversion)
実際の医療データは、必ずしもきれいな形で提供されるとは限りません。例えば、CSVファイルから読み込んだ数値が、意図せず文字列として扱われてしまう、といったことは日常茶飯事です。このような場合に、データ型を正しく確認し、必要に応じて変換するスキルが重要になります。
type()関数: 変数やデータの中身がどのデータ型かを確認するための必須ツールです。「自分が今扱っているデータの『正体』が何なのかわからなくなった時、このtype()は最高の相棒になります。」- 型キャスト(型変換):
int(),float(),str()といった関数を使うことで、データ型を明示的に変換できます。これを型キャストと呼びます。
Pythonコード例:文字列を数値に変換する
# --- 1. CSVから読み込んだ、という想定で文字列型の年齢データを用意 ---
# 数字ですが、クォーテーションで囲まれているので「文字列」です。
age_from_csv = "72"
print(f"読み込んだままのデータ: '{age_from_csv}'")
print(f"そのデータ型: {type(age_from_csv)}")
# --- 2. このままだと計算できない! ---
# 例えば、この年齢に1を足そうとすると…
try:
age_from_csv + 1
except TypeError as e:
# エラーが発生します!
print(f"\n'age_from_csv + 1' を実行するとエラー: {e}")
print("# 文字列と数値を直接足し算することはできません。")
# --- 3. int()関数で、文字列を整数に変換(キャスト)! ---
# 文字列 '72' を、整数の 72 に変換します。
age_as_integer = int(age_from_csv)
print(f"\nint()で変換した後のデータ: {age_as_integer}")
print(f"変換後のデータ型: {type(age_as_integer)}")
# --- 4. 変換後は、正しく計算できる! ---
# 整数に変換されたので、足し算のような数学的な計算が可能になります。
age_next_year = age_as_integer + 1
print(f"\n1年後の年齢: {age_next_year}")
# === ここから下が上記のprint文による実際の出力 ===
# 読み込んだままのデータ: '72'
# そのデータ型: <class 'str'>
#
# 'age_from_csv + 1' を実行するとエラー: can only concatenate str (not "int") to str
# # 文字列と数値を直接足し算することはできません。
#
# int()で変換した後のデータ: 72
# 変換後のデータ型: <class 'int'>
#
# 1年後の年齢: 73
4. まとめと次のステップ
今回は、Pythonプログラミングの本当に最初の、しかし最も重要な一歩である「変数」と「データ型」について学びました。
- 変数: データに名前を付けて管理するための「ラベル付きの箱」。
- データ型: 箱の中身の種類(整数、小数点数、文字列、真偽値など)。
- 型の重要性: 正しい計算や処理を行うためには、データ型を意識し、必要に応じて変換することが不可欠。
データを名前のついた箱に入れ、その種類を意識すること。この単純な作業が、この先私たちが構築していく、どんなに複雑なAIモデルの全ての土台となります。
しかし、一人の患者さんについて、複数の検査値や複数の受診日がある場合、データを一つ一つ変数に入れていては大変ですよね。次回、「1.3:初心者でもわかるPythonの基本②」では、これらの複数のデータをまとめて効率的に管理するための、リストや辞書といった『もっと大きなデータの入れ物(データ構造)』について学んでいきます。
参考文献
- van Rossum G, Drake FL, editors. Python 3 Reference Manual. Scotts Valley, CA: CreateSpace; 2009.
- Lutz M. Learning Python. 5th ed. Sebastopol, CA: O’Reilly Media; 2013.
- Style Guide for Python Code (PEP 8). [Internet]. Python.org. [cited 2025 Jun 6]. Available from: https://www.python.org/dev/peps/pep-0008/
ご利用規約(免責事項)
当サイト(以下「本サイト」といいます)をご利用になる前に、本ご利用規約(以下「本規約」といいます)をよくお読みください。本サイトを利用された時点で、利用者は本規約の全ての条項に同意したものとみなします。
第1条(目的と情報の性質)
- 本サイトは、医療分野におけるAI技術に関する一般的な情報提供および技術的な学習機会の提供を唯一の目的とします。
- 本サイトで提供されるすべてのコンテンツ(文章、図表、コード、データセットの紹介等を含みますが、これらに限定されません)は、一般的な学習参考用であり、いかなる場合も医学的な助言、診断、治療、またはこれらに準ずる行為(以下「医行為等」といいます)を提供するものではありません。
- 本サイトのコンテンツは、特定の製品、技術、または治療法の有効性、安全性を保証、推奨、または広告・販売促進するものではありません。紹介する技術には研究開発段階のものが含まれており、その臨床応用には、さらなる研究と国内外の規制当局による正式な承認が別途必要です。
- 本サイトは、情報提供を目的としたものであり、特定の治療法を推奨するものではありません。健康に関するご懸念やご相談は、必ず専門の医療機関にご相談ください。
第2条(法令等の遵守)
利用者は、本サイトの利用にあたり、医師法、医薬品、医療機器等の品質、有効性及び安全性の確保等に関する法律(薬機法)、個人情報の保護に関する法律、医療法、医療広告ガイドライン、その他関連する国内外の全ての法令、条例、規則、および各省庁・学会等が定める最新のガイドライン等を、自らの責任において遵守するものとします。これらの適用判断についても、利用者が自ら関係各所に確認するものとし、本サイトは一切の責任を負いません。
第3条(医療行為における責任)
- 本サイトで紹介するAI技術・手法は、あくまで研究段階の技術的解説であり、実際の臨床現場での診断・治療を代替、補助、または推奨するものでは一切ありません。
- 医行為等に関する最終的な判断、決定、およびそれに伴う一切の責任は、必ず法律上その資格を認められた医療専門家(医師、歯科医師等)が負うものとします。AIによる出力を、資格を有する専門家による独立した検証および判断を経ずに利用することを固く禁じます。
- 本サイトの情報に基づくいかなる行為によって利用者または第三者に損害が生じた場合も、本サイト運営者は一切の責任を負いません。実際の臨床判断に際しては、必ず担当の医療専門家にご相談ください。本サイトの利用によって、利用者と本サイト運営者の間に、医師と患者の関係、またはその他いかなる専門的な関係も成立するものではありません。
第4条(情報の正確性・完全性・有用性)
- 本サイトは、掲載する情報(数値、事例、ソースコード、ライブラリのバージョン等)の正確性、完全性、網羅性、有用性、特定目的への適合性、その他一切の事項について、何ら保証するものではありません。
- 掲載情報は執筆時点のものであり、予告なく変更または削除されることがあります。また、技術の進展、ライブラリの更新等により、情報は古くなる可能性があります。利用者は、必ず自身で公式ドキュメント等の最新情報を確認し、自らの責任で情報を利用するものとします。
第5条(AI生成コンテンツに関する注意事項)
本サイトのコンテンツには、AIによる提案を基に作成された部分が含まれる場合がありますが、公開にあたっては人間による監修・編集を経ています。利用者が生成AI等を用いる際は、ハルシネーション(事実に基づかない情報の生成)やバイアスのリスクが内在することを十分に理解し、その出力を鵜呑みにすることなく、必ず専門家による検証を行うものとします。
第6条(知的財産権)
- 本サイトを構成するすべてのコンテンツに関する著作権、商標権、その他一切の知的財産権は、本サイト運営者または正当な権利を有する第三者に帰属します。
- 本サイトのコンテンツを引用、転載、複製、改変、その他の二次利用を行う場合は、著作権法その他関連法規を遵守し、必ず出典を明記するとともに、権利者の許諾を得るなど、適切な手続きを自らの責任で行うものとします。
第7条(プライバシー・倫理)
本サイトで紹介または言及されるデータセット等を利用する場合、利用者は当該データセットに付随するライセンス条件および研究倫理指針を厳格に遵守し、個人情報の匿名化や同意取得の確認など、適用される法規制に基づき必要とされるすべての措置を、自らの責任において講じるものとします。
第8条(利用環境)
本サイトで紹介するソースコードやライブラリは、執筆時点で特定のバージョンおよび実行環境(OS、ハードウェア、依存パッケージ等)を前提としています。利用者の環境における動作を保証するものではなく、互換性の問題等に起因するいかなる不利益・損害についても、本サイト運営者は責任を負いません。
第9条(免責事項)
- 本サイト運営者は、利用者が本サイトを利用したこと、または利用できなかったことによって生じる一切の損害(直接損害、間接損害、付随的損害、特別損害、懲罰的損害、逸失利益、データの消失、プログラムの毀損等を含みますが、これらに限定されません)について、その原因の如何を問わず、一切の法的責任を負わないものとします。
- 本サイトの利用は、学習および研究目的に限定されるものとし、それ以外の目的での利用はご遠慮ください。
- 本サイトの利用に関連して、利用者と第三者との間で紛争が生じた場合、利用者は自らの費用と責任においてこれを解決するものとし、本サイト運営者に一切の迷惑または損害を与えないものとします。
- 本サイト運営者は、いつでも予告なく本サイトの運営を中断、中止、または内容を変更できるものとし、これによって利用者に生じたいかなる損害についても責任を負いません。
第10条(規約の変更)
本サイト運営者は、必要と判断した場合、利用者の承諾を得ることなく、いつでも本規約を変更することができます。変更後の規約は、本サイト上に掲載された時点で効力を生じるものとし、利用者は変更後の規約に拘束されるものとします。
第11条(準拠法および合意管轄)
本規約の解釈にあたっては、日本法を準拠法とします。本サイトの利用および本規約に関連して生じる一切の紛争については、東京地方裁判所を第一審の専属的合意管轄裁判所とします。
For J³, may joy follow you.

