データサイエンス

【データサイエンティスト必見】データエンジニアリング力とは?

くるみる

くるみる

ベンチャーにてweb制作から機械学習まで幅広い分野を担当、その後、都内IT大企業にてデータサイエンティストとして現在勤務中。 エンジニアリングの知識を持ったビジネスマンになりたく、企画も奮闘中。 TOEIC885点。統計学。機械学習。

未経験くん
データサイエンティストには、データエンジニアリング力が必要って聞いたけど、具体的にどういうスキルなの?

今回は、このような疑問を持った人のために、データエンジニアリング力を具体的に解説していきます。

データサイエンティスト協会が推奨している身につけるべきスキルの中でも、最もハードルの高いものがこのデータエンジニアリング力です。

参考:https://www.datascientist.or.jp/common/docs/skillcheck_ver3.00.pdf

このデータエンジニアリング力は、データ分析を行うための基盤を構築するスキルで、システムの要件定義から実際のコーディングまで幅広い知識を必要とします。

データ環境が整っている大企業で働きたいと言うのであれば、このデータエンジニアリング力を意識せずとも、データサイエンス力とビジネス力で戦っていくことはできます。

しかしながら、中小企業やベンチャー企業で、データ基盤の導入から行なっていきたいと言った場合には、このデータエンジニアリング力が必要となってきます。

各企業必ず一人はこのデータエンジニアリング力を持った人がいないと、データ分析を始めることができません。

この貴重な人材になりたいと言う方は、是非データエンジニアリング力を身につけていってください。

それでは、具体的にデータエンジニアリング力について、8つの項目に分けて解説していきましょう。

環境構築

環境構築とはビジネス側の要求に対して、その要求を満たすシステムを設計することができるスキルです。

つまりシステムの要件を定義し、設計できるスキルです。

システムの要件には機能要件と非機能要件が存在します。

機能要件とは、システムの主目的となる機能に対して、設定する要件のことです。

機能要件はシステムによって、多種多様ですが、具体例をあげるとすれば、以下のようなものが挙げられます。

機能要件の例

  • データ更新頻度
  • 可視化内容
  • 分析するデータの種類

分析対象となるデータや目的は様々です。

そのため、上記に挙げたような要件は状況によって異なってきます。

データの種類に関しても、文字だけなのか、それとも画像なども入ってくるのか、によってシステム要件は変わってきます。

非機能要件とは、システムの主目的以外の部分で設定される要件のことです。

非機能要件には、一般的に以下の6つの観点があります。

非機能要件

  • 可用性
  • 性能・拡張性
  • 運用・保守性
  • 移行性
  • セキュリティ
  • 環境・エコロジー

分かりやすい言葉で説明すると、以下のような説明になります。

可用性は、必ず稼働していて欲しい時間はどの程度なのか。

性能・拡張性は、システムの処理速度やデータが増えた際に性能を上げる事は可能なのか。

運用・保守性は、システムを運用する際のコストがどのくらいか。

移行性は、別システムに移行しやすいのか。

セキュリティは、データが書き換えられたりデータが持ち出されたりしないか。

環境・エコロジーは、消費されるエネルギーが環境に影響及ばさないか。

これらの観点は、分析するデータの機密性や、データが今後どれだけ増えていくのか、またデータ分析の頻度目的などによって変わってきます。

この非機能要件を意識しないと、一時的には使えるが、1年後2年後には全く使えないといったシステムが出来上がってしまいます。

そのため、非機能要件はきちんと詰めていく必要があるのです。

今まで説明してきたように、環境構築とは、機能要件と非機能要件をまず整理し、そしてそれに合ったシステム設計を作るといったスキルになります。

もちろん、どういったシステムがあるのかということを広く把握するといったところも重要ですが、 一番重要なのは機能要件と非機能要件をきちんと分析目的に合わせて、定義してあげるといった能力です。

ぜひ、ビジネス側の要求をきちんと汲み取り、要件に落とし込むスキルを磨いていきましょう。

データ収集

データ収集とは、データを正確かつ効率的に収集するスキルのことです。

日常に存在するデータは必ずしも分析に適した綺麗なデータではないため、そこから意味のあるデータを正確にかつ素早く取り出す必要があります。

データ収集のスキルは、大きく分けて以下の三つの項目に分けることができます。

データ収集

  • データ取得
  • データ通信
  • データ統合

データ取得とは、世の中に存在するデータを取得するスキルです。

方法としては、スクレイピングや他サイトが提供しているAPIの使用、ログデータ取得のためのタグ埋め込みなどが挙げられます。

当たり前のことですが、データを収集するためには、世の中のデータを検知して、まず取得する技術が必要となります。

次にデータ通信とは、取得したデータを適切に送信するスキルです。

データを取得した後は、それを処理するサーバにデータを送信する必要があります。

この送信の際に気をつける必要があるのが、可用性です。

システムの状態によって、データが欠損してしまうと言うことが頻繁に起きてしまうと、データとしての信頼性が失われてしまいます。

そのため、取得したデータはほぼ100%に近い状態で通信できるのが望ましいです。

この可用性を満たすための通信方式を考えるのが、このデータ通信の技術では重要になってきます。

最後に、データ統合とは、異なる種類のデータをDBにて管理するスキルのことです。

取得したデータのフォーマットは様々です。

これに対してより幅広いフォーマットでデータが管理できるようにすることが大切です。

そうすることで、後に新しいデータを投入しようとした時に、データの型が合わないため投入できないと言う事態を防ぐことができます。

データ構造

データ構造とは、データを格納するDBを設計するスキルのことです。

いわゆるテーブル定義ができるかどうかと言うことです。

DBのテーブルをどのように設計するかと言うことは、取得できるデータの拡張性であったり、その後のデータ分析の多様性であったりと言った部分に影響してきます。

ここの設計は、このデータエンジニアリング力を使ったデータ分析基盤作成の肝と言っても良いでしょう。

特に、データ分析のフェーズにおいて快適にデータ分析ができるかどうかは、そこで生み出されるデータ分析の質に大きく関係してきます。

データ構造が整えられている方が、余計なことを考えずに分析ができます。

もちろん、データ分析の多様性は、ここのDB設計のみだけ決まるわけではありませんが、重要な部分にはなりますので、決して怠らないようにしましょう。 

データ蓄積

データ蓄積とは、取得したデータを分析しやすい形で格納するためのスキルです。

ビックデータにおけるデータベースは、データのやり取りの速さよりも、容量の多いデータを扱えるかといったところに、焦点が当たることが多いです。

そのため、一般的に使われているMySQLなどのデータベースとは、別のデータベースを設計する必要があります。

ビックデータにおけるデータ蓄積方式は以下の3つに分かれます。

データ蓄積方式

  • データレイク
  • データウェアハウス
  • データマート

データレイクとは、データの構造気にせずにデータをそのまま格納するデータベースのことです。

とりあえず将来使うだろうというデータを蓄積するために使います。

そのため、データレイクに蓄積されたデータは、実際の分析に向いていないことが多いです。

データウェアハウスとは、データを構造化して入れたデータベースのことです。

ここではデータが構造化されているため、分析をする際は簡単に分析を行うことができます。

データマートは、特定の目的に合わせたデータをデータウェアハウスから取り出して作ったデータベースのことです。

特定の目的に対して使われるため、個人の分析用途に合わせたデータベースを作ることができます。

今回のデータ蓄積で考慮しなければいけない部分は、データレイクとデータウェアハウスです。

この二つについて、以下の観点を考慮してシステムを作成します。

データ蓄積システム作成の観点

  • 分析処理の速さ
  • データサイズ
  • データ構造
  • セキュリティー

上記のような観点から、どういったフレームワークを使うのかを決めていきます。

一般的に、データウェアハウスやデータレイクを使う際に使う技術としては、以下のようなものが挙げられます。

システムを作るための技術

  • オンプレミス型
  • データウェアハウスアプライアンス
  • クラウド型データウェアハウス

オンプレミス型とは、自社でデータ蓄積のサービスを作る方法です。

それに対し、データウェアハウスアライアンスとは、他の企業がデータ蓄積のサービスをパッケージ化して提供してくれてるサービスを使って、データ蓄積をすると言う方法になります。

クラウド型データウェアハウスとは、クラウド上に作成されたデータウェアハウスにデータを蓄積していくといったような方法となります。

上記のような方法を検討し、どういったデータ蓄積の方向にしていくのかといったことを決めていくのが、データ蓄積で求められるスキルとなっています。

データ加工

データ加工は、蓄積したデータを分析しやすい形に加工するスキルのことです。

データをそのまま蓄積しただけでは、そこから何の知見も得ることができません。

そこで、データを分析しやすい形に加工するといったことが必要なってきます。

加工の仕方を間違えると、分析結果が実際のものと大きく乖離したものになってしまうため、論理の飛躍のない加工を行うことが重要となります。

データ加工の処理は、必要なデータを持ってくる処理と使用できるデータに変換する処理の二つがあります。

上記二つの具体的な処理内容には、以下のようなものがあります。

必要なデータを持ってくる処理

  • フィルタリング処理
  • ソート処理
  • 結合処理
  • サンプリング処理
  • 集計処理

使用できるデータに変換する処理

  • クレンジング処理
  • マッピング処理
  • 変換演算処理

一つ目の必要なデータ持ってくる処理に関しては、データを見やすいように順番を並べ替えたり、二つのデータを結合したり、データの入っていないものを除外したり、といった処理が一般的な処理です。

二つ目の使用できるデータに変換する処理としては、欠損しているデータ補間したり、形式がバラバラな情報を集計しやすくグルーピングしたり、文字や画像などの非構造データを分析可能な構造化データに変換したりといったことが挙げられます。

これらの処理を行うことによって、蓄積されたデータは分析しやすいデータに変換され、分析者が細かいことを気にしなくても簡単に分析できるようなデータ構造に変換することができます。

データ加工は情報をできるだけ落とさないようにしつつも、無駄なものを省くといった処理が必要となってきます。

したがって、細かく分析者と要件をすり合わせてながら進めていくことが大切です。

データ共有

データ共有とは、加工されたデータを関係者に対してわかりやすい形で共有するスキルです。

データを共有する先はサービスによって様々です。

部署内で共有するデータもあれば、部署外の人に共有するデータもあります。

また、社外のクライアントや場合によっては、ウェブ上に公開して不特定多数の人に見られるようなデータを生成すると言うことも考えられます。

データ共有先とそのニーズに合わせて共有方法を考えていくというのがこのデータ共有のスキルです。

提供の方法は主に三つです。

データ共有方法

  • 生データをそのまま共有する。
  • WebAPIやWebサービスを使って、Web上でデータを提供する。
  • BIツールを使って、データを可視化共有できるようにする。

一つ目の生データをそのまま共有する方法が1番わかりやすいです。

よくあるのがExcelを使ってデータを共有する方法になります。

CSVやXML、JSONなどといった形式でデータを渡すと言うことも考えられます。

こういった場合はファイル転送サービスや、データ容量が少ない場合はメール等でデータの受け渡しを行うことが多いです。

二つ目のWeb APIやWebサービスを使ってWeb上でデータが取得的にするという方法は、Web上にデータが取得できるようなAPIまたはサービスを作って、そこから一部の権限のある人もしくは不特定多数の人にデータを共有するといった方法になります。

具体的な例で言えば、株価を提供するサービスが分かりやすいです。

膨大な時系列データである株価を提供してるサイトを見たことがある人も多いかと思います。

こういったWebサービスは、Web上で特定の欲しいデータを検索し、それをWeb上で取得できるサービスであると言えるでしょう。

三つ目のBIツールを使って、データを可視化共有できるようにすると言う方法は、既存の可視化ツールを使ってデータ共有する方法です。

代表的なツールで言えばTableauなどが挙げられます。

Tableauはデータベースに格納されているデータを使って、多様な可視化ができるツールです。

データの可視化に関しては、Tableauを提供先が自由に動かしてデータを可視化したり、データを提供する側がわかりやすく可視化した後にTableauを渡すといった方法があります。

データ共有は、伝えたい相手に対してわかりやすいデータを提供するために必要なスキルです。

また権限を持っていない人に、データが漏洩しないように共有するというセキュリティ面も配慮する必要があります。

データ共有についてはあまり意識しないと言う人も多いかと思いますが、ここを意識することとでデータの活用の幅が広がり、より多様な目的にあったデータを提供できます

そのため、このデータ共有のスキルを向上させることもデータサイエンスとしては必要なことです。

プログラミング

プログラミングは、やりたいことをコンピューター上でコードを書くことで実現するスキルです。

いわゆる、プログラミング言語をどの程度自由に使えるかと言うことです。

様々なスキルを実現しようと思うと、実際にコードを理解している必要があります。

実際に、以下のようなプログラミング言語が必要になってきます。

分野プログラミング言語
データ処理python、SQL、C
機械学習python(拡張プログラミング)
データ蓄積scala、Java

プログラミング言語は知っていれば知っているほどできる事は増えていきます。

コードを書くような立場になくても、コードを読んで、どういう処理を行っているのかを理解できる程度には、コード理解しておく必要があると個人的には思っております。

そこで必要となってくるのか、実際にコードを書いたという経験です。

ですので、業務で扱うプログラミング言語がある場合には、実際に自分で書いて、小さなプロダクトでもいいので自分で実装してみても良いかと思います。

ITセキュリティ

ITセキュリティとは、セキュリティーの三要素を満たすシステムを作るスキルのことです。

セキュリティの三要素とは以下の三つになります。

セキュリティの三要素

  • 機密性
  • 可用性
  • 完全性

機密性とは、情報を特定の権限を持った人にだけアクセスできるようにすることです。

完全性とは、データを欠落させずかつ最新の状態にすることです。

可用性とは、いつでも情報にアクセスできる状態にすることです。

企業のデータは、ハッカーが狙う対象になりやすいです。

データを盗まれたり、改ざんされたり、使えなくされたりということが起きると、業務に多大な支障が生じてしまいます。

支障を避けるためにも、こういった攻撃に対応できるようなシステムを作るスキルが必要になります。

セキュリティ攻撃には、具体的には以下のような攻撃があります。

セキュリティ攻撃

  • DoS攻撃
  • SQLインジェクション
  • マルウェア
  • なりすまし

これらのセキュリティ攻撃を防ぐために、ファイヤーウォール使ってアクセスを制限したり、入力フォームに入力できる値を制限したり、またハッシュ化やマスキングなどを使ってデータの匿名化を行うといったような対策が必要となっています。

ハッカーのセキュリティ攻撃手段は日々多様化しており成長しているため、これさえ行っていけば絶対に安全という対策はありません。

日常的に、どういったセキュリティ攻撃があるのかを情報収集して、セキュリティ攻撃に対する対策を打っていくための知識のアップデートが必要になってきます。

まとめ

今回は、データサイエンティストのスキルの中でも、専門性が求められるデータエンジニアリング力について解説しました。

データエンジニアリング力は、データ分析基盤が整っていない会社で、データ分析を行っていきたいと思った時に、必ず必要となるスキルです。

大企業では、あまり気にしなくてもデータサイエンスを行うことができますが、中小企業やベンチャー企業でデータ分析を行いたいのであれば、あって損のないスキルになります。

しっかりと、データエンジニアリング力を身につけていきましょう。

その他のデータサイエンティストのスキルを知りたい方や、これからデータサイエンティストを目指す方には以下のような記事もおすすめです。

数学に囲まれた天使
【知っておきたい】データサイエンティストに必要なスキルとは?

未経験くんデータサイエンティストになりたいんだけどどういうスキルが必要なの? 初心者くんデータサイエンティストとして、スキル磨いていきたいんだけど、どんなスキルを磨けばいいか分からない こんな悩みの人 ...

続きを見る

【受講料が70%OFF】AI人材のスキルをつけるオススメのAI人材育成講座を現役エンジニアが解説

★この記事は5分で読み終えることができます。現役エンジニアである筆者がAI人材のスキルを身に付けたい人に向けた解説記事になります。政府の補助を受けて70%の受講料が返還される制度について解説しています ...

続きを見る

専門性の高いデータサイエンティストを目指していきましょう!

  • この記事を書いた人
くるみる

くるみる

ベンチャーにてweb制作から機械学習まで幅広い分野を担当、その後、都内IT大企業にてデータサイエンティストとして現在勤務中。 エンジニアリングの知識を持ったビジネスマンになりたく、企画も奮闘中。 TOEIC885点。統計学。機械学習。

-データサイエンス
-, ,

© 2021 はやぶさエンジニア Powered by AFFINGER5