2016年10月16日日曜日

TensorFlow for Rを使ってみる(2)

前回はこちら

RStudioからTensorflowを使う

  • 前回、PythonからTensorflowを使う環境ができた。
  • 今度はRStudioからTensorflowを使う。
  • RStudioから以下のコードでtensorflow for Rパッケージをインストール
    install.packages("devtools")  ## install_githubを使うため
    library(devtools)
        install_github("rstudio/tensorflow") ## tensorflowをインストール
          library(tensorflow)

          • パッケージのインストールが終わったらこちらのコマンドできちんと利用できているかを確認

          sess = tf$Session()

          結果

          > sess = tf$Session()
           エラー:  関数でないものを適用しようとしました 
          うお、エラーが出てしまいました。
          今のところここまでで止まっていて、まだRStudioからTensorflowを使えていません…。

          2016年10月5日水曜日

          TensorFlow for R を使ってみる (1)

          ※メモなので、随時内容追加

          更新情報

          • 2016/10/10:「なんか動いた」以降更新
          • 2016/10/05:初版公開

          TensorFlow for Rとは

          • TensorFlow:Googleが開発した機械学習/ディープラーニング/多層ニューラルネットワークの天ライブラリ
          • このライブラリをR/RStudioから使えるようにしたパッケージ

          モチベーション

          • ディープラーニングを試してみたい。ただそれだけ。
          • Rしか使えないし、Pythonは使ったことない。

          テスト環境

          • MacOSX El Capitan(10.11.2)
          • RStudio 0.99.903
            • > sessionInfo()
            • R version 3.3.1 (2016-06-21)
            • Platform: x86_64-apple-darwin13.4.0 (64-bit)
            • Running under: OS X 10.11.2 (El Capitan)

            • locale:
            • [1] ja_JP.UTF-8/ja_JP.UTF-8/ja_JP.UTF-8/C/ja_JP.UTF-8/ja_JP.UTF-8

            • attached base packages:
            • [1] stats     graphics  grDevices utils     datasets  methods   base     

            • other attached packages:
            • [1] rmarkdown_1.0 stringi_1.1.2 knitr_1.14   

            • loaded via a namespace (and not attached):
            • [1] magrittr_1.5    htmltools_0.3.5 tools_3.3.1     Rcpp_0.12.7    
            • [5] stringr_1.1.0   digest_0.6.10   evaluate_0.9   

          初期設定

          • まずはTensorFlow for R のドキュメントを読む
            • TensorFlowのインストール
            • # Mac OS X
              $ sudo easy_install pip
              $ sudo easy_install --upgrade six
              • # Mac OS X, CPU only, Python 2.7:
                $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any.whl
                
                # Mac OS X, GPU enabled, Python 2.7:
                $ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/mac/gpu/tensorflow-0.11.0rc0-py2-none-any.whl
            • 期待していたとおり、エラー
            • $ sudo pip install -- upgrade $TF_BINARY_URL
              The directory '/Users/user/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.The directory '/Users/user/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.Collecting upgrate  Could not find a version that satisfies the requirement upgrate (from versions: )No matching distribution found for upgrate

            • なんか動いた。大量のエラーログ…
              • $ sudo pip install --upgrade $TF_BINARY_URL
                The directory '/Users/user/Library/Caches/pip/http' or its parent directory is not owned by the current user and the cache has been disabled. Please check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
                The directory '/Users/user/Library/Caches/pip' or its parent directory is not owned by the current user and caching wheels has been disabled. check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
                Collecting tensorflow==0.11.0rc0 from https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any.whl
                  Downloading https://storage.googleapis.com/tensorflow/mac/cpu/tensorflow-0.11.0rc0-py2-none-any.whl (35.5MB)
                    100% |████████████████████████████████| 35.5MB 17kB/s 
                Collecting mock>=2.0.0 (from tensorflow==0.11.0rc0)
                  Downloading mock-2.0.0-py2.py3-none-any.whl (56kB)
                    100% |████████████████████████████████| 61kB 773kB/s 
                Collecting protobuf==3.0.0 (from tensorflow==0.11.0rc0)
                  Downloading protobuf-3.0.0-py2.py3-none-any.whl (342kB)
                    100% |████████████████████████████████| 348kB 488kB/s 
                Collecting numpy>=1.11.0 (from tensorflow==0.11.0rc0)
                  Downloading numpy-1.11.2-cp27-cp27m-macosx_10_6_intel.macosx_10_9_intel.macosx_10_9_x86_64.macosx_10_10_intel.macosx_10_10_x86_64.whl (3.9MB)
                    100% |████████████████████████████████| 3.9MB 114kB/s 
                Collecting wheel (from tensorflow==0.11.0rc0)
                  Downloading wheel-0.29.0-py2.py3-none-any.whl (66kB)
                    100% |████████████████████████████████| 71kB 2.8MB/s 
                Requirement already up-to-date: six>=1.10.0 in /Library/Python/2.7/site-packages/six-1.10.0-py2.7.egg (from tensorflow==0.11.0rc0)
                Collecting funcsigs>=1; python_version < "3.3" (from mock>=2.0.0->tensorflow==0.11.0rc0)
                  Downloading funcsigs-1.0.2-py2.py3-none-any.whl
                Collecting pbr>=0.11 (from mock>=2.0.0->tensorflow==0.11.0rc0)
                  Downloading pbr-1.10.0-py2.py3-none-any.whl (96kB)
                    100% |████████████████████████████████| 102kB 2.7MB/s 
                Collecting setuptools (from protobuf==3.0.0->tensorflow==0.11.0rc0)
                  Downloading setuptools-28.3.0-py2.py3-none-any.whl (467kB)
                    100% |████████████████████████████████| 471kB 613kB/s 
                Installing collected packages: funcsigs, pbr, mock, setuptools, protobuf, numpy, wheel, tensorflow
                  Found existing installation: setuptools 1.1.6
                    Uninstalling setuptools-1.1.6:
                Exception:
                Traceback (most recent call last):
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/basecommand.py", line 215, in main
                    status = self.run(options, args)
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/commands/install.py", line 317, in run
                    prefix=options.prefix_path,
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_set.py", line 736, in install
                    requirement.uninstall(auto_confirm=True)
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_install.py", line 742, in uninstall
                    paths_to_remove.remove(auto_confirm)
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/req/req_uninstall.py", line 115, in remove
                    renames(path, new_path)
                  File "/Library/Python/2.7/site-packages/pip-8.1.2-py2.7.egg/pip/utils/__init__.py", line 267, in renames
                    shutil.move(old, new)
                  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 299, in move
                    copytree(src, real_dst, symlinks=True)
                  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/shutil.py", line 208, in copytree
                    raise Error, errors
                Error: [('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py', "[Errno 1] Operation not permitted: '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/__init__.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py', "[Errno 1] Operation not permitted: '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.py'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc', "[Errno 1] Operation not permitted: '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib/markers.pyc'"), ('/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib', "[Errno 1] Operation not permitted: '/tmp/pip-aojXT0-uninstall/System/Library/Frameworks/Python.framework/Versions/2.7/Extras/lib/python/_markerlib'")]

          インストールできない問題を解消

          • どうもパッケージのところでコケてる模様
            • 調べてみたところ、Yosemiteまでだと問題なく公式の言うとおりにしていけば導入できるとのこと。
              原因はEl Capitanから導入されたシステム整合性保護(System Integrity Protection (SIP)やrootlessなど)
              と呼ばれる新しいセキュリティ技術のためだそうです。
          • /usr/local のセキュリティ設定(El Capitan)悪さをしていた
            • http://qiita.com/aoioooii/items/c14922eede6a83a750da
            • これで解消
          • Brew経由でpythonを最新版に。(python2.7.10 -> python2.7.12)
          • 以下のコマンドでインストール完了
          • $sudo -H pip install tensorflow  

          Python環境での確認

          python
          ...
          >>> import tensorflow as tf
          >>> hello = tf.constant('Hello, TensorFlow!')
          >>> sess = tf.Session()
          >>> print(sess.run(hello))
          Hello, TensorFlow!
          >>> a = tf.constant(10)
          >>> b = tf.constant(32)
          >>> print(sess.run(a + b))
          42
          >>>

          • python環境でコマンドを叩くと、上記結果に。
          • 「Hellow, TensorFlow!」、「42」が結果として表示されれば、OK
          • 次はやっと本命のR環境からTensorFlowを使ってみる。

          余談

          ドキュメントリソース

          2016年6月17日金曜日

          BloggerにMarkdownで投稿する

          BloggerにMarkdownで投稿できるのか?

          RMarkdownから.mdファイルを作成する機会があったので試してみた。
          せっかくなのでBloggerの記事を作成することができないか探してみたところ、以下のQiita記事を探せた。
          markdown+StackEdit+Bloggerで快適HP作成

          Rのチャンクコードも以下のように表示できる。
          RMarkdown→.mdファイル作成→MarkdownをStackEditで作成という流れで行けそう。

          library(dplyr)
          iris_1 <- iris %>% filter(Species == 'setosa') %>% nrow()

          チャンクコードが上手く反映されていませんねぇ…

          library(dplyr)
          iris_1 <- iris %>% filter(Species == 'setosa') %>% nrow()
          

          こうかな?
          うまくいかない…
          プレビューだとうまく囲われているのに。

          なぞだ。

          2016年1月16日土曜日

          読書メモ:SQL実践入門 技術評論社

          普段あまり技術的な本は読まないのですが、これは読んでおいてよかった!という一冊。

          普段データを扱う(DBからデータを抜き出し、加工、意味合いを導き出す)仕事をしているので、SQLを触らない日はありません。どうしても効率的にデータを抜きたい、後で見返しても可読性が高いクエリを書きたい、実行計画を解読できるようになりたい、という要望に見事に答えてくれる1冊でした。

          有用(だと思った)Tips

          • ウィンドウ関数
            • 毎日クエリを書いて、データ抽出→Excelにコピペ→関数を適応したり、グルーピングをしてランキングを作ったり…。こういった作業が多いかと思うのですが、それをDB側でやってくれる機能。
            • partition by と order by 句の組み合わせでグルーピング処理できる。
            • 例えば、地域ごとの売上げランキングを作りたいとか。
          • CASE式
            • 条件分岐をさせたいですよね。地域Aは〜〜処理、地域Bは〜〜処理とか。
            • ExcelのIF文でも対応可能ですが、データが膨大、かつ複数条件とかで面倒な時に使えます。
            • WHERE句で条件を書き複数SQLをUNIONするのは初心者。
          • 結合の種類
            • 自分でコントロールできる部分は少ないとはいえ、パフォーマンス・チューニングをしなければいけない場合に知っておくと便利な知識。
            • Nested Loop・Hash Join・Sort Marge
          • テーブルアクセスをできるだけ減らせ!
            • 本書に出てくる中で最も肝心な言葉。
            • サブクエリで同じテーブルにアクセスしにいくのはできるだけ抑える。
            • パフォーマンスを出したい!と思った時にいかに「1回のアクセスで必要なデータを取りにいけるか?」に知恵を絞る。
          • サブクエリは積極的に使うな
            • ついつい使いがちなサブクエリ。だって便利だし、頭の中のロジックがそのままかけるのでついつい使ってしまう。
            • しかし、上記のように、同じテーブルに何回もアクセスしにいくのはDB側にとっては、「またおんなじテーブルをスキャンかよ…」ということ。
            • できるだけ使わないようにしたほうが早い。

          トレードオフ

          本書でよく言及されている言葉。何事もにメリット・デメリットがあるわけで。
          例えば「ぐるぐる系処理」(ループをさせる)と「ガツン系処理」をさせる際にどちらがパフォーマンスがよいか?など。

          何事にも絶対的な解は無くて、状況によって最適なソリューションを見つけていくことが肝要。ソリューションの種類とそのメリデメを見極めるためにソリューションを熟知しておくことが重要ですね。

          DBを使う人はぜひ

          バックエンドエンジニアや、BI/DWHを扱うエンジニア、分析のためにSQLを使う必要がある人など、DBが仕事にとって重要な位置を占める人は一読しておいて損は無い一冊です。


          2016年1月4日月曜日

          【読書メモ】1億人のための統計解析:西内啓 日経BP社

          2週に一度図書館にいって本を数冊借りている。
          せっかくなので、読書メモを残しておく。

          「はじめてデータ分析をする人」には最適な1冊

          初めてデータ分析をしてみたい、興味がある人に向けて
          • アウトカム(目的変数)
          • 解析単位(顧客、クライアントなどなど)
          • 説明変数
          を適切に設定することを前半で懇々と説明。

          単回帰から重回帰・時系列を説明。

          重回帰は変数を手元にあるデータからいかに作り出せるかが大事。どんな考え方をすれば既存データから作成できるのかが参考になる。

          単純なアウトカムの設定だけでなく、説明変数に実数値だけでなく割合を使ったり、解析の結果、実現できるアクションが取れるか?などなどをわかりやすく説明してあり、実務向けの内容。

          解析結果を実現できるアクションにできるか?の点について言及。
          実務者にとってはとても大事。


          Excelで説明してあるからすぐに実践できる。ただ、説明変数が分析ツールでは変数が15個までしか設定できないから、多数の説明変数がある場合はめっちゃ面倒。

          実業務で使えそうな点

          時系列データをダミー変数を作って重回帰を使う点。こういうやり方もあるのかと新鮮だった。
          (でもきっとARIMAとか使っちゃっうんだろうな)

          「報告」の章が他の統計解析書籍には載っていない点。サンプルデータから解析、解釈をして上司やクライントにどのように報告するかまでのサンプルが載っている。
          これはいい。

          Power Pivot !

          Microsoft SQL Serverの機能を利用したデータマイニング機能を紹介。Excelだとどうしても足りないデータマイニング機能をSQL ServerとPower Pivotを使えば利用可能にできる。

          PowerPivot for Excel
          PowerPivot:Excelで強力なデータ分析とデータモデリング

          重回帰・クラスタリング・時系列などを利用可能。

          まとめ

          • 「データ分析を始めてみたい」、「データ分析ってどうやるの?」っていう人には参考になる。
          • ある程度データを使って解析・分析をしている人(中級者・上級者)にとっては参考になりそうな情報はほとんど無さそう。
          • Excelで説明をしてあるので、手軽にできそうな反面、関数やピボットなど利用しないていといけないので、結構手間。また、説明変数を多数作りたい場合には関数の適応や、ピボットテーブルの作成等手間かかる。(素直にRを使いましょう。)
          • Power Pivot 慣れ親しんだインターフェイスでデータマイニング機能を利用できるのはイイね。