DatabricksアシスタントによるEDA(探索的データ分析) その2

こちらの記事にあるようにDatabricksアシスタントの進化が止まらないわけで。

https://qiita.com/taka_yayoi/items/058f324960cecceef218

以前、こちらの記事で書いていたように、データ分析の文脈では相当AIアシスタントの意義があるのでは無いかと思っているのです。

https://qiita.com/taka_yayoi/items/07c49c2de588a101b719

前回は可視化して終わりだったのですが、今回はより対話的にアシスタントを活用してみます。1行もコードを書かずに探索的データ分析(EDA: Exploratory Data Analysis)をトライしてみます。

:::note info
**注意**
Databricksアシスタントが常にこちらで説明しているようなレスポンスを生成するとは限りません。期待するレスポンスが得られない場合には、再生成を指示するかプロンプトを調整してみてください。
![Screenshot 2024-05-11 at 20.43.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/50bd11ad-7fbd-1e09-c589-ca78472001fb.png)
:::

# データの読み込み

Databricksにはサンプルデータがあるので、そちらをPandasデータフレームに読み込んで表示します。区切り文字がセミコロンなのでその辺りもプロンプトで指示しています。

**プロンプト**

> /dbfs/databricks-datasets/wine-quality/winequality-white.csvにあるファイルの最初の100行をpandasデータフレームに読み込んでdisplayで表示してください。ファイルの区切り文字は;です

**レスポンス**

```py
import pandas as pd

df = pd.read_csv('/dbfs/databricks-datasets/wine-quality/winequality-white.csv', sep=';', nrows=100)
display(df)
```

> 以上のコードを使用すると、指定されたファイルの最初の100行がpandasデータフレームとして読み込まれ、display関数を使用して表示されます。ファイルの区切り文字は;と指定されています。

上のコードを実行します。
![Screenshot 2024-05-11 at 20.54.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/3974ea2e-58db-30d4-a034-a7eb5a5db38a.png)

# データの説明

**プロンプト**

> dfの構造を説明してください

**レスポンス**

> DataFrame 'df'の構造は以下の通りです:
> 
> - カラム数: 12 (fixed acidity, volatile acidity, citric acid, residual sugar, chlorides, free sulfur dioxide, total sulfur dioxide, density, pH, sulphates, alcohol, quality)
> - 行数: 100
> - カラムのデータ型: カラムごとに異なるデータ型があります。
> - データ内容: 'df'はホワイトワインの品質データを含んでいます。各行はワインの特性を示し、品質は最後の列に表示されます。カラムにはワインの属性（酸度、揮発性酸度など）が含まれており、それぞれの属性に対する品質が評価されます。
>
> このDataFrameは、ワインの特性と品質に関する情報を分析するために使用できます。

何気にすごいです。これ。

# 可視化

**プロンプト**

> dfを可視化したい

**レスポンス**

> データフレーム 'df' を可視化するために、PandasとMatplotlibを使用できます。
>
> 以下のコードを使用して、各列のヒストグラムを表示することができます。

```py
import matplotlib.pyplot as plt

# カラムのリストを取得
columns = df.columns

# 各カラムのヒストグラムを表示
for col in columns:
    plt.figure(figsize=(8, 6))
    plt.hist(df[col])
    plt.title(col)
    plt.xlabel('Value')
    plt.ylabel('Frequency')
    plt.show()
```

カラムごとのヒストグラムが表示されます。
![download.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4badf92c-14db-9860-e089-9f314d242a79.png)

今回のデータのカラムは英語なのでmatplotlibで問題ないのですが、[こちら](https://qiita.com/taka_yayoi/items/07c49c2de588a101b719
)で書いたように日本語の場合は文字化けするので、plotlyやseabornなどを使ったほうがいいです。

**プロンプト**

> dfをseabornで可視化したい

**レスポンス**

> Pandasデータフレーム 'df' をSeabornで可視化するためには、Seabornのグラフィカルな機能を使用してプロットを作成する必要があります。
>
> 以下のコードを使用して、各カラムの相関関係をヒートマップで可視化することができます。

```py
import seaborn as sns

sns.heatmap(df.corr(), annot=True, cmap="coolwarm")
```

> このコードにより、データフレーム 'df' の属性間の相関関係をヒートマップとして表示することができます。

すごい。
![download (1).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/e92a4a60-2b8f-936d-5329-cb7d744e271b.png)

> また、以下のコードを使用して、各属性における品質の分布を箱ひげ図で可視化することもできます。

```py
plt.figure(figsize=(10, 6))
sns.boxplot(data=df.drop("quality", axis=1))
plt.xlabel("Attribute")
plt.ylabel("Value")
plt.title("Distribution of Attributes")
plt.show()
```
![download (2).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4327e396-4573-cfbd-c5b0-1f4cdecaf1fd.png)

データの概観が分かってきたので特定の特徴量に着目してみます。ここではplotlyを使います。


**プロンプト**

> dfのdensityとresidual sugarの散布図をplotlyで可視化したい

**レスポンス**

> 以下のコードを使用して、Pandasデータフレーム 'df' の 'density' と 'residual sugar' の散布図をPlotlyで可視化することができます。

```py
import plotly.express as px

fig = px.scatter(df, x='density', y='residual sugar')
fig.show()
```

> このコードにより、指定した2つのカラム（'density' と 'residual sugar'）の値を散布図として表示します。Plotlyのインタラクティブ性により、グラフをズームしたり、ツールチップでデータポイントの詳細情報を表示することもできます。
>
> ただし、事前に適切なPlotlyの設定やパッケージのインストールが必要な場合があります。必要な場合は、%pip install plotly などのセルを使用してプロットリブラリをインストールしてください。

![newplot.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/8f8e194c-486c-20ba-bd07-841febb3423b.png)

**プロンプト**

> dfのqualityをplotlyでヒストグラムとして可視化したい


**レスポンス**

> 以下のコードを使用して、Pandasデータフレーム 'df' の 'quality' 列をPlotlyでヒストグラムとして可視化することができます。

```py
import plotly.express as px

fig = px.histogram(df, x='quality')
fig.show()
```

> このコードにより、'quality' 列の値の分布をヒストグラムとして表示することができます。グラフはPlotlyのインタラクティブな特性を備えており、ズームやツールチップを使用して詳細を探索することができます。
>
> なお、Plotlyを使用する前に適切なパッケージのインストールが必要な場合があります。必要な場合は、%pip install plotly のようにセルを使用してプロットリブラリをインストールしてください。

![Screenshot 2024-05-12 at 8.57.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/1a21eadb-787a-fc3c-4566-22332ce801b4.png)


機械学習の取り組みにおいては、予測対象の目的変数とそれに寄与する説明変数の関係性を理解することも重要です。

**プロンプト**

> dfのqualityとその他の変数の相関をseabornで可視化したい

**レスポンス**

> 以下のコードを使用して、Pandasデータフレーム 'df' の 'quality' と他の変数の相関をSeabornで可視化することができます。

```py
import seaborn as sns
import matplotlib.pyplot as plt

# 品質とその他の変数の相関を計算
corr_matrix = df.corr()

# 相関ヒートマップを表示
plt.figure(figsize=(10, 8))
sns.heatmap(corr_matrix, annot=True, cmap="coolwarm")
plt.title("Correlation Heatmap")
plt.show()
```
![download (3).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/4686733d-22bf-9818-e77d-1be01621f4d5.png)

> このコードにより、'quality' と他の変数の相関係数を表すヒートマップが表示されます。ヒートマップの各セルの色は、相関の強さを表しています。正の相関は赤で表示され、負の相関は青で表示されます。
>
> 相関ヒートマップを使用することで、'quality' と他の変数との間の関係性を直感的に把握することができます。

# データプロファイル

ここまではステップバイステップでやってきましたが、データプロファイルの作成を指示することもできます。

**プロンプト**

> dfのデータプロファイルを表示

**レスポンス**

> データプロファイルを表示するためには、pandas-profilingというライブラリを使用することができます。以下のコードを使用して、データフレームdfのデータプロファイルを表示します。

```py
import pandas_profiling as pp

# データフレームのデータプロファイルを作成
profile = pp.ProfileReport(df)

# データプロファイルを表示
display(profile)
```

> このコードを使用すると、データフレームdfのデータプロファイルが生成され、表示されます。データプロファイルには、データの要約統計、欠損値の割合、相関関係、ヒストグラム、カテゴリカル変数の値の頻度などが含まれます。また、重い処理になる場合は実行に時間がかかることもあります。

![Screenshot 2024-05-11 at 21.14.32.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1168882/83c2b59d-04a0-6304-740d-eaefec1e20cc.png)

実際の操作を録画した動画はこちらです。

<iframe width="560" height="315" src="https://www.youtube.com/embed/hJnOsr_U2HI?si=nO5Ofl6MSm4RDOqB" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

Happy AI-powered EDA!


### はじめてのDatabricks

[はじめてのDatabricks](https://qiita.com/taka_yayoi/items/8dc72d083edb879a5e5d)

### Databricks無料トライアル

[Databricks無料トライアル](https://databricks.com/jp/try-databricks)