清水理史の「イニシャルB」

データ分析もChatGPTに“お願い”するだけ!? 探索的データ分析プラグイン「Noteable」を試す

 ChatGPTの有料プラン「ChatGPT Plus」で利用できる「Noteable」プラグインが面白い。CSVやExcel文書、各種データベースなどの形式でデータを与えると、それを分析するためのコードを生成した上で実行し、さまざまな分析を実行できる。

 データの補完や、なぜその分析方法を使ったのか? という理由を説明してもらうことも可能なので、まったくの素人でも表やグラフを使った分析が可能になる。今回は、このNoteableの使用例を紹介する。

Noteableの実行画面。ChatGPTのプラグインからの命令でデータ分析ができる

「Code interpreter」も待ち遠しいが、データ分析ならこちらを

 ChatGPTで、コードを作成するだけでなく、それを実行し、結果を利用できる環境が面白い。

 現状のChatGPTでも、単純な計算をさせたり、コードを作成させたりはできるが、それだけでなく、CSVやExcel文書などのデータを元に、分析するためのコードを生成し、実行できる。例えば「次の表をもとに都道府県ごとの面積と農地の関係を分析して」のように指示すれば、必要なコードを生成して実行し、分析結果を回答してくれる。

 2023年3月に発表された本家プラグイン「Code interpreter」もその1つで、提供が開始されればChatGPTで「できること」が各段に広がることが期待されているが、残念ながら、こちらはまだアルファ版で一般提供が開始されていない。

コードを実行できるChatGPTのCode interpreter。まだ一般提供はされていない

 これに対して、似たようなコードの実行環境として利用できるのが、サードパーティーのプラグインとして提供されている「Noteable」だ。

 Notebleは、EDA(Explanatory Data Analysis:探索的データ分析)や、ETL(Extract, Transform, Load:データの抽出・変換・格納の一連のプロセス)を実現するサービスだ。以下のサイトから利用可能で、ノーコードでデータ分析をするためのサービスを提供している。

データ分析用サービスのNoteable

 具体的に何ができるのかというと、表やデータベースなどからSQLやPythonなどを利用して分析やグラフなどを生成できる。使い方としては、Jupyter NotebookやGoogle ColabなどのようなウェブベースのPython実行環境と考えるとわかりやすい。

 Noteableでは、データを扱うための環境が充実しており、読み込んだデータをビジュアライズしたり、フィルタリングしたりするための機能を利用できる。だが、広い意味ではブロックごとにコードを実行できるPython実行環境と言える。

Python実行環境と考えるとわかりやすい
さまざまなデータを扱うことができる

 プラグインを利用すると、ChatGPTから、Noteableの機能を利用可能になる。そして「このデータを読み込んで」や「農家の数と面積の関係を都道府県ごとに分析して」といった自然言語によるプロンプト(メッセージ)で、データの分析や加工が可能になる。

 Pythonを知らなくても、データ分析手法の知識がなくても、知りたいことを指示するだけでいい感じにデータを加工・編集して、グラフなどで表示してくれる、画期的なプラグインだ。

実際にNoteableプラグインを使ってみる

 データ分析ができると言っても、筆者もこの分野はまったくの素人なので、何を用意して、どのような操作を指示すればいいのか、さっぱり見当がつかない。

 こんなときこそ、ChatGPTの出番だ。「このプラグインは何ですか?」「プロンプトの例を3つ挙げてください」とプロンプトを入力してみる。すると、プラグインの説明が表示され、1つの例としては定番の「Hello, World!」を表示するための例を教えてくれたが、肝心のデータ分析の方法は提示されなかった。

ChatGPTのPlugin StoreのUIは極めて不親切で、検索もできなければ、説明も最小限だが、困ったらそれこそChatGPTに聞けばいい

 そこで、今回は、Noteableが公開している公式動画と同じ方法を試してみた。元が英語の動画となるため、サンプルデータが英語で、プロンプトも直訳に近い点はご容赦いただきたい。

ステップ1:プラグインの導入

 Noteableプラグインは、有料プランのChatGPT Plusで、[Settings]から[Beta features]の[Plugins]をオンにしておく。その後、Plugin Storeから[Noteable]をインストールしておけばいい。

プラグインを有効化
Noteableプラグインをインストールしておく

ステップ2:プロジェクト作成

 続いて、Noteableのアカウントを作成し、ChatGPTから利用するためのプロジェクトを作成しておく必要がある。上記、Noteableのサイトからプロジェクトを作成し、そのURLをコピーしておく。

最初のプロジェクトは手動で作成しておく必要がある

ステップ3:プロジェクトを指定してチャット開始

 準備ができたらChatGPTからNoteableを使ってデータを分析していく。まずは、利用するNoteableのプロジェクトを指定する。以下のようにプロジェクトのURLを指定して、これからデータを読み込んだり、コードを実行したりする環境を指定する。

プロジェクトを指定する。「次のプロジェクトを使ってください」に続けてURLを入力

ステップ4:データを読み込む

 続けてデータを読み込ませる。デモで利用されているのは、ニューヨーク近代美術館(MoMA)のアーティストのCSVだ。名前や年代などがリスト形式で記載されている。このURLを指定してデータを読み込む。

データを読み込む。「次のデータを読み込んでください」に続けてURLを入力

 なお、今回の例では問題ないが、日本語のデータを扱う場合は、次のようにエンコードを指定する必要がある。また、見出しなどを指定したいときもプロンプトで指定しておく。

次のURLのCSVデータを読み込んでください。エンコーディングはshift_jisです。0から数えて2行目を見出しに使ってください。

URL:https://www.nstac.go.jp/sys/files/SSDSE-E-2023.csv

ステップ5:データを確認

 読み込みが完了すると、データの一部が表示されるので、確認しておく。表示されない場合は、「データの最初の5行を5列分表示して」のように指示すればいい。

サンプルとは別のデータの例。列が多すぎる場合は、列数を指定して表示してもらうと余計なトラフィックが発生しなくて済む

ステップ6:いよいよ分析

 データが読み込めたら、知りたいことを指定して分析してもらう。自然言語でいいが、なるべく前提や理由、目的、欲しいデータ、出力形式などを具体的に指示する必要がある。また、分析手法の仕組みやその手法を使う理由などを説明するように要求すると、よりわかりやすくなる。

私は、アメリカの有名な美術館でコーディネーターを務めています。来年度、どのようなコレクションを取り上げるか考えています。上記のデータを分析し、MoMAのアーティストが性別、国籍、時代によってどのように表現されているか、あるいは表現されていないかのストーリーを伝えるための傾向を説明する図表やグラフを提供するノートブックを作成して分析を実行してください。私はデータ分析の経験がないので、ノートブックには、あなたが何をしているのか、なぜそれが重要なのかを、わかりやすく説明する文章を入れてください。
自然言語で質問できる

ステップ7:段階的に処理が実行される

 上記のプロンプトを送信すると、段階的に複数の処理が実行される。ChatGPTの画面でもPluginのドロップダウンを開くことで何をしているかを確認できるが、具体的な作業内容はNoteableを見た方がわかりやすい。

ChatGPT上ではこのように処理のみが表示される
実際の処理はNoteableで行われる

内部処理1:データクリーニング

 元のCSVデータには未入力の項目がいくつかある。このため、質問で分析したい項目として挙げている国籍(Nationality)と性別(Gender)部分について、「Unknown」で埋める処理が行われている。

 また、質問文で指定した通り、こうした処理の理由がMarkdown形式のコメントとして各処理に挿入されている。

データクリーニングを実行。理由も英語だがMarkdownブロックで記載されている

内部処理2:データの統一

 「Gender」コラムには、「Male」「Unknown」「Female」「male」「Non-Binary」「female」「Non-binary」という、大文字小文字などが異なる複数のデータが含まれている。これを統一し、「Male」「Unknown」「Female」「Non-binary」の4種類に自動的に統一している。

データの内容が統一されていないことが検知され、自動的に修正される

内部処理3:グラフの作成

 クリーニングしたデータから「Distribution of Artists by Gender」というタイトルのグラフを生成している。

Genderに関する表が作成される

内部処理4:データの選別

 続いて、国籍のデータを処理する。国籍は非常にたくさんの種類があるため、全てをグラフ化するとかえって分析しにくくなってしまう。そのため、トップ10のデータのみに絞り込んでいる。

データ数が多すぎるのでトップ10のデータに絞って分析される

内部処理5:国籍データのグラフ化

 国籍データをグラフ化している。

グラフを作成

内部処理6:データの推測

 時代についてのグラフを作成したいが、元データには「Began Date」と「End Date」というデータしかないうえ、未記入の場合もある。未記入のデータを分析から除外し、「Began Date」と「End Date」から平均や中央値などのデータを計算し、アーティストの年代を「Before 1800」「1800-1899」「1900-1999」「2000 and after」の4種類に分類する。

年代を分析した結果、今回は4種類に分類された

内部処理7:年代のグラフ化

 計算結果から年代をグラフ化している。

年代をグラフ化

ステップ8:結果の出力

 ここまでの処理を経て、以下のような分析結果が文章で表示される。

最終的に、データやグラフなどを考慮した分析結果が文章で表示される

「厳しい上司」役に徹して細かく、しつこく指示する

 このように、Noteableアドインを利用すると、「Python? データクリーニング? 欠損データ?」といった具合に、データ分析について何も知らなくても、プロンプトで“お願い”するだけで、自動的にデータ分析した結果を手に入れられる。

 ただし、使いこなして実用的なデータを得るには、“お願い”だけでは不十分だ。細かな修正点を見つけて、とにかく根気よく直させる必要がある。

 例えば、先述のとおり、日本語のCSVデータを読み込ませると「UTF-8じゃない」という回答をされることが多い。その場合、別のエンコードでの読込方法が提案されるので、「shift_jisで読み込んで」と指示して、作業をやり直させる。

 また、データによっては各項目だけでなく、その合計値もグラフにしてしまう場合がある。そんなときも、「合計は不要なので、合計を抜いてグラフを修正して」とやり直させる。

 今回の例は、元のデータもシンプルなうえ、最初の指示も明確なので、ほぼ自動的に処理されたが、複雑なデータだと意図しない結果が表示されることの方が多い。

 なので、それらを、細かく指摘して何度でもやり直させるのだ。気分的には、イヤな上司になったような感じだが、どうやら、それこそがChatGPTやプラグインを使いこなすコツのようだ。

 人間相手とはまた違う、相手がAIであることを前提とした新しいコミュニケーション能力というものが、これからの時代の重要なスキルになっていくのかもしれない。

清水 理史

製品レビューなど幅広く執筆しているが、実際に大手企業でネットワーク管理者をしていたこともあり、Windowsのネットワーク全般が得意ジャンル。最新刊「できるWindows 11」ほか多数の著書がある。