ビジネスインテリジェンスプラットフォーム:MongoDBアグリゲーションパイプラインを使用したチュートリアル
公開: 2022-03-11データを使用して興味深い質問に答えることは、今日のデータ主導の世界で研究者が忙しくしていることです。 膨大な量のデータを考えると、それを処理および分析するという課題は大きな課題です。 特に、数テラバイトのデータを数分で分析するのに役立つ、Hadoopエコシステム、Spark、またはNoSQLデータベースによって提供されるビジネスインテリジェンスプラットフォームまたはテクノロジーの学習に投資する時間がない統計学者またはデータアナリスト向けです。
今日の標準は、研究者や統計学者がR、MATLAB、Octaveなどの分析パッケージのデータのサブセットに基づいてモデルを構築し、ITチームに式とデータ処理ステップを提供してから生産分析ソリューションを構築することです。
このアプローチの問題の1つは、本番環境のすべてのデータに対してモデルを実行した後、研究者が何か新しいことに気付いた場合、このプロセスをもう一度繰り返す必要があることです。
研究者がMongoDB開発者と協力して、すべての本番データで分析を実行し、新しいテクノロジーや複雑なプログラミング言語、さらにはSQLを学ぶことなく、探索データセットとして使用できるとしたらどうでしょうか。
MongoDBのAggregationPipelineとMEANを効果的に使用すれば、これをかなり短時間で実現できます。 この記事と、このGitHubリポジトリで利用できるコードを通じて、これを実現するのがいかに簡単かを示したいと思います。
市場に出回っているビジネスインテリジェンスツールのほとんどは、研究者がNoSQLやその他のビッグデータテクノロジーからツールにデータセットをインポートする方法を提供しており、変換と分析はツール内で行われます。 ただし、このビジネスインテリジェンスチュートリアルでは、MongoDBからデータを取得せずにMongoDB Aggregation Pipelineの機能を使用しており、研究者はシンプルなインターフェイスを使用して、本番ビッグデータシステムであらゆる種類の変換を行っています。
ビジネスインテリジェンスのためのMongoDBアグリゲーションパイプライン
簡単に言えば、MongoDBの集約パイプラインは、データセットに対して一連のデータ変換を実行するためのフレームワークです。 最初のステージでは、ドキュメントのコレクション全体を入力として受け取り、それ以降の各ステージでは、前の変換の結果セットを入力として受け取り、変換された出力を生成します。
集約パイプラインで使用できる変換には、次の10種類があります。
$ geoNear:指定されたポイントから最も近いものから最も遠いものの順にドキュメントを出力します
$ match:任意の式で設定された入力レコードをフィルタリングします
$ project:入力フィールドまたは計算フィールドのサブセットを使用して結果セットを作成します
$ redact:ドキュメントからの情報に基づいてドキュメントの内容を制限します
$ unwind:ドキュメントからn個の要素を含む配列フィールドを取得し、各要素がその配列を置き換えるフィールドとして各ドキュメントに追加されたn個のドキュメントを返します。
$ group:1つ以上の列でグループ化し、他の列で集計を実行します
$ limit:入力セットから最初のn個のドキュメントを選択します(パーセンタイル計算などに役立ちます)
$ skip:入力セットの最初のn個のドキュメントを無視します
$ sort:指定されたオブジェクトに従ってすべての入力ドキュメントをソートします
$ out:前のステージから返されたすべてのドキュメントを取得し、コレクションに書き込みます
上記のリストの最初と最後を除いて、これらの変換を適用できる順序に関する規則はありません。 $ outは一度だけ使用し、最後に、集計パイプラインの結果を新規または既存のコレクションに書き込みたい場合に使用する必要があります。 $ geoNearは、パイプラインの最初のステージとしてのみ使用できます。
物事を理解しやすくするために、2つのデータセットとこれらのデータセットに関連する2つの質問を見ていきましょう。
指定による給与の違い
MongoDBの集約パイプラインの力を説明するために、米国全体の大学の教育スタッフの給与情報を含むデータセットをダウンロードしました。 このデータはnces.ed.govで入手できます。 次のフィールドを持つ7598機関からのデータがあります。
var FacultySchema = mongoose.Schema({ InstitutionName : String, AvgSalaryAll : Number, AVGSalaryProfessors : Number, AVGSalaryAssociateProfessors : Number, AVGSalaryAssistantProfessors : Number, AVGSalaryLecturers : Number, AVGSalaryInstructors : Number, StreetAddress : String, City : String, State : String, ZIPCode : String, MenStaffCount : Number, WomenStaffCount : Number }
このデータを使用して、准教授と州ごとの教授の給与の違いを(平均して)調べたいと思います。 そうすれば、准教授は、どの州で彼が給与の面で教授に近いと評価されているかを知ることができます。
この質問に答えるには、研究者はまずコレクションから不良データを取り除く必要があります。これは、データセットに平均給与がnullまたは空の文字列である行/ドキュメントがいくつかあるためです。 データセットのこのクリーニングを実行するために、次のステージを追加します。
{$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}
これにより、これら2つのフィールドに文字列値を持つすべてのエンティティが除外されます。 MongoDBでは、各タイプは一意の番号で表されます。文字列の場合、タイプ番号は2です。
このデータセットは良い例です。実際のデータ分析では、エンジニアはデータのクリーンアップにも対処しなければならないことがよくあるからです。
安定したデータが得られたので、次の段階に進み、州ごとに給与を平均します。
{$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}
以下のパイプラインのステージ3に示すように、上記の結果セットの予測を実行し、州の平均給与の差を取得する必要があります。
{$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}
これにより、米国全土の7519の教育機関のデータセットから、教授と准教授の間の州レベルの平均給与の差が得られるはずです。 この情報の解釈をさらに便利にするために、単純な並べ替えを実行して、$ sortステージを追加することにより、どの状態の違いが最も少ないかを確認します。
{$sort: { SalaryDifference: 1}}
このデータセットから、アイダホ州、カンザス州、ウェストバージニア州は、准教授と教授の給与の差が他のすべての州と比較して最も少ない3つの州であることが明らかです。
このために生成された完全な集約パイプラインを以下に示します。

[ {$match: {AVGSalaryProfessors: {$not: {$type: 2}}, AVGSalaryAssociateProfessors: {$not: {$type: 2}}}}, {$group: {_id: "$State", StateAVGSalaryProfessors: {$avg: "$AVGSalaryProfessors"}, StateAVGSalaryAssociateProfessors: {$avg: "$AVGSalaryAssociateProfessors"}}}, {$project: {_ID: 1, SalaryDifference: {$subtract: ["$StateAVGSalaryProfessors", "$StateAVGSalaryAssociateProfessors"]}}}, {$sort: { SalaryDifference: 1}} ]
表示される結果のデータセットは次のようになります。 研究者は、Tableauなどの視覚化パッケージを使用して、または単純なMicrosoft Excelチャートを使用してレポートするために、これらの結果をCSVにエクスポートすることもできます。
雇用タイプ別の平均賃金
この記事で検討するもう1つの例には、www.data.govから取得したデータセットが含まれます。 アメリカ合衆国のすべての州および地方政府組織の給与情報を考慮して、各州のフルタイムおよびパートタイムの「財務管理」従業員の平均賃金を計算したいと思います。
データセットがインポートされ、1975年のドキュメントが作成され、各ドキュメントは次のスキーマに従います。
mongoose.Schema({ State : String, GovernmentFunction : String, FullTimeEmployees : Number, VariationPCT : Number, FullTimePay : Number, PartTimeEmployees : Number, PartTimePay : Number, PartTimeHours : Number, FullTimeEquivalentEmployment : Number, TotalEmployees : Number, TotalMarchPay : Number }, {collection: 'payroll'});
この質問への回答は、財務管理の従業員が移動するのに最適な州を選択するのに役立つ場合があります。 MongoDBアグリゲーターパイプラインベースのツールを使用すると、これを非常に簡単に行うことができます。
最初の段階で、GovernmentFunction列をフィルタリングして、「FinancialAdministration」以外のすべてのエンティティを破棄します。
{$match:{GovernmentFunction:'Financial Administration'}}
チュートリアルの次の段階では、エンティティを州ごとにグループ化し、各州のフルタイムとパートタイムの平均給与を計算します。
{$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}
最後に、結果を高額の州から低額の州に分類します。
{$sort: {FTP_AVG: -1, PTM_AVG: -1}}
これにより、ツールは次の集約パイプラインを生成できるようになります。
[ {$match:{GovernmentFunction:'Financial Administration'}}, {$group: {_id: '$State', FTP_AVG: {$avg: '$FullTimePay'}, PTM_AVG: {$avg: '$PartTimePay'}}}, {$sort: {FTP_AVG: -1, PTM_AVG: -1}} ]
集計パイプラインを実行すると、次のような結果が得られるはずです。
ビルディングブロック
このビジネスインテリジェンスアプリケーションを構築するために、MongoDB、ExpressJS、AngularJS、およびNodeJSの組み合わせであるMEANを使用しました。
ご存知かもしれませんが、MongoDBはスキーマレスのドキュメントデータベースです。 保存する各ドキュメントのサイズは16MBに制限されていますが、その柔軟性とパフォーマンス、および提供される集約パイプラインフレームワークにより、MongoDBはこのツールに最適です。 包括的なドキュメントのおかげで、MongoDBの使用を開始するのは非常に簡単です。
MEANのもう1つの不可欠なコンポーネントであるNode.jsは、イベント駆動型のサーバー側Javascript環境を提供します。 Node.jsは、GoogleChromeのV8エンジンを使用してJavascriptを実行します。 Node.jsのスケーラビリティの約束は、多くの組織をそれに向けて推進しているものです。
Express.jsは、Node.jsで最も人気のあるWebアプリケーションフレームワークです。 これにより、Webアプリケーション用のAPIまたはその他の種類のサーバー側ビジネスレイヤーを簡単に構築できます。 ミニマリストの性質のために非常に高速ですが、非常に柔軟性もあります。
多くのGoogleエンジニアによって作成および保守されているAngularJSは、私たちが自由に利用できる最も人気のあるフロントエンドJavascriptフレームワークの1つに急速になりつつあります。
MEANが非常に人気がある理由と、techXplorersでのアプリケーション開発に私たちが選んだ理由は2つあります。
スキルセットはシンプルです。 JavaScriptを理解しているエンジニアは、すべてのレイヤーに進むのが得策です。
フロントエンドからビジネス、データベースレイヤーへの通信はすべて、JSONオブジェクトを介して行われるため、さまざまなレイヤーでの設計と開発にかかる時間を大幅に節約できます。
結論
このMongoDB集計パイプラインチュートリアルでは、本番データを探索データセットとして使用し、さまざまな変換セットを実行してモデルを分析および構築できるツールを研究者に提供する、費用効果の高い方法を示しました。
このアプリケーションをわずか3日でエンドツーエンドで開発およびデプロイすることができました。 このアプリケーションは、4人の経験豊富なエンジニア(米国に2人、インドに2人)とデザイナーおよびフリーランスのUXエキスパートのチームによって開発され、インターフェイスデザインに関するいくつかの考えを支援してくれました。 将来のある時点で、このレベルのコラボレーションが信じられないほど短時間で素晴らしい製品を構築するためにどのように機能するかを説明する時間を取ります。
MongoDBのアグリゲーションパイプラインを活用し、巧妙な分析と洞察で世界を変えることができる研究者の手に力を与えてください。
このアプリケーションは、ここで試してみることができます。