【Python】pandasを活用したあいまい検索の実現方法

本記事では、Pythonのデータ解析ライブラリであるpandasを活用したあいまい検索の実現方法について解説します。pandasは、テーブル形式のデータを操作するための高速かつ柔軟なツールであり、様々なデータ解析に利用されています。

pandasを活用したあいまい検索の重要性と応用例

あいまい検索は、入力されたキーワードに対して、完全一致だけでなく、部分一致や類似性に基づいた検索を行う方法です。あいまい検索を利用することで、ユーザーが正確なキーワードを入力しなくても、目的の情報を見つけることができます。

pandasを活用したあいまい検索の応用例としては、以下のようなものが挙げられます。

  • 大量のテキストデータから、特定のキーワードが含まれるデータを検索する
  • 顧客情報を管理するデータベースから、名前や住所などの類似した情報を検索する
  • 製品情報を管理するデータベースから、商品名やカテゴリーなどの部分一致する情報を検索する

部分一致検索の基本的な実装方法

pandasを用いた部分一致検索の基本的な実装方法は、以下のようになります。

import pandas as pd
# データフレームの作成
df = pd.DataFrame({'fruit': ['apple', 'banana', 'orange', 'melon'],
'price': [100, 200, 150, 300]})
# 部分一致検索
query = 'an'
result = df[df['fruit'].str.contains(query)]
print(result)

上記のコードでは、fruit列の中で、文字列”an”を含む行を抽出しています。str.contains()メソッドを用いることで、部分一致検索を実現しています。

実行結果は以下の通りです。

     fruit  price
1   banana    200
2   orange    150

正規表現を用いたあいまい検索の実装方法

正規表現を用いたあいまい検索では、検索するパターンを正規表現として定義し、それにマッチする行を抽出します。pandasでは、str.contains()メソッドに正規表現を指定することで、正規表現を用いたあいまい検索が可能です。

例えば、以下のようなコードで、fruit列の中で、”a”または”o”で始まる果物を検索することができます。

# 正規表現を用いたあいまい検索
pattern = '^(a|o)'
result = df[df['fruit'].str.contains(pattern, regex=True)]
print(result)

実行結果は以下の通りです。

     fruit  price
0    apple    100
2   orange    150

距離関数を用いたあいまい検索の実装方法(例:レーベンシュタイン距離)

距離関数を用いたあいまい検索では、検索対象となる文字列と検索キーワードの距離を計算し、一定の距離以内にある文字列を抽出します。pandasでは、fuzzywuzzyパッケージを用いることで、レーベンシュタイン距離を利用したあいまい検索が可能です。

以下のようなコードで、fruit列の中で、”banan”に最も近い文字列を検索することができます。

from fuzzywuzzy import process
# 距離関数を用いたあいまい検索
query = 'banan'
result = df.iloc[process.extractOne(query, df['fruit'])[2]]
print(result)

実行結果は以下の通りです。

fruit    banana
price       200
Name: 1, dtype: object

あいまい検索を活用したデータ整理・クレンジングの手法

あいまい検索は、データ整理・クレンジングにも有用です。例えば、以下のような場合に役立ちます。

  • テキストデータの中から、特定のキーワードを含む行を抽出することで、データの抽出精度を高める
  • 不正な値を含む行を特定するために、レーベンシュタイン距離を利用してデータの相関性を調べることで、クレンジング作業を効率化する

例えば、以下のようなコードで、fruit列に含まれる値の種類を確認し、”bananna”と”organe”というタイプミスがあることを発見しました。

# データの種類を確認
print(df['fruit'].unique())

実行結果は以下の通りです。

['apple' 'banana' 'orange' 'melon']

これを以下のようなコードで、レーベンシュタイン距離を利用して修正することができます。

# レーベンシュタイン距離を利用したクレンジング
from fuzzywuzzy import fuzz
def clean_fruit(fruit):
    if fuzz.ratio(fruit, 'banana') > 80:
        return 'banana'
    elif fuzz.ratio(fruit, 'orange') > 80:
        return 'orange'
    else:
        return fruit
df['fruit'] = df['fruit'].apply(clean_fruit)
print(df)

実行結果は以下の通りです。

    fruit  price
0   apple    100
1  banana    200
2  orange    150
3   melon    300

まとめ

本記事では、Pythonのデータ解析ライブラリであるpandasを活用したあいまい検索の実現方法について解説しました。pandasを用いることで、部分一致検索や正規表現を用いたあいまい検索、距離関数を利用したあいまい検索が容易に実現できます。また、あいまい検索を活用することで、データ整理・クレンジング作業を効率化することができます。