アジャイル開発についての社内勉強会

Misoca開発者の黒曜です。

最近は技術書典3の原稿を書いていますが、進捗がダメすぎて間に合うかドキドキしています。

10/22(日)にアキバ・スクエアで出展しますので、ぜひ遊びに来てください。

新刊、間に合うといいな…

🎓 アジャイル開発勉強会

Misocaではスクラム開発を取り入れていますが、最近新メンバーも増えてきたため、知識の共有や基礎の見直しを目的にスクラム開発についての勉強会を行いました。

扱った内容は「スクラム開発とは何か」と「アジャイルな開発での見積りはどういったものか」の2本立てで、前者はスクラムガイド2016を、後者は アジャイルサムライアジャイルな見積りと計画づくりを参考に、内容を抜粋して紹介するためのスライドを作って話す形にしました。

アジャイルサムライ−達人開発者への道−

アジャイルサムライ−達人開発者への道−

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

アジャイルな見積りと計画づくり ~価値あるソフトウェアを育てる概念と技法~

📝 スライド資料

以下が勉強会に使用したスライドです。

これらのスライドはesa.ioのプレゼンテーションモードを利用しています。

大きい画像や長い文章だと少し崩れてしまいますが、Markdownでまとめた内容をそのままスライドにできるので手早く準備することができました。

💬 開催感想

勉強会ではスライドの内容を紹介した後に質問や議論の時間を設けたのですが、最近入ったメンバーだけではなく以前からいるメンバーも交え、普段の業務で気になっていることなどを積極的にディスカッションすることができました。

特にストーリーポイントやベロシティなど「なんとなくわかったつもりで使っているツールの意味や意義を理解できた」という感想が印象に残っています。

勉強会を実施して良かったとともに、プロセスの流れに乗ってもらうだけではなく「何故そうしているのか」の部分もしっかりと伝えていかないといけないな、という反省も得られ、よい経験になりました。

今後もアジャイルの話に限らず、社内勉強会を開いていければと思います。

📢 宣伝

💎 RubyKaigi

さて、来週はRubyKaigiですね。

MisocaはRubyKaigiスポンサーとしてブースを出展します。

面白いノベルティもご用意していますので、ぜひブースに遊びに来てください!

🙋 採用

Misocaではスクラム開発に興味のあるエンジニアを募集しています。

📚最近弊社で買ったデータ分析入門書📚

はじめに

こんにちは、Misoca開発チームの洋食(yoshoku)です。 Nintendo Switchを自宅近くの電器屋さんに買いに行ったらなかったので、あきらめてPS Vitaを買いました。 ゲームアーカイブスにある、PC Engineの「夢幻戦士ヴァリス」に大満足です。なんで、あんな薄着で戦うのでしょうか。

本の紹介

私はMisocaでは主にデータ分析を担当しています。 社内で参考書リストが欲しい!!というバイブスが上がってきました。 せっかくなので、ブログで世界に共有することにしました。

確率統計・線形代数

scikit-learnとかをたたくだけでも機械学習アルゴリズムを利用することはできますが、 アルゴリズムの特性を理解した上で適切に使う・結果を解釈するには、数学の知識があった方が良いです。 というわけで、復習・自習するために良いかなと思うモノを選びました。 高専生を対象とした数学の教科書は、主要なところをおさえたものが多いのと、たいてい問題集もあるので自習に向いてます。

確率統計 (高専テキストシリーズ)

確率統計 (高専テキストシリーズ)

重要な数式は、問題集の方にも掲載されているので、復習には問題集だけでも良いかもしれません。
確率統計問題集 (高専テキストシリーズ)

確率統計問題集 (高専テキストシリーズ)

「入門 統計学」は内容的には農学部の学生を対象としたものっぽいですが、検定から多変量解析まで一通り書かれており、 データ分析で必要な統計学の基礎知識が、これ一冊で学べます。内容もとてもわかりやすいです。
入門 統計学 −検定から多変量解析・実験計画法まで−

入門 統計学 −検定から多変量解析・実験計画法まで−

線形代数は「教養の線形代数」が良いです(経験)。 また「The Matrix Cookbook」でググって頂けると、とっても便利なPDFが見つかります。
教養の線形代数

教養の線形代数

機械学習

機械学習の本は、最近ではたくさん出版されていますが、 大学の教科書としての使用を前提に書かれたもので、網羅的にアルゴリズムをおさえた本が良いように思います。 私は、どんな勉強でも、いきなり分厚くて難しい本に挑戦して、挫折してしまうのはもったいないと考えています。 ベーシックな知識を押さえた上で、 興味をもったアルゴリズムについて詳しく書かれた専門書(例えば「機械学習プロフェッショナルシリーズ」など)で勉強を進めていくのが楽しいのではないでしょうか。

入門パターン認識と機械学習

入門パターン認識と機械学習

はじめてのパターン認識

はじめてのパターン認識

また、教師あり学習のみになりますが「わかりやすいパターン認識」は名著です。
わかりやすいパターン認識

わかりやすいパターン認識

とはいえ「固くて大きくて分厚い本をこなすのが快感なんだ」という気持ちもわかります!! そんな方には「パターン識別」をオススメします。ハードカバーで、B5サイズ、652ページあります。 私はリファレンスマニュアル的に使っています。たまにパラパラとめくると思わぬヒントが得られます。
パターン識別

パターン識別

ソフトウェア

Jupyter NotebookとPandasで分析するのが最近のトレンドでしょうか。 これらの教科書としては、オライリーの「Pythonによるデータ分析入門」がオススメです。 元の英語版のサブタイトルが「Data Wrangling with Pandas, NumPy, and IPython」ですが、そのまま、PandasとNumPyとIPythonの本です。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Python機械学習ライブラリといえば、scikit-learnですが、その解説書としては「Pythonではじめる機械学習」が最適です。 Irisデータセットをk-近傍法で分類する例からはじまり、データの正規化にも触れながら、教師あり/教師なし学習を解説し、特徴量の設計、モデルの評価へと進むあたり安心感があります。
Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

Pythonではじめる機械学習 ―scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎

その他、Rの本で、サンプルデータをダウンロードできるものを買ってきて、Pandasに翻訳するのも良い訓練になります。
Rビジネス統計分析 [ビジテク]

Rビジネス統計分析 [ビジテク]

ビジネス活用事例で学ぶ データサイエンス入門

ビジネス活用事例で学ぶ データサイエンス入門

読み物

私は、まだ、第一部しか読めてないですが「データ・ドリブン・マーケティング」は良い本らしいです。 第一部を読んだだけですが「データドリブンにやっていくのがええんやな!!」という強い気持ちになります。

データ・ドリブン・マーケティング―――最低限知っておくべき15の指標

データ・ドリブン・マーケティング―――最低限知っておくべき15の指標

こちら「データ分析プロジェクトの手引」も、全部は読めてないですが、知人が薦めていたので良い本なのでしょう。 数式やコードは出てこないので「データ分析プロジェクトとは?」みたいなのを知るのに良いかもしれません。 第2章は、ページ数は少ないのですが、データ分析の見積もりに関連するもので参考になりました。
データ分析プロジェクトの手引: データの前処理から予測モデルの運用までを俯瞰する20章

データ分析プロジェクトの手引: データの前処理から予測モデルの運用までを俯瞰する20章

たまにネットで「相関関係があるだけで因果関係とは違う」という議論を見かけますが、 それをわかりやすい例で説明してくれるのが「原因と結果の経済学」です。 因果関係の分析が難しいこともわかります。
「原因と結果」の経済学―――データから真実を見抜く思考法

「原因と結果」の経済学―――データから真実を見抜く思考法

おわりに

「PS VitaでL2/R2ボタンってどこにあるんだろう?」と思っていたら、背面にあるツルツルの部分がタッチパネルみたいになってました。 「これムリじゃない!?」と戸惑っていたら、HORIが最高のソリューションを提供していました。

採用

Misoca本社の近くには、ジュンク堂書店三省堂書店ビックカメラもあります。また必要な専門書は会社の経費で自由に購入できます。

Startup Weekend Nagoya Social に参加しました

eitoball です。

先月、8月4日から6日かけて、Startup Weekend Nagoya Social に参加してきました。KPT でふりかえりをしたいと思います。

Startup Weekend Nagoya Social とは

Startup Weekend(以下、SW)は、「スタートアップ体験イベント」です。金曜日の夜から日曜日の夜の3日間・54時間かけて、アイディアを起業できるようにするまでを体験します。Startup Weekend Nagoya Social では、世の中の困っていることを解決するサービスやビジネスモデルなどを生み出す「社会起業」(ソーシャルビジネス)をテーマとしたイベントでした。

KPTふりかえり

Keep(続けること、良いこと)

優勝しました 🏅

僕の所属しているチームが優勝しました。このイベントは、優劣を競うのが目的のイベントではないのですが、とにかく、うれしかったです。

時間管理がうまくいった ⏳

時間配分をうまくできたのが要因の1つだと思いました。3日間・54時間とはいっても、実質、使うことのできる時間は30時間程度です。3日目は、最終ピッチの組み立てと練習をするということを意識して、進めました。

1日目は、最初のピッチのアイデアを元に今後、どのように進めるかを決めました。

2日目は、午前中にサービス、そのサービスの収益手段を幾つかとサービスと、収益手段のための検証内容を決めました。午後は、サービスの顧客になる人にインタビューをして検証をしながら、サービス内容や収益手段を修正していきました。夜は、収益予測を立てながら、引き続き、サービス内容を修正していきました。

3日目は、午前中は、最終ピッチを組み立てていきました。午後は、最終ピッチの練習をしていました。

テーマがよかった 👍🏻

チームのミッションは、「障がい者の家族を楽にしたい」でした。最初のピッチでこのミッションの核となるアイデアを提案したチームのリーダーの方と僕自身が、そのような境遇にあり、顧客候補であり、普段、困っていることをアイデアとしてだすことができたのが、良かったと思います。また、今回のイベントのテーマの「社会起業」に合っているのも良かったと思います。

Problem(不満点、問題点)

最終ピッチでの話し方が悪かった 🙊

3日目に最終ピッチの練習をしていて、最初の指摘が、滑舌が悪く、ピッチを進めるに従ってだんだん声が小さくなっていきあまり聞こえなくなるでした。自分でも滑舌は良くないのは分かっていて、気をつけるようにはしていました。しかしながら、ピッチの内容が頭に入っていない場合、意識が内容を思い出そうとするほうに向かってしまい、口の動きが普段の悪い方へ戻ってしまうようでした。本番では、滑舌の悪さは直すことはできませんでしたが、声の大きさは意識して大きく出すことができていたようである程度、聞こえるようにはなっていたようです。

最初のピッチでアイデアを出せなかったこと 🆖

1日目にチームを作るためにアイディア発表(ピッチ)をして、一緒にビジネスしたい仲間を集めます。実は、最初のピッチって、希望者だけなのかなぁ…という緩い気持ちでいました。結局、全員ピッチをすることで、適当に自己紹介をして終わりになりました。せっかく参加するなら、あらかじめアイデアを考えておいて、ピッチするべきだったなぁと後悔しています。

Try(試すこと、工夫したいこと)

話し方 👄

Problem に書きましたが、滑舌が悪いので、直す工夫をしていこうと思います。まずは、口の開け方を気をつけるようにすると良いのかなぁ…「あえいうえおあお」とか繰り返すと良いのかなぁ…

何か作る 🛠

今回のアイデアは、今の立場では、実現が難しいですが、ミッションの「障がい者の家族を楽にしたい」を実現する何かは作っていきたいなぁと思っています。

さいごに

今回のイベントのファシリテーターでもある @Dominion525 には、以前から、1度は参加した方がよいと進められていて、今回、やっと参加できて良かったです。この3日間は、普段使わない脳の部分を使ったようで、とても疲れました。が、チームの仲間やコーチ・オーガナイザーの方々との議論はとても有意義で、これからの開発活動に新しい視点で望めそうです。

Startup Weekend Nagoya Social の参加者・関係者の方々、ありがとうございました。

採用

Misocaでは、起業精神にあふれるソフトウェアエンジニアも募集しています。

💸PayPalのAPI認証キーの妥当性検証

mzpです。

最近、実装した機能についての話を書きます。最初は会社のLADRに書いて設計意図を残すつもりだったんですが、別に秘密にする内容でもないなと思いなおしたので、ここに書きます。

📝 要約

PayPalAPI認証キーが正しいかどうかの確認にはGetPalDetailsが便利。

💸 Misocaペイメント

Misocaでは、発行した請求書への支払いをPayPal経由で行なうMisocaペイメントという機能を提供しています。 かなり前からある機能で、私の入社よりも前に開発されました。

f:id:mzp:20170804173529p:plain

この機能を利用する際には、PaypalビジネスアカウントのAPI認証キーである「APIユーザー名」「APIパスワード」「署名」の3点を入力してもらっています。

f:id:mzp:20170804174107p:plain

ただ、この入力内容は保存ボタンを押したタイミングでAPI認証キーの妥当性を確認していないため、正しく支払いができる状態でないのに請求書を発行してしまう、などの問題が生じていました。

🔎妥当性検証に使えるAPI

NVP and SOAP API Referenceを確認したところ、PayPal IDを取得するGetPalDetailsが、余分な影響を与えることなく、API認証キーの正しさを確認できてよさそうでした。

他にもOAuthのAccessTokenを発行することで確認する方法(Is there a way to verify API credentials via test API call? · Issue #158 · paypal/PayPal-Ruby-SDK )がありましたが、API認証キーのほかにOAuth ClientIDが必要なようだったので断念しました。

🛠妥当性検証の実装

PayPalAPI呼出しにはpaypal-sdk-merchant gemを利用して、以下のように実装しました。

# frozen_string_literal: true

module Misoca
  module PaymentSetting
    class VerifyPaypal
      def initialize(credential)
        @api = ::PayPal::SDK::Merchant.new
        @api.set_config(
          username: credential.login,
          password: credential.password,
          signature: credential.signature
        )
      end

      def call
        # 検証するだけのAPIは存在しないため、GetPalDetailsで代用している
        # https://developer.paypal.com/docs/classic/api/merchant/GetPalDetails_API_Operation_NVP/
        response = api.get_pal_details
        response.success?
      end

      private

      attr_reader :api
    end
  end
end

以下のように利用できます。

# 正しいAPI認証キーの場合
credential =  OpenStruct.new(login: '...', password: '...', signature: '...') }
Misoca::PaymentSetting::VerifyPaypal.new(credential).call # => true

credential.login= 'xxx'
Misoca::PaymentSetting::VerifyPaypal.new(credential).call # => false

🔊採用

Misocaでは設計意図を記録できるソフトウェアエンジニアを募集しています。

Misocaのリゾートワーカーの仕事環境

初めまして。Misocaの大沢( @ooswatech )です。主に開発やデザイン以外の大抵の仕事をしています(職種名なんだろ…🤔🤔🤔名前はまだ無い)。最近は主にMisocaのプロダクトについていろいろ考える仕事をしています。

さて、先週は弊社の @hidakatsuya が、Misocaのリモートワーカーの仕事環境について紹介させていただきました。 tech.misoca.jp ちなみに私も東京(普段は秋葉原にある弥生株式会社にいます)からのリモートワーカーなのですが、この記事に参加させてもらえませんでした、なぜなら…

f:id:oosawatechnica:20170816163608j:plain

🇷🇺ロシア🇷🇺に行っていたからです。

Misocaでは、旅をしながら仕事することも可能です。 今回私は、下記のような形で旅行のスケジュールを立てました。

日付 滞在場所 会社のスケジュール
8月6日(日) 東京⇢ウラジオストク
8月7日(月) ウラジオストク 夏休み
8月8日(火) ウラジオストク 夏休み
8月9日(水) ウラジオストク 夏休み
8月10日(木) ウラジオストク リゾートワーク
8月11日(金) ウラジオストク 祭日
8月12日(土) ウラジオストク⇢東京

10日(木)さえ現地で働けば、ウラジオストクに一週間滞在できるぞ…!!!ということで、今回は海外滞在のうち、1日をリゾートワークの日としてセッティングしました。

早速、Misoca のリゾートワーカーの仕事環境について、Q&A方式でご紹介したいと思います。

リゾートワーク歴を教えてください

仕事環境を見せてください

www.tripadvisor.jp

  • ネット環境だけは事前にレビューなどを見て念入りに調べ、このホテルにしました。そのおかげで、ネット環境はとても良かったです(zoom常時接続に耐えれていました)
  • 飲み放題のコーヒーや紅茶があったので仕事中も快適でした
  • スタッフは英語がわかるので、意思疎通も問題なかったです
  • 主に共同リビングのソファで座って、zoomを常時接続しながらMisocaのメンバーとミーティングしたり、作業したりしていました
  • 日本とウラジオストクの時差は1時間。日本とのミーティング時間設定など、仕事をしていく上で何の支障もなかったです

働き方を教えてください

  • 常時オフィスが見えていて音声も聞こえているので、リモートだからといっての孤立感を感じることは少ないです。Misoca素敵
  • 早寝・早起きするように心掛けています
  • Misocaには残業はないので、夕日が沈む前に仕事を終えられます。カメラを持って散歩に出て、なるべくよく歩くようにしています
  • 仕事中はzoomのおかげで距離を感じません。みんな渋谷あたりのオフィスにいるのかなと錯覚することがありますが、だいたい名古屋で、今同じチームにいる人は京都と鳥取でした
  • 通勤が無いので朝食を家族とゆっくり取ったり、仕事終わるとすぐ一緒に食事できるのも良いですね

最後に

いかがでしたでしょうか。そして、お気づきでしょうか。「働き方を教えて下さい」の部分は、先週の「Misocaのリモートワーカーの仕事環境」記事からの抜粋です。つまり、海外にいても、インターネット環境さえキープできれば、リモートワーク勢と同じように働くことができます。 「海外にいてもちゃんと仕事できるのかな?」と不安に思っている方々の参考になれば幸いです。

採用

ということで、Misocaでは世界を旅する開発者を探しています。 もちろんリモートでの面談・面接も行っています!お気軽にお問い合わせください。

Misocaのリモートワーカーの仕事環境

こんにちは、松江オフィスの日高(hidakatsuya)です。最近はイカの新規勢として子供達と一緒に楽しんでます。楽しい。

私が入社した2015年当時、リモートワーク勢は私含め2人でした。それが、2017年8月現在では6人まで増えとても賑やかになりました。そこで、今回はそのリモートワーク勢が「どんな仕事環境」で「どのように働いているか」について、各メンバーへのインタビュー形式でご紹介したいと思います。

では、早速紹介していきます。メンバーごとに回答をまとめています。

mugi_uno

富山県、リモートワーク歴6ヶ月

仕事環境を見せてください

f:id:hidakatsuya:20170809041040j:plain

  • 机は奥行きに余裕があるものが好きで、IKEAのを使っています
  • ケーブル類はテーブル下のケーブルボックスにまとめてスッキリ
  • 左にある存在感のあるマイクは Yetiです。プレゼントでいただきました。YouTuber感がスゴい
  • 椅子はオカムラコンテッサを使ってます。思い切った買い物でしたが、だいぶ楽になりました
  • ネット回線が1本しかないのが課題かな〜と思ってます

働き方を教えてください

  • 集中すると無限に座り続けてしまうので、意識して休憩に立つようにしています
  • 健康面は課題だらけです。とりあえずピカピカのランニングシューズは持ってます
  • 常時オフィスが見えていて音声も聞こえているので、リモートだからといっての孤立感を感じることは少ないです。Misoca素敵

eitoball

岐阜県、リモートワーク歴9年

仕事環境を見せてください

  • http://tech.misoca.jp/entry/2015/10/16/111103 の頃とほとんど変わっていません。Vim から NeoVim に変わって、janus を止めて、pathogen を使って必要なプラグインをインストールしています。後、iTerm2 をフルスクリーンで使うようになりました。相変わらず、80x34 に pane を分割して使っています
  • キーボード・マウスは、RealForce 87UB(静音モデル)・Logicool G700s を使うようになりました。パソコンは、このスタンド を無理矢理使っています

働き方を教えてください

通常は、午前9時から午後6時まで勤務しています。MacBreak Z というソフトを使っていて、それに従って、休憩しています。勤務時間で気をつけているのは、以下の3点です。

  • 週6ぐらいでジムに通って、通勤しない分の運動をするようにしています。筋トレしたり、有酸素運動をしたりしています
  • 早寝・早起きするように心掛けています
  • 毎日、本を読むようにしています

tkyk

京都府、リモートワーク歴約10年

仕事環境を見せてください

f:id:hidakatsuya:20170808121006j:plain

  • MacBook Pro15インチ、EIZO製27インチディスプレイ2枚、12.9インチiPad Pro、計4台をモニターアーム2本で配置しています
  • 椅子はアーユルチェアです。これを使い始めて腰痛から解放されました
  • iPad Proはzoom用*1に使っています。外付けのマイク・スピーカーを使うべきか、いま検討しているところです

働き方を教えてください

  • 心身の健康を維持するために、水曜休の週4日で働いています
  • 昼食時は必ず外に出ます。自宅でなにか作って食べるより、たとえコンビニ飯であっても、外に出て食べた方が調子がいいようです
  • Misocaには残業はないので、夕日が沈む前に仕事を終えられます。カメラを持って散歩に出て、なるべくよく歩くようにしています

monoooki

東京都、リモートワーク歴約11年

仕事環境を見せてください

f:id:hidakatsuya:20170809131118j:plain

  • MacBook Pro13インチ、I-O DATAの20インチディスプレイの2画面で作業しています。ディスプレイアームなので好きな位置に動かせて便利です
  • 右端は古いMacBook Air11インチで、Zoom用端末として使っています
  • 椅子はミラチェアを使っています。それなりな椅子に正しい姿勢で座ると、腰痛になるまでの時間を伸ばせます
  • 以前はEIZOのディスプレイを使っていましたが、最近は目が疲れなければなんでもいいやと適当になっています。表示端末が多くなってきているので積極的な諦め

働き方を教えてください

  • 子供が二人いて、下の子がまだ小さいため、家事全般も行っています。朝は家族の朝食と上の子の弁当作り、幼稚園の送迎、帰宅して家の掃除を済ませてから仕事を始めます
  • 仕事中はZoomのおかげで距離を感じません。みんな渋谷あたりのオフィスにいるのかなと錯覚することがありますが、だいたい名古屋で、今同じチームにいる人は京都と鳥取でした
  • ずっと普通のフリーランス生活をしてきたので最初はカメラに抵抗がありましたが、3日で慣れました。不思議なものですね
  • 19時頃仕事を終わると、すぐ夕食→上の子のお風呂→下の子のお風呂→下の子の寝かしつけをします。21時頃からようやく自由時間です
  • 21時から自室で1時間ほど自転車に乗ります。有酸素運動は体にいいと聞きました。そんな気がします

f:id:hidakatsuya:20170809131219j:plain

lulu-ulul

鳥取県、リモートワーク歴約2年6ヶ月

仕事環境を見せてください

f:id:hidakatsuya:20170809143720j:plain

  • ビデオ会議用ノートPCとスピーカーマイク・WebCam には会社から支給してもらえるキット使ってます
  • 机には物をなるべく置かない方針でやってます、がガムと目薬は必須です
  • 椅子はリープチェアのハイバック使ってて、購入してから一日の疲労が大分軽減されました
  • メインディスプレイは 目に優しい(と聞くので) ノングレアの IPS パネルのものにしています
  • たまに会話が聞き取りづらかったり打鍵音を拾ったりしてるので音響周りは改善していきたいです
  • またペアプロ等で高解像度いいなあと思ったので27インチのディスプレイ購入予定です

働き方を教えてください

  • 家族の世話で定期的に数分離席する必要があるのですが、休憩がてら数分席外すだけで対応できるのがリモートワークの利点だと思います
  • 通勤が無いので朝食を家族とゆっくり取ったり、仕事終わるとすぐ一緒に食事できるのも良いですね
    • 夕食に合わせて勤務時間も少し後ろにずらしました
  • 健康面ではまるでケアできてないので他の人みたいに運動していきたいです…

最後に

いかがでしたでしょうか。私も基本は松江オフィス勤務ですが、週の半分ぐらいは自宅勤務しています。ただ、最近腰が痛くなることが多く、「みんなどうしてる?」と聞いてみたところ、それぞれが様々な工夫をしていることがわかり、今回ブログとしてまとめてみようと思ったのでした。リモートワーク勤務のメンバーが増え、リモートワークにおける問題点や課題について相談でき、いろいろな意見が聞けるようになってとても良いなぁと感じます。

私同様、リモートワークの課題を抱えている方々の参考になれば幸いです。

採用

*1:2017年8月現在、Misocaではメインのビデオ会議ツールとしてzoomを使っています

DaruとStatsampleを使ったデータ分析を試してみた

はじめに

こんにちは、Misoca開発チームの洋食(yoshoku)です。 私は、Python十年選手な機械学習メンですが、MisocaではRuby小僧なRailsキッズしてます。 データ分析のフィールドでは、RやPythonがメジャーなプログラミング言語ですが、 SciRubyプロジェクトを中心に、 Rubyでもデータ分析やるぜ的なバイブスが上がってきています。 そんなわけで、レペゼンMisocaで、基礎的なデータ分析を試してみました。 f:id:yoshoku:20170802232449p:plain

DaruとStatsample

Daru(Data Analysis in RUby)は、その名のとおり、 Rubyでのデータの操作や可視化を実現するライブラリで、 PythonのPandasに相当するものです。 Statsample は、 統計的な分析・検定手法を提供するライブラリで、 PythonのStatsModelsに相当するものです。 どちらもgemコマンドでインストールできます。

$ gem install daru statsample

requireもライブラリ名そのままです。

require 'daru'
require 'statsample'

いろいろやってみよう

データの読み込み

Daruでは、データを、ExcelファイルやCSVファイルを読み込むことや、SQLの実行結果から得ることができます。 今回はCSVファイルから読み込むことにします。 使用するデータは、UCI Machine Learning Repositoryで公開されている、ワインの品質に関するデータを選びました。 このデータは、拡張子はCSVですが、項目はセミコロン(;)で区切られています。 Daruでは、from_csvメソッドでCSVファイルを読み込みます。 このとき、セパレータを指定できるので、カンマで区切られていなくても、読み込むことができます。

df = Daru::DataFrame.from_csv 'winequality-red.csv', {col_sep: ';'}

平均や標準偏差を見てみよう

ワインデータには、アルコール度数などのワインのパラメータと、ワインの品質が10段階で評価された値が含まれています。 いくつかのパラメータの平均や標準偏差を見てみましょう。 データから特定の項目を複数とり出したい場合は、項目名をカンマ区切りで指定します。

ds = df['fixed acidity','alcohol']

describeメソッドにより、各データ項目の平均や標準偏差を確認することができます。 Daruでは、to_sメソッドは、単なる文字列ではなく、htmlを出力するものが多いです。 これは、ReportBuilderに渡して、実行結果をhtmlで書き出すことを想定している様です (いまは Jupyter Notebook + iruby な時代ですが、せっかくなので使ってみましょう)。

rb = ReportBuilder.new
rb.add(ds.describe.to_s)
rb.save_html('result.html')

とすると、データ数・平均・標準偏差・最小値・最大値の表が作成されます。 ※表が大きくなるので小数点5桁までとしました。

alcohol fixed acidity
count 1599 1599
mean 10.42298 8.31963
std 1.06566 1.74109
min 8.4 4.6
max 14.9 15.9

相関行列を計算してみよう

相関行列も、corrメソッドにより、簡単に計算できます。

ds = df['fixed acidity','residual sugar','density','alcohol']
rb.add(ds.corr.to_s)

出力された相関行列をみると、「fixed acidity」と「density」の間に相関関係がありそうです。

fixed acidity residual sugar density alcohol
fixed acidity 0.99999 0.11477 0.66804 -0.06166
residual sugar 0.11477 1.0 0.35528 0.04207
density 0.66804 0.35528 1.0 -0.49617
alcohol -0.06166 0.04207 -0.49617 1.0

そんなわけで、Statsampleを使って散布図を見てみましょう。

rb.add(Statsample::Graph::Scatterplot.new(df['fixed acidity'], df['density']))

とすると、散布図が出力されます。

f:id:yoshoku:20170731170156p:plain:w320

※今回「fixed acidity」と「density」との間になにか相関関係があることは確認できましたが、 その意味するところは、私はワインの専門家ではないのでわかりません。 パっと思いつくのは「説明変数としてはfixed acidityかdensityのどちらか一方を削っちゃうかも」ぐらいです。 データ分析では、そのデータに対する知識も必要ですね。

重回帰分析をしてみよう

最後に、Statsampleを使って重回帰分析をしてみます。 ワインの各パラメータから、品質を表現してみましょう。 Statsample::Regression.multipleに、データと、データ中で目的変数とする項目名(ここでは品質を表すquality)を与えるだけでOKです。

model = Statsample::Regression.multiple df, 'quality'
puts model.summary

得られたモデルのsummaryメソッドで、決定係数などを確認できます。 ワインの品質には「free sulfur dioxide」「sulphates」「alcohol」あたりが重要そうな感じです。

# ここでは省略しますが説明変数のt値の一覧なども出力されます。
  R=0.600
  R^2=0.361
  R^2 Adj=0.356
  Std.Error R=0.648
  Equation=21.965 + 0.025fixed acidity + -1.084volatile acidity + -0.183citric acid +
  0.016residual sugar + -1.874chlorides + 0.004free sulfur dioxide +
  -0.003total sulfur dioxide + -17.881density + -0.414pH + 0.916sulphates + 0.276alcohol
  ...

この他、Statsampleには、t検定やカイ二乗検定といった検定も用意されているので、A/Bテストなどにも使えます。

まとめ

RやPythonと比べると、実装されていない機械学習アルゴリズムもあったりしますが、 Rubyでも、回帰分析や主成分分析など、基本的なデータ分析はできます。 ログからエビデンスを集め、お客様が必要とするサービスを、 データドリブンにデベロップしていく基盤が用意されつつあります。

採用

Misocaではサービス開発の基盤作りにLOVEなバイブスあふれたエンジニアを募集しています!