RELEASE
2014.08.29

Google Glassでポモドーロテクニック (3/3)


こんにちは、ATLでウェアラブルデバイスの研究をしている吉村です。今回は前回に引き続き、Androidで組み立てたプロトタイプをGoogle Glass実機へポーティングします。


エントリポイントの作成

これまでActivityを使用していたエントリポイントをServiceへ移動します。

Activityを削除し、Serviceから直接LiveCardの挿入/削除を行なうようにします。


src/main/java/com/gmail/altakey/myapplication/TimerService.java:


今度はLiveCardで表示するようになるのでActivityへBroadcastを飛ばしていたところをTimerCardの直接操作へ書き換えます。


最後にTimerServiceをAndroidManifest.xmlへ登録します。

src/main/AndroidManifest.xml:


タイムラインへの表示

先程さっさと使ってしまいましたがTimerViewで表示していたところをLiveCard化し、TimerCardとして切り出しておきましょう。

src/main/java/com/gmail/altakey/myapplication/TimerCard.java:


どうですか?TimerCardの実装とTimerViewの実装、似ていませんか?

TimerViewは削除します。


メニューの作成

Google Glassの場合、メニューを呼び出した際に下のActivityの動作を停止する必要があります。このようなことをするために、透明Activityを間に一枚入れてそこからオプションメニューを呼び出してやります。オプションメニューで良いんです。あとはGlassが標準の形で出してくれます。

src/main/java/com/gmail/altakey/myapplication/TimerMenuActivity.java:


こちらの定義もAndroidManifest.xmlへ加えておきましょう。

src/main/AndroidManifest.xml:


スタイルの定義はこんな感じに。

src/main/res/values/styles.xml:


ボイスコマンドの指定

あとはVoiceTrigger系のものをTimerServiceでハンドリングします。ここでは「START A WORKOUT」を使用します。

src/main/java/com/gmail/altakey/myapplication/TimerService.java:


voice.xmlにも指定します。

src/main/res/xml/voice.xml:


AndroidManifest.xmlにも指定します。

src/main/AndroidManifest.xml:


音の調整

GlassのMUSICチャンネルはヘッドフォン端子に向いているためそのままでは音が出ません。これでは困るので、NOTIFICATIONチャンネル(骨伝導トランスデューサ)を使うようにします。人に聞こえにくいという特徴を持つ骨伝導ですが、周波数が高いとかなり音漏れを起こします。クリック音が漏れると非常に耳障りなのでこちらの再生レートも落としてしまいましょう。カチッ、ではなくゴリッ、とした音になりますが格段に音漏れを低減することができます。


src/main/java/com/gmail/altakey/myapplication/TimerService.java:


完成!

ここまで来たらビルドして実機でテストしてみましょう。「Ok glass, start a workout」と言うとGlasswareが立ち上がりカウントダウンを始めたでしょうか。タップするとカウントダウンが一時停止してメニューが開いたでしょうか。そこからExitで終了できるでしょうか。


まとめ

以上、長かったですが簡単なポモドーロタイマーを作成してみました。環境構築から普通のAndroidでプロトタイピングして最後に一気にポーティングという進め方をして来ましたが、この方法はGlassが手元にない場合や触れる時間が少ない場合などにきっと役に立つのではないかと思います。ではまた。

TAGS: ,

RELEASE
2014.08.28

Sixpackとfluentdを使ったA/Bテストの効果測定


こんにちは.リクルートテクノロジーズ APソリューショングループの相野谷(@ainoya)です.

このエントリでは,A/Bテストの効果測定を素早くモニタリングできるSixpackという A/Bテスティングフレームワーク,これとfluentdを組み合わせ,収集したコンバージョンログを元に Sixpackでの効果測定を行う例について紹介いたします.

皆さんはどうやってA/Bテストモニタリングを実施しているでしょうか?一般的に行われているのは, アクセス解析系のSaaSが提供するjsを,フロントエンドに埋め込んでテストパターンの出し分けをする方式かと思います. 今回紹介するSixpackは,集計サーバ・クライアントライブラリ一式を自前で用意する手間があるものの, その分拡張の自由がききます.これを活かすことで,

  • 自分のサービスにサードパーティのjsを埋め込みたくない
  • クライアントサイドjs以外のところでテストパターン制御をしたい
  • 既に内製のA/Bテストモジュールがあるが,効果測定の作業が煩雑なので自動化したい

というようなケースにおいてSixpackはぴったりはまって価値を発揮してくれるツールかなと思っています.

Sixpackを使ったA/Bテストの効果測定

 Sixpack はseatgeek社が開発しているA/Bテスティングフレームワークで, A/Bテストの実施と効果測定を行うことができます.名前の由来は多分A/B Testの“ab”からだと思いますが, こういったソフトウェアに対する向こうのネーミングセンスには感心させられます.

 Sixpack自体はpythonで書かれており,以下の2つのサーバで構成されています.Sixpack APIサーバ 経由で蓄積されたA/Bテストの集計結果を,Webダッシュボードから即時確認できるのがいいところです.

  • A/Bテストの実施・結果情報をクライアントと送受信するためのAPIサーバ
  • 効果測定を可視化するダッシュボード表示サーバ

Sixpack APIサーバ

クライアントライブラリは多言語で提供されているものが利用可能ですが, 自前で実装したい場合はクライアント仕様定義が参考になります.といっても, API自体シンプルなので簡単に実装可能です.

APIのエンドポイントは以下の2種類しかなく,クライアントIDなどのパラメータを付与して GETリクエストで通信を行います.より詳細な使い方はREADMEをご覧ください.

  • participate : A/Bテストの振り分けを情報取得する(登録)
  • convert: A/Bテストのコンバージョンを登録する

 SixpackはデータストアとしてRedisを利用しており,これにA/Bテストの測定情報を保管します.

 高負荷な環境で使用する場合は,APIサーバを複数構成にするほか,Redis Sentinelの利用を検討して みてもよいかもしれません.Sentinelの使用オプションはSixpackのconfig として提供されています.(動作未確認)

Sixpack Webダッシュボード

 Sixpack API経由で保管されたA/Bテストの測定情報のサマリは,APIサーバとは別に用意された Webアプリのダッシュボードから閲覧できます. 表示画面のサンプルを下に示します.サマリではA/Bテストの振り分け発行状況の時系列データや, コンバージョン率を閲覧可能なほか,G検定 による尤度測定の結果も同時に確認することができます.

sixpack-web-demo

fluentdのログをSixpackに流してA/Bテスト効果測定を行う

 ここまでSixpackの簡単な概要説明をしてきましたが,もし自分のところで使ってみたくなったとしても,

  • 既に導入しているA/Bテストモジュールがあり,競合する
  • Webサービスのリクエストを捌いている最中,アプリケーション内部で余計なAPIとやりとりする不安

などの諸々の心配事があることかと思います.そこで代案として,fluentdに処理を任せて,ログから SixpackへA/Bテスト情報を蓄積するのはいかがでしょう.ログデータをSixpackのAPIに投入する Outputプラグインfluent-plugin-sixpackを書いてみたので, これを使って実際にログ出力されたA/Bテスト情報をSixpackで集計する方法を紹介します.

fluent-plugin-sixpackの設定

 このプラグインは単にログをSixpack APIの要求するパラメータに合わせるだけのものなので, 利用方法といっても別段難しいことはないです.td-agent.confへの最低限の記述としては sixpackのAPIサーバのURLさえ記述しておけば使えるようにしています.

 プラグインが期待するログ構造はSixpack APIの仕様にそのまま合わせる形で,2パターンあります.

 利用の際はfluent-plugin-record-modifierfluent-plugin-parserを使ってログ構造を上記仕様に合わせこんでいく 必要があります.プラグイン自体にもキー名を変更できる程度のconfigを用意しているので, READMEで使えるオプションを確認してみてください.

Sixpack/fluentdの組み合わせを試す

 fluentdとSixpackを使ったA/Bテスト効果測定の仕組みを簡単に試せるよう,これらをセットにした Dockerfileを用意しました.ビルド済みイメージをDockerHubに 置いているので,下記使用例をご参考にぜひ使ってみていただければと思います.

Dockerコンテナの起動
ログの投入
SixpackのWebダッシュボード画面でデータ更新を確認

まとめ

 A/BテスティングフレームワークSixpackとfluentdを使って,ログデータからA/Bテストの効果測定を行う 方法について紹介しました.クライアントライブラリから直接SixpackのAPIを叩くのをやめ,ログをfluentd に流してAPIリクエストを代理させることで,既存のWebアプリケーションの変更を最低限にしつつA/Bテスト 効果測定の仕組みを導入できます.この先の応用としては,ログデータさえあればA/Bテストの効果測定を行える という利点を活かして,

  • WebUIの枠を超えたAPIのA/Bテスト実施
  • さらにWebアプリの枠を超えたミドルウェア・インフラのA/Bテスト実施

など,ありとあらゆるインタフェースをA/Bテストできるようになったら面白いなぁ,と考えています.

TAGS: ,

RELEASE
2014.08.27

Google Glassでポモドーロテクニック (2/3)


こんにちは、ATLでウェアラブルデバイスの研究をしている吉村です。前回に引き続いて、今度はタイマーをAndroidでプロトタイピングします。


アーキテクチャ


ポモドーロタイマーということで、ユーザがActivityから離れている時にもずっと時間を追跡しつづけ、音を出しつづけることになります。

ここではセオリー通りにメイン画面はActivity+カスタムView、タイミング追跡・発音はServiceで、と分解することにします。


メイン画面の作成

Activityにビュー寄りのロジックが集中することを避けるために、カスタムビューを別途作成しましょう。


タイマービューの作成

TimerViewとして作成して行きます。

まずレイアウトですが中心寄りに、TextViewを使ってシンプルに組みます。fontFamilyプロパティを使用して、Robotoを明示的に指定していることに注意してください。


res/layout/view_timer.xml:


最低限のロジックを書いておきます。


src/main/java/com/gmail/altakey/myapplication/TimerView.java:


src/main/java/com/gmail/altakey/myapplication/TimerReader.java:


これをプレビューすると、以下のようになるはずです。


image-1


Activityの作成

ここまでできたら、今度はこれをActivityに組み込みます。レイアウトはただはめ込むだけです。

res/layout/activity_my.xml:


すると、最終的にこんな形でレンダリングされます。簡単ですね。


image-2


次にロジックを書いて行きます。ここでやることは 1) 起動と同時にサービスを起動し、2) タップされた時にメニューを表示、3) Resetでタイマーをリセットし、4) Exitで終了する、の4点です。


#1: サービス制御


Activityが起動されると通常通りonCreateが呼ばれるので、ここでサービスを起動します。サービスからはLocalBroadcastReceiverを使用してタイマー表示更新リクエストを受けとります。


src/main/java/com/gmail/altakey/myapplication/MainActivity.java:


#2: メニュー表示

タップされた場合にメニューを表示します。今のところこれはいわゆる普通のOptions Menuで良いです。GlassのMenuと比べると見かけ的には随分と違いますが、ここで作り込んでもしかたがない(理由は次回分かります!)のでひとまず目を瞑りましょう。



#3: タイマーリセット

Options MenuでResetが叩かれた場合の処理です。サービスをリセットします。



#4: 終了

Options MenuでExitが叩かれた場合の処理です。サービスを止めアプリを終了します。



ここまで来ればあとはタイマーの処理を担っているサービスだけです。もう一息ですね。


タイマーサービスの作成


変哲もなく、普通に書きます。以下のような形に。


src/main/java/com/gmail/altakey/myapplication/TimerService.java:


あとは、AndroidManifest.xmlでの宣言も忘れずに行なっておきましょう。


リソースの追加

res/rawに2つのOgg Vorbisファイルを追加します。


ring.ogg : クリック音

tick.ogg : ベル音


プロトタイプ完成!


ビルドして実行してみましょう。起動と同時にカウントダウンが始まりましたか?また、タップするとメニューが出現してResetで25分に戻り、Exitでカウントダウンも止まりましたか?

また、Eclipseで開発したことがある方はもう既に気づいているかもしれませんが、Android Studioではエラーなどを事前に下線などで知ることができながら、残っていてもとりあえずビルド・実行をトライさせることができます。

では、次回はこれをいよいよGlass実機へポートしてみましょう。

TAGS: ,

RELEASE
2014.08.26

Google Glassでポモドーロテクニック (1/3)


こんにちは、ATLでウェアラブルデバイスの研究をしている吉村です。このところAndroid系ウェアラブルデバイスの中でもGoogle Glassに触れる機会があり、Glasswareを少し作ってみたのでそのネタを書くことにします。


Google Glass

Google Glassはご存知の方も多いと思いますがGoogle I/O 2012で発表があったグラス型ARデバイスです。透明なディスプレイ、ジャイロ、タッチパッド、カメラ、接近センサ、マイク、骨伝導型トランスデューサ、Wi-Fi、Bluetooth Smartを備えています。CPU・GPU・メモリはNexus Sと同等で、Android 4.4で駆動されています。Androidとはいえ通常の携帯端末のようなタッチ主体のUXではなく、ボイスコマンドをベースにアプリ (Glassware) を起動し、タイムラインにイベント (Card) を挿入して行くことでユーザにフィードバックを提供していくという形の、「今この瞬間」の情報支援に重点を置いたUXを採用しています。


ポモドーロタイマー

これから3回に分けて作っていくGlasswareはポモドーロタイマーと呼ばれるものです。25分間集中力を最大限に発揮した後5分休憩を挟む、といったサイクルを繰り返してタスクを消化していくポモドーロテクニックという集中力管理方法があるのですが、これに使うタイマーです。まあただのタイマーなのですが、1) 邪魔にならないUI、2) 集中力を維持するために集中期間中は時計の音を出しつづける、3) 時間が気になったときにはすぐに見られる、といった特徴が良く求められるところなのでなかなか大変だったりします。


ワークフロー

Glasswareを作成するにあたって、ここでは2つのフェーズを踏むことにしたいと思います。


フェーズ 1: プロトタイピング

アイディアを形にし、実現可能性や有用性などを評価するフェーズです。この時点で実機があっても良いのですが、なによりも手軽にササッと作ることを優先します。


フェーズ 2: ポーティング

プロトタイプを実機に落としこみ、UI/UXの最適化などを行なうフェーズです。


開発環境

Glasswareの開発にはMirror APIGDK (Glass Development Kit)との2つの方法があると言われていますが、一体どういうものなのでしょうか?

Mirror APIは外部のウェブサービスなどからGoogle GlassへCardを挿入していくことができる、というものでGoogle NowのようなUXを提供することができるAPI群です。一方、GDKはAndroid SDKに載せて使う開発キットで、Android StudioなどでGoogle Glassで直接動作するGlasswareを開発できるようにするものです。

なので、ここではGDKを使用して開発することにしましょう。


Android Studio

これまでAndroid開発といえばほぼEclipseしか選択肢がない状況だったのですが、この開発環境は他のモバイル環境と比べると若干見劣りしていたのも事実です。しかしGoogle I/O 2013でAndroid Studioという新しい開発環境が発表されてから変わってきました。

Android Studioは強力な補完機能や高度なリファクタリング支援機能を搭載したIntelliJ IDEAに、賢いビルドツール Gradle とAndroid系の機能(レイアウトのプレビューやデバッガなど)を統合した開発環境で、これまでEclipseベースの環境で挙げられていた難点がことごとく解消されています。

これからAndroid開発をしようという方はここから入るのが良いのではないかと思います。導入に関しては前回の記事を参考に。



プロジェクトの作成

Android Studioを起動し、New ProjectまたはFile > New Project…としてプロジェクトを作成します。


image-0


次に対象機器が選べるようになっていますが、ここでは並行開発をするわけではなく手持ちのAndroid端末 (Nexus 5) を主に使ってざっくり組んで行きますのでPhone and Tablet、API 19を選択し、さらに適当な名前を決定し進みます。


image-1


次にBlank Activityを選択して進めます。


image-2


最後にActivity名、レイアウト名やタイトル名を決定してプロジェクト作成を完了します。


image-3


完了すると、レイアウト画面が表示されていると思います。


image-5


これで一応スケルトンの生成は終了です。


若干の調整

このままでも普通にビルドはできるのですが、Glasswareのプロトタイプとして使いたいので若干調整します。


テーマをTheme.DeviceDefaultベースに

Glassは画面が透明ですので、余分な光を視野に出さないのがベストだと考えます。また、GlassではActionBarはほとんど使用しません。そのため、ここではメインにTheme.DeviceDefault.NoActionBarを使用して背景を完全に黒にした上でActionBarを消します。


image-6


Landscapeモードに

Glassの画面は横長で、当然のように回転しませんのでAndroidManifest.xmlでscreenOrientation=”landscape”を強制しておきます。


image-7


これで実行すると、以下のような画面になるはずです。


image-8


スケルトン完成!

これでひとまずスケルトンが完成し、Android Studioでの開発準備が整いました。

次回は、これを使って実際にGlasswareをプロトタイピングして行きます。

TAGS: ,

RELEASE
2014.08.22

親matlab派に向けたpythonでのデータ解析入門


この記事の効用

Python未経験者がPythonを使って、予測モデル作成のためのコーディングができるようになる

想定する読者

  • データ解析の文脈でPythonに興味はあるが、まださわったことのない人
  • そろそろMATLAB以外の言語もやってみようかなと思っている人
  • プログラミング言語自体の勉強は積極的に行ってこなかった方

目次

  • 自己紹介(スキップ可能)
  • Pythonをすすめる理由
  • MATLABに慣れたユーザーのためのPython環境構築
  • MATLABのつもりでPython使おうとするとひっかかるところ
  • 脚注

自己紹介

 この7月からリクルートテクノロジーズのアドバンスドテクノロジーラボ(以下、ATLと略す)所属になった大杉直也です。よろしくお願いします。一応の専門は信号処理とか機械学習です。しかし、エンジニアというわけではなく、基礎研究で有名な 某研究所で昨年度までサルの脳波の解析を行っていました。  

 脳科学の分野ではデータ解析にMATLABを使用するのが一般的だったようで、自分もM1の頃から5年ほどMATLABをさわっていました。やはりMATLABは有償のソフトウェアでサポートがしっかりしていることもあり1 、再現性と信頼性が大切なアカデミックの世界では好まれていたのでしょう。自分もMATLABのsignal processing toolboxには大変お世話になりました。

 そんな私が7月からATL所属になり、MATLABが使われていない環境に身を置くことになった2ため、流行のPythonを使ってみました。そして、少しさわってみたら「もうMATLABはいいかな」という気にさせられました。
Python歴1ヶ月の自分ですが、はまったツボを記事にしてみることでPythonを初めてみる心理障壁が少しでも下がれば幸いです。

Pythonをすすめる理由

私がPythonを好きになった理由とその内訳:

  • scikitlearnがすばらしかった(およそ80%)
  • 他にもモジュールが充実していた(およそ10%)
  • 環境構築が楽だった(およそ5%)
  • MeCabがあっさりと使えた(およそ3%)
  • MATLABっぽい描画が簡単にできた(およそ2%)

なのでPythonそれ自体というよりもPythonのモジュールのひとつであるscikitlearnに力をいれて説明します。


 scikitlearnは機械学習系のモジュールです。機械学習にまったく興味ない方でもPythonのオブジェクト指向な書き方のよい例になっているので、参考になるかと思います。

 t検定などの仮説検定に興味がある方のためのscipyというモジュールのリファレンスをはっておきます。scipyはscienceで使用される数学をまとめたモジュールです。便利そうな関数がそろっています

 scikitlearnの解説のため、特徴量にラベルの情報が含まれているかを、とりあえずサポートベクターマシン(以下、SVMと略す)交差確認法で確認するといったユースケースを考えます。データはローカルにある2つのcsvファイルに書き込まれているものとします(特徴量(従属変数)の値(数字)が書かれたものと、その教師ラベル(目的変数)が書かれたもの)。

以下、そのコードです。短い。実質7行。

では、このコードを1行ずつ追いかけてみましょう。


import numpyimport sklearnとあるのは numpy, scikitlearnの2つのモジュールを利用します、といった宣言です。



train = numpy.genfromtxt('./data/training.csv',deliminiter=',',dtype='float')

label = numpy.genfromtxt('./data/label.csv',deliminiter=',',dtype='float')

でローカルのcsvファイルをPythonに読み込んでいます。ここでは特徴量データをtrainという名前の変数(観測数X特徴量数)、ラベルデータをlabelという名前の変数(観測数)に格納しました3

 numpy.genfromtxtではdeliminiterdtypeの2つのオプションを指定しています。deliminiterは読み込むファイルの区切り文字が何かを指定しています。dtypeは読み込んだファイルをどのようなデータ型で変数に格納するかを指定しています。

 numpy.genfromtxtで読み込むとPython標準のリスト4ではなく、numpyのarrayという形式5で読み込まれます。このnumpyのarray形式はMATLABの行列みたいな使い方をするためにあるのですが、MATLABと違って動的にサイズを変えることができない点には注意してください。



model = sklearn.svm.SVC()ではどのようなモデルを使うのかをscikitlearnのメソッドで指定しています。

!!!!!!!!!!この行がMATLABとの最大の違いであり、自分が最も感動した点です。!!!!!!!!!!

 ここでは

  1. どのようなモデルを使うか
  2. そのハイパーパラメータはどんな値か

を指定しています。

 オブジェクト指向に多少慣れている人にはコンストラクタだと言えば伝わると思います。オブジェクト指向何それ食えるの状態のMATLABユーザーもいると思うので6簡単に補足するとオブジェクトとは「構造体に関数が引っ付いたもので、その関数を使用すると構造体の値も変えられる便利なもの」です。今回のケースにはこの理解で十分です。

 1の点ですが、今回はSVMを呼び出していますが他にもランダムフォレストや一般化線形回帰なども指定できます。詳細は公式ページにて

ちなみにかのliblinear7も同じ様に使用できます

 2の点ですが、サンプルコードでは何も指定していないのでデフォルトの値(例えばカーネルはデフォルトではrbf)になっていますが、カーネルに何を使用するかやC値やノルムをどうするかなど各種ハイパーパラメータをここの引数で指定できます8

このように今回はmodelという名前のオブジェクトがrbfカーネルのSVMになりました。

modelのパラメータ学習にはfitという関数を使います。

パラメータを学習できたら、その出力はpredictという関数で以下のようにかけばOKです。

MATLABでは中々ない書き方ですが、これのおかげで交差確認法などが楽に書けます9



score = sklearn.cross_validation.cross_val_score(model,train,label,cv=10)で交差確認法で求めた予測率をscoreという変数に格納しています。 今回は10-fold 交差確認法です。

 楽です。本当に

モデルをそのまま引数にとれるので、このモデルのハイパーパラメータを調整したり、違うモデルを試したりするには直前のmodelを呼び出す1行をわずかに書き換えるだけです。 例えばL2-ロジスティック回帰は以下の通りです。



最後に

score = sklearn.cross_validation.cross_val_score(model,train,label,cv=10)

で交差確認法で導出された値の平均値をコンソールに出力しています。print 変数名で変数の中身がコンソールに出力されます。

sklearn.cross_validation.cross_val_scoreは前述のnumpyのarray形式になります。

array形式はsumとかmeanとかの基本的な関数を持っています。

平均値の導出は

と書く他に

とも書けます。どっちの方が好ましいのかはよくわかっていないのですが、後者の方が書くのが楽なので、そちらを多用しております。



 ここまでで自分がPythonを好きになった理由の80%近くの説明が終わりました。他にも便利なモジュールがたくさんあるのですが(理由の10%)、私自身がまだまだ勉強中ということもあり今回の記事はscikitlearnの教師付き学習の簡単なサンプルで留めます。反響(=PV数)あれば他の例で今回みたいな簡単なユースケースを書きます。

もちろんMATLABでもwekaなどの外部のツールを使用すれば似たような書き方ができると思いますが、以上のコードをチェックするための環境構築が思いのほか簡単であった点もポイント高いです10(5%)

以下、自分が導入しやすい&使いやすいと感じた環境です。



MATLABに慣れたユーザーのためのPython環境構築

用意するもの

両方とも検索には不便な名前なのですが、導入が非常に簡単で上記のコードを簡単に確認できます。 下の写真はmacでの導入後のイメージ図です。Windowsでも似たようなものです。

spyder


まずanacondaについて解説します。

anacondaにはPythonの便利パッケージが大量に含まれており、有名なパッケージはanacondaを使えば簡単にインストールやアップデートが可能です。 下記のサイトからDLしてください。インストールにも大変なところはないと思うので割愛いたします。 https://store.continuum.io/cshop/anaconda/

anacondaだけで先ほどのコードが使用可能になるのですが、MATLABのGUIに慣れ親しんだ人ですとCUIで全部操作するのは取っ付きにくいと思います。

 そこでspyderという開発環境も紹介いたします。 anacondaの公式ページによるとanaconda内のXXXでダウンロードできるようですが、どうやらリンクが切れているようです(2014年8月現在) なので以下のサイトからDLしてインストールしましょう。 https://bitbucket.org/spyder-ide/spyderlib/downloads

ancondaが既にインストールしてあればspyderを起動した際にanacondaのPythonが立ち上がると思うのですがいかがでしょうか?


環境構築は以上です。このanacondaとspyderでたいていの解析はできそうです11



 本記事のメインコンテンツは以上で終わりです。 自分もまだまだ初学者なので至らない点も多々ある拙い記事を読んでいただき、ありがとうございました。

MATLABのつもりでPython使おうとするとひっかかりそうなところ

最後にMATLABユーザーがPythonでつまりやすそうな点を列挙しておきます。

1. for やif の中身が括弧でなくてインデントで区切られる

こちらをご覧ください。

Python初見のMATLABユーザーではforがどこまで続いているのか分かりにくいかと思います。

 この場合countの値はfor文が終わった一度しか出力されません。 Pythonではインデント12をそろえることでifやforの範囲が定義されています。 慣れればどうってことはないのですが、自分はエディタからコンソールにコピペして実行するときにインデントがそろっていないことが理由でしばしばエラーを起こしてました。

2.途中結果の保存が面倒

 MATLABは変数だろうが変数のセットだろうが図だろうが途中結果をsaveやsaveasコマンドで簡単13に保存できましたが、Pythonではちょっとハードル高いようです。

 numpyのarray形式ならnumpy.savenumpy.loadでいけるのですが、さきほどの学習したモデルパラメータごと保存したいときなどには使用できません。 pickleというモジュールを使うのが良さそうですが、まだ自分もどのやり方がベストか決めかねてます。いい方法が見つかったら追記します。

3.日本語文字コードの扱いが若干面倒

 日本語の扱いに面倒なところがあります。 基本は ファイル入力→ユニコードにエンコード→処理→UTF-8などにデコード→ファイル出力 になるのですが、面倒な点がいくつかあります。長くなるので今回は割愛いたします。

脚注


  1. MATLABはMathWorks社の製品です。メール等のサポートの手厚さは素晴らしいです。

  2. 予算不足だと誤解された場合に備えて念のための補足。予算不足だとかケチだとかは全くないです

  3. 今回は現在のディレクトリからの相対パス./data/training.csv と./data/label.csvでファイル場所を指定していますが、当然絶対パスでも指定できます。現在のディレクトリを変更する場合はcd コマンドを使えばOKです。

  4. Pythonのデータ形式であるリストは色々なタイプのデータをごちゃまぜに格納できます。リストにリストも格納可能

  5. arrayは単一のデータ型しか格納できないので、最初にデータ型を指定する必要があります。省略しても自動でデータ型を決定してくれますが、この手のものはいちいち自分で宣言する癖をつけた方が不幸にならずにすみます

  6. 数ヶ月前の自分です。ろくにさわったことがあるのがMATLABくらいでした。MATLABの代表的なコンストラクタはfigure()だといえば、オブジェクトについてピンとくるのではないでしょうか。

  7. 線形に特化したSVMで、計算時間や要求されるメモリが非常に少ないです。感動しました。

  8. プロセッサを並列に使用するかまでここで選択できます。すげぇ

  9. ブースティングなどのアセンブル学習もモデルを引数にすることで楽に実装できます。

  10. MATLABを新しい計算機に入れ直すさいにライセンスまわりの認証があり、個人的にとても面倒です。仕方ないこととは思いますが!

  11. さすがに日本語の形態素解析ツールのMeCab-Pythonはサポートされていなかったので自分でいれる必要がありました

  12. タブとかスペースのことです。Pythonでは意味のないスペースが行頭にあるとエラーになります。

  13. saveとsaveasで引数の順番が違うとかの罠はありますが、今思えば簡単でした。