表形式のデータを操作する場合、多くの場合、1 つまたは複数の列を変換して、分析やモデリングにより適したものにする必要があります。多くの場合、これらの変換は Pandas ライブラリを使用して簡単に実行できます。ただし、大規模なデータセットを操作したり、機械学習パイプラインを構築したりする場合は、scikit-learn のColumnTransformerクラスを使用してデータの特定の列に変換を適用する方が効率的な場合があります。
ここでは、scikit-learn の ColumnTransformer でカスタム トランスフォーマーを使用して、Pandas DataFrame の 1 つ以上の列を変換する方法を示します。
例 1: NumPy 配列の変換
簡単な例から始めましょう。3 つの列を持つ NumPy 配列があり、最初の 2 つの列を 2 つの新しい列に変換したいと考えています。
import numpy as np
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
class CustomTransformer(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def transform(self, X):
# 这里,X 是一个二维的 NumPy 数组或 Pandas DataFrame
# 将第0列和第1列转换成多列
transformed_cols = np.column_stack([X[:, 0]**2, np.sqrt(X[:, 1])])
# 将转换后的列作为二维 NumPy 数组返回
return transformed_cols
def fit(self, X, y=None):
return self
# 示例用法
X = np.array([[1, 4, 7], [2, 9, 8], [3, 16, 9]])
transformer = ColumnTransformer(
transformers=[('custom', CustomTransformer(), [0, 1])],
remainder='passthrough')
# 'remainder' 参数保留未转换的任何列
transformed_X = transformer.fit_transform(X)
print(transformed_X)
この例では、CustomTransformer クラスは 2 つの入力列を取り、それらを 2 つの出力列に変換します。ColumnTransformer は、このトランスフォーマーを入力データの列 0 と 1 に適用し、列 2 を保持します。「パススルー」オプションは、残りの列を元の形式で保持するために使用されます。
例 2: Pandas DataFrame の変換
ここで、前の例を変更して、NumPy 配列の代わりに Pandas DataFrame を操作できるようにしましょう。
import pandas as pd
from sklearn.base import BaseEstimator, TransformerMixin
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
class CustomTransformer(BaseEstimator, TransformerMixin):
def __init__(self):
pass
def transform(self, X):
# Here, X is a pandas DataFrame
# Transform columns 'A' and 'B' into multiple columns
transformed_cols = pd.DataFrame({'A_squared': X['A']**2,
'B_sqrt': X['B']**0.5})
# Return the transformed columns as a pandas DataFrame
return transformed_cols
def fit(self, X, y=None):
return self
# Example usage
df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 9, 16], 'C': [7, 8, 9]})
transformer = ColumnTransformer(
transformers=[('custom', CustomTransformer(), ['A', 'B'])],
remainder='passthrough')
# The 'remainder' parameter preserves any columns not transformed
transformed_df = transformer.fit_transform(df)
print(transformed_df)
この例では、CustomTransformer クラスは 2 つの入力列 (「A」と「B」) を取り、それらを pandas DataFrame の 2 つの出力列 (「A_squared」と「B_sqrt」) に変換します。ColumnTransformer は、このトランスフォーマーを入力データの列 "A" と "B" に適用し、列 "C" を残します。「パススルー」オプションは、残りの列「C」を元の形式で保持するために使用されています。
英語リンク
最後の言葉
AIは日々変化していますが、高層ビルは良い土台から切り離すことはできません。人工知能の原理と実践について学ぶことに興味がありますか? これ以上探さない!AI の原則と実践に関する私たちの本は、AI の世界への洞察を得ようとしている人にとって最適なリソースです。この分野の主要な専門家によって書かれたこの包括的なガイドは、機械学習の基本からインテリジェント システムを構築するための高度な手法まで、すべてをカバーしています。初心者でも経験豊富な AI 実践者でも、この本でカバーできます。では、なぜ待つのですか?今すぐ注文して、アクセスしやすく、魅力的で実用的な方法で AI について学び始めましょう。
人工知能の原理と実践は、人工知能とデータ科学のさまざまな重要なシステムの古典を包括的にカバーしています
北京大学出版局、人工知能の原則と実践 人工知能とデータ科学の入門から習熟まで 機械学習の深層学習アルゴリズムの原理の詳細な説明