Python環境を起動中... 初回のみ数秒かかります
Lesson 3 / 12

データの読み込みと作成

このレッスンで学ぶこと

  • 辞書・リストから DataFrame を作れる
  • CSV(カンマ区切りデータ)を read_csv で読み込める
  • DataFrame を to_csv でCSV形式に書き出せる
  • 実データを使った分析の「入口」を作れる

1. データはどこから持ってくる?

分析を始めるには、まず DataFrame にデータを入れる必要があります。データの入手方法はいくつかありますが、 実務で特によく使うのは次の3つです。

このレッスンでは、これらの方法と、逆に DataFrameをCSVとして書き出す方法まで学びます。

2. 辞書・リストから DataFrame を作る

辞書から作る方法は前のレッスンで学びました。もう一つ、「1件ずつの辞書」をリストにまとめて渡す 方法もよく使います。患者1人を1つの辞書(レコード)として扱う、直感的な作り方です。

sample_1.py
Ctrl+Enter
出力

💡 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() とまったく同じです。

sample_2.py
Ctrl+Enter
出力

💡 read_csv は自動で型を判定: read_csv は、1行目を自動的に列名(ヘッダー)として認識し、数値の列は数値型、 文字の列は文字列型として読み込んでくれます。読み込んだ直後に df.dtypesdf.describe() で中身を確認するのが定番の流れです。

🩺 医療データ文脈: 検査結果のCSV、健診データ、レセプトデータなど、医療現場のデータの多くはCSVでやり取りされます。 read_csv でDataFrameに取り込めば、そこから先は pandas の強力な集計・抽出機能がすべて使えます。 「CSVを読み込む」が、医療データ分析の実質的なスタート地点です。

4. DataFrameをCSVに書き出す(to_csv)

分析・加工した結果を保存したいときは、逆方向の to_csv() を使います。 DataFrame をCSV形式の文字列(またはファイル)に変換できます。

sample_3.py
Ctrl+Enter
出力

💡 index=False を忘れずに: to_csv() はデフォルトで左端のindex(行番号 0,1,2…)も出力します。 多くの場合この行番号は不要なので、index=False を付けて出力しないようにするのが定番です。 (自分のPCでは df.to_csv("result.csv", index=False) でファイル保存できます)

5. 練習問題

問題 1

レコードのリストからDataFrameを作ろう

3人の患者データ(1人=1つの辞書)をリストにまとめて、DataFrame を作ってください。
田中: 年齢45・BMI22.5 / 佐藤: 年齢62・BMI28.1 / 鈴木: 年齢33・BMI24.0

exercise_1.py
出力
ヒントを見る(答え+解説)
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件ずつ集めるときに便利な作り方です。

問題 2

CSVを読み込んで集計しよう

下記のCSV文字列を io.StringIO で読み込み、年齢(age)の平均を表示してください。

exercise_2.py
出力
ヒントを見る(答え+解説)
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行目を自動でヘッダーとして認識します。

問題 3

DataFrameをCSVに書き出そう

下記の df を、行番号を付けずに(index=False で)CSV形式の文字列に変換して表示してください。

exercise_3.py
出力
ヒントを見る(答え+解説)
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を読み込む」が医療データ分析の実質的なスタート地点

自由に試してみましょう:

free_practice.py
出力

完了するとコース一覧に進捗が記録されます