Pythonで人事データの名寄せを自動化!氏名のゆらぎ・重複排除をスマートに解決

表記揺れ、データ連携の絶望

CSVファイルを開いた瞬間、絶望が広がる光景があります。人事担当の方なら、一度は経験があるはずです。新しいタレントマネジメントシステムを入れた時のことです。既存の給与システムとの連携に、手作業が必要なケースです。毎月末、システム担当から届くCSVファイルを並べます。両方のデータを結合し、最新の従業員リストを作ります。言葉にするのは簡単ですが、実際は泥沼の作業です。実務では、想像を絶する苦労が待ち受けています。

社員番号が完全に統一されていれば、苦労はありません。しかし、現実の企業環境は、決して甘くありません。古いシステムには、社員番号の概念がないこともあります。派遣社員や業務委託のメンバーが含まれる場合もあります。そうなると、途端に管理コードの体系は崩れてしまいます。結局、氏名だけが唯一のキー項目という状況です。そんな不完全なシステムが、社内には山ほど残っています。

表記揺れが招く非生産工数

ここで立ちはだかるのが、「表記揺れ」という魔物です。「山田 太郎」と「山田太郎」という二つのデータです。人間の目には、間違いなく同一人物に見えます。しかし、ExcelのVLOOKUP関数は冷酷です。「#N/A」というエラーを、容赦なく突きつけてきます。パソコンは、文字間の見えない隙間を許してくれません。以前、給与と勤怠のシステムを結合した時のことです。エラーの「#N/A」が、数百件も発生してしまいました。

目視による修正作業の限界

原因は、氏名のスペースが全角か半角かという違いでした。目視で一つずつスペースを削る作業を続けました。3時間も作業を続け、終わる頃には目が真っ赤でした。首の後ろが鉛のように重くなっていたのを覚えています。システムごとに、データの入力規則がバラバラなのが現状です。人事が手打ちしたデータや、社員が登録したものが混在します。全角、半角、スペースなしが入り乱れています。氏名の不一致は、エラーの9割以上の原因といえます。

表記ゆれ修正の不毛な手作業と負担

例えば、1000名規模の企業の場合を考えてみます。この修正だけで、毎月15時間以上の工数が発生します。これは、極めて非生産的な時間といわざるを得ません。月末の締め切りが迫る中、神経をすり減らす作業です。数千件の目視照合を繰り返すのは、大きな負担になります。Excelによる手作業の名寄せには、数時間かかります。担当者が退職すれば、後任も同じ苦しみを味わいます。引き継ぎには「気をつけて目視する」としか書かれません。この不毛な連鎖を、今こそ断ち切る必要があります。

Pythonで業務自動化

手作業の限界は、もうすぐそこまで来ています。気合いと根性だけで乗り切るのにも、限界があります。

人間が目で見て判断するルールを、翻訳してみましょう。プログラミング言語という形に、書き換えるのです。ここで圧倒的な威力を発揮するのが、Pythonです。数万件のデータであっても、一瞬で処理が終わります。もちろん、Excelの関数でも置換は行えます。SUBSTITUTE関数を何重にも使う方法です。スペースを消し、全角を半角に変換することは可能です。しかし、数式は異様に長くなってしまいます。セルの奥深くに、呪文のように刻み込まれるのです。

Pythonによる属人化の解消

後から見た時、何をしているか分からなくなります。作った本人でさえ、理解できなくなるかもしれません。これは、まさに「属人化の極み」といえる状態です。Pythonなら、一連の流れを分かりやすく記述できます。読み込み、変換、削除までの工程が明確になります。一度書いたコードは、何度でも使い回すことができます。毎月の名寄せは、ボタン一つで完了するようになります。

Pythonがもたらす業務効率と心の余裕

以前、私は複雑なネスト数式を組んでいました。当時は得意げでしたが、翌月に事件が起きました。別の担当者が数式を壊してしまったのです。その復旧作業だけで、丸1日を費やすことになりました。その点、Pythonのスクリプトは独立しています。ファイルとして存在するため、壊される心配がありません。そのおかげで、心に圧倒的な余裕が生まれました。単純な置き換えだけでなく、自在に形を変えられます。複数の条件を組み合わせた、複雑な照合も可能です。

プログラミング未経験からの挑戦

未経験の方には、コードは敷居が高いかもしれません。黒い画面に打ち込むのは、勇気がいることです。エラーの英語を見るだけで、胃が痛くなる方もいます。しかし、名寄せの数行を覚えるだけで世界は変わります。業務の効率が、劇的に向上することを実感できます。プロのエンジニアになる必要は、全くありません。目の前の煩わしい作業を、賢く片付けるための道具です。まずは、便利なツールとして使ってみるのがおすすめです。

Pandasで汚いデータを高速正規化

それでは、具体的な作業の内容に入りましょう。Pythonで表計算のようなデータを扱う場合です。この時は、pandasという強力なライブラリを使います。Excelで行う行や列の操作を、高速に実行できます。非常に柔軟な処理が可能な、優れたツールです。

データクリーニング:正規化とPandas

最初のステップは、CSVファイルの読み込みです。たった一行のコードで、データを展開できます。数千件のデータが、一瞬でPython上に取り込まれます。ここからが、本番のデータクリーニングです。読み込んだデータは、汚れていることが多いものです。空欄があったり、不要な記号が混ざっていたりします。文字の形が揃っていないことも、よくある話です。これらを綺麗に整える作業を、「正規化」と呼びます。正規化なしのデータ比較は、とても困難な作業です。泥水の中でコンタクトレンズを探すようなものです。

Pandasによる一括変換のメリット

どれだけ目を凝らして探しても、見つかりません。pandasには、文字列を一括操作する機能があります。例えば、氏名の列を指定して空白を消す命令です。全件の空白を、一度の操作ですべて削除できます。行を一つずつループして処理する必要はありません。列全体に操作を適用するため、速度が桁違いです。大規模なデータでも、ストレスなく処理が進みます。

Pythonによる高速データクリーニング

10万件の文字列置換処理で、比較をしてみました。Excel VBAでは、数分かかってフリーズしました。しかし、Pythonのpandasならわずか数秒です。驚くほど平然と、処理を完了させてしまいます。データには、氏名が欠損している行もあるでしょう。退職者のデータが、不完全に残るケースなどです。システムエラーで、空行が紛れ込むこともあります。こうした不要な行を除くことは、非常に重要です。名寄せの精度を高めるための、必須条件といえます。データを磨き上げることが、クリーニングの本質です。

VBA・Pythonをもっと本格的に学ぶなら

VBAやPythonを実務レベルまで引き上げたい方には「侍エンジニア」がおすすめです。マンツーマン指導・オーダーメイドカリキュラムで、文系出身でも挫折しにくい環境が整っています。無料カウンセリングだけでも学習ロードマップが明確になります。

侍エンジニア 無料カウンセリングを予約する →

`unicodedata`による氏名データの正規化

それでは、いよいよ核心の部分に迫りましょう。不一致の最大の原因を、どう制圧するかです。それは、「スペース」と「文字幅」の問題です。

unicodedataで氏名統一

単にスペースを消去するだけでは、不十分です。「齊藤」と「斉藤」のような異体字は別として考えます。英数字やカタカナの全角半角の混在も厄介です。ここで強力な助っ人になるのが、標準ライブラリです。unicodedataというライブラリを使用します。この機能による正規化は、氏名照合に不可欠です。「normalize」という機能を使うのが一般的です。全角の英数字やカタカナを、半角に揃えられます。あるいは、逆に揃えるといった処理も確実です。

確実な正規化によるデータの純化

文字の内部的な基準に従って、機械的に変換します。人間が気づかない特殊な文字も、漏れがありません。氏名列に対し、まずunicodedataを適用します。全角半角を統一し、その後にスペースを消します。この2ステップで、データは美しく磨かれます。純金のような、非常に綺麗な状態のデータになります。

unicodedata、文字の表記ゆれ解消

以前の私は、このライブラリを知りませんでした。replace関数で、全角文字を置換し続けていました。辞書を自作し、コードは500行を超えました。その時、「何か間違っている」と気づいたのです。標準機能の1行で済むと知り、愕然としました。恥ずかしさで、パソコンをそっと閉じたものです。これで、あらゆるパターンの名前が一致します。システムAとBのデータが、同じ土俵に立ちました。データのゆがみが、矯正された瞬間といえます。

人事データ重複排除の落とし穴と安全策

データの形が整えば、あとは簡単です。重複しているデータを取り除いていきましょう。pandasには、専用のメソッドが用意されています。「drop_duplicates()」という便利な機能です。

人事名寄せ、同姓同名の惨事回避

この命令で、同じ氏名の行を一つにできます。一見簡単そうですが、恐ろしい罠があります。事前の正規化がないと、この機能は働きません。スペースの有無で、別人と判定されるからです。だからこそ、前段のクリーニングが重要なのです。そしてもう一つ、人事特有の致命的な問題があります。それが「同姓同名」の方々の存在です。数百人規模なら、同じ名前の人が必ずいます。「鈴木一郎」が複数いても、おかしくありません。名前だけで判定すると、別人を消してしまいます。

データの背景にある「人間」を守る

正規化によって、名前の文字列は一致してしまいます。本来別人物である二人を、同一とみなす危険です。片方のデータを消し去ることは、絶対避けなければいけません。これは、人事データにおいて最も怖い事故です。データの正確性を守るために、細心の注意が必要です。

名寄せの恐怖、給与を守る多要素連携

以前、テスト環境でスクリプトを回しました。その時、新人とベテランが統合されました。役職が消え、基本給が上書きされていました。結果を見た瞬間、全身の血の気が引きました。本番環境でなくて、本当に良かったと思います。給与システムでこれが起きれば、大惨事です。他人の口座に給与が振り込まれるかもしれません。あるいは未払いが発生する、背筋が凍る事態です。これを防ぐには、複数の要素を組み合わせます。

安全装置としての複数条件指定

生年月日や入社年月、所属コードなどを使います。メソッドでは、複数の列を条件に指定できます。氏名が同じでも、誕生日で区別が可能になります。こうした安全装置を組み込み、自動化は完成します。単にコードが動けばいいわけではありません。データの背景にある「人間」を想像してください。それこそが、人事データの取り扱いに求められる力です。

Pythonで実現する時間と精神的余裕

システムの壁に阻まれる日々は、もう終わりにしましょう。無駄な照合に時間を溶かすのは、もったいないです。

Pythonが解放する時間と人間が為すべきこと

Pythonという武器があれば、月末は怖くありません。数時間の作業が、数十秒で終わります。手作業によるミスも、完全に排除できます。ツールの導入自体が、目的ではありません。本当に手に入れたいのは、自由な時間です。泥臭い作業から解放され、余裕を持ってください。画面を睨みつけるのは、本来の仕事ではありません。不完全なデータを人間が直すのは、矛盾しています。そんな光景は、一刻も早く終わらせるべきです。

人事部門が取り組むべきコア業務への集中

苦痛から解放されたら、その時間を使いましょう。従業員の満足度を高める企画を考えてください。採用の質を高める準備も、重要な仕事です。働きやすい環境づくりにも、時間を使えます。これらこそが、人事部門が取り組むべき業務です。データの手直しに追われては、着手できません。データの整形は、機械にすべて任せましょう。人間は、人間にしかできない仕事に向き合うべきです。それが、テクノロジーを取り入れる最大の意義です。今日からPythonで、CSVに立ち向かいましょう。

関連リンクとチェックリスト

無料プレゼント

Excel業務を自動化する前に確認するチェックリスト(PDF)

自動化していい作業かどうか、VBAかPythonか、最初に避けるべき落とし穴。実務でよく迷うポイントを1枚にまとめました。メールアドレスだけで受け取れます。

無料でチェックリストを受け取る

¥980 ミニキット

コピペで動かせる3スクリプト+自動化チェックリスト

最新ファイルの自動選択・部署名ゆれの正規化・CSV文字コード確認の3本セット。今週の作業を1つだけ楽にするための最小キットです。

ミニキットを見る(¥980)

関連書籍

Python業務自動化関連書籍を、手元で見返せる形にしておきたい場合

Pythonやデータ処理の自動化は、作りながら同じ基礎を何度も確認する場面が多いです。手元で見返せる本があると、調べ直しの時間を減らしやすいです。

Python業務自動化関連書籍をAmazonで探す

学習サービスとアンケート

このスキルを活かしてさらに前へ進むなら

Pythonや自動化スキルを体系的に習得して、ITエンジニアとしてのキャリアを切り開きたい方には「Enjoy Tech!(エンジョイテック)」が選択肢のひとつです。

プログラミングスクール Enjoy Tech!(エンジョイテック) →

[アンケート] この記事は役に立ちましたか?

30秒で答えられます。改善の参考にします。

1問だけ回答する