見出し画像

統計グラフGPTsはこの方針で。やっとひとくぎり ・・・ ではなかった

投稿後、「GPT Builder」の「Actions」の使い方を知り、別バージョンを作成中です。
ここではあきらめた「外部API」への接続ができています。
まだ調整中を続けていますが、やりたいことができそうな感じです。
「ひとくぎり」ではまく「まだ試行錯誤継続中」です。 (2024/1/18記)

いくつか制作中My GPTs
その1つの話です。
統計データの可視化ーーグラフを作成し、解析まで行うGPTsを目的としています。
苦労したのは以下5点。
まだ完全には解決していませんが、ベースが出来上がったのでチュニーニングのフェーズに入っています。

  • 外部のAPIにアクセスできないこと

  • その結果数値データの自動更新ができないこと

  • データが大きい(項目が多い)と意図通り読み込めないこと

  • サンプルのコードを提供しないとうまく動作しないこと

  • 日本語のフォントが文字化けすること

この投稿はGPTsのベースを作成するまでのメモです。
今回は細かく振る舞いを定義した方が効率よく検証できたので、「Instructions」の書き込みをGPTs Builderに任せるのではなく自分で行なっています。


Instructionsを自分で記述

自分で記述した理由は大きく3つあります。

  • 表の列を正しく参照してほしいから

  • (上記の通り)日本語が文字化けするから

  • こうした問題を防ぐために記述したPythonコードを使用してほしいから

GPT Builderが今後賢くなることで気にしなくてよくなると思っています。
試行錯誤した結果、今回のケースでは自分で記述する方がベターだと判断しました。

最初の試み:APIの使用

まず、政府統計の総合窓口「e-Stat」のデータを扱えるようにしたいと考えました。
扱える統計データの中から「家計調査」の推移作成をGPTsに任せようと試みます。
同調査では、家計の収入・支出、貯蓄・負債などを毎月調査しているので、月単位の時系列グラフを作成できます。

APIも備えています。
例えば、

https://api.e-stat.go.jp/rest/3.0/app/getSimpleStatsData?cdCat01=059&cdCat02=03&cdArea=00000&appId=<自分のアプリケーションID>&lang=J&statsDataId=0002070001&metaGetFlg=Y& cntGetFlg=N& explanationGetFlg=Y&annotationGetFlg=Y& sectionHeaderFlg=1&replaceSpChars=0

上記のようなクエリーを投げることで、CSVやXML、JSONのデータを取得できます(上記はCSV用クエリー)。

GPTsに「このクエリーを使ってCSVを取得し、グラフを作成してください」といった指示をInstructionsに書き込みます。
ところが、

私はインターネットにアクセスできないため、直接データを取得することはできません。ただし、あなたがこのクエリを使用する方法をお教えすることはできます。

と返されました。
指示の仕方を何度も変えたりしましたが、失敗です。
APIが使えないと、毎月追加されるデータを自動更新できません。

次の試み:CSVをKnowledgeにアップロード

APIを使った自動更新はあきらめました。
「e-Stat」から取得したCSVデータKnowledgeにアップロードすることにしました。
取得したCSVをは複数の列で構成されています。

「月」と「値」の列だけのデータなら、GPTsで比較的容易にグラフを作成できます。
今回は「地域区分」や「用途分類」に複数種の項目を含んでいたり、時間軸の値が日本語表記の月単位となっていたりしたからか、自動で意図通りのグラフ作成はできませんでした。
GPTsに使い方のサンプルを示すことで、基本動作を定義します。

Pythonコードで動作を定義

意図通り動きませんでしたが、GPTsのPreviewで取得できるPythonコードをベースに、実際にグラフを作成できるコードに変更しました。
そのコードを記したファイルをルールとしてKnowledgeに登録します。
PDFファイルで登録しましたが、txtファイルでも通用しました。

import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

# 日本語フォントの設定
font_path = '/mnt/data/NotoSansJP-VariableFont_wght.ttf'
jp_font = FontProperties(fname=font_path)

# CSVファイルのパス
file_path = '/content/sample_data/消費支出_地域別.csv'

# CSVファイルを読み込む
data = pd.read_csv(file_path, encoding='shift-jis', header=0)

# 2023年のデータのみを抽出
data_2023 = data[data['時間軸(月次)'].str.startswith('2023')]

# 全国のデータのみを抽出
data_2023_national = data_2023[data_2023['地域区分'] == '全国']

# 'value'列を整数型に変換
data_2023_national['value'] = data_2023_national['value'].astype(int)

# グラフの作成
plt.figure(figsize=(10, 6))
plt.plot(data_2023_national['時間軸(月次)'], data_2023_national['value'], marker='o', linestyle='-', color='blue')
plt.title('2023年 全国の消費支出のグラフ')
plt.xlabel('月次')
plt.ylabel('消費支出')
plt.grid(True)
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

Instrctionsの設定

Instructionsには以下のような内容を設定しています。
ここに記載されているcode_for_area.pdfが上記コードのファイルです。
実際にはもう少し書き込んであるのですが、この後の調整で増減しそうなので、ここで記載するのは一部に留めています。

#以下のInstrudtionの内容に沿ってください。
#必ず以下を参考にしてグラフを作成してください。
 Pythonコード:「code_for_area.pdf」、「code_for_usecass.pdf」
 グラフの画像:「eStat_graph_01.png」、「eStat_graph_02.png」、「eStat_graph_useclass.png」
#x軸の目盛は月単位です。
#文字化けする場合は、例えば「2023年3月」を「2023 March」や「2023−03」など日本語を使わない表記に変更してください。

グラフの画像(eStat_graph_0n.png)もKnowledgeに登録しています。

eStat_graph_01.png
eStat_graph_02.png

文字化け防止の外部知識

文字化け防止用のコードも記述しています。
そのコードが参照する日本語フォントファイル自体も、Knowledgeに登録しています。

# 日本語フォントの設定
font_path = '/mnt/data/NotoSansJP-VariableFont_wght.ttf'

NotoSansJP-VariableFont_wght.ttf」はGoogleフォントです。
/mnt/data/」は、GPTsのPreviewで試して確認したパスです。

CSVを読み込む際、「shift-jis」を指定しています。
デフォルトではutf-8で読み込もうとします。
shift-jisのままでも、「エラーが起きたのでshift-jisでインポートし直します」と返事をしてくれた後でちゃんと読み込んでくれる賢さを持ちます。
取得し直す手間を省きたかったので「shift-jis」を指定しました。

# CSVファイルを読み込む
data = pd.read_csv(file_path, encoding='shift-jis', header=0)

生成例1:エリア別

ベースはできたとはいえ、まだ安定しません。
1回で指定通りのグラフを作成してくれることもあります。
以下は調整しながら作成したケースです。


「関東と関西地方の消費支出推移を。対象は2022年以降。」

2022年以降の関東地方と近畿地方(関西地方)の消費支出の推移を示すグラフを作成しました。グラフには、関東地方と近畿地方の消費支出の月別データが示されています。グラフから、各地域の消費支出の動向を確認することができます。なお、グラフのx軸は月次を、y軸は消費支出の値を表しています。 ​


文字化けしています。

2022年以降の関東地方と近畿地方(関西地方)の消費支出の推移を示す改良されたグラフを作成しました。グラフでは、日本語の日付表記を英語表記に変更し、文字化けの問題を解決しています。グラフには、関東地方と近畿地方の消費支出の月別データが示されており、各地域の消費動向を確認することができます。なお、グラフのx軸は月次を、y軸は消費支出の値を表しています。 ​


「ラベルが文字化けしています。」

2022年以降の関東地方(Kanto Region)と近畿地方(Kansai Region)の消費支出の推移を示すグラフを、英語のラベルを使用して再作成しました。このグラフでは、関東地方と近畿地方の消費支出の月別データが示されており、各地域の消費動向を確認できます。グラフのx軸は月次を、y軸は消費支出の値(円)を表しています。 ​

生成例2:用途分類別

上記のエリア別に加え、「用途分類」ごとのグラフにも、同様のKnowledgeを設定しました。
上記Instructions例の中の「code_for_usecass.pdf」が用途分類ごとのPythonコード、「Stat_graph_useclass.png」が用途分類ごとのグラフの画像です。
いずれもKnowledgeとして登録しています。


「用途分類別の推移をお願いします。2022年以降で。 文字化けには気をつけてください。」

2022年以降の用途分類別の消費支出の推移を示すグラフを作成しました。グラフには、様々な用途の消費支出の月別データが示されており、各用途の支出動向を確認できます。なお、グラフのx軸は月次を英語表記で、y軸は消費支出の値(円)を表しています。

ただし、用途分類のラベルに日本語文字化けが発生しているため、詳細な用途の識別が困難です。英語ラベルを使用するか、別の解決策を検討する必要があります。他に何かお手伝いできることがあればお知らせください


「ラベルには
 日本語フォントの設定 
 font_path = '/mnt/data/NotoSansJP-VariableFont_wght.ttf'
を使ってください。」

2022年以降の用途分類別の消費支出の推移を示すグラフを、日本語フォントを用いて再作成しました。グラフには、様々な用途の消費支出の月別データが示されており、各用途の支出動向を確認できます。グラフのx軸は月次を英語表記で、y軸は消費支出の値(円)を表しています。また、凡例には日本語フォントを使用しているため、各用途を識別しやすくなっています。

他に何かお手伝いできることがあれば、お気軽にお問い合わせください。 ​


「各折れ線グラフに異なる色を使ってください。」

2022年以降の用途分類別の消費支出の推移を示すグラフを、各折れ線に異なる色を使用して再作成しました。このグラフでは、様々な用途の消費支出の月別データがカラフルに示されており、各用途の支出動向をより明確に識別できます。グラフのx軸は月次を英語表記で、y軸は消費支出の値(円)を表しています。凡例には日本語フォントが使用されており、用途を確認しやすくなっています。

他に何かお手伝いできることがあれば、お気軽にお問い合わせください。 ​


「2022年、23年の消費に影響を与えた出来事が反映された結果になっていますか?」

2022年と2023年の消費に影響を与えた主な出来事は次の通りです:2022年:ロシアによるウクライナ侵攻が発生し、原油と原材料の価格が高騰しました。これは消費者の購買力に影響を与え、消費に影響を与えた可能性があります。
2023年:消費税率の10%が定着し、消費マインドも回復基調にありました。このポジティブな経済環境は消費の増加に寄与したと考えられます。


これらの出来事は、消費支出のデータに反映されている可能性があります。特に、2022年の原油と原材料の価格高騰は、消費者の支出パターンに影響を与えた可能性が高く、2023年の消費税率定着と消費マインドの回復は、消費支出の増加に寄与していると考えられます。

ただし、これらの推移を直接的にデータから読み取るには、他の要因も考慮する必要があります。例えば、経済全体の状況、雇用状況、家計の所得状況など、消費に影響を与える他の要素も分析に含めることが重要です。

分析機能追加もテスト中

上記の最後に「影響を与えた出来事」について聞いています。
ここはまだ現在テスト中です。
自動で以下の参照用データを分析に使ってもらうようにチューニングを試みています。

# 【分析のために重要】:「Impacting_Consumption.pdf」を参照し、「この年は消費に影響を与える、こういう出来事がありました」という記述を入れてください。言い方はアレンジしていいです。

「Impacting_Consumption.pdf」の内容は以下の通りです(Bardに作ってもらいました)。

1年ごとの年表形式で日本の消費に影響を与えた出来事を示します。

1997年 - 消費税率が3%から5%に引き上げられる

1998年 - 第2次橋本内閣による財政再建策で消費増税が検討され始める

1999年 - 銀行の不良債権処理が本格化し、景気は微減

2000年 - ITバブル崩壊後も個人消費は持ち直す

2001年 - 小泉内閣による構造改革が始まり、デフレ局面が長期化

2002年 - 世界的なIT不況の影響で個人消費が低迷

2003年 - イラク戦争の影響で原油価格が高騰し、消費マインド悪化

2004年 - デジタル家電普及で耐久消費財の販売が伸びる

2005年 - 消費税率引き上げの本格的な議論が再開される

2006年 - 首相小泉純一郎の退陣で消費増税議論が後退

2007年 - 世界的な食料価格高騰で消費マインドが冷え込み

2008年 - リーマン・ショックによる世界同時不況で個人消費が大幅減少

2009年 - エコポイント制度の導入で家電の買い替え需要が喚起される

(中略)

2019年 - 消費税10%への引き上げで駆け込みと反動減の波が再来

2020年 - 新型コロナウイルスのパンデミックで消費が大きく落ち込む

2021年 - ワクチン接種で正常化の兆し

2022年 - ロシアによるウクライナ侵攻で原油・原材料高騰が消費に影響

2023年 - 消費税率10%が定着し消費マインドも回復基調

2024年 - 成長戦略実行で消費意欲が向上、インバウンド需要も拡大

2025年 - 人口減少社会の本格到来で内需主導型経済への構造変化が進む

GPTsの提案通り「消費に影響を与える他の要素」も外部知識として追加するつもりです。

グラフ作成ではまだ文字化けする、色分けしてくれないことがあるなど、不安定さは残っています。
未完成ですが、チューニングするための準備はできたと考えています。

この記事が気に入ったらサポートをしてみませんか?