問題タブ [fuzzywuzzy]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - パンダの機能が含まれています
2 つのデータ フレームの会社名間でマッチング (一種のファジー マッチング) を実行しています。そうするために、最初に、最初のアルファベットが一致するすべての会社名の間で完全なマージを実行しています。これは、「A」で始まるすべての企業が、他のデータ フレームの「A」で始まるすべての企業と一致することを意味します。これは次のように行われます。
ここで、df1 の会社に df2 の会社が含まれる FullMerge のすべての行を取得したいと考えています。これは、df1 の会社の名前が長いためです。
これは私にはうまくいきません。このタスクを実行するにはどうすればよいですか? また、会社名を一致させるために使用できる他の方法を提案してください. 企業は 2 つのデータ フレームで同じである可能性がありますが、まったく同じ方法で記述されているわけではないためです。
python - 2 つの DataFrame 間のあいまい一致が遅い
df_cam
cli id と originを持つ DataFrame A ( ) があります。
そして DataFrame B ( df_dict
) とショートカットとキャンペーン
たとえば、起源を持つクライアントは、キーワードが含まれているため、1234 M-MKT XYZklm 05/2016
実際にはキャンペーンからのものであることがわかっています。Mobile Marketing Outbound
M-MKT
ショートカットは、アルゴリズムが何を決定するかに基づく一般的なキーワードであることに注意してください。原点はM-Marketing
、MMKT
またはのいずれでもかまいませんMob-MKT
。最初にすべてのオリジンを分析して、手動でショートカットのリストを作成しました。また、正規表現を使用origin
して、プログラムにフェッチされる前にクリーンアップしています。
ショートカットで顧客の出所とキャンペーンを一致させ、スコアを付けて違いを確認したいと思います。以下に示すように:
以下は動作する私のプログラムですが、本当に遅いです。DataFrame A には ~400.000 行があり、別の DataFrame B には ~40 行があります。
速くする方法はありますか?
精度を評価するために、2番目と3番目のベストマッチも計算したいことに注意してください。
編集
メソッドを見つけましprocess.ExtractOne
たが、速度は変わりません。したがって、私のコードは次のようになります。
python - python fuzzywuzzyのprocess.extract():どのように機能しますか?
Python モジュール fuzzywuzzy の関数 process.extract() がどのように機能するかを理解しようとしていますか?
私は主にここで fuzzywuzzy パッケージについて読んでいます: http://chairnerd.seatgeek.com/fuzzywuzzy-fuzzy-string-matching-in-python/は、あいまい一致をしようとするときのさまざまなシナリオを説明する素晴らしい投稿です。彼らは、部分的な文字列の類似性に関するいくつかのシナリオについて議論しました。
1) 故障
2) トークンソート
3) トークンセット
そして、この投稿から: https://pathindependence.wordpress.com/2015/10/31/tutorial-fuzzywuzzy-string-matching-in-python-improving-merge-accuracy-across-data-products-and-naming -conventions/ fuzzywuzzy の process.extract() 関数を使用して、基本的に上位 k 件の一致を選択する方法を学びました。
process.extract() 関数の仕組みに関する情報があまり見つかりません。GitHub ページ ( https://github.com/seatgeek/fuzzywuzzy/blob/master/fuzzywuzzy/process.py ) で見つけた定義/情報は次のとおりです。
選択肢のリストまたは辞書で最適な一致を見つけ、一致を含むタプルのリストとそのスコアを返します。辞書が使用されている場合は、各一致のキーも返します。
ただし、どのように最適なものを見つけているかについての詳細は提供されていませんか? これを見つけるには、上で述べた 3 つのシナリオすべてが必要でしたか?
私が尋ねる理由は、この関数を使用したときに、非常に似ているが一致しない 2 つの文字列が時々あるからです。
たとえば、現在のサンプル データ セットでは、to-be-match-string
「総補充リードタイム(平日)」
に一致します
"PLANNING_TIME_FENCE_CODE"、"BUILD_IN_WIP_FLAG"
でもしない(正解)
"FULL_LEAD_TIME"
正解は、照合文字列と同じように「リードタイム」がありますが、照合文字列とはまったく一致しません。なぜ?そしてどういうわけか、一致する文字列のように見えない他のものが一致するようになります。なぜ?私は今、まったく無知です。
python - fuzzywuzzy/fuzz.py 実行中のエラー
fuzzywuzzyを使用してcsvに一致させ、重複または非常に類似している可能性のある文字列を見つけるプログラムがあります。2 つのファイルを比較すると、fuzzywuzzyで次のエラーが発生します。
そのエラーが発生する原因を知っている人はいますか?
python - あるPythonデータフレーム/辞書を検索して、別のデータフレームであいまい一致を探す
50,000 の一意の行と 20 の列を持つ次の pandas データフレームがあります (関連する列のスニペットが含まれています)。
df1 :
また、2 つの列と 20,000 の一意の行を持つ次のデータフレーム (これも辞書形式で保存しました) があります。
df2 (dict_2 としても保存)
私がやりたいことは、df1 の「PRODUCT_DESCRIPTION」フィールドを df2 の「PROD_DESCRIPTION」フィールドと比較し、最も近い一致/一致を見つけて、重い持ち上げ部分を支援することです。その後、一致を手動で確認する必要がありますが、はるかに高速です。理想的な結果は次のようになります。たとえば、1 つ以上の部分一致が記録されます。
完全一致を特定した結合をすでに完了しています。各 df の製品 ID は一意であるため、インデックスを保持することは重要ではありません。結果は、約 1,400 万行の 3 番目のデータフレームに適用されるため、新しいデータフレームに保存することもできます。
私は次の質問と回答を(特に)使用しました:
Python pandas とのファジー マッチ マージを実行することは可能ですか?答えの 1 つで提案されているように、クラゲ モジュールの試行を含む
重複とのファジー マージ マッチ
Python ファジー マッチング fuzzywuzzy
は、配列の列に最適な一致のみを保持します ファジー マッチ項目
また、さまざまなループ/関数/マッピングなどもありますが、スコアが低い最初の「あいまい一致」を取得するか、一致が検出されないかのいずれかで、成功していません。
一致/距離スコア列がここに従って生成されるというアイデアが気に入っています。これにより、手動チェックプロセスを高速化できるからです。
私はPython 2.7、pandasを使用しており、fuzzywuzzyがインストールされています。
python - 「次のパッケージは優先度の高いチャネルに置き換えられます」とはどういう意味ですか?
64 ビット Linux の Anaconda ディストリビューションに fuzzywuzzy をインストールしようとしています。これを行うとconda
、 とconda-env
をconda-forge
チャンネルに変更しようとします。次のように:
次のように書いて、アナコンダで fuzzy wuzzy を検索します。
これは、64 ビット Linux 上の anaconda で利用可能な最新バージョンが、チャネルで提供されている 0.13 であることを示していますconda-forge
。
インストールするには、コマンド ラインで次のように入力します。
次の出力が得られます。
これが何を言っているのかわかりません。
これは何を意味するのでしょうか?これにより、デフォルトのパッケージ マネージャー チャネルが変更されていると考えるのは正しいですか? 先に進んでインストールすると、これを元に戻すことができますか? デフォルトのチャンネルを変更せずにインストールを完了する方法はありますか? それとも、優先チャネルを支持することは私がすべきことですか?
1 つのモジュールのためだけにディストリビューションを変更したり、さらに頭痛の種を引き起こしたりしたくありません。
この質問: https://github.com/conda/conda/issues/2898は、それを起こさせるべきだと言っているように聞こえます。どうする?
(私は anaconda バージョンを使用しています: 4.2.13 および Python 2.7.12)