毎日の“良かったこと”をNotion×Pythonで可視化してみた

# きっかけ
IT技術が発達し、ますます便利になった社会。僕は便利さを享受しつつも、日常を味わって生きていきたいと思っています。

目指すは

**ITの利便性×日常の輝き**。

そこで普段Notionでつけている日記という「データベース」を活用して、何か面白いことができないかと考えました (楽しいことを追い求める精神、大事)。


# 概要
やることは

**NotionのDBをPythonスクリプトで形態素分析し、Google Sheetsに書き出し。**
**それをNotion上に埋め込みで表示する**

です。

ただ解説するだけではつまらないので、技術的なことにも触れながら説明していこうと思います。便利なテンプレート付き。

所要時間は**40~60分**を想定しています。

![keyword_extraction1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/107a2111-6c90-4a34-92a1-5d082ca5cd26.png)


# 作りたいもののイメージ
成果物についてもイメージを共有しておきましょう。最終的にこのようなものを作ります。

![keyword_extraction2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/cd0de186-8842-48d4-8ac6-3f03628c840d.png)



# Notionのセットアップ
それでは初めていきましょう。まずは主役のNotionのページのセットアップから。Notionアカウントの取得は省きます。下のテンプレートをご自身のページとして複製してください (右上の「複製」ボタンから)。

https://psychedelic-syringa-57c.notion.site/1ea1ca693cc7803da21ec033d14229d7?v=1ea1ca693cc7805c8924000c6ddafb56

それからGoogle Sheetsを埋め込むためのページもご自身で作っておきましょう。

![Notion1](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/8c2b6a45-6758-425a-af98-7e66cfb8f095.png)


# Notionインテグレーションの作成
続いてNotion APIの有効化です。「Notion インテグレーション」を作成する必要があります。

1. 以下のページにアクセス
2. ログインができていない場合は自分のNotionアカウントでログイン
3. 「新しいインテグレーション」を選択し、
   - インテグレーション名は分かりやすいように名前をつける
   - 関連ワークスペースはテンプレートをコピーしたものをトグルから選択
   - 種類は「内部」でOK
4. 「内部インテグレーションシークレット」から トークンを表示 → コピー

https://www.notion.com/ja/integrations


# Python環境のセットアップ
以下がPythonで形態素解析を行うためのソースコードです。コードの内容については`README`に書いてあるので見てみてください。こちらを`git clone`していただくか、ZIPファイルをダウンロードする形でご自身のローカル環境に持ってきてください。

https://github.com/kei-0021/keyword_extraction

VSCodeで`config→.env`を開き、こちらに先ほどNotionインテグレーションで手に入れたトークンをペーストしてください。

それから一段下、`DATABASE_ID`も必要です。Notionの「良かったこと」データベースに進んでいただき、リンクをコピーします。

`https://www.notion.so/(DATABSE_ID)?v=...`

というフォーマットになっていると思うので、(DATABASE_ID)の部分を抜き出して`DATABASE_ID`に書き込んでおきます。

![Python1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/5db490ff-465c-4fd6-a37f-8f496da57431.png)

![Python2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/3ec3813e-d0c4-497f-9782-666fd4135760.png)



# ユーザー辞書の登録
例えば「基本情報技術者試験」という言葉が複数登場するとします。特に工夫をせず名詞を抽出すようとすると「基本」「情報」だけで取り出される可能性が高いです。
そこで`custom_dict/user.csv`を作り、ユーザー辞書を登録します。するとここに書かれた後は一語として認識されます。

![Python3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/673921ed-6438-4121-80d0-89002cbfce75.png)


# ストップワードの登録
「これ」「こと」「もの」

これらが頻出語として抽出されてしまうとなんとも言えない気持ちになります。
そう言った語は`custom_dict/stop_words.txt`を作って登録しておきましょう。

`README`にある程度リストアップはしていますが、不要な語を見かけたらその都度追加していくことをお勧めします。

![Python4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/e3b807b8-725d-4bdc-a4db-b160a052718b.png)



# Google SheetsへのAPIを取得する
それでは最難関 (とは言っても面倒なだけですが)、GCPへの登録に移ります。GCP (Google Cloud Platform)とは、各種Goolgeアプリケーションに関する設定を細かく行えるプラットフォームです。Googleアカウントを持っていればアクセスできます。

普段Google SheetsやGoogle Driveを使っていても辿り着けないような深い層へのアクセスができます。その一つが今回利用するGoogle SheetsへのAPIの取得です。これが無いとせっかく言語解析を行なってもグラフに書き込む手段がありません...

1. [Google Cloud Console](https://console.cloud.google.com/welcome/new?inv=1&invt=AbxDJg&project=glass-sequence-458706-u5)へアクセス 
   - Googleアカウントでログインします (アカウントの作成については省きます)
2. GCPへ登録する
   - 「無料トライアルを試す」を選択します
   ※ この後クレジットカードの登録があるのですが、「フルアカウントを有効化」設定を追加で行わない限り、課金されることはないので大丈夫です (よほど沢山APIを呼び出さなければ問題ない)。おそらく資源を無駄に多く利用されないための処置だと思われます。
   - 国は日本を選択
   - 本人確認で住所・クレジットカード情報を入力
3. 登録が完了したら、画面左上の「プロジェクトを選択」をクリック
   - 新しいプロジェクトを作成
   - 任意のプロジェクト名を入力
   - 作成
4. Google Sheets API を有効化
   - 左上メニュー → 「API とサービス」→「ライブラリ」
   - 「Google Sheets API」を検索
   - 「有効にする」ボタンをクリック
5. サービスアカウントを作成
   - 左上メニュー → 「IAMと管理」→「サービスアカウント」
   - 「サービスアカウントを作成」
   - 任意の名前（例：sheets-access-account）
   - 「作成して続行」
   - ロールは「プロジェクト > 編集者」または「制限付きビューア」など適切なものを選択
   - 「完了」
6. サービスアカウントの鍵（JSON）を作成・ダウンロード
   - 作成したサービスアカウントをクリック
   - 「キー」タブを開く
   - 「鍵を追加」→「新しい鍵を作成」
   - キータイプ：「JSON」を選択し「作成」
   - `credentials.json` というファイルが自動的にダウンロードされるので、このファイルを プロジェクト内の`config`に配置


# スプレッドシートの準備
これでGoogleアプリケーションへのAPIが獲得できたので、スプレッドシートの用意に移ります。ここまで大変だったと思うのでテンプレートを用意しておきました (このくらい簡単ではありますが...)。

[Keyword Extraction (Google Sheets)](https://docs.google.com/spreadsheets/d/1BFOLWCL91VM5-Wpd_lCEh9RHc6ZHKIzax-IG8hT-MMA/copy)

こちらもご自身のGoogleアカウントにコピーしてください。特に設定を行う必要はありません。

コピーができたら、グラフへのリンクを取得しておきましょう。グラフの右上の3点印をクリック→「グラフを公開」→「公開する」→ 出てきたリンクをコピー、です。

![Google Sheets.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4021009/dbf2919c-42d6-4249-b7d2-7faab37e6443.png)

最初のNotionの「Google Sheetsを埋め込むためのページ」に戻ります。`/embed`で「埋め込み」を選択、リンクを貼り付けてGoogle Sheetsを埋め込みます。これで全ての準備が整いました。


# いよいよ言語解析
お疲れ様でした。後は以下のコマンドを叩くだけです。
```
python3 source/main.py
```


# まとめ
QiitaやX、Instagramのタグの便利さに気付かされました。
直感的に「この言葉、多そうだな」という言葉でも機械的にやろうとするとそれなりに労力が必要です。

ここまでご覧いただき、ありがとうございました。
日記をつける習慣があれば、ご自身のデータでも試してみてください。

> 💡 **この記事の制作にはかなりの試行錯誤と時間をかけました。**  
> 少しでも「役に立った」と思った方は、いいねやストックいただけると励みになります！