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

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

同じプロセスがテキスト エクスプローラー ウィンドウの外側に表示されます。
最終的な考え
正規表現は、データ探索の領域において不可欠なツールです。これらは、テキスト文字列を操作して目的の出力に一致させるための多用途のソリューションを提供します。正規表現を使用すると、データの可能性を最大限に引き出すことができます。
正規表現の詳細については、以下を参照してください。
Customize Regex in the Regular Expression Editor (jmp.com)
正規表現の数量子 | Microsoft Learn
正規表現リファレンス (正規表現.info)
正規表現関数 (jmp.com)
JMPヘルプ
ブログ投稿ありがとうございます!
私のお気に入りのサイトの 1 つは regex101.com で、正規表現を作成してテストするのに最適な場所です。 このツールを使用して多くのことを学びました。
ブラッド、なんて素晴らしい、有益な投稿でしょう! 先週 Regex について学びましたが、これはとても役立つ入門書でした。 他の皆さんも正規表現について興味を持っていただければ幸いです。