「ChatGPTを活用したデータ探索:データセットの隠れた洞察を解き放つ」
Using ChatGPT for Data Exploration Unlocking Hidden Insights in Datasets
データセットを分析して理解し、洞察を得ることは、データサイエンスのプロジェクトにおける重要なステップです。そして、ChatGPTはこのような分析を簡素化し、スピードアップするのに役立ちます。
ここでは、ChatGPTを使ってサンプルデータセットの探索的データ分析を行います。特徴量の分布や、興味のある特徴量が他の特徴量とどのように変化するかなど、さまざまな情報を理解します。
このチュートリアルに従うには、OpenAIアカウントが必要です。アカウントをお持ちでない場合は、無料アカウントにサインアップできます。
- ジェネレーティブAIツールを使用する際にプライバシーを保護するための6つの手順
- 「ChatGPTが連邦取引委員会によって潜在的な被害の調査を受ける」
- 「Objaverse-XLと出会ってください:1000万以上の3Dオブジェクトのオープンデータセット」
データセットの読み込みと基本情報の取得
seabornライブラリには、分析できる準備が整ったデータセットがいくつかあります。ここでは、tipsデータセットを使用します。
Prompt: seabornライブラリに組み込まれた`tips`データセットについて、もっと教えてください。
データセットの内容を把握することは、良いスタート地点です。次の手順で始めましょう:
- データセットをpandasのデータフレームに読み込む
- 利用可能なフィールドの基本情報と要約統計量を取得し、データセットについてより詳しく理解する
Prompt: `tips`データセットを使用します。pandasのデータフレームにデータセットを読み込み、利用可能なフィールドの基本情報と要約統計量を取得するコードを書いてください。
import seaborn as sns
import pandas as pd
# Seabornから'tips'データセットを読み込む
tips_data = sns.load_dataset('tips')
# 読み込んだデータセットからPandasのデータフレームを作成する
tips_df = pd.DataFrame(tips_data)
# データフレームの最初の数行を表示する
print("最初の数行のデータフレーム 'tips':")
print(tips_df.head())
# フィールドに関する基本情報を取得する
print("\nデータフレーム 'tips' の情報:")
print(tips_df.info())
# 数値フィールドの要約統計量を取得する
print("\n数値フィールドの要約統計量:")
print(tips_df.describe())
データセットに関する情報が豊富な要約統計が得られました:
最初の数行のデータフレーム 'tips':
total_bill tip sex smoker day time size
0 16.99 1.01 Female No Sun Dinner 2
1 10.34 1.66 Male No Sun Dinner 3
2 21.01 3.50 Male No Sun Dinner 3
3 23.68 3.31 Male No Sun Dinner 2
4 24.59 3.61 Female No Sun Dinner 4
データフレーム 'tips' の情報:
RangeIndex: 244 entries, 0 to 243
Data columns (total 7 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 total_bill 244 non-null float64
1 tip 244 non-null float64
2 sex 244 non-null category
3 smoker 244 non-null category
4 day 244 non-null category
5 time 244 non-null category
6 size 244 non-null int64
dtypes: category(4), float64(2), int64(1)
memory usage: 7.4 KB
None
数値フィールドの要約統計量:
total_bill tip size
count 244.000000 244.000000 244.000000
mean 19.785943 2.998279 2.569672
std 8.902412 1.383638 0.951100
min 3.070000 1.000000 1.000000
25% 13.347500 2.000000 2.000000
50% 17.795000 2.900000 2.000000
75% 24.127500 3.562500 3.000000
max 50.810000 10.000000 6.000000
要約統計情報から、データセットの数値特徴についてのアイデアを得ることができます。最小値と最大値、平均値と中央値、パーセンタイル値がわかります。欠損値はないので、次のステップに進むことができます。
データセットの探索 – 何、なぜ、そしてどのように
データセットの概要がわかったので、さらに進んでみましょう。
この探索的データ分析の目標は、チップの振る舞いをよりよく理解することです。そのために、有益な可視化を考えることができます。これらの可視化は、データセット内のさまざまなカテゴリ変数とチップ金額の関係を理解するのに役立ちます。
このデータセットは分析するのに簡単なものなので、ChatGPTにこのデータセットをさらに分析するための手順のセットを提示してもらいましょう。
プロンプト: 分析の目標は、いくつかの単純な可視化からチップの振る舞いについての洞察を得ることです。同じことをするための手順を提案してください。
ChatGPTが提案したデータ探索の手順はすべて妥当です。そのため、これらのステップを使用してデータセットを理解しましょう。一度に一つの手順を実行するためにChatGPTにコードの生成を促し、必要に応じて修正します。
チップ金額の分布の探索
まず最初に、チップ金額の分布を可視化しましょう。
プロンプト: チップ金額の分布をプロットするコードを書いてください。
ChatGPTは、チップ金額の分布を把握するのに役立つヒストグラムとカーネル密度プロットを生成するための次のコードを提供しました:
import matplotlib.pyplot as plt
# チップ金額のヒストグラムを作成
plt.figure(figsize=(8, 6))
sns.histplot(data=tips_data, x='tip', kde=True)
plt.title("チップ金額の分布")
plt.xlabel("チップ金額")
plt.ylabel("頻度")
plt.show()
カテゴリ変数に基づくチップの振る舞いの分析
データセットには多くのカテゴリ変数があります。これらのカテゴリ変数の異なる値ごとの平均チップ金額を示すシンプルな棒グラフが役立ちます。
プロンプト: 使用可能なすべてのカテゴリ変数(’sex’、’smoker’、’day’、’time’)を使用して、チップの振る舞いを理解するための棒グラフを生成するコードを書いてください。すべての四つの棒グラフを単一の図に表示するためにサブプロットを使用してください。
以下はコードです。コードはエラーなく実行されましたが、図のサイズを修正する必要がありました:
# 分析するカテゴリ変数を定義する
categorical_vars = ['sex', 'smoker', 'day', 'time']
# 各カテゴリ変数のサブプロットを作成する
fig, axes = plt.subplots(nrows=2, ncols=2, figsize=(8, 5))
fig.suptitle("カテゴリ変数に基づくチップの振る舞い", fontsize=16)
# 各カテゴリ変数の棒グラフを生成する
for ax, var in zip(axes.flatten(), categorical_vars):
sns.barplot(data=tips_data, x=var, y='tip', ax=ax)
ax.set_xlabel(var.capitalize())
ax.set_ylabel("平均チップ金額")
plt.tight_layout()
plt.show()
プロットから、性別や喫煙行動などの特徴はチップの行動に影響を与えないことがわかります(予想通りです)。一方、曜日と時間は影響を与えるようです。週末と夕食の平均チップ額はわずかに高いようです。
総請求額とチップ額の関係を可視化する
さて、総請求額がチップ額にどのように影響を与えるかを見てみましょう。
プロンプト: 総請求額とチップ額の関係を理解したいです。このための適切なプロットを生成するコードを教えてください。シンプルな散布図が役立つと思います。
以下は必要な散布図を生成するためのコードです:
# 総請求額とチップ額の散布図を作成
plt.figure(figsize=(6, 4))
sns.scatterplot(data=tips_data, x='total_bill', y='tip')
plt.title("総請求額 vs チップ額")
plt.xlabel("総請求額")
plt.ylabel("チップ額")
plt.show()
総請求額とチップ額の間には正の相関があるようです。
パーティーサイズとチップ額の関係を可視化する
次に、パーティーサイズとチップ額の関係を可視化してみましょう。
プロンプト: 今度は、食事をする人数(パーティーサイズ)によってチップ額がどのように変化するかを理解したいです。バープロットとバイオリンプロットのどちらが適していますか?
チップ額の分布も理解したいので、バイオリンプロットを作成しましょう。
プロンプト: いいですね!この可視化のためのバイオリンプロットを生成するコードを書いてください。
以下はコードです:
# パーティーサイズごとのチップ額のバイオリンプロットを作成
plt.figure(figsize=(6, 4))
sns.violinplot(data=tips_data, x='size', y='tip')
plt.title("パーティーサイズごとのチップ額")
plt.xlabel("パーティーサイズ")
plt.ylabel("チップ額")
plt.show()
時間と曜日に基づくチップの行動の理解
次に、時間と曜日がチップの行動にどのように影響するかを理解しましょう。
プロンプト: 時間と曜日によってチップの行動がどのように変化するかを理解したいです。適切な可視化方法は何ですか?また、必要な可視化のためのコードを書いてください。
以下のコードスニペットは、曜日をインデックスとし、昼食と夕食(日中の時間)のチップ額の平均値を集計する方法を示しています:
# 時間と曜日に基づくチップ額の平均のピボットテーブルを作成
pivot_table = tips_data.pivot_table(values='tip', index='day', columns='time', aggfunc='mean')
# 時間と曜日に基づくチップの行動のヒートマップを作成
plt.figure(figsize=(8, 6))
sns.heatmap(pivot_table, cmap='YlGnBu', annot=True, fmt=".2f", cbar=True)
plt.title("時間と曜日に基づくチップの行動")
plt.xlabel("時間")
plt.ylabel("曜日")
plt.show()
ヒートマップから、日曜日のディナーの平均チップ額が他の時間帯と比べて僅かに高いことがわかります。一般的に、特定の日にちにおいて、ディナーの平均チップ額はランチよりも高いようです。
また、土日のランチのデータが不足していることもわかります。合計で244件のデータしかないため、週末のランチの記録が存在しない可能性があります。これを確認してみましょう。
プロンプト: 週末にランチを注文したパーティーの数を取得したいです。`tips_data`データフレームをフィルタリングして、このカウントを取得するコードを書いてください。
以下は、週末のランチのレコードを含むサブセットをフィルタリングして取得するためのコードです:
# ランチの週末のデータをフィルタリングする
weekend_lunch_data = tips_data[(tips_data['time'] == 'Lunch') & (tips_data['day'].isin(['土', '日']))]
# 週末にランチを注文したパーティーの数を取得する
count = weekend_lunch_data['size'].count()
print("週末にランチを注文したパーティーの数:", count)
そして、同じくレコードが存在しないことがわかりますので、これまでの分析は正しいです:
週末にランチを注文したパーティーの数: 0
以上で終了です!`tips`データセットを探索し、ChatGPTに促されて有益な可視化を生成しました。
まとめ
この記事では、データ探索のためにChatGPTを活用する方法を学びました。データサイエンスのワークフローにChatGPTを統合することに興味がある場合は、このガイドをチェックしてください。データサイエンスの実験にChatGPTを効果的に使用するための例題とベストプラクティスが紹介されています。 Bala Priya Cは、インド出身の開発者兼技術ライターです。彼女は数学、プログラミング、データサイエンス、コンテンツ作成の交差点で働くことが好きです。彼女の関心と専門知識の範囲には、DevOps、データサイエンス、自然言語処理が含まれます。彼女は読書、執筆、コーディング、そしてコーヒーを楽しんでいます!現在、チュートリアル、ハウツーガイド、意見記事などを執筆することによって、開発者コミュニティと彼女の知識を共有し、学ぶことに取り組んでいます。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles