ChatGPT4:ノーコードでPythonデータ可視化 Pt.4 [データ前処理の続き]
はじめに
ChatGPTを介してPythonを使うと、これまでとは感覚が変わります。
これまでは、
あるデータを〇〇のように変換したい
というときは、処理の仕方をいろいろ探して、それなりに学習して、やってみて… ということを繰り返す必要がありましたが、ChatGPTを使うと
「このデータを〇〇のように変換して」というだけ…
これは、隣にいる同僚に(Pythonのことは、まったく意識せず)適当に伝えてやってもらう感覚です。
以下、簡単な内容ではありますが、仮想データを準備し、データの前処理をChatGPTにやってもらいました。
仮想データについて
以下が準備した仮想データです。
かなり乱れていますが、現実はこのようなデータが多いと思います。
列a には、NUM! があります。これはEXCELでよく見るエラー表示です。
列b, f は、16進数です。このままでは可視化や分析はできません。
列c には、異常な値(文字:😢, ---)があります。
列d は、カテゴリー? 数値?、型式?… 数値も10進数?16進数?よくわかりませんね。
列e にある np.nan は欠損値です。データのほとんどが欠損値になっています。
何らかの前処理を行わないと、このままでデータ可視化するのはしんどいですね。
ChatGPT によるデータの前処理
まず、ChatGPTに上記の仮想データを与えました。
「列a~f に指定したデータをデータフレームに格納して表示して」というPythonのコードを与えています。
これは前処理を行うデータを与えているだけです。Pythonをご存じない方は「ふーん」でよいと思います。
以下を実行して下さい。
df = pd.DataFrame({
'a': [5, 2, 3, 100, NUM!, 200],
'b': ['abc', '0C3A', '9F07D2','ffff','ffff','7b2'],
'c': [19.3, 😢, 99.5, 200.2, ---, 1200.3],
'd': ['ZA-20', '100', 'a','abc','ZA-20','ZA-20'],
'e': [1, np.nan, np.nan, np.nan, np.nan, np.nan],
'f': ['6ff3312c', 'ca8787a0', '6eba2e10', '61e6dad7', '7b422413', '55bdb52e']
})
print(df)
な、なんと、ChatGPTは 指示しなくても無効または不明な値(=NUM!, 😢, ---)を欠損値と判断し、親切にNaN に置き換えてくれました。
なんて気が利くんだ。
次に、(わかってはいますが)ChatGPTに以下を指示しました。
指示:16進数のデータ列を教えてください。
ちゃんと認識してくれました。
列e のデータの中に 16進数らしき値がありますが、この列は違うなと解釈したのでしょう。
続けて、ChatGPTに以下を指示しました。
指示:列 'b' と列 'f' を10進数に変換して、データフレームを書き出してください。
データらしくなってきましたね。
次は、欠損値(NaN)の処理です。
欠損値の数が少ない場合は、欠損値を含む行データを削除したり、欠損値が多い列データを削除することもありますが、今回は ある値に置換することにします。
指示:NaN を-99に置換してください。
次に、(わかってはいますが)カテゴリーデータの列があるかを尋ねてみます。
指示:カテゴリーデータの列はありますか?
ChatGPTからの回答に疑問の余地なしってことで、次に以下を指示しました。
指示:列 'd' をラベルエンコーディングしてください。
うん。データらしくなりましたね。
最後に、ChatGPTに以下を指示しました。
指示:エンコーディング後のデータでペアプロットを描いてください。ペアプロットはd_encodedで層別し、プロットが見やすいように色を分け、プロット形状は「丸型」にしてください。
最後に
データを見ながら ChatGPTに前処理を指示… これを繰り返すだけ。
めっちゃ楽です。
こちらは「いうだけ」ですから。
参考
上記の内容を Pythonだけ で実行する場合、そこそこ手間がかかります。
以下は、Pythonによる前処理実行の手間を抑えるためにテンプレートを作成したという記事です。
これを振り返っても、テンプレートを利用するより、ChatGPTにお願したほうが早いし、楽です。
※この記事で紹介した前処理は一例です。
例えば、列c の「---」というデータは、ChatGPTは気を利かして「NaN」にしてくれましたが、何らかの意図をもって書き込んだ記号なら、「”---”は欠損値ではなく異常を示す記号なので、-999に置換して」と伝えて対応する等、任意です。
このようにどのような前処理を行うか?は目的によります。
この記事が参加している募集
よろしければサポートお願いします!