清水理史の「イニシャルB」
データ分析もChatGPTに“お願い”するだけ!? 探索的データ分析プラグイン「Noteable」を試す
2023年6月19日 06:00
ChatGPTの有料プラン「ChatGPT Plus」で利用できる「Noteable」プラグインが面白い。CSVやExcel文書、各種データベースなどの形式でデータを与えると、それを分析するためのコードを生成した上で実行し、さまざまな分析を実行できる。
データの補完や、なぜその分析方法を使ったのか? という理由を説明してもらうことも可能なので、まったくの素人でも表やグラフを使った分析が可能になる。今回は、このNoteableの使用例を紹介する。
「Code interpreter」も待ち遠しいが、データ分析ならこちらを
ChatGPTで、コードを作成するだけでなく、それを実行し、結果を利用できる環境が面白い。
現状のChatGPTでも、単純な計算をさせたり、コードを作成させたりはできるが、それだけでなく、CSVやExcel文書などのデータを元に、分析するためのコードを生成し、実行できる。例えば「次の表をもとに都道府県ごとの面積と農地の関係を分析して」のように指示すれば、必要なコードを生成して実行し、分析結果を回答してくれる。
2023年3月に発表された本家プラグイン「Code interpreter」もその1つで、提供が開始されればChatGPTで「できること」が各段に広がることが期待されているが、残念ながら、こちらはまだアルファ版で一般提供が開始されていない。
これに対して、似たようなコードの実行環境として利用できるのが、サードパーティーのプラグインとして提供されている「Noteable」だ。
Notebleは、EDA(Explanatory Data Analysis:探索的データ分析)や、ETL(Extract, Transform, Load:データの抽出・変換・格納の一連のプロセス)を実現するサービスだ。以下のサイトから利用可能で、ノーコードでデータ分析をするためのサービスを提供している。
具体的に何ができるのかというと、表やデータベースなどからSQLやPythonなどを利用して分析やグラフなどを生成できる。使い方としては、Jupyter NotebookやGoogle ColabなどのようなウェブベースのPython実行環境と考えるとわかりやすい。
Noteableでは、データを扱うための環境が充実しており、読み込んだデータをビジュアライズしたり、フィルタリングしたりするための機能を利用できる。だが、広い意味ではブロックごとにコードを実行できるPython実行環境と言える。
プラグインを利用すると、ChatGPTから、Noteableの機能を利用可能になる。そして「このデータを読み込んで」や「農家の数と面積の関係を都道府県ごとに分析して」といった自然言語によるプロンプト(メッセージ)で、データの分析や加工が可能になる。
Pythonを知らなくても、データ分析手法の知識がなくても、知りたいことを指示するだけでいい感じにデータを加工・編集して、グラフなどで表示してくれる、画期的なプラグインだ。
実際にNoteableプラグインを使ってみる
データ分析ができると言っても、筆者もこの分野はまったくの素人なので、何を用意して、どのような操作を指示すればいいのか、さっぱり見当がつかない。
こんなときこそ、ChatGPTの出番だ。「このプラグインは何ですか?」「プロンプトの例を3つ挙げてください」とプロンプトを入力してみる。すると、プラグインの説明が表示され、1つの例としては定番の「Hello, World!」を表示するための例を教えてくれたが、肝心のデータ分析の方法は提示されなかった。
そこで、今回は、Noteableが公開している公式動画と同じ方法を試してみた。元が英語の動画となるため、サンプルデータが英語で、プロンプトも直訳に近い点はご容赦いただきたい。
ステップ1:プラグインの導入
Noteableプラグインは、有料プランのChatGPT Plusで、[Settings]から[Beta features]の[Plugins]をオンにしておく。その後、Plugin Storeから[Noteable]をインストールしておけばいい。
ステップ2:プロジェクト作成
続いて、Noteableのアカウントを作成し、ChatGPTから利用するためのプロジェクトを作成しておく必要がある。上記、Noteableのサイトからプロジェクトを作成し、そのURLをコピーしておく。
ステップ3:プロジェクトを指定してチャット開始
準備ができたらChatGPTからNoteableを使ってデータを分析していく。まずは、利用するNoteableのプロジェクトを指定する。以下のようにプロジェクトのURLを指定して、これからデータを読み込んだり、コードを実行したりする環境を指定する。
ステップ4:データを読み込む
続けてデータを読み込ませる。デモで利用されているのは、ニューヨーク近代美術館(MoMA)のアーティストのCSVだ。名前や年代などがリスト形式で記載されている。このURLを指定してデータを読み込む。
なお、今回の例では問題ないが、日本語のデータを扱う場合は、次のようにエンコードを指定する必要がある。また、見出しなどを指定したいときもプロンプトで指定しておく。
URL:https://www.nstac.go.jp/sys/files/SSDSE-E-2023.csv
ステップ6:いよいよ分析
データが読み込めたら、知りたいことを指定して分析してもらう。自然言語でいいが、なるべく前提や理由、目的、欲しいデータ、出力形式などを具体的に指示する必要がある。また、分析手法の仕組みやその手法を使う理由などを説明するように要求すると、よりわかりやすくなる。
ステップ7:段階的に処理が実行される
上記のプロンプトを送信すると、段階的に複数の処理が実行される。ChatGPTの画面でもPluginのドロップダウンを開くことで何をしているかを確認できるが、具体的な作業内容はNoteableを見た方がわかりやすい。
内部処理1:データクリーニング
元のCSVデータには未入力の項目がいくつかある。このため、質問で分析したい項目として挙げている国籍(Nationality)と性別(Gender)部分について、「Unknown」で埋める処理が行われている。
また、質問文で指定した通り、こうした処理の理由がMarkdown形式のコメントとして各処理に挿入されている。
内部処理2:データの統一
「Gender」コラムには、「Male」「Unknown」「Female」「male」「Non-Binary」「female」「Non-binary」という、大文字小文字などが異なる複数のデータが含まれている。これを統一し、「Male」「Unknown」「Female」「Non-binary」の4種類に自動的に統一している。
内部処理4:データの選別
続いて、国籍のデータを処理する。国籍は非常にたくさんの種類があるため、全てをグラフ化するとかえって分析しにくくなってしまう。そのため、トップ10のデータのみに絞り込んでいる。
内部処理6:データの推測
時代についてのグラフを作成したいが、元データには「Began Date」と「End Date」というデータしかないうえ、未記入の場合もある。未記入のデータを分析から除外し、「Began Date」と「End Date」から平均や中央値などのデータを計算し、アーティストの年代を「Before 1800」「1800-1899」「1900-1999」「2000 and after」の4種類に分類する。
「厳しい上司」役に徹して細かく、しつこく指示する
このように、Noteableアドインを利用すると、「Python? データクリーニング? 欠損データ?」といった具合に、データ分析について何も知らなくても、プロンプトで“お願い”するだけで、自動的にデータ分析した結果を手に入れられる。
ただし、使いこなして実用的なデータを得るには、“お願い”だけでは不十分だ。細かな修正点を見つけて、とにかく根気よく直させる必要がある。
例えば、先述のとおり、日本語のCSVデータを読み込ませると「UTF-8じゃない」という回答をされることが多い。その場合、別のエンコードでの読込方法が提案されるので、「shift_jisで読み込んで」と指示して、作業をやり直させる。
また、データによっては各項目だけでなく、その合計値もグラフにしてしまう場合がある。そんなときも、「合計は不要なので、合計を抜いてグラフを修正して」とやり直させる。
今回の例は、元のデータもシンプルなうえ、最初の指示も明確なので、ほぼ自動的に処理されたが、複雑なデータだと意図しない結果が表示されることの方が多い。
なので、それらを、細かく指摘して何度でもやり直させるのだ。気分的には、イヤな上司になったような感じだが、どうやら、それこそがChatGPTやプラグインを使いこなすコツのようだ。
人間相手とはまた違う、相手がAIであることを前提とした新しいコミュニケーション能力というものが、これからの時代の重要なスキルになっていくのかもしれない。