これを想像してみてください。あなたは恐れ知らずのデータ探索者で、生データの未開の荒野の奥深くに足を踏み入れています。 信頼できるスプレッドシートと一杯のコーヒーを武器に、有意義な洞察を引き出す探求に乗り出します。 しかし、悲しいことに、あなたが遭遇するのは、一貫性のない書式設定、不可解な記号、およびそれぞれが生きているように見えるタイプミスのジャングルです。 恐れることはありません、勇敢なデータラングラー、この混沌とした領域では秘密兵器が待っています:正規表現、データクリーニングのスーパーヒーローのマント。
正規表現とは何ですか?
中心となるのは、一般に知られている正規表現です。正規表現は、検索パターンを定義する強力な文字のシーケンスです。 これは、さまざまなプログラミング言語やテキスト エディタで使用される多用途ツールです。文字列を操作して照合するに基づくテキストの特定のパターンやルール。 正規表現を使用すると、複雑な検索パターンを簡潔に表現できるため、テキスト データの特定部分の検索、抽出、変更が容易になります。 文字、メタキャラクタ、および量指定子を組み合わせることで、より大きなテキスト本文内の特定のシーケンス、文字、またはさらに複雑な構造に一致する正規表現パターンを作成できます。 正規表現は幅広い用途に使用できるため、データ クリーニング、テキスト処理、パターン認識タスクにとって非常に貴重なリソースとなっています。
JMP の正規表現
JMP 内では、[テキスト エクスプローラー] -> [解析オプション] -> [正規表現のカスタマイズ] にある赤い三角形を使用して正規表現にアクセスし、カスタマイズします。 いくつかの正規表現がすぐに使用できます。 HTMLリンクグラバーそしてその数字ハイライト。

正規表現をカスタマイズできますJMP。
組み込みの式は便利ですが、データ クリーニングには、データセットに適したさらにカスタマイズされた式が必要になる場合があります。 テキスト文字列内のすべての数字を削除するような簡単な例を見てみましょう。 正規表現 '\d+' を使用すると、このタスクを実行できます。 この式は「\d」を使用します。メタキャラクターすべての数字 (0 ~ 9) と「+」を一致させるには数量詞1 つ以上の数字が一致する必要があることを示します。 この正規表現を文字列「I have 5 apples and 10 oranges」に適用すると、数字「5」と「10」が識別されます。 これらの数字を空の文字列に置き換えることで、存在するすべての数字がデータから効果的に消去されます。
分析してみましょうHTMLリンクグラバーより複雑な例を説明します。 JMP に組み込まれているこの正規表現は次のとおりです。
<A>]*?)\3[^>]*)|(\s*[a-z]+\s*=\s*('|")([^>]*?)\6))*\s*></A>
上記の式の重要な部分を以下の表にまとめます。
| '
| このメタキャラクターは、ハイパーリンクを示す HTML 内の開始アンカー タグを検索します。 |
| 'href\s*=\s*('|")' |
このセクションは、属性「href」に一致し、その後に等号とオプションのスペース、その後に一重引用符 (') または二重引用符 (") が続きます。 後方参照で開始引用符をキャプチャします。 |
| 「([^>]*?)」 |
これは、閉じ山括弧 (>) 以外の文字と一致します。 最も重要なのは、この式の主な目的である URL をキャプチャしていることです。 このセクションは次のようなものであることに注意してくださいフォーマット指定子Cプログラミングで。 |
| '(\s*[az]+\s*=\s*('|")([^>]*?)\6)' |
このパターンは、アンカー タグ内の追加の属性と一致します。 属性名、等号、オプションのスペース、属性値 (引用符内) をキャプチャし、終了引用符が開始引用符と一致することを確認します。 |
(見る正規表現エディターで正規表現をカスタマイズする (jmp.com)詳細については)
これらの属性とパターンは複雑に見えるかもしれませんが、各フラグが何を表すかを学び理解するために利用できるドキュメントやリソースが豊富にあります。
正規表現の適用
さて、正規表現が何であり、何ができるのかを正確に理解できたところで、それが最も役立つのはどこでしょうか?
そうですね、アプリケーションを 1 つだけに絞るのは難しいですが、JMP ユーザー コミュニティのディスカッション セクションからのデータを対象としたテキスト分析プロジェクトで行ったデータ フィルタリングの例を説明します。 このプロジェクトの最終目標は、ユーザー コミュニティのディスカッションに投稿された最も一般的に使用される用語やフレーズを見つけることでした。
以下に示すのは、そのうちの 1 つだけの例です。 4万8千人以上ディスカッションのコメント。 注意してください。 HTML フォーマットとJSLスクリプト元のコメントで使用されている語彙を特定することが非常に困難になります。

正規表現クリーニング前のデータサンプル。
これらの用語や書式設定を手動で削除するには、完了するまでに数か月、場合によっては数年かかる場合がありますが、正規表現をいくつか使用するだけで、削除を瞬時に行うことができます。
まず、ディスカッション内の JSL スクリプト言語コンテンツを削除したいと思いました。 これを実現するために、次の正規表現を使用しました。
<CODE class=" language-jsl">[\s\S]*?<\/CODE>|
|((([€¥₩£\$]|r\$)\s{0,2}[\.,]?[0-9][\.,0-9]*)|([\.,]?[0-9][\.,0-9]*\s{0,2}([€¥₩£\$]|r\$)))
次に、データから HTML および CSS フォーマットタグを削除したいと考えました。
<[^>]*>
最後に、数字、小数、数字を含む単語を削除したいと思いました。
\d+(\.\d+)?|\.\d+
同じ元のサンプル メッセージを見ると、各式が指定されたパラメーターをどのようにフィルター処理するかが以下でわかります。

フィルタリングされたデータ。 フィルタリングされていない単語は黄色で強調表示されます。
結果を調べる
カスタム式のフィルタリングが完了したら、結果はどのように変化するでしょうか? 生のフィルタリングされていないデータセットと正規表現でクリーンアップされたセットのワード クラウドを並べて比較してみましょう。
年(正規表現なし)
|
新しい(正規表現あり)
|

|

|
正規表現を使用する前に、データには HTML 形式、JSL 形式、およびまったく無関係なコンテンツが入力されることに注意してください。 私の分析の目的にとって、このデータはまったく無関係です。 正規表現を使用すると、データは分析にさらに役立ち、さらに作業を加えることで非常に興味深い結果が得られます。
クリーンアップされたデータに対してトピック分析を実施すると、以下に示すように、コミュニティ内で最も一般的に回答されるトピックについて非常に興味深い結果が得られました。

ディスカッションデータの5つのトピック分析
提供される 5 つのトピックは、ユーザーが尋ねる可能性のある質問のさまざまなカテゴリに一般化できます。
- トピック #1: 実験計画法 (DOE)
- トピック #2: 予測モデリングと機械学習
- トピック #3: 指導的な回答
- トピック #4: データのフォーマットと分析
- トピック #5: プログラミングとスクリプト
正規表現列のテキストの一致
正規表現は、テキスト探索ウィンドウ内からのアプリケーションに限定されません。文字列式を使用して新しいデータ列を作成するときにもアクセスできます。 これにアクセスするには、[列] -> [ユーティリティ] -> [テキスト マッチングによる新しい列] を表示します。

正規表現は、JMP ファイルの任意のテキスト列で使用できます。
[テキスト マッチングによる新しい列] を選択すると、テキスト エクスプローラーと同じ正規表現エディタ ウィンドウが開きます。 データ キュレーション プロセス全体はまったく同じですが、次の図に示すように、フィルターされたテキストは新しい列に自動的にフォーマットされます。

同じプロセスがテキスト エクスプローラー ウィンドウの外側に表示されます。
最終的な考え
正規表現は、データ探索の領域において不可欠なツールです。 これらは、テキスト文字列を操作して目的の出力に一致させるための多用途のソリューションを提供します。 正規表現を使用すると、データの可能性を最大限に引き出すことができます。
正規表現の詳細については、以下を参照してください。
正規表現エディターで正規表現をカスタマイズする (jmp.com)
正規表現の数量子 | Microsoft Learn
正規表現リファレンス (正規表現.info)
正規表現関数 (jmp.com)
JMPヘルプ