統計グラフGPTsはこの方針で。やっとひとくぎり ・・・ ではなかった
いくつか制作中の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が上記コードのファイルです。
実際にはもう少し書き込んであるのですが、この後の調整で増減しそうなので、ここで記載するのは一部に留めています。
グラフの画像(eStat_graph_0n.png)もKnowledgeに登録しています。
文字化け防止の外部知識
文字化け防止用のコードも記述しています。
そのコードが参照する日本語フォントファイル自体も、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年以降。」
「文字化けしています。」
「ラベルが文字化けしています。」
生成例2:用途分類別
上記のエリア別に加え、「用途分類」ごとのグラフにも、同様のKnowledgeを設定しました。
上記Instructions例の中の「code_for_usecass.pdf」が用途分類ごとのPythonコード、「Stat_graph_useclass.png」が用途分類ごとのグラフの画像です。
いずれもKnowledgeとして登録しています。
「用途分類別の推移をお願いします。2022年以降で。 文字化けには気をつけてください。」
「ラベルには
日本語フォントの設定
font_path = '/mnt/data/NotoSansJP-VariableFont_wght.ttf'
を使ってください。」
「各折れ線グラフに異なる色を使ってください。」
「2022年、23年の消費に影響を与えた出来事が反映された結果になっていますか?」
分析機能追加もテスト中
上記の最後に「影響を与えた出来事」について聞いています。
ここはまだ現在テスト中です。
自動で以下の参照用データを分析に使ってもらうようにチューニングを試みています。
「Impacting_Consumption.pdf」の内容は以下の通りです(Bardに作ってもらいました)。
GPTsの提案通り「消費に影響を与える他の要素」も外部知識として追加するつもりです。
グラフ作成ではまだ文字化けする、色分けしてくれないことがあるなど、不安定さは残っています。
未完成ですが、チューニングするための準備はできたと考えています。
この記事が気に入ったらサポートをしてみませんか?