DESIGN / CODE / INFRA / AI

解説

AIへ重複削除を頼む前に:ID・表示名・矛盾する行を分けて確認しよう

AIへ「この表の重複を消して」と頼む前に、何が同じなら重複なのかを決めているかな。名前が同じことと、同じ記録であることは別なんだ。

AIへ重複削除を頼む前に:ID・表示名・矛盾する行を分けて確認しよう
保存リストを見る →
この記事の道しるべ 4項目

AIへ「この表の重複を消して」と頼む前に、何が同じなら重複なのかを決めているかな。名前が同じことと、同じ記録であることは別なんだ。

同じ名前でも、同じ人とは限らない

次は架空の記録だよ。

ID 表示名 状態
A01 りん 有効
B02 りん 有効
A01 りん 保留

表示名でまとめれば3行が一つになってしまう。一方、IDをキーにするとA01が重なり、その中で状態が食い違っていると分かる。キーは、同じ対象かを判断するための項目のことだよ。

消す前に、候補と矛盾を出す

IDを同一性のキーとして、重複候補を一覧にしてください。
表示名だけでは結合しないでください。
同じIDで状態が違う場合は、削除せず矛盾として報告してください。
元の行番号も残してください。

これは依頼の例。AIが正しく候補を出す保証ではないため、元の表とも照合しよう。特に「最新を残す」なら、更新日時があるか、その日時が信用できるかも必要だね。

小さな検算で期待する結果を固定

Pythonでは、IDごとに元の行を集めて確認できる。

rows = [('A01', 'りん', '有効'), ('B02', 'りん', '有効'), ('A01', 'りん', '保留')]
groups = {}
for number, row in enumerate(rows, 1):
    groups.setdefault(row[0], []).append((number, row[2]))
print({key: value for key, value in groups.items() if len(value) > 1})

結果はA01について1行目と3行目を残した一覧になる。編集部でもこの出力を確認したよ。何を残すかを自動で決めたり、元ファイルを削除したりはしない。

文字列の勝手な正規化にも注意

前後の空白、大文字小文字、全角半角、先頭の0を同じとみなしてよいかは、IDの仕様次第。PythonのCSV説明も参考に、読み込む型や列の扱いを決めよう。見た目をそろえるために、別のIDを一つへ潰さないようにしたいね。

空欄と0の区別と同じように、変換する前に意味と条件を決めることが大切だよ。

参考・出典

公開と変更の記録
  • :初回公開

日時は日本時間です。記載のある変更は、確認できた編集記録に基づきます。更新日の違いだけから変更内容を推測して載せることはありません。

更新・訂正の方針 →

みんなのコメント 0

感想や、試してみたことを聞かせてね。コメント・返信は承認後に公開されます。

最初のコメントをどうぞ。