Jazzと読書の日々

iPadを筆記具として使う方法を模索します

Obsidianを表データベースとして使う

昔ジャズ・アーティストのcsvを作ったけどどこに行ったかな?

検索付きdataview

プロパティを活用してdataviewの絞り込みをする。 そうそう、こういう動的なデータベースが欲しかったのでした。

今回はChartsプラグインを絡め、グラフ変換できるようにします。

CSViewer.md

プロパティに変数を並べるタイプです。

---
csv: covid.md
query: 
chart: 
fig:
---
```dataviewjs
const color = ["navy", "darkred", "orange"]

const csv = await dv.io.csv(dv.current().csv)
const s = Object.keys(csv.values[0])
const q = dv.current().query || ""
const c = dv.current().chart || ""
const f = dv.current().fig || "fig1. "
const d = csv.values
  .map(x => Object.values(x))
  .filter(x => x.toString().includes(q))
dv.span("[[" + dv.current().csv + "]]")
const btn = dv.el("button", "📌")
btn.style = "width:20px;"

if(c){
  const t = f + s.shift()
  const Chart = {type: c, data:{datasets:[]}}
  Chart.data.labels = s
  i = 0
  for(k in d){
    Chart.data.datasets[k] = {}
    Chart.data.datasets[k].label = d[k].shift()
    Chart.data.datasets[k].data = d[k]
    Chart.data.datasets[k].backgroundColor = color[i++%3]
  }
  window.renderChart(Chart, this.container)
  dv.paragraph("<center style='font-size:12px;'>" + t + "</center>")
}else{
  dv.table(s, d)
}

btn.onclick = () =>{
  navigator.clipboard.writeText(dv.markdownTable(s, d))
  new Notice("copied!")
}
```

これをプレビューすれば完成。

使い方

csvの欄に、対象となるcsvファイルを書きます。 今回は、前回作ったcovid.mdを使います。 もちろんcsvの指定がなければエラーが出ます。

queryは検索ワードです。 キーワードが含まれる行を絞り込みます。 プロパティ欄はサジェスチョン・ボックスが出るので、空欄にするときはキーワードを消してからボックスの外をタップしてください。

chartはChartsプラグインtypeです。

  • 空欄...何もなければ表形式で表示。
  • bar...棒グラフを描きます。
  • line...折れ線グラフを表示します。
  • pie...円グラフになります。
  • rader...レーダーチャートを作ります。
  • polarArea...ポーラ・チャートを表示。

figは図番号です。 csv1行目の1項目めがタイトルになりますが、そこに「fig1.」とつけるためのもの。 「図3.」が良ければ「図3.」と書く。 スクショを撮ってトリミングすれば、そのまま論文に埋め込めます。

表の上にファイル名が表示されますが、これはリンクになっています。 タップすれば元のcsvを開く。 右隣にある赤ピンはマークダウン・テーブルです。 タップすると表形式でクリップボードに保存されます。

Excel

DOS時代の人間にはcsvが表で並ぶと、それだけで満足してしまう。 データをインタラクティブに扱っている手応えがします。

しかも今回、絞り込んだ表をそのままグラフ表示できる。 数字の並びを視覚化できる。 昔はこれだけのことに四苦八苦してたのに。 手描きでグラフを書いて、青焼きでコピーしてた時代が懐かしい。 blueprint の blue は言うほど青くないし、薬品くさい。

実はObsidianにはExcelプラグインがあってcsvを扱うことができます。 ところがモバイル版では走りません。 起動はするけど文字入力するとハングしてしまう。 入力できないだけじゃなく、アプリ自体が再起動を繰り返します。

もったいないよなあ。

まとめ

Loomにcsv出力はあるから、これでもいいけど。