データ解析とは?

月-3020215分で読める

データ解析は、特にウェブからデータをスクレイピングする人やソフトウェア・エンジニアにとって、大量のデータを扱うときによく目にする言葉だ。しかし、データ解析はもっと深く議論されるべきトピックです。例えば、データ解析とは一体何なのか、そしてどのようにデータ解析を行うのか。

データ解析は、特にウェブからデータをスクレイピングする人やソフトウェア・エンジニアにとって、大量のデータを扱うときによく目にする言葉だ。しかし、データ解析はもっと深く議論されるべきトピックです。例えば、データ構文解析とは一体何なのか、実世界でどのように実装するのか、などです。

この記事では、上記のすべての質問に答え、データ解析に関連する重要な用語の概要を説明する。

パースとはどういう意味か?

ウェブスクレイピングで大量のデータを抽出すると、それらはHTML形式になる。残念ながら、これはノンプログラマーにとって読みやすいフォーマットではない。そのため、データサイエンティストによる分析に便利な、人間が読める形式にするために、データにさらに手を加える必要がある。このような重い作業のほとんどを行うのがパーサーである。

データパーサーは何をするのか?

パーサーは、ある形式のデータを別の形式のデータに変換する。例えば、パーサーはスクレイピングで得たHTMLデータをJSON、CSV、さらにはテーブルに変換し、読んで分析できる形式にします。パーサーが特定のデータ形式に縛られないことも特筆に値する。

優れたパーサーは、HTMLタグ内の必要なデータとそれ以外を区別するからだ。

パーサーを使用するさまざまな技術

前節で述べたように、パーサーは特定の技術に縛られないため、もともと非常に柔軟である。そのため、さまざまなテクノロジーがパーサーを使用している:

スクリプト言語-ファイル内の一連のコマンドに基づいて実行されるため、実行にコンパイラーを必要としない言語である。代表的なものはPHP、Python、JavaScriptなどです。

Javaなどのプログラミング言語- Javaなどの高レベル・プログラミング言語では、ソース・コードをアセンブリ言語に変換するためにコンパイラを使用する。パーサーはこれらのコンパイラの重要なコンポーネントで、ソースコードの内部表現を作成する。

HTMLとXML-HTMLの場合、パーサーはタイトル、見出し、段落などのHTMLタグ内のテキストを抽出する。一方、XMLパーサーは、XML文書の読み取りと操作を容易にするライブラリです。

SQLとデータベース言語 - 例えばSQLパーサーはSQLクエリを解析し、SQLクエリで定義されたフィールドを生成します。

モデリング言語-モデリング言語のパーサーによって、開発者、アナリスト、利害関係者は、モデル化されているシステムの構造を理解することができる。

対話型データ言語-宇宙科学や太陽物理学など、大量のデータを対話的に処理する際に使われる。 

なぜデータ解析が必要なのか?

構文解析が必要な主な理由は、様々なエンティティが異なるフォーマットのデータを必要とするからである。構文解析によって、人間や、場合によってはソフトウェアが理解できるようにデータを変換することができる。後者の顕著な例として、コンピュータ・プログラムがある。まず人間は、私たちが日常的に使う英語のような自然言語に類似した高級言語を使って、理解できる形式でプログラムを書く。その後、コンピュータが理解できる機械語レベルのコードに翻訳する。

構文解析は、2つの異なるソフトウェア間で通信が必要な場合にも必要である-たとえば、クラスのシリアライズとデシリアライズなどである。

構文解析用語とパーサーの構造

ここまでで、データ解析の基本的な概念はご理解いただけたと思います。ここからは、データ・パーシングに関連する重要な概念と、パーサーがどのように機能するかを探っていきます。 

用語解説

正規表現

正規表現は、特定のパターンを定義する一連の文字である。正規表現は、電子メールアドレスや生年月日を検証するために、高級言語やスクリプト言語で最もよく使われる。正規表現はデータの解析には不向きと考えられているが、単純な入力の解析にはまだ使える。このような誤解が生じるのは、ある種のプログラマーが、本来正規表現を使うべきでない場合でも、あらゆる解析作業に正規表現を使ってしまうからである。そのような状況では、結果として正規表現がハックされたものになる。

正規表現を使って、正規言語とも呼ばれる簡単なプログラミング言語を解析することができる。しかし、これには単純な言語と見なせるHTMLは含まれません。これは、HTMLのタグの中に、任意のタグがいくつもあるという事実によるものです。また、その文法によれば、HTMLには再帰的要素や入れ子要素があり、正規言語には分類できない。したがって、どんなに賢くても解析することはできない。 

文法

文法とは、言語を構文的に記述するルールの集合である。したがって、文法は構文のみに適用され、言語の意味論には適用されない。言い換えれば、文法は言語の構造に適用され、意味には適用されない。下の例を見てみよう:

HI:「ハイ

名前[a-zA-z]

ご挨拶お名前

上記のコードの出力として考えられるのは、「HI SARA」と「HI Coding」の2つである。言語の構造に関する限り、どちらも正しい。しかし、2番目の出力では、"Coding "は人名ではないので、意味的には正しくない。

文法の解剖学

私たちは、バッカス・ナウア形式(BNF)のような、よく使われる形式で文法の解剖学を見ることができる。この形式には拡張バッカス・ナウル形式という変形があり、これは繰り返しを表します。BNFのもう一つの変形はAugmented Backus-Naur Formである。これは双方向通信プロトコルを記述するときに使われる。

バッカス・ナウル・フォームで典型的なルールを使う場合、次のようになる:

<symbol> : : _expression_

The <symbol> is nonterminal, which means you can replace it with elements on the right,  _expression_. The _expression_ could contain terminal symbols as well as nonterminal symbols. 

さて、終止記号とは何かと尋ねられるかもしれない。まあ、文法のどの要素にも記号として現れないものだ。典型的な終端記号の例は、"Program "のような文字列である。

上記のような規則は、厳密には右側の非終端記号と終端記号のグループとの間の変換を定義しているので、これを生成規則と呼ぶことができる。

文法の種類 

文法には2種類あり、正規文法と文脈自由文法である。正規文法は一般的な言語を定義するのに使われる。また、文脈自由言語を表現するパーシング表現文法(PEG)として知られる、より新しいタイプの文法もあり、文脈自由文法としても強力である。いずれにせよ、この2つのタイプの違いは、表記法とルールの実装方法に依存する。

つの文法を区別するもっと簡単な方法は、_expression_、つまりルールの右辺を:

  • 空の文字列
  • シングル・ターミナル・シンボル
  • 一つの終端記号の後に非終端記号が続く。

現実には、これは言うは易く行うは難しである。というのも、特定のツールは、1つの定義でより多くの終端記号を許容することができるからである。なぜなら、特定のツールは1つの定義でより多くの終端記号を許容する可能性があるからだ。そうすれば、その式は上記のケースのいずれかに属する正しい一連の式に変換される。

だから、たとえ下品な表現であっても、自然言語とは相容れないものの、適切な形に変換される。

パーサーの構成要素

パーサーは、先ほど説明した文法規則に従ったプログラミング言語の記号列を解析する役割を担っているので、パーサーの機能を2段階のプロセスに分解することができる。一般的にパーサーは、非構造化データをプログラムで読み取り、分析し、構造化フォーマットに変換するよう指示される。

パーサーを構成する2つの主要なコンポーネントは、字句解析と構文解析である。さらに、構造化されたデータを受け取り、肯定的か否定的か、完全か不完全かのフィルターをかける意味解析コンポーネントを実装しているパーサーもあります。このプロセスはデータ解析プロセスをさらに強化すると思われるかもしれませんが、必ずしもそうではありません。  

意味解析は人間による意味解析が好まれるため、ほとんどのパーサーには組み込まれていません。したがって、意味解析は追加的なステップであるべきであり、もし実行するつもりなら、それはあなたのビジネス目標を補完するものでなければならない。

次に、パーサーの2つの主要な処理について説明しよう。

語彙分析

これは、スキャナーやトークナイザーとも呼ばれるレキサーによって実行され、その役割は、生の非構造化データまたは文字のシーケンスをトークンに変換することです。多くの場合、パーサーに入力される文字列はHTML形式です。次にパーサーは、キーワード、識別子、区切り文字などの字句単位を利用してトークンを作成します。同時にパーサーは、導入部で触れた語彙的に無関係なデータを無視する。例えば、HTML文書内の空白やコメントなどである。

構文解析は、字句解析の過程で無関係なトークンを削除した後、構文解析の残りの部分を処理する。

構文解析

データ構文解析のこの段階では、構文木を構築する。これは、パーサーがトークンを作成した後、それらをツリーに並べることを意味する。この過程で、無関係なトークンもツリー自体の入れ子構造に取り込まれます。無関係なトークンには、括弧、セミコロン、中括弧などがある。

このことをより理解するために、簡単な数学の方程式で説明しよう: (a*2)+4

パーサーのレクサーはそれらを以下のようにトークンに分解する:

( => 括弧

a => 値

* 掛ける

2 => 価値

 )=>カッコ

+ プラス

4 => 価値

その後、構文木は以下のように構築される:

    パーサーがHTML要素からデータを抽出するときも、同じ原則に従います。

社内パーサーか外注パーサーか?

パーサーの基本的な側面はご理解いただけたと思います。これからは、パーサーを自作するか、外注するかというエキサイティングな局面です。まず、それぞれの方法の長所と短所を見てみましょう。 

社内パーサーの長所

社内でパーサーを構築する場合、多くの利点があります。主な利点のひとつは、仕様をより自由にコントロールできることです。さらに、パーサーは特定のデータ形式に制限されないため、さまざまなデータ形式に合わせてカスタマイズすることができます。 

その他の大きな利点としては、コストの節約、内蔵パーサーの更新と保守をコントロールできることなどが挙げられる。 

社内パーサーの短所

社内パーサーにも落とし穴がないわけではない。重大な欠点のひとつは、メンテナンス、アップデート、テストを実質的にコントロールできるにもかかわらず、貴重な時間を大量に消費してしまうことだ。もう一つの欠点は、あなたが必要とするよりも速くすべてのデータを解析するために、強力なサーバーを購入して構築できるかどうかということである。最後に、パーサーを構築し、それに関するトレーニングを提供するために、社内のスタッフ全員を訓練する必要があります。 

外注パーサーの長所

パーサーを外注する場合、購入企業がサーバーやパーサーを含むすべての作業を提供してくれるので、人的資源に費やす費用を節約することができます。さらに、構築した会社は市場にリリースする前にすべてのシナリオをテストする可能性が高いため、重大なエラーに直面する可能性が低くなります。

エラーが発生した場合、パーサーを購入した会社からの技術サポートがあります。また、最適なパーサーを構築するための意思決定がアウトソーシングによって行われるため、十分な時間を節約することができます。 

外注パーサーの欠点

アウトソーシングには多くのメリットがあるが、デメリットもある。主な欠点は、カスタマイズ性とコストです。パーシング会社が完全な機能を作成するため、コストがかかります。さらに、パーサーの機能を完全にコントロールすることは制限されます。

結論

この長い記事で、パーサーがどのように機能するのか、そしてデータ解析プロセス全般とその基礎について学んでいただいた。データ解析は長く複雑なプロセスです。データ解析を実際に体験する機会があれば、データ解析を効果的に行うための豊富な知識を身につけることができます。

この知識を有効に活用してほしい。