日曜の夜、突如ココナラ経由でいただいた統計解析 & 可視化のご依頼。
出品して 1 週間足らずで、2 件も申し込みをいただくなんて、と恐縮しつつ、自分の経験のためにも受諾。
月、火、そして今日も作業をしているのですが、なかなか。自分のスキルがめきめき上がっているのを実感します。
そして何より改めて、生成 AI 、私が使っているのは ChatGPT なのですが、ChatGPT の威力には驚かされます。
私は、データ分析は基本、プログラミング言語(たとえば Python や R)で行っているのですが、ChatGPT 登場以前は、プログラミングでデータ分析してエラーが出たら、それで何分も、何時間も、下手したら何日もそのエラーの解決にかかってました。
が、いまはプログラミングでエラーが発生したら、ChatGPT に尋ねたらほぼほぼ解決しますね。
というか、データ分析、可視化、ていうかそもそもいろんなプログラミングについて、自然言語で 「こういうことしたい!」とChatGPT に依頼すると、だいたい初期案コードを生成してくれます。
例えばですね、統計解析で、相関分析という手法があるのですが、ChatGPT に「相関分析を勉強したいので、サンプルコードを生成してください」とプロンプトで指示すると、Python コードを生成してくれるのですね。
以下、実際に生成されたコード。
# 必要なライブラリをインポート
import pandas as pd
from scipy.stats import pearsonr, spearmanr
# サンプルデータを作成
data = {
'X': [10, 20, 30, 40, 50],
'Y': [15, 25, 35, 45, 55]
}
df = pd.DataFrame(data)
# 相関係数を計算(ピアソン相関)
pearson_corr, p_value_pearson = pearsonr(df['X'], df['Y'])
print("ピアソン相関係数:", pearson_corr)
print("p値(ピアソン):", p_value_pearson)
# 相関係数を計算(スピアマン相関)
spearman_corr, p_value_spearman = spearmanr(df['X'], df['Y'])
print("スピアマン相関係数:", spearman_corr)
print("p値(スピアマン):", p_value_spearman)
これは Python のコードですが、これを R にしてくれ、とプロンプトで指示すれば、出力してくれるのです。
以下、R 言語での例です。
# サンプルデータを作成
X <- c(10, 20, 30, 40, 50)
Y <- c(15, 25, 35, 45, 55)
# ピアソン相関係数の計算
pearson_corr <- cor(X, Y, method = "pearson")
pearson_test <- cor.test(X, Y, method = "pearson")
cat("ピアソン相関係数:", pearson_corr, "\n")
cat("p値(ピアソン):", pearson_test$p.value, "\n")
# スピアマン相関係数の計算
spearman_corr <- cor(X, Y, method = "spearman")
spearman_test <- cor.test(X, Y, method = "spearman")
cat("スピアマン相関係数:", spearman_corr, "\n")
cat("p値(スピアマン):", spearman_test$p.value, "\n")
というふうに、ChatGPT はデータ分析をするためのコードをすぐ生成してくれます。
ただ、簡単なコードなら生成してくれますが、ちょっと難しいコードになるととたんによわよわになります。
が、そこはもう、ChatGPT を使う側の力量で、あとは Python の使い方をどの程度知っているか。プログラミング的発想、などなど、けっきょく使いこなすには、その辺の知識は必須だと思います。
が、その辺のプログラミング的発想は必須ですが、その辺りを考慮しても、ChatGPT を使えばプログラミング、そしてプログラミングでのデータ分析、爆速になります。
これは本当にスゴいことだと思います。
で、少し使ったことがある人なら、ChatGPT を使えばプログラミングの効率が爆上がりなのは当然、既知も既知だと思うのですが、その先の話をすると、では、「自分が作りたいデータ分析を基にしたグラフ」を、何かプロンプト一発で生成できるかというと、そうではありません。
あくまで、ChatGPT との対話を通じて、グラフならグラフで、自分の作りたいイメージに近づけていく、ていう感じですね。
たとえば Python でグラフを作るなら、Google Colaboratory のノートブックと ChatGPT の生成コードを行き来しながら、徐々に、自分の作りたいイメージに近づけていく、ていう感じです。
ちなみに、そうやって「行き来」しながら作ったコード、をダミーデータに置き換えたものが以下。
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
import matplotlib.gridspec as gridspec
# サンプルデータの生成
group1_data = np.random.randint(50, 150)
group2_data = np.random.randint(50, 150)
group3_data = np.random.randint(30, 120)
group4_data = np.random.randint(30, 120)
# データの設定(一般化)
data_for_plot = pd.DataFrame({
"CategoryA": [group1_data, group2_data],
"CategoryB": [group3_data, group4_data]
}, index=["Group 1", "Group 2"])
self_pay_color = '#b0c4de'
insurance_color = '#5b82d1'
# 他のカテゴリデータも同様に一般化
categories_living = ["Option 1", "Option 2", "Option 3", "Option 4"]
self_pay_counts_living = np.random.randint(20, 100, size=4)
insurance_counts_living = np.random.randint(20, 100, size=4)
categories_percent = ["30%", "20%", "10%", "0%"]
self_pay_counts_percent = np.random.randint(10, 70, size=4)
insurance_counts_percent = np.random.randint(10, 70, size=4)
# 全体の図のサイズを指定
fig = plt.figure(figsize=(21, 9))
gs = gridspec.GridSpec(1, 6)
# グラフの配置
ax1 = fig.add_subplot(gs[:, :1]) # グラフ1
ax2 = fig.add_subplot(gs[:, 2:4]) # グラフ2
ax3 = fig.add_subplot(gs[:, 4:]) # グラフ3
# グラフ (1) のプロット
index_gender = np.arange(len(data_for_plot))
ax1.bar(index_gender, data_for_plot['CategoryA'], 0.35, label='CategoryA', color=self_pay_color)
ax1.bar(index_gender + 0.35, data_for_plot['CategoryB'], 0.35, label='CategoryB', color=insurance_color)
ax1.set_xticks(index_gender + 0.35 / 2)
ax1.set_xticklabels([])
ax1.set_ylim([0, 200])
ax1.legend().set_visible(False)
ax1.yaxis.grid(True, color='lightgray', linestyle='-', linewidth=0.5)
ax1.xaxis.grid(False)
ax1.set_axisbelow(True)
ax1.tick_params(axis='y', length=0)
ax1.spines['top'].set_visible(False)
ax1.spines['right'].set_visible(False)
ax1.spines['bottom'].set_color('lightgray')
ax1.spines['left'].set_visible(False)
# グラフ (2) のプロット
index_living = np.arange(len(categories_living))
ax2.bar(index_living, self_pay_counts_living, 0.35, label='CategoryA', color=self_pay_color)
ax2.bar(index_living + 0.35, insurance_counts_living, 0.35, label='CategoryB', color=insurance_color)
ax2.set_xticks(index_living + 0.35 / 2)
ax2.set_xticklabels([])
ax2.set_ylim([0, 200])
ax2.legend().set_visible(False)
ax2.yaxis.grid(True, color='lightgray', linestyle='-', linewidth=0.5)
ax2.xaxis.grid(False)
ax2.set_axisbelow(True)
ax2.tick_params(axis='y', length=0, labelleft=False)
ax2.spines['top'].set_visible(False)
ax2.spines['right'].set_visible(False)
ax2.spines['bottom'].set_color('lightgray')
ax2.spines['left'].set_visible(False)
# グラフ (3) のプロット
index_percent = np.arange(len(categories_percent))
ax3.bar(index_percent, self_pay_counts_percent, 0.35, label='CategoryA', color=self_pay_color)
ax3.bar(index_percent + 0.35, insurance_counts_percent, 0.35, label='CategoryB', color=insurance_color)
ax3.set_xticks(index_percent + 0.35 / 2)
ax3.set_xticklabels([])
ax3.set_ylim([0, 200])
ax3.legend().set_visible(False)
ax3.yaxis.grid(True, color='lightgray', linestyle='-', linewidth=0.5)
ax3.xaxis.grid(False)
ax3.set_axisbelow(True)
ax3.tick_params(axis='y', length=0, labelleft=False)
ax3.spines['top'].set_visible(False)
ax3.spines['right'].set_visible(False)
ax3.spines['bottom'].set_color('lightgray')
ax3.spines['left'].set_visible(False)
plt.tight_layout()
plt.show()
このダミーデータに置き換えたコードも、ChatGPT に生成させたのですが、このコードを Google Colab で実行すると、今回、私が作ったグラフに近いものが生成されます。このコードでは、レイアウトが崩れてしまいますが。
というふうに、ChatGPT を使えば、ものすごく簡単に、コードを生成できます。以前に比べて。が、しかし、それも、ある程度プログラミングの知識があることが前提ですね。
ただ闇雲に ChatGPT に指示しても、自分が得たいものは得られません。
そこは、現在の生成 AI の技術の制限かもしれませんね。
コメント