やってみよう分析！ 第3章：ExcelとMySQLの連携

#まえがき
今回も始まりました。[やってみよう分析！シリーズ](http://qiita.com/f81@github/items/78c0855408317e83aa66)。

第3章から __第2部 エクセルで学ぶ分析入門__に入り、Excelを使った集計・分析技術を紹介していきます。Excelには分析に便利な分析ツールやソルバーをアドインすることができます。またデータベースとしてMySQLと連携させ、100万行を超えるデータに対してpivot分析を実施することが可能です。

本章ではローカルのWindowsマシン上でExcel、MySQLを連携する方法を紹介します。読者対象者は主に 

* __エンジニア以外で大きめの容量を持つcsvのExcel pivot集計を実施したい方__ 

を想定しています。ビジネスサイドの人間がちょっとした容量の大きいcsv(だいたい100万行以上から1000万行前後)をpivot集計したい場合にExcelとMySQLの連携が役立ちます。MySQL単体でもクロス集計等が可能ですが、やはりExcel pivotの手軽さは捨てがたいものがあります。

本章の目次は以下のとおりです。

* 実行環境と注意点
* MySQLのインストール
* my.iniの編集
* ODBCのインストール
* 簡単にピボットしてみる

次章ではMySQLとExcelの連携でよく使うMySQLコマンド(select, create, csvのロード/エクスポート等)を紹介する予定です。

では、今回も早速始めましょう。

##実行環境と注意点
本章(および次章)の作業を実行するのに支障がないと思われる環境の目安は

* CPU：インテル Core i7-4600U プロセッサー (2.10GHz, 4MB, 1600MHz)
* メモリ搭載量：8.00GB
* ハードディスク容量：217GB
* Excel2013 32bit

です。著者は __Excel2013 64bit__をローカルのWindowsマシン(メモリ32GB)で使用しています。

####注意点
Officeの[こちらのページ](http://technet.microsoft.com/ja-jp/library/ee681792%28v=office.15%29.aspx)を見ると

`64 ビット版 Office はファイル サイズにハード制限がないためです。代わりに、ワークブックのサイズが使用可能メモリとシステム リソースに制限されます。一方、32 ビット版 Office は、Excel、ワークブック、および同じプロセスで実行するアドインが共有する仮想アドレス空間の 2 ギガバイト(GB) に制限されます。`

とあります。つまり、大きいファイルを格納して集計するには64bitのほうが良いということです。実際、著者が32bitでMySQLと連携してpivotを実行した時、途中で実行が停止したことがありました。著者は業務上、かなりの頻度で数百MBから数GB以上の容量を持つcsvを扱っているので64bit版に変更しています。

ただしこちらの[リンク先ページ](http://office.microsoft.com/ja-jp/excel-help/HA010369476.aspx)を見ると、 __64bit版は32bitで動くアプリケーションと互換性がない場合もあるらしいので、不安な方はとりあえず32bitのままが無難でしょう__。

###powerpivotについて
Excel2013のバージョンによってはpowerpivotと呼ばれるツールが選択できるようになっています。また、Excel2010もアドオンでpowerpivotを導入可能です。powerpivotを使うことでも大きい容量のcsvを取り込んでpivotを実行することが可能です。

Officeの[このページ](http://office.microsoft.com/ja-jp/excel-help/HA102837097.aspx)をみてみるとOffice Professional Plus エディション、Office 365 Professional Plus エディション、Excel 2013 の Standalone エディションで利用できるとあります。残念ながら著者が使っているOffice Home and Business 2013ではpowerpivotを使うことができませんでした。 



##MySQLのインストール
早速MySQLをローカルのWindowsマシンにインストールしてみましょう。ここでインストールするのは __MySQL 5.5.36__です。

[MySQLのページ](http://www-jp.mysql.com/)に行きます。ダウンロード(GA)のリンクをクリックして

![fig01.png](https://qiita-image-store.s3.amazonaws.com/0/40982/54e233d9-6eb7-ad61-f76d-9f575275c243.png)

飛び先ページのMySQL Community Editionのリンクをクリックします。

![fig02.png](https://qiita-image-store.s3.amazonaws.com/0/40982/6e2ecf1f-c3c5-826e-3b99-ee85b5d83784.png)

さらに飛び先ページでArchiveリンクをクリックします。

![fig03.png](https://qiita-image-store.s3.amazonaws.com/0/40982/05596a6e-880f-f6c8-5c8c-75895256e98c.png)

飛び先のページでMySQL Community Serverのリンクを押します。


![fig04.png](https://qiita-image-store.s3.amazonaws.com/0/40982/f0144ba4-55bb-4491-6f2c-bbfcc4e87eaf.png)

飛び先でselect versionを5.5.36、select platformはMicrosoft Windowsを選びます。

![fig05.png](https://qiita-image-store.s3.amazonaws.com/0/40982/b1b3cb5e-e875-c618-24e4-91c487de233a.png)

使用しているwindowsのbitに対応しているバージョンのInstallerファイルをダウンロードします。

ダウンロードしたダイルを実行します。基本は全てNextを押して進みます。setup typeはTypicalを選択しInstallボタンを押します。途中も全てNextを押して進みます。

![fig06.png](https://qiita-image-store.s3.amazonaws.com/0/40982/1d07fee0-2f2b-4f56-942f-197617c0f155.png)

セットアップが完了したらLaunch the MySQL Instance Configuration Wizardのチェック入れた状態でFinishボタンを押します。

![fig07.png](https://qiita-image-store.s3.amazonaws.com/0/40982/d608cfd5-1053-0874-92b2-1cd3eacbcb66.png)

Wizardが立ち上がったらまたNextを押して進めます。server instanceはStandard Configurationを選択しておきます。

![fig08.png](https://qiita-image-store.s3.amazonaws.com/0/40982/88334932-53e2-fa2d-924a-157f5b248cd1.png)

Nextボタンを押して次のページに遷移します。初めてインストールするときはwindows pathを加えるにチェックを入れてください。

![fig09.png](https://qiita-image-store.s3.amazonaws.com/0/40982/28842cff-5555-fdf4-9ad4-b13a93aba89b.png)

次に進み、rootのパスワードを設定します。confirmには再度同じパスワードを入力してください。MySQLにアクセスするときに必要なので忘れないようにします。

![fig10.png](https://qiita-image-store.s3.amazonaws.com/0/40982/eae95a8e-44a6-fc5b-bc9f-48ae1ec2f5a0.png)

次の画面に進んでExcuteボタンを押すと設定が実行されます。
MySQLが正しくインストールされたか確認してみましょう。コマンドプロンプトを起動( __プログラムとファイルの検索にcmdと入力__)します。

`mysql -uroot -p`

と入力、設定したパスワードを入力します。下図のようにMySQLが起動すれば成功です。

![fig11.png](https://qiita-image-store.s3.amazonaws.com/0/40982/d9a9aa78-58ed-3dce-54ee-9a4414146810.png)

もしmysqlコマンドがはじかれた場合、PATHが正しく設定されていない可能性があります。PATHの確認は

__コンピュータ→システムのプロパティ→システムの詳細設定→環境変数→システム環境変数のPATH__

を編集します。PATHの項目を編集ボタンで見た時、MySQLインストールフォルダ内のbinフォルダが指定されているか確認します。指定されていない場合にはMySQLインストールフォルダのbinフォルダアドレスを書き加えます。例えば、Cドライブにインストールした時は

`C:\Program Files\MySQL\MySQL Server 5.5\bin;`

のようになります(最後はセミコロンで区切ります)。


##my.iniの編集
次にmy.iniファイルで文字コードを編集します。本章では文字コードをsjisに設定する場合を紹介します(日本語が混ざったsjisのcsvをいじる場合、文字化け対処できるようになります)。sjisではなくutf8に設定することも可能です。ここでsjis設定を紹介するのは、Excelで文字コードがsjisのcsvを扱う可能性が高いと想定されるためです。

まずデフォルトのMySQLの文字コードを確認してみましょう。文字コードを確認するためにはMySQLに入って次のコマンドを入力します。
`show variables like 'char%';`
入力後に出力される画面を見てみると下図のような情報が表示されると思います。

![fig12.png](https://qiita-image-store.s3.amazonaws.com/0/40982/5fafe018-260d-8f5d-3a36-0601f1919934.png)

latin1とかutf8というのが文字コードを表しています。一旦MySQLを終了させるため`quit`と入力します。

文字コードを編集するため、my.iniという設定ファイルを編集します。MySQLをインストールしたフォルダのMySQL Server 5.5フォルダ直下にmy.iniファイルを管理者権限で開いたメモ帳で開きます( __メモ帳を管理者権限で開く方法はメモ帳アイコンの上で右クリックして管理者として実行__)。

my.iniの編集項目は[client], [mysql], [mysqld]です。それぞれの項目に(下図参考)
[client]　(追記)
default-character-set=sjis

[mysql]　(編集)
default-character-set=sjis

[mysqld]　(編集/追記)
character-set-server=sjis
skip-character-set-client-handshake

作業が完了したら保存してメモ帳を閉じます。

![fig13.png](https://qiita-image-store.s3.amazonaws.com/0/40982/e731c48d-6a0e-90bb-ce1c-ea2db712dc34.png)

WindowsでMySQLを再起動させるために __プログラムとファイルの検索__に

`services.msc`

と入力してサービスを起動させます。MySQLと表示されている箇所を見つけ選択してサービスを再起動します。

![fig14.png](https://qiita-image-store.s3.amazonaws.com/0/40982/179375f1-1bb6-cc8f-c03c-f69056226a9b.png)


再起動が完了したら、再度コマンドプロンプトからMySQLに入り、先ほど入力した文字コード確認用クエリ`show variables like 'char%';`を実行します。出力された結果を見ると先ほどlatin1だったところがsjisに変更されています。

![fig15.png](https://qiita-image-store.s3.amazonaws.com/0/40982/3ed56df1-98c9-f560-0eae-52333937d588.png)

これでsjisのcsvをインポートしても文字化けしないようになります。 __sjisをutf8に変更すればそのままutf8に文字コードを変更することが可能__です。

##ODBCのインストール
まずODBCドライバをMySQLの[サイト](http://dev.mysql.com/downloads/connector/odbc/)からダウンロードします。windows版の32bitか64bitのinstallerをダウンロードします(Downloadボタンををして遷移したページでNo thanks, just start my download.をクリックしてダウンロードできます)。

 __使用しているExcelが32bitである場合には、windowsが64bitでも32bitのダイルをダウンロードします。__

![fig16.png](https://qiita-image-store.s3.amazonaws.com/0/40982/9f04f034-a415-14ec-55cd-b3783671bcce.png)

ダウンロードしたファイルを実行します。インストール作業中の過程はNextを押して進めます。途中Setup typeを聞かれます。この時typicalを選択します。

![fig17.png](https://qiita-image-store.s3.amazonaws.com/0/40982/8a56c857-2081-5b50-ca2f-ab0a6baabd0d.png)

##ODBCの設定
プログラムとファイルの検索に`odbcad32.exe`と入力して実行します。ODBCデータソースアドミニストレータが立ち上がります。起動したら追加ボタンを押します。

![fig18.png](https://qiita-image-store.s3.amazonaws.com/0/40982/a51ce886-f40a-c27f-0942-227dde479d06.png)

追加ボタンを押すとデータソースの新規作成が現れます。ここで __MySQL ODBC 5.2 ANSI Driver__を選択します。完了ボタンを押すとMySQL Connector/ODBC Data Source Configuration が現れます。

![fig20.png](https://qiita-image-store.s3.amazonaws.com/0/40982/0054349c-4373-5493-5c9b-20f10e0f6f85.png)

Data Source NameとDescriptionはとりあえずMySQLとしておきます。TCP/IP Serverは __localhost__に設定。Portは __3306__のままにしておきます。UserとPassworはMySQLをインストール時のものを入力します。ここではUserをrootで設定していました。最後にTestを押して __Connection successful__と出れば設定完了です。


##簡単にピボットしてみる
それではExcelからMySQLに接続してみましょう。Excelを起動し、 

__データタブから外部データの取り込み→その他のデータソース取り込み→データ接続ウィザード__ 

を選択します。ウィザードが起動したらODBC DSNを選択して次を押します。

![fig21.png](https://qiita-image-store.s3.amazonaws.com/0/40982/d9d49335-88d2-4843-4738-e27452dd5a8f.png)

MySQL Connector/ODBC Data Source Configurationで設定した __MySQL__が現れているのでそれを選択します。

![fig22.png](https://qiita-image-store.s3.amazonaws.com/0/40982/95fb6fdc-0aec-dd8f-7ccc-858d7f96f87f.png)

接続に成功すると接続先のデータベース一覧が表示されます。使いたいデータベースを選択します。ここでは例としてもともとMySQLに備わっているデータベースの一つ`performance_schema`を使うことにします。データベースを選択するとその中のテーブル一覧が表示されます。ここでは`setup_consumers`を選択します。

![fig24.png](https://qiita-image-store.s3.amazonaws.com/0/40982/70f43239-4d5e-2668-3eaa-8f79a6c2b1fd.png)

次へボタン→完了ボタンを押します。データのインポートでピボットテーブルレポートを選択します。

![fig25.png](https://qiita-image-store.s3.amazonaws.com/0/40982/470a0940-01d6-b94a-133c-4a053083f4fa.png)

ピボットテーブルが起動して下記のようにテーブル集計を実行することができるはずです。
![fig26.png](https://qiita-image-store.s3.amazonaws.com/0/40982/faa5bd9f-587f-5e1c-445b-700b07e2f327.png)

これでExcelとMySQLを連携させてpivotさせる準備が完了しました。

##まとめ
本章ではExcelとMySQLの連携方法の基本を紹介してきました。

次回は外部csvをMySQLにインポートする方法などMySQLの基本操作を紹介します。MySQLの基本操作とExcelのpivotを組み合わせることで幅広い集計作業がこなせるようになります。またMySQL単体での知識も集計作業にとても役立ちます。

今回もコーディング始めてなくてすみません(笑)

===========================================
##こちらもよろしくおねがいいたします。

* [目次](http://qiita.com/f81@github/items/78c0855408317e83aa66)

###入門編###
####第1部 イントロダクション####

* [第1章：分析技術の活用～ビジネス視点から～](http://qiita.com/msano/items/2f39517b4cd65e14003e)
* [第2章：分析手法を眺めてみよう！](http://qiita.com/msano/items/bfdb3c04d59992c7ebcb)