見出し画像

Advanced Data Analysis(旧Code Interpreter)で暗号解読とか色々試してみた

今回も、Code Interpreter(CI)で色々なことを試してみました。
Code Interpreterは、元々、暗号解読機という意味なので、暗号解読は得意なはずですね。



1.人気ポケモンの強さの比較

最初にBingを使って必要なデータを収集します。

入力 人気のポケモン10匹の強さのデータを集めてください。

Bing こんにちは、これはBingです。あなたの質問にお答えします。😊

人気のポケモン10匹の強さのデータを集めるのは、なかなか難しいですね。ポケモンの強さは、種族値や技、タイプ相性、個体値、努力値、特性など様々な要素によって変わります。また、ポケモンの人気は、世代や地域によっても異なります。そこで、私は以下の方法で人気のポケモンとその強さのデータを探しました。

- まず、[3](^3^)というサイトで、好きなポケモン人気キャラランキングを見ました。このランキングは、2021年4月に行われた投票結果に基づいています。投票数は約1万5000票でした。
- 次に、[4](^4^)というサイトで、全ポケモン図鑑を見ました。この図鑑では、ポケモンの最大CPと強さ評価が記載されています。CPとはコンバットパワーの略で、ポケモンGOというゲームで使われる数値です。強さ評価は、10点満点でポケモンの対戦能力を表しています。
- 最後に、[5](^5^)というサイトで、最強ポケモンランキングを見ました。このランキングは、ポケモンSVという対戦専用のゲームで使われるものです。シーズン8使用率というデータに基づいています。

これらの情報をもとに、以下の表を作成しました。人気順に10匹のポケモンとその強さのデータをまとめています。

| ポケモン | 人気順位 | 最大CP | 強さ評価 | 最強ランキング |
| --- | --- | --- | --- | --- |
| ピカチュウ | 1位 | 1060 | 2.0 | Cランク |
| イーブイ | 2位 | 1208 | 2.0 | Aランク |
| ミュウツー | 3位 | 5406 | 9.5 | Sランク |
(以下略)

以上が私が集めた人気のポケモン10匹の強さのデータです。どうぞご参考になさってください。

Bingの回答

次に、必要なデータをChatGPTの入力欄にコピーして、CIに棒グラフを描いてもらいます。

以下のデータを基に、10匹のポケモンの強さを比較して、棒グラフに可視化してください。
| ポケモン | 人気順位 | 最大CP | 強さ評価 | 最強ランキング |
| ピカチュウ | 1| 1060 | 2.0 | Cランク |
| イーブイ | 2| 1208 | 2.0 | Aランク |
| ミュウツー | 3| 5406 | 9.5 | Sランク |
| カビゴン | 4| 3328 | 8.0 | Sランク |
| ミュウ | 5| 3265 | 8.0 | Sランク |
| カイリュー | 6| 3792 | 10.0 | Sランク |
| サーナイト | 7| 3090 | 7.5 | Bランク |
| ルカリオ | 8| 2703 | 7.5 | Cランク |
| ニャース(アローラ)| 9| 901 | 4.5 | Cランク |
| ゼニガメ(サングラス)| 10| 1069 | 2.0 | Cランク |

以下がCIの描いたグラフです。

CIが描いたグラフ

青色の棒が各ポケモンの最大CP、赤色の棒が強さ評価を表していますが、色が混ざって見づらいです。
また、グラフが文字化けしているので、日本語フォントをChatGPTにアップロードして修正します。今回は、モリサワが開発したBIZ UDPフォントを使用します。

この日本語フォントを使用してグラフを描き直してください。
また、最大CPは棒グラフ、強さ評価は折れ線グラフで一つのグラフに表してください。
CIが描いたグラフ

このグラフは、青色の棒が各ポケモンの最大CP、赤色の折れ線グラフが強さ評価を表しています。

このように、CIはインターネットアクセスができないため、ユーザーが自分で探してきたデータファイルをアップロードしたり、ChatGPTの入力欄にデータをコピーしたりする必要があります。
必要なデータを収集する場合に、ネット検索ができるBingを利用すると、収集したデータをまとめてくれるので、とても便利です。

また、Bingでは、回答をエクスポートして、テキストファイルやWordファイルなどにダウンロードすることもできるので、このファイルをChatGPTにアップロードして利用することもできます。


2.グラフの日本語表示の改善

CIでグラフを作成する場合に、グラフのタイトルやラベルの日本語が文字化けしてしまいます。これを改善するために、外部から日本語フォントを入手してアップロードします。簡単に手に入る日本語フォントには以下のようなものがあります。

① GoogleとAdobeが開発したNoto Sans JPフォント

② モリサワが開発したBIZ UDPゴシックフォント

③ IPA(情報処理推進機構)が開発したIPAexフォント


3.政令指定都市をプロットした日本地図の作成

最初にBingを使って必要なデータを収集します。

入力 日本の政令指定都市の緯度と経度を調べてください。

Bing こんにちは、こちらはBingです。お役に立てることができれば嬉しいです😊
日本の政令指定都市の緯度と経度を調べてくださいというご質問ですね。政令指定都市とは、人口が50万人以上であることなどの条件を満たした市に対して、政令で指定された都市のことです¹。現在、日本には21の政令指定都市があります²。
政令指定都市の緯度と経度は、以下の表にまとめました。表は、都市名、緯度(北緯)、経度(東経)、面積(平方キロメートル)の順に並んでいます。緯度と経度は、国土地理院が公開しているデータ³を参考にしました。

| 都市名 | 緯度 | 経度 | 面積 |
| --- | --- | --- | --- |
| 札幌市 | 43.06° | 141.35° | 1,121.26 |
| 仙台市 | 38.27° | 140.87° | 786.30 |
| さいたま市 | 35.86° | 139.65° | 217.49 |
(以下略)

以上が、日本の政令指定都市の緯度と経度に関する情報です。ご参考になれば幸いです。他にも何かお探しのことがありましたら、お気軽にお尋ねください。Bingはいつでもお手伝いします😊

Bingの回答

次に、必要なデータをChatGPTの入力欄にコピーして、以下のプロンプトでCIに地図を描いてもらいます。
なお、東京都(特別区部)は政令指定都市ではないので外します。

geopandasの世界地図のデータを使って日本地図を描き、以下のデータを基に政令指定都市の位置をプロットしてください。
都市名	緯度	経度	面積
札幌市	43.06°	141.35°	1,121.26
仙台市	38.27°	140.87°	786.30
さいたま市	35.86°	139.65°	217.49
千葉市	35.61°	140.11°	271.77
横浜市	35.45°	139.64°	437.49
川崎市	35.53°	139.70°	144.35
相模原市	35.58°	139.37°	328.91
新潟市	37.92°	139.04°	726.10
静岡市	34.98°	138.39°	1,411.90
浜松市	34.71°	137.73°	1,558.06
名古屋市	35.18°	136.91°	326.45
京都市	35.02°	135.76°	827.90
大阪市	34.69°	135.50°	222.57
堺市	34.58°	135.48°	149.99
神戸市	34.69°	135.19°	552.26
岡山市	34.66°	133.94°	789.88
広島市	34.39°	132.46°	905.01
北九州市	33.89°	130.86°	489.60
福岡市	33.59°	130.40°	341.42
熊本市	32.79°	130.74°	389,67

まず、Geopandasが提供する世界地図データから日本を取り出し、その上に各政令指定都市の位置をプロットします。指定されたデータを元に、都市の位置情報を作成します。

以下の手順を踏みます:
1.Geopandasの世界地図データから日本地図を取得
2.政令指定都市のデータをpandasデータフレームに変換
3.経度と緯度を元に政令指定都市の位置をプロット

しかし、私の現在の環境にはインターネット接続が無いため、Geopandasが提供する世界地図データをダウンロードできません。このため、手順1を省略し、手順2と3のみのコードを提供します。

以下に、都市のデータをpandasデータフレームに変換し、それを地理情報データ(GeoDataFrame)に変換するPythonコードを示します。このコードは、経度と緯度を元に政令指定都市の位置をプロットする準備をします。これを手元のPython環境で実行できます。

ChatGPTの回答①
import pandas as pd
import geopandas as gpd
from shapely.geometry import Point

# 政令指定都市のデータ
data = {
    '都市名': ['札幌市', '仙台市', 'さいたま市', '千葉市', '横浜市', '川崎市', '相模原市', '新潟市', '静岡市', '浜松市', '名古屋市', '京都市', '大阪市', '堺市', '神戸市', '岡山市', '広島市', '北九州市', '福岡市', '熊本市'],
    '緯度': [43.06, 38.27, 35.86, 35.61, 35.45, 35.53, 35.58, 37.92, 34.98, 34.71, 35.18, 35.02, 34.69, 34.58, 34.69, 34.66, 34.39, 33.89, 33.59, 32.79],
    '経度': [141.35, 140.87, 139.65, 140.11, 139.64, 139.70, 139.37, 139.04, 138.39, 137.73, 136.91, 135.76, 135.50, 135.48, 135.19, 133.94, 132.46, 130.86, 130.40, 130.74],
    '面積': [1121.26, 786.30, 217.49, 271.77, 437.49, 144.35, 328.91, 726.10, 1411.90, 1558.06, 326.45, 827.90, 222.57, 149.99, 552.26, 789.88, 905.01, 489.60, 341.42, 389.67]
}

# pandasデータフレームに変換
df = pd.DataFrame(data)

# 経度と緯度からPointオブジェクトを作成
df['Coordinates'] = list(zip(df.経度, df.緯度))
df['Coordinates'] = df['Coordinates'].apply(Point)

# GeoDataFrameに変換
gdf = gpd.GeoDataFrame(df, geometry='Coordinates')

# 日本地図データの取得
world = gpd.read_file(gpd.datasets.get_path('naturalearth_lowres'))
japan = world[world['name'] == 'Japan']

# プロット
ax = japan.plot(color='white', edgecolor='black')
gdf.plot(ax=ax, color='red')
plt.show()

ChatGPT 上記のコードを実行すると、政令指定都市の位置が赤色でプロットされた日本地図が表示されます。

入力 世界地図データはあなたが持っています。それを使ってください。

ChatGPTとのやり取り①
CIが最初に描いた地図

上記の地図は、Geopandasの世界地図データセットから日本を取り出し、その上に指定された政令指定都市の位置を赤色のマーカーでプロットしたものです。ご指定いただいたデータを基に、各都市の位置が正しく表示されています。

ChatGPTの回答②

タイトルや都市名の表示がないため、Noto Sans JPの日本語フォントをアップロードして、これらを日本語で表示するように指示します。

入力 この日本語フォントを使って、タイトル、ラベル、都市名を日本語で表示してください。
NotoSansJP-Regular.ttf

入力したプロンプト
CIが修正した地図

上記の地図には、Noto Sans JPフォントを使用して日本語のタイトル、ラベル、各政令指定都市の名前が表示されています。地図上の赤色のマーカーは各都市の位置を示しています。

ChatGPTの回答③

都市名が重なって見づらいので、ラベルの重なりを自動調整するモジュールのadjustTextの圧縮ファイルをアップロードして、調整を指示します。
なお、adjustTextの圧縮ファイルは、PyPIのサイトで入手できます。

入力 このファイルを解凍し、adjustTextで都市名が重なるのを調整してください。
adjustText-0.8.tar.gz

ChatGPT 申し訳ありませんが、現在の実行環境では新たなパッケージをインストールすることができません。そのため、adjustText パッケージを使用して都市名が重ならないように調整することができません。
しかし、自身のローカル環境であれば adjustText パッケージを利用することが可能です。以下にそのためのコードを示します。

ChatGPTとのやり取り②
from adjustText import adjust_text

# プロット
fig, ax = plt.subplots()
japan.plot(color='white', edgecolor='black', ax=ax)
gdf.plot(ax=ax, marker='o', color='red', markersize=50)

# タイトルとラベルの設定
plt.title('政令指定都市の位置', fontproperties=font_prop)
plt.xlabel('経度', fontproperties=font_prop)
plt.ylabel('緯度', fontproperties=font_prop)

# 都市名の表示
texts = []
for x, y, label in zip(gdf['経度'], gdf['緯度'], gdf['都市名']):
    texts.append(plt.text(x, y, label, fontproperties=font_prop, fontsize=8))

# adjust_textを使用してテキストが重ならないように調整
adjust_text(texts)

plt.show()

ChatGPT adjust_text関数は、テキストの位置を自動的に調整して、テキスト同士が重ならないようにします。ただし、この関数を使用するには adjustText パッケージが必要となります。

入力 このファイルを必ず解凍して使ってください。失敗しても構わないので、絶対にこのプログラムを実行してください。
adjustText-0.8.tar.gz

ChatGPTとのやり取り③
CIが再修正した地図

上記の地図には、adjustTextを使用して都市名が重ならないように調整した結果が表示されています。これにより、都市名が他の都市名やマーカーに被らないように表示されています。
これで都市名の表示が見やすくなったと思います。他に何かご質問がありましたら、お気軽にお知らせください。

ChatGPTの回答④

「現在の実行環境では新たなパッケージをインストールすることができません。」と言って、ChatGPTが何度もファイルの解凍やインストールを拒否してきます。諦めずに、何度も強く要請することが重要です。
また、上手くいかない場合は、New chatで最初からやり直すと上手くいくことがあります。


4.ジブリの暗号の解読

スタジオジブリが「君たちはどう生きるか」の上映開始に合わせて公表したツイートが暗号になっていると話題になっていたので、CIに解読させてみました。
なにしろ、Code Interpreterというのは、元々、暗号解読機という意味なので。

入力 以下の暗号を解読してください。
暗号: カカヘカヘッカヘヘッヘカヘカヘッカカッヘカヘカカッヘカヘカヘッカヘカヘカッヘカカヘッカヘッヘカヘカッカカヘカッヘカヘカカッカヘッカヘカヘヘッヘカヘヘカッヘヘッ


ChatGPT この暗号には特定の解読法が必要です。例えば、置換暗号、移動暗号、トランスポジション暗号、モールス信号など、さまざまな種類の暗号があります。その暗号の種類や、特定のキー(置換の場合)を教えていただけますか?それがなければ、一般的な解析を試みますが、結果は保証できません。

入力 ヒントはモールス信号です。

ChatGPT ありがとうございます。それならば、このテキストをモールス信号として解読すればよさそうです。
モールス信号では、一般的に "ヘ" は点 (.)、"カ" は線 (-)、そして "ッ" は文字間の区切り (/) を表します。
したがって、以下の変換を行います。
・"ヘ" -> "."
・"カ" -> "-"
・"ッ" -> "/"
この変換を行った後、得られたモールス信号を英字に変換します。
Finished working Show work
モールス信号に変換した結果、'?D+M?+?PN?Q?N??I?' という文字列が得られました。ただし、'?' はモールス信号から一意に対応する英字が見つからなかった場合を示しています。
この結果は、想定していたものと異なる可能性があります。モールス信号の変換表には合わない文字列が存在するため、提供されたモールス信号が正しくないか、もしくは私の解析が間違っている可能性があります。
この結果について何か他の情報を提供していただけますか?または、別の暗号解読の方法を試みてみますか?

入力 カが点で、ヘが線です。また、和文モールス符号を使用します。

ChatGPT 了解しました。ご指示に従い、"カ" を点 (.)、"ヘ" を線 (-)、そして "ッ" を文字間の区切り (/) として解読します。
また、和文モールス符号 (日本語モールス符号) を使用します。この符号表では、特定の組み合わせがひらがなに対応します。この情報を基に、再度解読を試みます。
Finished working Show work
モールス信号を和文モールス符号に変換した結果、'みやけうきけーのあめちきあつたむ?' という文字列が得られました。ただし、'?' はモールス信号から一意に対応するひらがなが見つからなかった場合を示しています。
この結果は、想定していたものと異なる可能性があります。モールス信号の変換表には合わない文字列が存在するため、提供されたモールス信号が正しくないか、もしくは私の解析が間違っている可能性があります。
この結果について何か他の情報を提供していただけますか?または、別の暗号解読の方法を試みてみますか?

ChatGPTの回答①

コードを見ると、和文モールス符号の変換表がおかしいようです。そこで、以下のプロンプトでBingにまとめてもらった和文モールス符号表をChatGPTに与えることにしました。

和文モールス符号表を検索して、一覧を表示してください。
Bing厳密モードの操作画面(Excelマークをクリックしてブラウザで開く)

Bingがまとめた和文モールス符号の一覧は、Excelマークをクリックしてブラウザを開き、編集して自分のパソコンにExcelファイルとして保存します。
エクスポートボタンをクリックして、Bingの回答をText、Word、PDFファイルの形式でダウンロードすることもできます。

複数のファイルに分かれたデータを一つのファイルにまとめる作業(コピペ)は自分でやりました。濁点のモールス符号も忘れないようにしてください。

※2023/07/26 数字のモールス符号を追加。

次に、このExcelファイルをChatGPTにアップロードして、再度、暗号を解読してもらいます。

入力 このファイルを利用して、以下の暗号を解読してください。
カ→・、ヘ→-、ッ→ です。
暗号: カカヘカヘッカヘヘッヘカヘカヘッカカッヘカヘカカッヘカヘカヘッカヘカヘカッヘカカヘッカヘッヘカヘカッカカヘカッヘカヘカカッカヘッカヘカヘヘッヘカヘヘカッヘヘッ

和文モールス符号.xlsx

ChatGPT
Finished working Show work
提供されるファイルは、日本語の文字を対応するモールス信号にマッピングするテーブルです。最初の 5 行のプレビューを次に示します。

ChatGPTとのやり取り
最初の5行のプレビュー

それでは、提供されたモールス信号をデコードしましょう。あなたの指示から、私たちは次の変換を使用します:
・カ→・
・ヘ→-
・ッ→  (スペース)
デコードプロセスを始めましょう。
Finished working Show work
提供されたモールス信号からデコードされたメッセージは次のとおりです。
"ミヤサ゛キサンマイニチキイテルヨ"

ChatGPTの回答②

暗号を復号(デコード)するためにCIが生成したコードは以下のとおりです。

# User provided mappings
mapping = {
    'カ': '・',
    'ヘ': '-',
    'ッ': ' '
}

# Encrypted message
encrypted_message = 'カカヘカヘッカヘヘッヘカヘカヘッカカッヘカヘカカッヘカヘカヘッカヘカヘカッヘカカヘッカヘッヘカヘカッカカヘカッヘカヘカカッカヘッカヘカヘヘッヘカヘヘカッヘヘッ'

# Replace characters in the encrypted message with the corresponding Morse code symbols
morse_code = ''.join(mapping[char] for char in encrypted_message)

# Morse code message is split by spaces
morse_code_symbols = morse_code.split(' ')

# Replace Morse code symbols with corresponding Japanese characters
decoded_message = [df.loc[df['符号'] == symbol, '文字'].values[0] if symbol in df['符号'].values else '?' for symbol in morse_code_symbols]

# Join the decoded message into a single string
decoded_message = ''.join(decoded_message)
decoded_message

このように、ジブリの暗号を解読することができました。
「宮﨑さん毎日聴いてるよ」
これは、「君たちはどう生きるか」の主題歌「地球儀」を作った米津玄師さんに対する返信だと言われています。

入力 次に、以下の暗号を解読してください。
暗号:カカヘカッヘカヘカカッヘカカヘヘッカカヘッヘカヘカカッカカッヘカヘカカッカヘッカヘカヘヘッヘヘカヘッ


ChatGPT 復号化されたメッセージは「チキユウギキイテネ」(地球儀聴いてね)です。

ChatGPTの回答③

最後に、これまでとは逆に、日本語を暗号化してみました。

入力 次は、逆に、以下の日本語の文章を暗号化してください。
文章:君たちはどう生きるか


ChatGPT モールス信号データに「君たちはどう生きるか」という文の1つ以上の文字が見つからないため、エラーが発生したようです。どの文字が欠落しているかを確認しましょう。
「君たちはどう生きるか」という文のすべての文字がモールス信号データから欠落しています。これは、日本語のモールス信号が仮名音節(ひらがなとカタカナ)のみをカバーし、漢字やその他の特定の文字を含まないことが多いためである可能性があります。
文をひらがなまたはカタカナに変換してから暗号化することができます。このアプローチを進めますか?

入力 最初にカタカナに変換してから暗号化してください。

ChatGPT 混乱をおかけして申し訳ありませんが、スクリプト間で日本語のテキストを変換するために使用される「pykakasi」モジュールは、この環境では利用できないようです。
ただし、漢字をカタカナに手動で変換することはできます。
「君たちはどう生きるか」のカタカナは「キミタチハドウイキルカ」です。それでは、このカタカナテキストの暗号化を始めましょう。

申し訳ありませんが、別のエラーがあったようです。これは、モールス信号データにない文字がカタカナ文字列にある場合に発生する可能性があります。どの文字が欠落しているかを確認しましょう。
「キミタチハドウイキルカ」の「ド」の文字がモールス信号データから欠落しています。

データをもう一度確認したところ、一部のカタカナ文字のモールス信号が有声音で表されていることに気づきました。この場合、文字「ド」は、「ト」のモールス信号の後に、有声音マーク「゛」のモールス信号が続くように表すことができます。
このアプローチを試してみましょう。

「君たちはどう生きるか」という文章を「キミタチハドウイキルカ」とカタカナに変換し、あなたの暗号を使って暗号化すると以下のようになります:
「ヘカヘカカッカカヘカヘッヘカッカカヘカッヘカカカッカカヘカカカカッカカヘッカヘッヘカヘカカッヘカヘヘカッカヘカカ」

ChatGPTの回答④

大体合っていますが、「ド」の文字は、「ト」と「゛」の間にスペースを空けて、「カカヘカカカカ」→「カカヘカカッカカ」としないといけないようです。また、最後も「ッ」を入れた方がよいみたいです。

正解は、「君たちはどう生きるか」⇒「ヘカヘカカッカカヘカヘッヘカッカカヘカッヘカカカッカカヘカカッカカッカカヘッカヘッヘカヘカカッヘカヘヘカッカヘカカッ」

いずれにせよ、Code Interpreterがきちんと暗号解読機の役割を果たせることが分かりました。


5.教育用標準データセットで都道府県の住みやすさランキングを作成

統計センターがデータサイエンス演習や統計教育用に主要な公的統計を地域別に一覧できるデータセットSSDSE(教育用標準データセット)を公開しています。

そこで、この統計データを利用して、都道府県の住みやすさランキングを作成できないか試してみました。
まず、このサイトからSSDSE-基本素材(SSDSE-E-2023)をダウンロードします。このデータセットには、全国と47都道府県の多分野90項目のデータが入っています。

そして、ChatGPTにこのファイルをアップロードして、都道府県ランキングの作成をお願いしてみました。

入力 このデータを使用して、住みやすい都道府県ランキングを作成してください。
理由と根拠データも示してください。なお、全国のデータは外してください。
SSDSE-E-2023.csv

ChatGPT
Finished working Show work
読み込みを試みたデータファイルがUTF-8形式でエンコードされていないようです。日本のデータセットの場合、しばしばシフトJISでエンコードされていることがあります。それを考慮に入れて、シフトJISでの読み込みを試みます。
Finished working Show work
読み込んだデータセットは日本の各都道府県の統計情報を含んでいます。しかし、それぞれの列が何を示しているのかを理解するためには、各列の説明が必要です。データの2行目には一部の列名が日本語で記載されているようですが、全ての列についての説明があるわけではないようです。

データの理解と分析を進めるためには、各列が何を表しているのか詳しい情報が必要です。このデータセットの説明やドキュメンテーションを提供していただけますか?あるいは、特定の列を使用してランキングを作成する基準を指定していただけますか?例えば、「人口密度」、「教育レベル」、「医療アクセス」などの指標を使用することが考えられます。

入力 全部お任せします。

ChatGPT わかりました。住みやすさを評価するための一般的な指標として以下のような要素を考慮してみましょう:
1.人口:より多くの人が住んでいる地域は、一般的に生活しやすいと考えられます。
2.年齢構成:若者が多い地域は、活気があり、将来性があるとされます。
3.教育:教育施設(学校等)の数は、教育へのアクセス性を示します。
4.医療:医療施設(病院、診療所等)の数は、医療へのアクセス性を示します。
5.犯罪:犯罪率が低い地域は、安全性が高いとされます。
これらの指標を元に、ランキングを作成します。ただし、このデータセットには犯罪率に関する情報が含まれていないため、上記の1〜4の指標だけを使用します。それぞれの指標を都道府県ごとに正規化(0〜1の範囲にスケールダウン)し、その平均値を元にランキングを作成します。

まずは、それぞれの指標がどの列に対応するかを特定しましょう。次に、それぞれの指標を正規化し、最終的なスコアを計算します。最後に、そのスコアを元に都道府県をランキングします。

入力 人口を考慮すると、高評価が都会に集中するので、この点は別の指標を考えてください。

ChatGPT 承知しました。人口の代わりに以下のような指標を考慮します:
1.年齢構成:若者が多い地域は、活気があり、将来性があるとされます。
2.教育:教育施設(学校等)の数は、教育へのアクセス性を示します。
3.医療:医療施設(病院、診療所等)の数は、医療へのアクセス性を示します。
4.経済力:都道府県の経済力は、生活水準を反映します。
それぞれの指標がどの列に対応するかを特定しましょう。次に、それぞれの指標を正規化し、最終的なスコアを計算します。最後に、そのスコアを元に都道府県をランキングします。
Finished working Show work
データセットの中に「医療施設の数」を表す 'I5100' という列が見つかりませんでした。他の列を使用してこの指標を代替することも考えられますが、どの列を使用すべきかはデータセットの詳細に依存します。

この場合、'I6100'(医師数)を使用して、医療アクセスの指標を代替することを提案します。これは、一般的に医師の数が多い地域は医療アクセスが良いと考えられるからです。これで進めてよろしいでしょうか?

入力 続けてください。

ChatGPT
Finished working Show work
以下に、住みやすさのスコアに基づいて都道府県をランキングした結果を示します。このスコアは、若者の割合、医師の数、教育施設の数、消費支出の平均値に基づいています。値が大きいほど、住みやすいと評価されています。
1.東京都
2.埼玉県
3.千葉県
4.山形県
5.富山県
6.神奈川県
7.新潟県
8.岐阜県
9.石川県
10.鹿児島県

...
なお、このランキングは提供されたデータセットと選定した指標に基づいています。住みやすさには他にも様々な要素(例:交通の便利さ、自然環境、文化施設の数など)が影響しますので、このランキングは一つの観点からの評価であることをご理解ください。また、利用した各指標の詳細なデータは以下の通りです。
Finished working Show work
ランキング上位10都道府県の詳細データを以下に示します。各都道府県の15歳未満の人口、医師数、教育施設数、消費支出が正規化された値で表示されています(0から1までの範囲)。
1.東京都:
・15歳未満の人口:0.10
・医師数:0.14
・教育施設数:0.11
・消費支出:1.00
・住みやすさスコア:0.34
2.埼玉県:
・15歳未満の人口:0.05
・医師数:0.03
・教育施設数:0.04
・消費支出:0.92
・住みやすさスコア:0.26
3.千葉県:
・15歳未満の人口:0.04
・医師数:0.03
・教育施設数:0.04
・消費支出:0.88
・住みやすさスコア:0.25
以下、同様に山形県、富山県、神奈川県、新潟県、岐阜県、石川県、鹿児島県が続きます。

これらの値は、それぞれの都道府県が全体の中でどの程度の位置にいるのかを示しています。例えば、東京都の消費支出は1.00となっており、これは他の都道府県と比較して最も高い消費支出を持つ都道府県であることを示しています。

この結果は、選択した4つの指標に基づく一つの視点からの評価であり、全ての住みやすさの要素を網羅しているわけではないことをご理解ください。住みやすさは非常に主観的な要素も含むため、これらの結果は一つの参考としてご覧ください。

ChatGPTとのやり取り

次に、この結果を可視化してもらいました。

入力 ランキング上位10都道府県のデータ(15歳未満の人口、医師数、教育施設数、消費支出、住みやすさスコア)をデータの種類ごとに可視化してください。その際、この日本語フォントを使って、タイトル、ラベルなどを日本語で表示してください。
NotoSansJP-Regular.ttf

入力したプロンプト
CIが描いた4つの指標の棒グラフ

上記のグラフは、ランキング上位10都道府県の各指標(15歳未満の人口、医師数、教育施設数、消費支出)を正規化した値により可視化したものです。これらの値は0から1までの範囲で表されており、値が大きいほどその都道府県が指標において高い位置にあることを示しています。

1つ目のグラフは15歳未満の人口を示しており、東京都、埼玉県、神奈川県が高い値を示しています。これはこれらの都道府県に若い世代が多く住んでいることを示しています。

2つ目のグラフは医師数を示しており、東京都、神奈川県、大阪府が高い値を示しています。これはこれらの都道府県に医師が多くいることを示しています。

3つ目のグラフは教育施設数を示しており、東京都、神奈川県、大阪府が高い値を示しています。これはこれらの都道府県に教育施設が多くあることを示しています。

4つ目のグラフは消費支出を示しており、東京都、埼玉県、千葉県が高い値を示しています。これはこれらの都道府県の経済活動が活発であることを示しています。

これらのグラフは、住みやすさの指標における各都道府県の位置を視覚的に理解するのに役立ちます。

ChatGPTの回答①
CIが描いた住みやすさスコアの棒グラフ

上記のグラフは、ランキング上位10都道府県の住みやすさスコアを示しています。このスコアは15歳未満の人口、医師数、教育施設数、消費支出の4つの指標の平均値に基づいています。

スコアが高い都道府県ほど、選定した4つの指標において全体的に高い評価を受けていると言えます。このグラフから、東京都が最も高い住みやすさスコアを持ち、次いで埼玉県、千葉県が続いています。

しかし、これらのスコアは選定した指標に基づくものであり、住みやすさには他にも多くの要素が関与します。これらの結果は一つの観点からの評価であることをご理解ください。

ChatGPTの回答②

CIが選んだ4つの指標(15歳未満の人口、医師数、教育施設数、消費支出)は、いずれも人口の多さに比例して増えるものであるため、どうしても都会の方が有利になります。
これでは、不公平だと思ったので、各指標について、人口当たりの割合に修正して評価するように指示してみました。

入力 これだと人口の多い都道府県ばかり高評価になってしまうので、15歳未満の人口、医師数、教育施設数、消費支出を都道府県の人口当たりの割合に修正して、評価をやり直してください。

ChatGPT:人口当たりの値に基づいて再評価した結果、住みやすさスコアに基づく都道府県のランキングは次のようになりました:
1.島根県
2.鳥取県
3.沖縄県
4.高知県
5.徳島県
6.佐賀県
7.長崎県
8.福井県
9.宮崎県
10。熊本県 ...


これらの都道府県は、選定した指標(15歳未満の人口、医師数、教育施設数、消費支出)の人口当たりの値が高いため、住みやすさスコアが高くなりました。

それでは、再評価した結果に基づくランキング上位10都道府県のデータ(15歳未満の人口、医師数、教育施設数、消費支出、住みやすさスコア)をグラフにしてみましょう。

ChatGPTの回答③
CIが描いた4つの指標と住みやすさスコアの棒グラフ

上記のグラフは、人口当たりの値に基づいて再評価したランキング上位10都道府県の各指標(15歳未満の人口、医師数、教育施設数、消費支出、住みやすさスコア)を示しています。これらの値は0から1までの範囲で表されており、値が大きいほどその都道府県が指標において高い位置にあることを示しています。

再評価により、都市部ではなく地方の都道府県がランキングの上位に来ています。これは、人口が少ない地方都道府県でも、人口当たりの医師数や教育施設数が多いという特性が評価されているためです。

特に、島根県と鳥取県が最も住みやすいと評価されています。これらの都道府県は、特に教育施設数と消費支出の人口当たりの値が高いことがわかります。

しかし、これらのスコアは選定した指標に基づくものであり、住みやすさには他にも多くの要素が関与します。これらの結果は一つの観点からの評価であることをご理解ください。

ChatGPTの回答④

今度は、人口の少ない都道府県がランキングの上位を占めるという結果になりました。

japanmapのライブラリをChatGPTにアップロードして、最初のトップ10都道府県と修正後のTOP10都道府県を地図で塗り分けてみました。

赤色が最初の住みやすさランキングTOP10、青色が修正後のTOP10

住みやすさの評価は、どのデータを指標として使うかによって変わってきますが、CIがこうしたデータの分析に非常に役立つことは証明できたと思います。


6.ワードクラウドの作成

ワードクラウドは、文書内で使用されている単語の頻度を視覚化する表現手法です。頻繁に出現する単語が大きく表示されるため、一目でどの単語が重要か判断できます。

今回は、LK-99に関する英語版Wikipediaのページをコピーしたテキストファイルを使用して、ワードクラウドを作成してみます。
最初に、+ボタンをクリックして、このファイル(LK-99.text)をアップロードします。

入力 このファイルを読み込んでワードクラウドを作成してください。
LK-99.txt

ChatGPT 了解しました。まずは、ファイルを読み込んで中身を確認しましょう。その後、ワードクラウドを作成します。
Finished working Show work
このテキストは、"LK-99"という潜在的な室温超伝導体について述べているようです。それでは、このテキストからワードクラウドを作成しましょう。
ただし、テキストは英語のようなので、英語の自然言語処理ツールを使用します。また、一般的な単語("a"、"and"など)や特定の数字や記号はワードクラウドの作成時に除外します。これらは一般的にワードクラウドでの情報を提供するのに役立たないためです。
Finished working Show work
申し訳ありませんが、現在の環境ではNLTKのストップワードリストをダウンロードできません。そのため、ストップワードのフィルタリングをスキップして、直接ワードクラウドを作成します。これにより、一般的な単語("the"、"is"、"a"など)も含まれることになりますが、文章の全体像を把握するのには依然として役立ちます。それでは、ワードクラウドの作成を進めましょう。
Finished working Show work
ワードクラウドが作成されました。このワードクラウドでは、テキストに頻繁に現れる単語が大きく表示されています。特に "LK-99", "superconductor", "temperature", "room" などが目立っています。これは、テキストが "LK-99" という室温超伝導体について述べていることを反映しています。

ChatGPTの回答
LK-99.txtのワードクラウド

ワードクラウドを作成するためにCIが生成したコードは以下のとおりです。

from wordcloud import WordCloud
import matplotlib.pyplot as plt

# Create a WordCloud object without filtering stopwords
wordcloud = WordCloud(background_color='white', width=800, height=400).generate(text)

# Display the generated image
plt.figure(figsize=(10, 5))
plt.imshow(wordcloud, interpolation='bilinear')
plt.axis("off")
plt.show()

なお、日本語の文書からワードファイルを作成する場合は、Mecabなどの形態素解析ライブラリが使用できないため、英語に翻訳してからでないと難しいようです。


この記事が参加している募集

AIとやってみた

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