派遣で働くエンジニアのスキルアップを応援するサイト

PRODUCED BY RECRUIT

【イベントレポート】エンジニアが生き残るためのテクノロジーの授業[第5回]「データベースの設計とデータ分析」

株式会社リクルートスタッフィングが運営するITSTAFFINGでは、弊社に派遣登録いただいている皆さまのスキル向上を支援するイベントを、定期的に開催しています。

2018年8月29日のイベントでは「エンジニアが生き残るためのテクノロジーの授業」の第5回として「データベースの設計とデータ分析」を開催。

データベースは、ソフトウェア開発エンジニアも、インフラエンジニアも知っておきたいテーマ。その仕組みや利用時のポイントを、増井さんならではの、分かりやすい語り口で解説してもらいました。

f:id:itstaffing:20181010103223j:plain

■今回のイベントのポイント

・データベースを使うメリット
・データベースならではの機能
・テーブルの正規化
・分析に必須の統計学
・データの匿名化と価値


【講 師】増井 敏克さん
▲【講 師】増井 敏克さん
増井技術士事務所代表。技術士(情報工学部門)。情報処理技術者試験にも多数合格。ビジネス数学検定1級。「ビジネス」×「数学」×「IT」を組み合わせ、コンピュータを「正しく」「効率よく」使うためのスキルアップ支援や、各種ソフトウェアの開発、データ分析などを行う。著書に『おうちで学べるセキュリティのきほん』『プログラマ脳を鍛える数学パズル』『エンジニアが生き残るためのテクノロジーの授業』『もっとプログラマ脳を鍛える数学パズル』(以上、翔泳社)、『シゴトに役立つデータ分析・統計のトリセツ』『プログラミング言語図鑑』(以上、ソシム)がある。

データベースを使うメリット

データをまとめて管理したいシーンは、身の回りにいくらでもあります。しかし、これをファイルで管理しようとすると、やがて限界に突き当たります。

f:id:itstaffing:20181010103232j:plain
▲ファイルで管理するとさまざまな問題が生じてしまう。これらを解決するのがデータベース

データベースは、データをまとめて管理し、大量のデータから必要なものを素早く取り出したり、大勢で使用する際にデータの整合性を確保したりしてくれるソフトウェアです。

データベースには、階層型データベース、オブジェクト指向データベース、関係データベース、NoSQLなど、さまざまなタイプがありますが、現在の主流は、関係データベースです。近年、データ分析の世界ではNoSQLが使われ始めていますが、それ以外の分野への普及は、まだまだこれから。そこで今回のイベントでは、主流である関係データベースについて学んでいきます。

関係データベースが管理するデータはExcelと同様の表形式(テーブル)で表せます。ただし、Excelとの違いも数多くあります。

f:id:itstaffing:20181010103140j:plain
▲関係データベースのデータはテーブルで表すことができる

一番の特徴は、SQLという言語を使って操作することができるという点。SQLは標準化されていますが、データベース製品ごとに拡張された方言もあるそうです。このSQLを使うことで、複数のテーブルを結合して必要なデータを取り出します。

SQLについて、増井さんは「この8つの文は、最低限覚えておきたいもの」と紹介してくださいました。

f:id:itstaffing:20181010103144j:plain
▲最低限覚えておきたいSQL

ここまで単に「データベース」と呼んできましたが、正しくは中身のデータの集まりが「データベース」であり、データベースを管理するシステムソフトウェア(DBMS:DataBase Management System)です。ただし、ここでは以降もDBMSをデータベースと呼びます。

f:id:itstaffing:20181010103147j:plain
▲データベースを管理するのがDBMS。でも、DBMSがデータベースと呼ばれていることが多い

データベースはとても便利なので、あらゆるデータを保管したくなりますが、データベースが得意とするのは構造化データ。画像や音声、ブログのデータなどの非構造化データ管理は不得意なので注意が必要です。

データベースならではの機能

データベースならではの機能として、重複の防止と検索性の向上という2つの要素があります。

重複の防止では、同時実行制御やトランザクション管理が挙げられます。トランザクションと呼ばれる一連の処理をまとめて処理することで、データの整合性を担保します。

f:id:itstaffing:20181010103151j:plain
▲「+1万円」の更新に失敗すると、「-1万円」の処理も取り消す。これで整合性が保たれる

システム障害発生時のデータ回復もデータベースの重要な役割です。運用中にシステムに障害が発生した場合も、ロールバックとロールフォワードを組み合わせてデータを回復します。

f:id:itstaffing:20181010103153j:plain
▲定期的にチェックポイントを設け、障害発生時には直前のチェックポイントまで戻り、障害発生時までに確定していた処理はロールフォワードし、確定していなかったものはロールバックして元に戻す

検索性についても、二分探索のように、二分木による索引を使った検索など高速な検索アルゴリズムが実装されているそうです。

f:id:itstaffing:20181010103155j:plain
▲データ件数が膨大になってもパフォーマンスが低下せず高速な検索が行える

テーブルの正規化

データベースを設計するときには、テーブルの正規化という点も考える必要があります。

f:id:itstaffing:20181010103158j:plain
▲テーブルの正規化では増井さんから演習課題も出された

たとえば取引先データのそれぞれに、送金先として銀行名を直接入力していたとします。ある時、その銀行が行名変更したとしたら、どうでしょう。すべての取引先のデータについて、銀行名を一つひとつ修正していかなければなりません。そこで銀行名は別テーブルにして管理しておきます。これがテーブルの正規化です。

f:id:itstaffing:20181010103202j:plain
▲銀行名が変わった場合も銀行名のテーブルの1か所を書き換えるだけで済む

これを踏まえて、会場では増井さんからテーブルの正規化の演習課題が出され、参加者は熱心に取り組みました。

このように、テーブルを分けても、必要なデータは外部結合を使えば取り出すことができます。

f:id:itstaffing:20181010103205j:plain
▲テーブルを分けても、SQL文を使って結合すれば必要なデータを取り出せる

分析に必須の統計学

次に入力したデータを基に分析するときの知識についてです。

増井さんは3つのグラフを示してくれました。一見するとA社、B社、C社ともに同じ様に売上を伸ばしているように見えますが、縦軸と横軸に注目すると、そうではないことがわかります。

f:id:itstaffing:20181010103209j:plain
▲B社は縦軸の刻みが細かく、C社は横軸が2年で1目盛りなので、いずれも成長率はA社より劣ることがわかる

このように、データを分析するには、データをどのように捉え、比較していくのかを知る必要があることがわかります。増井さんによれば、分析に必要な統計知識とは、合計や平均、最大値や中央値、標準偏差などの基礎的なもので十分なのだそうです。

高度な分析が必要なときはツールを使います。実はExcelでも、アドインの「分析ツール」を使うと、けっこうなところまではできるとのこと。プログラムを組むなら、関連ライブラリが充実しているR言語やPythonがお勧めとのことでした。

一方で、上記のグラフのトリックでもわかるように、分析結果を正しく表現することも大切です。ここで増井さんから出された課題が、データに対してどのような種類のグラフを使うかというもの。

f:id:itstaffing:20181010103214j:plain
▲どんな種類のグラフを使うと効果的か?正解は一つではないとのこと。

解答として、例1は棒グラフで「量をわかりやすく伝える」、例2は折れ線グラフで「変化をわかりやすく伝える」、例3は円グラフで「割合をわかりやすく伝える」という例が示されましたが、例1を円グラフ、例3を棒グラフでもかまわないそうです。

データの匿名化と価値

データ分析を行う場合に、最近、特に注意が必要なのが「データってそのまま使っていいのか?」ということ。特に、改正された個人情報保護法や、EUが推進するGDPRには注意を払い、それらに抵触しないようにデータを取り扱う必要があります。

f:id:itstaffing:20181010103218j:plain
▲データの活用には、法律に抵触しないように活用するための知識も求められる

そこで登場するのが「k-匿名化」という手法です。最近よく使われていますが個人情報を「文京区、男性、30代」というように、同じような属性を持つ人がk人いる状態まで匿名化することで、個人を特定できないようにするのだそうです。

f:id:itstaffing:20181010103220j:plain
文京区在住の30代の男性は大勢いるので誰のことか特定できない

今回のイベントは、特定の製品に依存しない、データベースの全体像を把握するのにとても役立ちました。印象的だったのはテーブルの正規化。関係データベースのテーブル設計について、大切なものを学べました。本シリーズのイベントも、次回で最終回。お楽しみに。