3

現在、110,000 人の寄付者のリストを Excel で作成しています。彼らが私たちに提供する情報の 1 つは、彼らの職業です。このリストを要約して、私が定義する 10 または 20 のカテゴリにまとめたいと思います。

通常、私はこれを 1 行ずつ処理するだけですが、1 年分のデータに対してこれを行う必要があるため、1,000,000 行以上の行を 1 行ずつ処理する時間は実際にはありません。

10 または 20 のカテゴリを定義して、そこから python に分類させる方法はありますか?

アップデート:

データの形式が正しくありません。人々は、オンラインまたは紙切れで自分でフィールドに入力し、それをデータ処理会社に郵送します。ばらつきが大きい。CEO、最高経営責任者、事務局、リストは続きます。

SORT UNIQ コマンドを使用したところ、リストに約 13,000 の異なる職業があることがわかりました。

4

3 に答える 3

1

私は、データがノイズを含んでいると仮定します。つまり、データが書き込まれる可能性があるという意味です。ここでの主な問題は、入力データとカテゴリの間のマッピングを定義する方法であり、それには以下が含まれます。 、まず、データを調べます。

あなたが持っているものを見て、入力された職業からカテゴリへのマッピングのリストを作成することをお勧めします. その後、ほぼすべてのツールを使用して (Excel を使用している場合は、Excel を使用してください)、そのマッピングを各行に適用できます。一部の行は、どのカテゴリにも属しません。それらを見て、それがマッピングが不適切なためなのか (たとえば、獣医への対処方法を考えていなかったなど)、それともデータにノイズが多いためなのかを判断する必要があります。ノイズの場合は、残りを手動で処理するか、正規表現や自然言語処理ライブラリなど、他の手法を使用してデータを分類してみてください。

問題のケースが何であるかを把握したら、戻ってきて、サンプル データと使用しているコードを添えて、それらについて質問してください。

マッピングを実行する方法を理解する最初の一歩さえ踏み出せない場合は、調査を行い、何かを書いてみてから、それに関する具体的な質問をしてください。

于 2012-10-03T15:36:24.890 に答える
0

このデータを現在の形式でダンプすることはほぼ不可能です。次のように、すべてのケースを明確に定義されたケース セットに手動で減らす必要があります。

  • 最高経営責任者、エグゼクティブ オフィス、CIO、CEO、CTO はすべて C-Star カテゴリに分類されます。
  • マネージャー、PM、スーパーバイザーはマネージャー カテゴリに移動します。
  • 獣医や介護士などの一時的なものは、その他のカテゴリに分類されます。

この手動ペアリングは、データ処理会社のより良いアンケートまたはフォーマットをフォーマットする方法についての洞察も提供し、後のデータをより迅速に処理できる可能性をさらに高めます.

そのポイントに到達すると、次のようなデータの分類にはタプルの辞書で十分です。

dict_x = {'C-Star': (('bob', donation_dollars, 'company_y', 'e_mail_addy'), 
                    ('jim', donation_dollars_2, 'company_z', 'e_mail_addy')),
          'Other': (('sophie', donation_dollars_3, 'company_x', 'e_mail_addy')) }

これは、リスト内包表記、ラムダ関数、ジェネレーター、または昔ながらの for ループで構築できます。

tl:dr; このセットを手動で分類する必要があります。整形式のデータ セットがなくてもプログラムで分類できるすべてのエッジ ケースに対応することはほとんど不可能です。時間がない場合は、これを専門とする企業があり、データを必要なグループにフォーマットするのを手伝ってくれます。それは、自分で取得するために費やさなければならない時間またはお金です。簡単にソート可能なデータセットに。

于 2012-10-14T03:33:43.773 に答える
0

私は以前に同様の/ほぼ正確な状況に対処したことがあります。何度も。

簡単な答え - 「ああ、f**!@#、私は scr@#@#$ です。」

長い答え - 「あなたが短い答えになる範囲を最小限に抑える方法があります」

個人的には、次のようにします。

  • 、少なくともあなたの職業を RDMBS に変換します。sqlite は問題ありません。分析の「パス」または「ステージ」ごとに新しい列を追加する準備をしてください。これらの列は、ターゲットを絞り込むのに役立つ「ヒント」であると考えています。
  • あなたの名前全体の分布のレポートを生成するスクリプトを作成します。これは、可能な限りそれらを継続的に「標準化」するのに役立ちます。例: "Dr" = "Doctor" = "Dr." ; "Lawyer" = "attorney" ( and might = "partner" ですが、それはワームの缶を開ける... ); ceo = 最高経営責任者 = 最高経営責任者など。
  • すべての職業を調べて、soundex / metaphone バージョンを使用してそれらを表現に変換するスクリプトを作成します。私は metaphone2 / doubele metaphone (http://en.wikipedia.org/wiki/Metaphone) を好みます。これにより、ほとんどのタイプミスや似たような単語を回避できます。
  • 配布スクリプトを継続的に実行して、別の概念にマージする必要があるアイテムのグループを見つけます。

一般的な攻撃計画は、データを絶えず分析して、数百/数千の職業から数十の職業への何らかのマッピングを把握する必要があるということです。

生の python でこれを行う代わりに、以前は freebase であったgoogle rename ( http://code.google.com/p/google-refine/ ) などのソフトウェアを使用することもできます。これにより、アプリ内で多くのことができます。

いずれにせよ、継続的に改良を重ねるにつれて、大量の手作業によるデータ分析に対処しなければならなくなります。また、ある時点であきらめなければならないこともあります。数時間以内に職業の 80% を 50 未満のグループに押し込むことができれば、自分の背中を軽くたたき、非常に誇りに思います。

于 2012-10-14T04:31:52.127 に答える