⛽
【 GAS & Excel 】GAS(Google App Script)を用いたテストデータ生成
はじめに
様々な場面でテストデータが必要になるかと思われます。ChatGPT
やClude
を用いたデータ生成もありますが、個人的にはExcelのデータにも落とし込めるGASを用いた方法がやりやすいと感じたため、まとめている。
Apps Script
を開く
1. - スプレッドシートデータのメニューバーから「拡張機能」→「Apps Script」を選択する。
2.コードを貼り付け保存する
-
Apps Scriptが正しく開くか確認。
-
以下のコードを貼り付ける。
医療に関連するデータが自動的に生成されるようになっている
function generateData() {
// 列名の設定
const sheet = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
sheet.appendRow(["ID", "氏名", "所属", "年齢", "性別", "疾患", "上限日数", "入院日", "入院時FIM-m", "入院時予測FIM-m", "退院日", "退院時FIM-m", "FIM利得", "在院日数", "在院日数/上限日数", "実績指数"]);
// 列で変数や定数を定義する必要があるものはここで定義する
const fullNames = [
"佐藤太郎", "鈴木次郎", "高橋花子", "田中一郎", "伊藤二郎", "渡辺三郎", "山本四郎", "中村五郎", "小林六郎", "加藤七郎",
"吉田八郎", "山田九郎", "佐々木十郎", "山口一花", "松本二花", "井上三花", "木村四花", "林五花", "斎藤六花", "清水七花"
];
const departments = ["病棟①", "病棟②", "病棟③"];
const diseases = ["①", "②", "③", "④", "⑤"];
const genders = ["男性", "女性"];
const maxDays = { "①": 150, "②": 180, "③": 90, "④": 60, "⑤": 90 };
// 入院日の期間を定義
const START_DATE = new Date(2023, 0, 1); // 2023年1月1日
const END_DATE = new Date(2023, 11, 31); // 2023年12月31日
// 定数に値を埋め込む
for (let i = 1; i <= 100; i++) {
const fullName = fullNames[Math.floor(Math.random() * fullNames.length)];
const department = departments[Math.floor(Math.random() * departments.length)];
const age = Math.floor(Math.random() * 83) + 18;
const gender = genders[Math.floor(Math.random() * genders.length)];
const disease = diseases[Math.floor(Math.random() * diseases.length)];
const maxDaysForDisease = maxDays[disease];
const admissionDate = randomDate(START_DATE, END_DATE);
const dischargeDate = new Date(admissionDate.getTime() + Math.random() * (365 * 24 * 60 * 60 * 1000));
const fimAdmission = Math.floor(Math.random() * 79) + 13;
const fimPrediction = fimAdmission + Math.floor(Math.random() * (91 - fimAdmission + 1));
const fimDischarge = fimPrediction + Math.floor(Math.random() * (91 - fimPrediction + 1));
const fimGain = fimDischarge - fimAdmission;
const lengthOfStay = Math.ceil((dischargeDate - admissionDate) / (1000 * 60 * 60 * 24));
const stayRatio = lengthOfStay / maxDaysForDisease;
const performanceIndex = fimGain / stayRatio;
sheet.appendRow([
i,
fullName,
department,
age,
gender,
disease,
maxDaysForDisease,
formatDate(admissionDate),
fimAdmission,
fimPrediction,
formatDate(dischargeDate),
fimDischarge,
fimGain,
lengthOfStay,
Number(stayRatio.toFixed(2)),
Number(performanceIndex.toFixed(2)),
]);
}
}
// 指定された期間内でランダムな日付を生成する関数
function randomDate(start, end) {
return new Date(start.getTime() + Math.random() * (end.getTime() - start.getTime()));
}
// 日付を "YYYY-MM-DD" 形式でフォーマットするヘルパー関数
function formatDate(date) {
const year = date.getFullYear();
const month = String(date.getMonth() + 1).padStart(2, '0');
const day = String(date.getDate()).padStart(2, '0');
return `${year}-${month}-${day}`;
}
- 保存するをクリックする。
3.権限関連の手続きを行う
-
「権限を確認」をクリックする。
-
自分のアカウントを選択する。
-
「詳細を表示」をクリックする。
-
無題のプロジェクト(安全ではないページ)に移動をクリックする。
-
アクセスリクエストを許可する。
4.実行結果を確認する
-
App sheet
側のログを確認する
-
スプレットシート側の出力結果を確認する
Excel
データとして出力する
5.おまけ
個人情報のテストデータ作成は以下のサイトが素早く行ると思いました。
参考
Discussion