見出し画像

生成AIとデータフレーム高速化技術を組み合わせたら、データ分析が爆楽になった話

本記事はFireDucksユーザー記事シリーズの第9弾です.本記事は黒柳茂様に執筆して頂きました

はじめに

生成AIによってあらゆるタスクを人間の代わりにやってくれるようになりました。特にコーディングのような領域は生成AIの得意分野の一つでして、少なくとも私よりかは遥かに優秀です(もう追いつけません)。

データ分析もコーディングが重要です。データを読み込んだり、EDA(探索的分析)、データクレンジング、機械学習モデル構築、可視化などなどデータを扱う主な道具はコーディングです。

「データ分析のようなコーディングは生成AIに任せて、処理はデータフレーム高速化技術を使えば、あらゆるデータ分析を爆速&爆楽にできるのでは?」と、ふと思い立ちまして記事にしております。

Fireducksと生成AIの紹介

Fireducksとは何か?

FireducksはNECが開発したPandasデータフレームの高速化エンジンです。
NECの30年以上のスーパーコンピューター開発のノウハウが詰まっています。僕の一番のお気に入りポイントはPandasとまったく同じ書き方で高速化ができるところです。

生成AIの基本的な概要

生成AIとは、テキストから画像を生成したり、画像から動画を生成したり、何かから何かを生成するAIのことを指しています。ChatGPTなどが有名ですよね。ここら辺は説明不要かと思います。このブログで利用する生成AIはテキスト(命令)からテキスト(コード)を生成します。

なぜこれらのテクノロジーを組み合わせるか

技術は人のタスクをより便利にする方向に発展しているという側面があります。データ分析の仕事は今までデータサイエンティストやデータアナリストというデータに特化した人間が行うことが多かったですが「生成AIの登場とともにある一部の人しかできなかったことが誰にでもできるようになった」というのは非常に喜ばしいことです(とはいえ、データサイエンティストやデータアナリストが無くなるというわけではありません)。FireDucksと生成AIを組み合わせることでデータ分析を「早く、楽に」実施できる、そんな良い時代になったということを皆様に感じてもらいたいなと思っております。

生成AIとFireducksの環境準備

環境の説明

WSL2(Windows Subsystem for Linux)というWindows上でLinuxを動かせる環境から試しています。私が試した環境は下記の通りです。

OS Microsoft Windows 11 Pro
バージョン 10.0.22631 ビルド 22631
システムモデル Z690 Pro RS
システムの種類 x64-ベース
PC プロセッサ 12th Gen Intel(R) Core(TM) i3-12100、3300 Mhz、
4 個のコア、8 個のロジカル プロセッサ
ベースボード製品 Z690 Pro RS
プラットフォームの役割 デスクトップ
インストール済みの物理メモリ (RAM)64.0 GB

また、エディタはVS Code、コード生成はGithub Copilotを利用します。 Github CopilotはVS Codeと連携していて、例えば「CSVデータを読み込んで、各数値列の相関行列を出力してください」と命令すると2秒くらいで下記のようなコードが出力されます。

VS code & Github Copilotで「CSVデータを読み込んで、各数値列の相関行列を出力して」と入力すると、人間の代わりにコードを生成してくれる。

実際のデータ分析プロジェクト

データセット

Kaggleのデータセットを利用していきます。このデータセットはECサイトの閲覧、購買に関するデータでEDAをしていきたいと思います。

データの中身の一部

EDAをしてみる

無邪気にCopilotにぶん投げてみる。下記が実際にCopilotにお願いしたプロンプトである。下記のプロンプトは大きく3つに分かれている。
・データの説明(カラム名の説明)
・データの中身
・やって欲しい命令

2019-Nov.csv(9.01 GB) 9 columns About this file This file contains behavior data for a one month (November 2019) from a large multi-category online store, collected by Open CDP project. Each row in the file represents an event. All events are related to products and users. There are different types of events. #event_time -When event is was happened (UTC) #event_type -Event type: one of [view, cart, remove_from_cart, purchase] #product_id -Product ID #category_id -Product category ID #category_code -Category meaningful name (if present) #brand -Brand name in lower case (if present) #price -Product price #user_id -Permanent user ID #user_session -User session ID #data samples 2019-11-01 00:00:00 UTC view 1003461 2053013555631882655 electronics.smartphone xiaomi 489.07 520088904 4d3b30da-a5e4-49df-b1a8-ba5943f1dd33 2019-11-01 00:00:00 UTC view 5000088 2053013566100866035 appliances.sewing_machine janome 293.65 530496790 8e5f4f83-366c-4f70-860e-ca7417414283 2019-11-01 00:00:01 UTC view 17302664 2053013553853497655 creed 28.31 561587266 755422e7-9040-477b-9bd2-6a6e8fd97387 2019-11-01 00:00:01 UTC view 3601530 2053013563810775923 appliances.kitchen.washer lg 712.87 518085591 3bfb58cd-7892-48cc-8020-2f17e6de6e7f #上記のデータを使ってEDAをしてください。ライブラリはpandasmatplotlibを使ってください。 ・ユーザーごとの購入回数と、平均購入額の関係 ・ユーザーごとのcartイベントの回数とpurchaseイベントの回数の関係(散布図) ・購入ユーザーと非購入ユーザーの平均cart回数の比較

Github Copilotに入力した結果、10秒ほどでコードが生成された!

ユーザーごとの購入回数と平均購入額の関係など、色々分析したいことを伝えるとPythonコードが生成される。そのコードを実行すると、コードを書くことなく可視化してくれた。

プロンプトに対して即座にPythonコードが生成されている

実際のデータをこのように可視化もしてくれた。例えば購入者VS非購入者でカートに入れた数がどれだけ違うのかとか、カートイベントと購入イベントの散布図とか。すごくないですか。

購入ユーザーと非購入ユーザーのカートイベントの平均値の比較
カートイベントと購入イベント数の比較
購入数と平均購入額の散布図

これは非常に強力だと感じる。データ分析のプロセスややりたいことを言語化さえできればコードを書いてくれる。もちろん生成されたコードが100%正しいという保証は全くないのでちゃんと確認はしなければいけないが、EDAレベルであれば非常に精度の高い結果が得られると感じる。特に私を含める多くのデータサイエンティストにとって、可視化の部分は守備範囲でないことが多く、MatplotlibやSeabornの関数などは毎回Googleで検索しながら作っているという人は多いのではないだろうか。そういった「人がやらなくていいタスク」を生成AIに任せるというのが生産性向上につながるのだろう。

もし、「こういう分析を追加したい」「この色を黄色に変えたい」「散布図ではなくヒートマップにしたい」などがあったら #をつけてやりたいことを書くと、即時に下にコード補完をしてくれる。

# Compare the average cart count between purchase and non-purchase users plt.bar(['Purchase Users', 'Non-Purchase Users'], [avg_cart_count_purchase, avg_cart_count_non_purchase]) plt.xlabel('User Type') plt.ylabel('Average Cart Count') plt.title('Comparison of Average Cart Count between Purchase and Non-Purchase Users') plt.show() # ここにやりたいことを書く(例:〇〇と〇〇の相関行列を出力など)

FireDucksとpandasの比較

Githubが書いたコードをimport pandas as pdにしたものとimport fireducks.pandas as pdにして速度を比較した。pandasでは172秒かかったのに対して、Fireducksだと62秒で完了した。特に差異が出たところはread_csvだ。大きなcsvファイルを読み込む際に待つのが嫌だ。今回のデータは9GBあったのでpandasだと90秒ほど待つことになった。

各タスクの速度比較(秒) pandas vs FireDucks

FireDucksだとマルチスレッドで並列的にデータを読む&遅延評価(読み込む処理を後回しにして、必要な際に実行すること。ユーザーは毎回待つ必要がない)ため非常に速い。を使うことによって、分析スピードが向上した。

まとめ

今までのデータアナリスト・サイエンティストの「処理を待つ時間」「分析のコーディングの手間」という二つの負を生成AIとFireDucksが削減してくれる世界を垣間見た。
そして、データアナリスト・サイエンティストを目指している人にとって、より学習を早めることにもつながるのではないか。生成AIをある程度使いこなせるマーケターが、RFM分析をデータアナリストではなく自分で実施する。コンバージョンするか/しないかの予測モデルを構築する。そのような世界も現実味を帯びてきたように思える。

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