その他

【obsidian】ファイルのプロパティの要素を集計する方法(Dataview.js利用)

この記事は約4分で読めます。

こんにちは、宮﨑です。

以前の記事にも書いたように、私の趣味はプロ野球の観戦です。

日頃からチームや選手のことについてメモツールとして利用しているobsidianに記述していっています。
そして溜まっていったメモをコミュニティプラグインのDataviewを利用しわかりやすい形に整理するようにしています。

まとめていく中で得た知見を記事にするシリーズの第4弾となります。

過去のシリーズ

第1弾

第2弾

第3弾

きっかけ

シーズンが始まり、毎日楽しみに野球の試合を見ています。

2軍の試合も休日の余裕がある時にたまにチェックするのですが、その際には「このリリーフ(中継ぎ)投手いいなぁ……そろそろ一軍に上がるかなぁ……」なんて思います。それと同時に「今1軍に何人いたっけ?」「定員だったら一軍に上げられないよなぁ」「そもそも1軍に中継ぎ投手何人いたっけ?」とも思います。

そこでふと思いました……その疑問を解決するためにポジション別に1軍とファームの人数表を作成しようと

やりたいこと

  • ポジション別に1軍とファームの人数表を作成
  • 1軍には現在の1軍登録人数と追加可能人数の表示

作ってみました

こんな感じになりました。並び順や見やすさに関しては今後要改良だと思っています。

選手ページに設定しているプロパティのpositionsと今回1軍とファームの区別のために追加したfirst_teamのチェックボックスを利用しています。

コードはこんな感じ

```dataviewjs 
const first_team = dv.pages('"09_DB/日ハム"').file.frontmatter
                     .where(b => b.first_team == true)
                 
const first_team_table = first_team.groupBy(p => p.positions)
                                   .map(k => [k.key,k.rows.length])

const farm_team_table = dv.pages('"09_DB/日ハム"').file.frontmatter
                          .where(b => b.first_team != true)
                          .groupBy(p => p.positions)
                          .map(k => [k.key,k.rows.length])

dv.table(['一軍','人数'],first_team_table)
dv.paragraph("合計人数: " + first_team.length + "人")
dv.paragraph("追加可能人数: " + (31 - first_team.length) + "人")


dv.table(['ファーム','人数'],farm_team_table)
```

かなりシンプルなコードになっています。

file.frontmatterでプロパティの値を取得し1軍とファームの判別、ポジション別にグループ化しています。

作ってみた感想

日本ハムには外野手と投手の二刀流の矢澤選手が在籍していたり、先発かリリーフかぼんやりしている選手も多いため、かなり表示に困りました。

また、投手と野手でうまく分けることができればもっとみやすいかなとも考えています

選手の合計人数の表示方法などもまだまだ改善の余地があるとも思っています。

ひとまずファイルのプロパティを利用して集計等をしたい人にとって、この記事が助けになることを祈っています。