日刊記録sheetから統計をとる
データの収集
takker99/takker-schedulerのparseLinesを使う
試しに、今日のsheetのタスクを抽出してみる
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test.ts
https://scrapbox-bundler.vercel.app?url=https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test.ts&bundle&minify&run&reload
code:test.ts
import { parseLines } from "../takker99%2Ftakker-scheduler/deps.ts";
import { toTitle } from "../takker99%2Ftakker-scheduler/diary.ts";
import { getPage } from "../scrapbox-userscript-std/rest.ts";
const result = await getPage("takker-memex", toTitle(new Date()));
if (result.ok) {
console.debug(result.value.lines);
const blocks = ...parseLines(result.value.lines.slice(1)) // タイトル行を除く
.filter((block) => typeof block !== "string")
console.debug(blocks);
}
できたできた
1年分のデータから、「すいみん」だけ取り出す
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test2.ts
https://scrapbox-bundler.vercel.app?url=https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test2.ts&bundle&minify&run&reload
code:test2.ts
import { parseLines, TaskBlock } from "../takker99%2Ftakker-scheduler/deps.ts";
import { isDiaryPage } from "../takker99%2Ftakker-scheduler/diary.ts";
import { exportPages } from "../scrapbox-userscript-std/rest.ts";
const result = await exportPages("takker-memex", { metadata: false });
if (result.ok) {
const blocks: TaskBlock[] = [];
for (const page of result.value.pages) {
if (!isDiaryPage(page.title)) continue;
for (const block of parseLines(page.lines.slice(1))) {
if (typeof block === "string") continue;
if (block.title.trim() !== "すいみん") continue;
blocks.push(block);
}
}
console.debug(blocks);
}
睡眠データを出力する
$ deno check --remote -r=https://scrapbox.io https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test3.ts
https://scrapbox-bundler.vercel.app?url=https://scrapbox.io/api/code/takker/日刊記録sheetから統計をとる/test3.ts&bundle&minify&run&reload
code:test3.ts
import { parseLines, TaskBlock } from "../takker99%2Ftakker-scheduler/deps.ts";
import { isDiaryPage } from "../takker99%2Ftakker-scheduler/diary.ts";
import { exportPages } from "../scrapbox-userscript-std/rest.ts";
import Parser from "../papaparse/mod.ts";
await (async () => {
const result = await exportPages("takker-memex", { metadata: false });
if (!result.ok) return;
const blocks: TaskBlock[] = [];
for (const page of result.value.pages) {
if (!isDiaryPage(page.title)) continue;
for (const block of parseLines(page.lines.slice(1))) {
if (typeof block === "string") continue;
if (block.title.trim() !== "すいみん") continue;
blocks.push(block);
}
}
// csvデータを作る
const csv = Parser.unparse(blocks.flatMap(({ title, record }) => {
if(!record.start || !record.end) return [];
return Math.round(record.start.getTime() / 1000), Math.round(record.end.getTime() /1000);
}));
console.debug(csv);
})();
出力したCSVをGoogle SpreadSheetでhistogramにした
グラフの種類から「ヒストグラム」を選んだだけ
Google SpreadSheetのグラフの画像URLを発行する
ファイル (非公開)
https://docs.google.com/spreadsheets/d/e/2PACX-1vTdKEJegKf8zbtoUT2tGUqtVJHfAuuvSpv4To0FK0N-QHK7_i7qTKrlcWh1NG0bGZm4sr0_41Y_oCo7/pubchart?oid=2005583125&format=image#.png
大体8時間睡眠がベストっぽいなあ
#2022-11-29 12:53:01