AIじゃないよ

ChatGPTで行うデータ分析入門ガイド!グラフの日本語表示からダウンロード方法まで

当サイトはアフィリエイト広告を一部掲載しています。

ChatGPTの有料プランなら、データ分析が超簡単に自動化できる「Advanced Data Analysis」という公式プラグインが利用できる。

これを使えば、会話文で指示するだけで、エクセルデータから簡単にグラフを生成することや、平均・相関などの統計量の計算、さらには回帰分析や予測モデルの構築までできてしまう。
データ分析が苦手な人でも、資料に掲載するための美しいグラフを作れたり、売上や注文履歴などのデータから傾向を分析できたりと、革命的なツールだ。

ビジネスパーソンであれ、学生であれ、少しでも表計算やグラフ作成に縁がある人は、使い方をマスターしておいて絶対に損はない。

この記事では、chatGPTのAdvanced Data Analysisの基本的な利用方法はもちろん、文字化けで躓くことの多いグラフに日本語を表示する方法や、分析後のグラフや表をダウンロードする方法まで、必須の使い方・知識を丁寧に解説していく。

まずはこの記事からchatGPTでのデータ分析に入門することをおすすめする。

2023年11月のOpenAIのDevDay以降、Advanced Data Analysisを利用するために、いちいちプラグインをオンにする必要は無くなった。GPT-4と会話をしている中で、そのままファイルを渡し、分析させることができる。
ただ、使い方はこの記事と変わらないので、起動方法だけがもっとシンプルになったと思って欲しい。



ChatGPT Advanced Data Analysis利用の下準備

手持ちのデータの分析に入る前に、若干の下準備が必要となる。

ChatGPTの有料アカウントを作ってプラグインを使える状態にする事と、分析に必要なデータファイルの用意、そしてグラフの日本語表示に使うためのフォントファイルの用意だ。

データの分析を行う際のプロンプトのテンプレートも紹介する。

chatGPT Plusへの加入とAdvanced Data Analysisの起動法

記事執筆現在(2023年10月)、chatGPTでAdvanced Data Analysisを利用するには、月20ドルのchatGPT Plusというサブスクリプションに加入する必要がある。

クレジットカードの登録が必要だが、初月の支払いを終えた直後にサブスクを解除すれば、次月の更新を無効にしつつも、ちゃんと丸1ヶ月使用できるので、お試しで1ヶ月だけ使いたいという場合、登録直後にすぐ自動更新を解除すれば良い。

Plusユーザーになれば、chatGPTを開いた際、上部でGPT-3.5とGPT-4を選択でき、更にGPT4の中でも複数の機能のオプションが表示される。

「Advanced Data Analysis」を選択すると、チャットボックスにファイルのアップロードが可能な「+」ボタンが表示されるように。

プロンプトをチャット形式で打ち込むという通常のChatGPTと、使い方は大きく変わらない。
ただ、「このファイルを分析してください」といった感じで、プロンプト文の中で(+)から添付したファイルに言及して、そのファイルに対して行うアクションを指示できるようになる。

分析するデータの用意

Advanced Data Analysisでは、通常のchatGPTが更に強化され、.xls.csvなどのデータファイルや、プログラムのコードなどをアップロードして、その中身をチャット形式で分析・解説させる事ができる。

ユーザー側の普段と違う作業は、chatGPTに分析させたいファイルをアップロードすればいいだけなので、とても簡単だ。
各自、実際に分析したいデータがある場合は、そのファイルを用意しよう。

本記事では、エクセルやスプレッドシートなどのデータを分析する方法を紹介するので、今回は.xlsのサンプルデータを用意した。

アメリカの大型スーパーマーケットの売上のデータで、データ可視化ツールのtableau(タブロー)公式が公開しているものだ。
以下のページでダウンロードできるので、この.xlsファイルを入手すれば、この記事と同じ分析を試す事ができる。

グラフ用の日本語フォントファイルの用意

chatGPTのAdvanced Data Analysisは、グラフまで一瞬で生成できるという信じられないほど便利なツールだが、デフォルトでは日本語表示が上手くいかないという問題がある。

データをグラフ化した時に、以下のように日本語の部分が文字化けしてしまうのだ。
(PythonやRなどでデータ分析をするときもよく発生する現象)

解決法として、日本語のフォントもデータと同時にアップロードしてしまう、という方法がある。
chatGPTに「このフォントファイルを使ってグラフを描写せよ」という指示を与えるのだ。

フォントファイルは、Googleが無償でネットで公開しているものがあるので、それをダウンロードすれば簡単に入手できる。

画面右上の「ダウンロード」をクリックすると、Noto_Sans_JP.zipというファイルがダウンロードされる。

今回は、これを解凍すると出てくる「static」というフォルダ内にあるNotoSansJP-Light.ttfという細字のフォントファイルを使うことにする。

ChatGPTでは、複数のファイルを同時にアップロードできるので、分析したいデータのファイルと、このNotoSansJP-Light.ttfの両方をアップロードして分析の指示を行う。

グラフを文字化けさせないためのプロンプト

指定した日本語フォントをグラフ描写時に使用させるには、プロンプトで明確な指示を与える必要がある。

以下がAdvanced Data Analysisで筆者が一番最初に送信するプロンプトのテンプレートだ。
あらゆる分析を行う際に、汎用的に使いやすいように、箇条書き形式で分析時の留意点をまとめるテンプレートとなっている。

行いたい分析によって、他にもルールを追加したい場合は、{#分析時の注意}以下にどんどんルールを書き足していくと良い。

以下の{#分析時の注意}を踏まえて、この後で送る{#分析指示}に基づいて、指定されたデータ分析を行って下さい。

{#分析時の注意}
 - 分析結果は全て日本語とすること
 - グラフ内の日本語は添付した「NotoSansJP-Light.ttf」フォントを用いて表示すること。

グラフ内の日本語は添付した「NotoSansJP-Light.ttf」フォントを用いて表示すること。」という行で、先ほどダウンロードした日本語フォントファイルを利用するよう指定している。

以上で下準備は完了だ。ここからは、実際にデータ分析を行う画面を見ながら解説していく。

【初級編】データ分析の知識不要!全てchatGPTにお任せで分析させてみる

Advanced Data Analysisプラグインでは、chatGPTに対して行なって欲しいデータ分析をチャット形式で指示する。

すでに分析の目的や作成したいグラフが決まっている場合には、詳細な指示を与えて、その作業だけを実施させることもできる。

一方で、単に使い方を体験してみたいとか、どんな分析をしたらよいか見当すらついていない段階では、chatGPTに全てお任せしてしてしまうのも手だ。
データの超基本的な全体像(列名の解説、件数・合計・平均などの集計)を、サクッとchatGPTに解説してもらうだけでも、初めて閲覧するデータの場合はスタートラインとして有用だ。

そこでまずは、とりあえずデータを読み込ませて、chatGPTに身を委ねてみると何が起きるのかを紹介する。

Advanced Data AnalysisでEDAを行うためのプロンプト

Advanced Data Analysisを選択したら、分析したいデータ(.csvや.xlsファイル)と、上記で入手したフォントファイル(.ttf)をアップロードし、以下のようなプロンプトを与える。

このプロンプトでは、「EDA」を行うことを指示している。
EDAとは、「探索的データ分析」(Exploratory Data Analysis)の略で、データの特性や構造をざっくりと把握するために、平均値などの基本的な統計量を計算してみたり、全体を見るグラフを生成したりする、データ分析のはじめの一歩だ。

あるスーパーマーケットの売上データを提供します。以下の{#分析時の注意}を踏まえて、EDAを行って下さい。

{#分析時の注意}
 - 分析結果は全て日本語とすること
 - グラフ内の日本語は添付した「NotoSansJP-Light.ttf」フォントを用いて表示すること。

すると、ChatGPTが動き出し、ファイルの読み込みを始める。通常のチャットのやり取りよりは、少し時間がかかるので、正常に読み込みが完了するのを待つ。

この時点で何らエラーが出ず、「Finished working」となれば、早速データの中身についてコメントしてくれる。

渡すデータによって、最初にどのような分析を行なってくれるかは毎回異なるが、今回のデータの場合、列がたくさんあるため、どのような列が含まれるかを最初に整理してくれたようだ。
その上で、「もしご希望の分析内容や特定の視点があれば、お知らせください。」と、特に関心のある視点をChatGPTの方から聞いてきてくれた。

今回提供しているデータは全部で21列あり、かなり多種多様な分析ができうるので、ある程度の背景の文脈・指針は与えたほうが良さそうだ。
ここでは、このスーパーマーケットの店長として売り上げ・利益に関心があること、マーケティング戦略を立てたいことを伝えてみた。

特に、スーパーマーケットの経営者として、このデータを踏まえて、売上・利益の観点から戦略的な製品カテゴリの選択や、特にマーケティングに力を入れる顧客の選定など、経営戦略を考えたいと思っています。

すると、即座に以下の1〜5のような分析計画を立ててくれ、グラフが生成され始めた。

ChatGPTが勝手に考案してくれた分析の視点は以下の5つだ。

  1. カテゴリ別の売上・利益の分析
  2. 地域別の売上・利益の分析
  3. 顧客セグメント別の売上・利益の分析
  4. 割引の影響分析
  5. 時間的な売上・利益の動向の分析

例えば、「2.地域別の売上・利益の分析」は、こちらは何も具体的な分析方法の指示をしていないのに、以下のような良い感じのグラフが生成され、しかもグラフから読み取れる主要な情報を言葉でも整理してくれる。

ここでは、アメリカの地域内で、特に売上・利益が好調な南部と西部に着目し、それぞれの地域でどのような戦略を採るべきかを解説してくれている。

どの列が売上と利益に対応するのかなどの情報も一切与えていないのに、データのファイル内にある列名のみから意味を読み取って、地域別に売上と利益を整理してくれているのだ。
つくづく、こんなことをAIが自律的に実行できてしまうのは、驚くべきことである。

さらに、「次に、顧客セグメント別の売上・利益の分析を行います。よろしいでしょうか?」という感じで、次のステップに移行して良いかを聞いてくる。
ここで、さらに追加で分析をさせたり、このグラフについて追加で解説を頼むこともできる。

自身があまり詳しくない初見のデータを分析するなどに、とりあえずChatGPTにEDAをやらせてみて、ざっくり分析の方向性を考えたい場合などに、このEDAプロンプトはおすすめだ。

一方で、自分がデータの内容を理解していて、明確に目的や作成したいグラフが決まっている場合(ex. 今月の問い合わせについて日別に件数をグラフにしたい)には、後述する一つ一つの分析を順に指示していくプロンプトのスタイルの方が適している。

生成されたグラフ一式のダウンロード

こうして、5つの視点でのデータ分析とグラフの生成が行われたので、これらのグラフをダウンロードして保存したい。
生成された画像をダウンロードすれば、ワードやパワーポイントに貼り付けて資料やレポートに使用できるので、非常に便利だ。

ChatGPTのAdvanced Data Analysisでは、チャットを通して「データをダウンロードしたい」と伝えれば、なんとzipファイルにまとめてくれて、ダウンロードリンクまでも生成してくれる。

もちろん、一つ一つのグラフのダウンロードを依頼することもできるが、以下のプロンプトでは生成された全てのグラフを一括でダウンロードしたい旨を伝えている。

以上で行った全ての分析について、グラフと表をダウンロードしたいです。

こうしてダウンロードしたファイルには、.png形式で保存された全てのグラフの画像が入っている。

【中級編】分析の指示を細かく行い的確なインサイトを導く

ここでは、自分で考えた分析や、作成したいグラフが既に決まっている場合に、ChatGPTに1つ1つ指示を与えて、必要な分析だけを的確に行わせる場合のプロンプトを紹介していく。

調べものをしている場合や、資料を作成している場合に、「人口を都道府県別に集計し、多い順に並べたい」とか「今月の顧客の年齢構成をヒストグラムにしたい」といった明確に実現したい事が決まっている場合におすすめのプロンプトだ。

先述したように、ChatGPTに全てお任せするプロンプトでも、それなりのグラフとそれなりの解説文は出てくるが、課題を的確に捉えたデータが出てくるかどうかは運次第だ。

自分の思考や自分の仮説も踏まえながらデータを紐解いていく方が、ビジネスの現場や大学生のレポートなどの用途では現実的だ。
エクセルが苦手だったり、PythonやRのコードが書けなくても、細かい指示をChatGPTに日本語で与えて仮説の検証を進められるChatGPTは、そういった用途でも大活躍してくれる。

一つ一つ分析指示を与えるためのスタートプロンプト

分析を一つ一つ指示していくスタイルのプロンプトを利用する場合、例えば以下からチャットを始める。
初級編と同じく、分析したいデータセット(.xlsや.csv)と、日本語フォントファイル(.ttf)を添付する。

あるスーパーマーケットの売上データを提供します。以下の{#分析時の注意}を踏まえて、この後送る{#分析指示}に基づいて、指定されたデータ分析を行って下さい。

{#分析時の注意}
 - 分析結果は全て日本語とすること
 - グラフ内の日本語は添付した「NotoSansJP-Light.ttf」フォントを用いて表示すること。

このプロンプトによって、ChatGPTが自ら勝手に分析せずに、こちらの分析指示を一つ一つ待つ状態になる。
以降で「{#分析指示}」と付けて細かい注文をしながらChatGPTに分析を進めさせる。

例えば、先の「初級編」で行なったEDAでは、データの列名がそのまま英語で表示されており、どの列が何を表しているのか把握するのが少し難しかった。
そこで、分析指示において、「まずはデータに含まれる列を表示してください。列名から推測される意味も補足して下さい。」という補足を要求すると、データの概要をさらに理解しやすくなった。

前後の文脈も踏まえたデータ分析・グラフ生成が可能

こうして列名を見た結果、注文ごとに行があり、注文日、売上、顧客セグメント(法人・個人)などのデータが入っていることがわかったので、まずは月毎の注文数の推移を棒グラフにさせることにした。
また、その際、顧客の種類別に集計し内訳をグラフに表示するよう指示をした。

{#分析指示}
月単位で注文数を集計し、その推移をグラフにして表示してください。
また、そのグラフでは、顧客のセグメントの内訳が分かるようにしてください。

こうして出力されたのが以下のグラフだ。
このように、複数の変数をクロスして、一定の期間で集計し、さらにそれをグラフにする・・・というそれなりに複雑な処理も、日本語で指示するだけで実行できる。しかも、グラフの生成にかかる時間はそれほど長くなく、体感としては通常のChatGPT+10秒という感じだ。

さらに、Advanced Data Analysisのチャット内においては、前に作成したグラフを参照しないと回答できないような指示も行うことができる。
前後の文脈を理解した上で分析をしてくれるのだ。

例えば、上記の注文数の棒グラフと同じものを、売上でも作らせる場合、以下のプロンプトだけでOKだ。

{#分析指示}
売上で同じ分析を行ってください。

先ほどの「注文数」グラフのプロンプトのように、月単位で〜とか顧客セグメントの内訳を〜という指示を一切していないのに、同じように月単位で・セグメント別でグラフが生成されているのだ。

グラフだけでなく表・テーブルの生成も可能

Advanced Data AnalysisでChatGPTに行わせることができるのは、グラフの生成だけではない。
集計表を作成させ、それを.csvなどの表データとしてダウンロードすることもできてしまうのだ。

例えば、以下のプロンプトでは、データを法人のみにフィルタした上で、製品のサブカテゴリ別に売上・利益を合計し、さらにそれが全体に占める割合を計算する、という人間がExcelでピボットテーブルを駆使して行う場合でもちょっと面倒な集計表を作成させている。

{#分析指示}
法人からの2016年から2017年の全ての注文について、製品のサブカテゴリごとに、売上への貢献度、利益への貢献度を把握したいです。

もちろん、この表をサクッとグラフにさせることもできてしまう。
先述の通り、前後の文脈を理解してくれるので、集計表に関する細かい指示を繰り返す必要はない。

{#分析指示}
サブカテゴリごとの売上と利益の貢献度を、それぞれ別のグラフにして下さい。

Advanced Data Analysisで実行できる分析の自由度の高さには驚かされる。
一般的な企業におけるデータ分析の仕事は、かなりの程度AIに代替されてしまうのではないかと思えてしまうほどのクオリティだ。

生成されたグラフ・表のダウンロード

もちろん、ここまでに生成したグラフは画像形式でダウンロードできるし、集計表・テーブルについても、.csvファイルなどでダウンロードして、自分のパソコンで閲覧することもできる。

ChatGPT Advanced Data Analysisの可能性と限界

ChatGPTのAdvanced Data Analysisは、データ分析に関する知識や、Excelのテクニック、グラフ作りのセンスを持っていなくても、「こんなことが分かるグラフが欲しい」と日本語で伝えるだけで、ChatGPTがデータ分析を代行してくれる素晴らしい機能だ。

個人的には、通常のChatGPTに何か文章を生成させるよりも、はるかに実用的な機能であると感じる。

データの分析やグラフの生成は、やることが決まっていれば、人間のクリエイティビティは特に必要なく、的確なプログラムを書いて実行すれば良いだけなので、人間がやろうがAIがやろうが、クオリティに差がつかないからだ。
現在のAdvanced Data Analysisのクオリティで、十分に仕事や学校で実用できるレベルに達していると感じる(ex. もちろん、計算が間違っていないかの確認は必要だが、それは人間も同じ)

また、それなりにデータ分析の知識や経験がある人であっても、単純にめんどくさい複雑な集計作業を、プロンプト一発で実現してくれる存在はありがたい。
PythonやRのコードが書ける人であれば、ChatGPTがどんなコードを書いて分析をしているかを確認することもできる。

とは言え、どんなデータでも美しく完璧に分析してくれるわけではない。
ChatGPT Advanced Data Analysisが苦手なシチュエーションや、失敗することの多い分析のパターン、デメリットなども存在する。

筆者がしばらく使ってみた中で、ChatGPTから的確な分析結果を得るために、いくつか心がけている点があるので、最後にコツとして紹介しておくことにする。

できるだけ小分けにして分析させるのがコツ

プロンプトで分析の指示を行ってから、実際に回答が返ってくるまでの間に、ChatGPTは(1)指示を踏まえたPythonコードを書く→(2)実行する→(3)結果を得る→(4)結果を表示・解説する、というプロセスを踏んでいるようである。

(1)〜(4)の全ステップを終えて回答が返ってくるまでに、データの大きさによってもかかる時間は変わるが、通常のChatGPTよりも待ち時間が長くなる(最低でも+10秒)。

グラフや表が自分の意図した通りに生成されなかった場合は、何度もプロンプトを改善してやり直させることになるが、その際にこの生成までのラグがストレスになる。
1つのプロンプトで3つのグラフを生成させるなど欲張った使い方をすると、さらに待機時間は長くなり、失敗した時のやり直しにかかる時間も3倍で、非常に非効率になってしまう。

したがって、基本的に、分析指示は小分けにして、1つのプロンプトで1つのグラフ・表の作成に留めた方が、結果としてスピードは上がると思われる。

また、自分の意図した通りに分析がエラーなく完了すればいいが、時には、(1)コードを書いて(2)実行途中でエラーが出て(1)コードを書き直す、という(1)〜(2)を繰り返しChatGPTがスタックする場合もある。

こうしたエラーが発生した時は、プロンプトを改善することで回避できることが多い(ex. データの形式をもっと詳しく補足する、文字エンコーディングを予め伝える、など)。
そのため、ChatGPTが自分で試行錯誤するのを長時間待つよりも、サクッとStop Generatingを押して処理を止めてしまい、プロンプトを書き直した方がいい。

1つのプロンプトで同時に大量の処理をさせていると、ChatGPTが何につまずいているのか、何がエラーの原因なのかが分かりにくくなるので、やはり結果として非効率になりやすい。

ChatGPTのAdvanced Data Analysisでは、1つのプロンプトで1つの分析、と心がけるようにしよう。

データはクリーニングしてから!あまりChatGPTが得意ではないシナリオ

列と行のみで構成される分析しやすい表データではなく、セルの統合を行ったり独特な行・列の使い方をしているデータの場合は、うまく動作しないことが多い。
これは、人間がデータ分析を行う場合でも、一番苦労する前処理の問題である。

例えば、一つのExcelファイルの中にシートが複数あり、データとラベルが離れた場所に記載されているケースで、筆者の実験ではデータとラベルをうまくリンクさせることができなかった(2023年10月現在)。

具体的には、Webアンケートのデータで、シート1には質問番号(Q1, Q2など)と回答番号(1, 3, 5など)などの数値しか入っておらず、シート2に対応する日本語ラベル(1=賛成, 3=どちらとも言えない、5=反対)が無駄に縦に連なって(500行ほどにわたり)入っているようなデータである。

失敗したプロンプトの例は以下である。

Q17とQ18のラベルは、2番目のシート「見出し」に記録されています。それを用いて、集計結果にラベルを付けてください。

シート1の数値データの集計とグラフの生成はできても、そのグラフに、シート2に保存されている日本語を適切に表示してもらうことまではできず、結局チャットに直接ラベルを打ち込んで指示を行った。
(かなり惜しいところまで行くが、ラベルが1行ずれていたり、ありもしないラベルをでっち上げるHallucinationsが起きてしまった)

とは言えこれは、ChatGPTの性能の問題というよりは、データが独自の形式になってしまっており、クリーニングが必要な状態であることに起因する問題だと思われる。
Advanced Data Analysisでデータ分析を行う際は、できるだけ綺麗に整形した後のデータをChatGPTに渡した方がいいだろう。



Make a comment

*
*
* (公開されません)