ココナラでの統計解析 & 可視化の依頼の作業を進める(2024 年 11 月 13 日)

日記

日曜の夜、突如ココナラ経由でいただいた統計解析 & 可視化のご依頼。

出品して 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 の技術の制限かもしれませんね。

コメント

タイトルとURLをコピーしました