1. データはどこから持ってくる?
分析を始めるには、まず DataFrame にデータを入れる必要があります。データの入手方法はいくつかありますが、 実務で特によく使うのは次の3つです。
- 辞書(dict)から作る … 少量のデータを手で書くとき(前のレッスンで学習済み)
- リスト(レコード)から作る … 1件ずつのデータ(患者1人=1レコード)を集めたとき
- CSVファイルから読み込む … 実務で最も多い。検査機器やシステムから出力されたデータ
このレッスンでは、これらの方法と、逆に DataFrameをCSVとして書き出す方法まで学びます。
2. 辞書・リストから DataFrame を作る
辞書から作る方法は前のレッスンで学びました。もう一つ、「1件ずつの辞書」をリストにまとめて渡す 方法もよく使います。患者1人を1つの辞書(レコード)として扱う、直感的な作り方です。
💡 2つの作り方の使い分け:
- 列ごとの辞書(方法A)… すでに列単位でデータが揃っているとき
- レコードのリスト(方法B)… データを1件ずつ集める・追加していくとき(APIの応答やログもこの形が多い)
どちらも結果は同じDataFrameになります。データの持ち方に合わせて、書きやすい方を選べばOKです。
3. CSVを読み込む(read_csv)
実務でいちばん多いのが CSV(カンマ区切りのデータ) の読み込みです。
検査機器・電子カルテ・各種システムは、データをCSV形式で出力できることがほとんどです。
pandasでは pd.read_csv() 一発で、CSVをDataFrameに変換できます。
⚠ このコースでのCSVの扱い:
通常は pd.read_csv("data.csv") のようにファイル名を渡しますが、
このブラウザ学習環境には「ファイル」がありません。そこで本コースでは、
CSVの中身を文字列で用意し、io.StringIO で読み込む方法を使います。
「文字列をファイルのように扱う」テクニックで、書き方は pd.read_csv() とまったく同じです。
💡 read_csv は自動で型を判定:
read_csv は、1行目を自動的に列名(ヘッダー)として認識し、数値の列は数値型、
文字の列は文字列型として読み込んでくれます。読み込んだ直後に df.dtypes や
df.describe() で中身を確認するのが定番の流れです。
🩺 医療データ文脈:
検査結果のCSV、健診データ、レセプトデータなど、医療現場のデータの多くはCSVでやり取りされます。
read_csv でDataFrameに取り込めば、そこから先は pandas の強力な集計・抽出機能がすべて使えます。
「CSVを読み込む」が、医療データ分析の実質的なスタート地点です。
4. DataFrameをCSVに書き出す(to_csv)
分析・加工した結果を保存したいときは、逆方向の to_csv() を使います。
DataFrame をCSV形式の文字列(またはファイル)に変換できます。
💡 index=False を忘れずに:
to_csv() はデフォルトで左端のindex(行番号 0,1,2…)も出力します。
多くの場合この行番号は不要なので、index=False を付けて出力しないようにするのが定番です。
(自分のPCでは df.to_csv("result.csv", index=False) でファイル保存できます)
5. 練習問題
レコードのリストからDataFrameを作ろう
3人の患者データ(1人=1つの辞書)をリストにまとめて、DataFrame を作ってください。
田中: 年齢45・BMI22.5 / 佐藤: 年齢62・BMI28.1 / 鈴木: 年齢33・BMI24.0
ヒントを見る(答え+解説)
import pandas as pd
# 1人ずつの辞書をリストにまとめてください
records = [
{"氏名": "田中", "年齢": 45, "BMI": 22.5},
{"氏名": "佐藤", "年齢": 62, "BMI": 28.1},
{"氏名": "鈴木", "年齢": 33, "BMI": 24.0},
]
# DataFrame を作って表示してください
df = pd.DataFrame(records)
print(df)
1人=1つの辞書(レコード)をリストに入れ、pd.DataFrame(リスト) に渡すだけです。辞書のキーが自動的に列名になります。データを1件ずつ集めるときに便利な作り方です。
CSVを読み込んで集計しよう
下記のCSV文字列を io.StringIO で読み込み、年齢(age)の平均を表示してください。
ヒントを見る(答え+解説)
import pandas as pd
import io
csv_text = """name,age,bmi
Yamada,40,21.5
Ito,58,27.2
Nakamura,29,19.8"""
# io.StringIO で読み込んで、age の平均を表示してください
df = pd.read_csv(io.StringIO(csv_text))
print(df)
print("ageの平均:", df["age"].mean()) # 42.33...
pd.read_csv(io.StringIO(csv_text)) で文字列CSVをDataFrameにできます。年齢の平均は (40+58+29)/3 = 42.33...。read_csvは1行目を自動でヘッダーとして認識します。
DataFrameをCSVに書き出そう
下記の df を、行番号を付けずに(index=False で)CSV形式の文字列に変換して表示してください。
ヒントを見る(答え+解説)
import pandas as pd
df = pd.DataFrame({
"患者ID": ["P001", "P002"],
"診断名": ["高血圧", "糖尿病"],
})
# index=False でCSV文字列に変換して表示してください
csv_text = df.to_csv(index=False)
print(csv_text)
# 患者ID,診断名
# P001,高血圧
# P002,糖尿病
df.to_csv(index=False) で、左端の行番号を付けずにCSV文字列を作れます。index=False を省くと ,患者ID,診断名 のように先頭に行番号の列が付いてしまいます。
6. まとめ
このレッスンのポイント
- DataFrameは「列ごとの辞書」「レコードのリスト」「CSV」などから作れる
pd.read_csv()でCSVをDataFrameに読み込める(実務で最頻出)- ブラウザ環境ではファイルが無いので
io.StringIOで文字列を読む df.to_csv(index=False)でDataFrameをCSVに書き出せる- 「CSVを読み込む」が医療データ分析の実質的なスタート地点
自由に試してみましょう:
完了するとコース一覧に進捗が記録されます