St_Hakky’s blog

心理学/人事/就活/留学/データサイエンス/バイオインフォマティクス/日頃思ったことについて書きます。

Windowsで形態素解析ツールMecab入れるのが面倒だったので、Janome使ってみた

こんにちは。

僕の愛するMacがぶち壊れて、Windowsで開発をここ最近しているのですが、Mecab入れるときの手順がもうクソめんどくさくて、「あぁ、、、またやるのかこれ、、、」ってなってたところに、Janomeと出会いました。笑

調べている過程で知ったんですが、結構いろんな形態素解析があるもんなんだなぁと。機会があれば色々使ってみたいなと思います。

bita.jp


さて、今回はJanomeを使ってみたので、そのことについて記事を書こうかと思います。

◯環境

環境は以下の通り。

ちなみに、リリースの記録を見ていると、2017年7月2日にバージョン0.3.1が更新されていた笑。

◯まずはインストー

ドキュメントには、pipで入ると書いてありました。MeCabだと辞書を入れないといけませんが、Janomeはpip一発で全部入るようです。素晴らしい。

pip install janome

通常はこれでうまくいくっぽいんですが、なんかうまく行かなかった笑。出てきたエラーが以下。

> pip install janome
Collecting janome
  Using cached Janome-0.3.1.tar.gz
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "C:\Users\<user_name>\AppData\Local\Temp\pip-build-16igu6zz\janome\setup.py", line 22, in <module>
        long_description = f.read()
    UnicodeDecodeError: 'cp932' codec can't decode byte 0x81 in position 853: illegal multibyte sequence

    ----------------------------------------
Command "python setup.py egg_info" failed with error code 1 in C:\Users\<user_name>\AppData\Local\Temp\pip-build-16igu6zz\janome\

たぶんファイルを読み込むときのエンコーディング指定をしていないからかしらと思って、ソースコードからインストールしてみました。

こちらから、Janome-0.3.1.tar.gzをダウンロードして、解凍します。そんで、setup.pyのファイルの、21行目にある、

with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.rst')) as f:

の部分を以下のような感じで変更。

with open(os.path.join(os.path.abspath(os.path.dirname(__file__)), 'README.rst'), encoding="utf-8") as f:

そんでもって、コマンドで

python setup.py install 

としてインストールをするとできました。

◯とりま使ってみる

from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
tokens = tokenizer.tokenize("私はサッカーが好きです。")
for token in tokens:
   print(token)

↑を実行すると、

私      名詞,代名詞,一般,*,*,*,私,ワタシ,ワタシ
は      助詞,係助詞,*,*,*,*,は,ハ,ワ
サッカー        名詞,一般,*,*,*,*,サッカー,サッカー,サッカー
が      助詞,格助詞,一般,*,*,*,が,ガ,ガ
好き    名詞,形容動詞語幹,*,*,*,*,好き,スキ,スキ
です    助動詞,*,*,*,特殊・デス,基本形,です,デス,デス
。      記号,句点,*,*,*,*,。,。,。

と返ってきます。Coolだ。。。

分かち書きがしたい

引数を変えるだけでできます。

from janome.tokenizer import Tokenizer
tokenizer = Tokenizer()
tokens = tokenizer.tokenize("私はサッカーが好きです。", wakati=True)
for token in tokens:
   print(token)


上を実行すると以下のようになります。

私    
は    
サッカー 
が    
好き   
です   
。    

形態素に分解した時に取れる情報

まぁ、僕は自然言語処理の専門家でもなんでもなく、ちょっとした処理をしたいなーっていうくらいで使うレベル感なので、大したことはしません笑。

形態素に分解したときのアウトプットがどの順番で並んでいるかということはやりたい処理に必要だったので、調べてみました。

上で出した出力結果をパースすれば、原型をある程度取得できたりするので笑(各方面から怒られそう笑)。以下が順番です。

表層形
品詞
品詞細分類1
品詞細分類2
品詞細分類3
活用型
活用形
原形
読み
発音

と思ってたんですけど、Tokenのドキュメントを読んでいると、あぁそんなことしなくていいんだなぁと笑。

base_formとかそんな感じでデータを取得できるようです。これは便利。

◯その他+感想

辞書も指定できるみたいです。めちゃめちゃインストールも簡単ですし、何かぱっとやりたいときには便利かもと思いました。

しばらくはこれを使っていこうかと思います。また何かあれば追記しまする。

【PyCon2017】Pythonで使う可視化ライブラリまとめ

こんにちは。

PyCon2017のビデオを全部ではないですが、気になったタイトルのものだけ見ているんですけど、その中で面白いものをみつけたので紹介します。

PyCon2017:Python's Visualization Landscape

Pythonにはめちゃめちゃ沢山の可視化ライブラリがあります。ぶっちゃけどれ使ったら良いんだみたいな感じになりますし、それぞれ特性はあるんだろうなぁとは思いつつも、「まぁmatplotlibとかseabornとかでいいか」みたいな感じになっちゃったり、「おぉーこれ便利じゃん」みたいな感じで、その場しのぎコードを書いたりしてあとで死にたくなります笑。


同じような思いはみんなもっているようで、PyCon2017で以下のプレゼンがされていました。

youtu.be

動画中で使われている、スライドは以下からみれます。

speakerdeck.com

可視化ライブラリ一覧

ここで紹介されていた以下の可視化ライブラリの関係図がすごくわかりいやすかったです。

f:id:St_Hakky:20170624194044j:plain

紹介されているライブラリはちょいちょい触っていこうかなと思うんですが、一通りサイトを回ってみたので、リンクをカテゴリごとに以下に貼り付けていきます。

いくつかは触ったことがありますが、触ったことのないものを中心に、ぼちぼち触っていこうと思います。使ったらまた更新します。

Python

Pandas

seaborn

こんなことを思ったときとかに便利なやつです。

  • matplotlibで描くとちょっとめんどくさいなぁ
  • matplotlibで描くとダサいし、それを克服するの結構たいへんだなぁ
  • そんなに頑張って作る必要もないんだけどとりま可視化したい


seabornのインストールは、以下の様な感じで出来ます。

pip install seaborn # pipで入れたい場合
conda install seaborn # anacondaを使っている場合

Galleryとかを見るとどんなグラフを作れるかがわかるんじゃないかと。


随時更新

ggpy

basemap

cartopy

○Yellow brich

Vaex

Javascript

plotly

可視化ライブラリとしては有名なplotlyです。pythonから以外でも使えるのですが、とにかく綺麗にplotできるのが売りだと思います。プライベートな利用にはお金がかかるplotlyですが、ちょっと前になりますが、オープンソース化されてます

pythonから使用するためには、

pip install plotly

で入ります。

オンラインでの可視化のホスティングサービスが用意されているのが、plotlyの凄いところ。こちらからアカウントを作成したら、グラフをオンライン上でプロットして保存できます。

フリーでは、Publicな状態みたいですが、[https://plot.ly/products/cloud/:title=[http]s://plot.ly/products/cloud/:title=お金を払う]とPrivateにもできます。

toyplot

bokeh

こちらの記事に紹介されているように、インタラクティブな可視化を行う際に便利なライブラリです。

なんらかのパラメーターをもっているグラフを書く時に、パラメーター変えて表示、変えて表示、変えて表示、あれこっちはどうだろうってなってまた変えて表示、、、、

めんどくさいですよね。それを解消してくれるのがBokehです。

インストールは、

pip install ipywidgets
jupyter nbextension enable --py widgetsnbextension

または、

conda install bokeh

で入ります。

bqplot

Jupyter Notebook

d3js

c3js

mpld3

Vega

d3po

Vincent

Altair

その他

YT

pygal

chaco

MayaVi

GlueViz

Kaggleを始める際に知っておくべきTipsをまとめてみた

こんにちは。

今パソコンがぶっ壊れて絶賛セットアップ中なんですが、Kaggleの準備するがてらまとめておこうかと。

【Kaggleを始めるにあたって知っておくべきことリスト】

・Kaggleとは
・Kaggleのアカウントの作成
コンペティションを選んで参加する
・Kaggle CLI
・Kaggle上位者達の知見を得る

上のような感じで書きます。

○Kaggleとは

データ分析のコンペティションです(いろんなサイトがめっちゃ説明しているので割愛笑)。最近、KaggleがGoogleに買収されたとかで話題になっていましたね。

○Kaggleのアカウント作成

作らなきゃ始まらない。以下からアカウントを作ります。

www.kaggle.com

コンペティションを選んで参加する。

やらなきゃ始まらない。いろんなコンペティションがあるので適当に面白そうなのを見て参加します。

僕はやっていませんが、一番最初はタイタニックとかが良いようですね。このあたりはいろんなサイトが紹介しているのでそれを見たほうが早いかと。

あとは、目的にもよるんですが、最初はトップの人たちがどんなふうにやっているのかを知るのが良いと思うので、後述するインタビュー記事とかで詳しめのやつとかからやるのがいいのかもしれないっす(ってか自分はそうしている)。

○Kaggle CLI

Kaggleのサブミッションとかまぁ割りと面倒なんで、ふつうにCLIから操作するためのものが用意されています。最強たちは、AWSとか使ってやるみたいですが(学生身分だとそれ相応のスペック容易しようとすると金たりねぇからそんなこと個人でしないけど笑)、そんな時に使うと便利みたいですね。


インストール方法は、以下の通りpipで入ります。

pip install kaggle-cli
kg config -g -u `username` -p `password` -c `competition`

このコマンドを打ったあとに、ブラウザから、、、、大事なので2回言います。ブラウザから、Kaggleのサイトにログイン後、コンペティションサイトに行って、コンペティションの規約に同意する的なことをしないといけません(いや、それもコマンドからさせろよという)。

その他のお役立ちコマンドはこちらから見れます。データセットのダウンロードから、提出までできるようですね。便利。

○Kaggle上位者達の知見を得る

まずは、Kaggleのオフィシャルブログ。見ているだけで勉強になる。

blog.kaggle.com

上のサイトの中に、kaggleのコンペティションで勝った人のインタビューが載っている。


時系列解析:自己相関係数, 定常性, White Noise, AR, MA, ARMA, ARIMA, ARIMAXについて【調べたら随時追加】

こんにちは。

最近時系列解析をすることになり、AR, MA, ARMA, ARIMA, ARIMAXあたりについて勉強したので、それについてまとめておこうかと思います。ぶっちゃけいろんなところにもうすでに解説は出ているので、これは調べている過程で参考になったリンクまとめ&個人的メモみたいな感じになってます。

○時系列解析とは

そもそも時系列解析とはなんぞやっていうことなんですが、過去のデータから未来のデータを予測することを言います(そのまんまかよみたいな笑)。

他の情報とかを利用するケースもあると思うんですが(あんまり深く勉強していないので、こんなのもあるよとかあれば教えて欲しい笑)、基本的には過去の自分自身のデータを用いて、つまり1変量のデータのみを用いて未来の予測を行います。

こちらの参考資料にもありますが、時系列データにおいて回帰分析を行うのはあまり得策ではありません。

時間軸における影響、例えば先月の銀行の預金額は今月の預金額に影響を与えるといった、時間軸における特徴をしっかり考慮したモデルを考えよう、ということで時系列解析を行います。

○時系列データの種類

何も加工のしていない時系列データそのものは、原系列と呼ばれます。

これに対して、あとで示す定常性を満たすために、原系列を変換する処理として一般的に使われるものがいくつかあります。

対数系列 原系列に対数変換をしたもの
階差系列/差分系列 原系列の各時点から何時点か前の時点を引いた系列
対数差分系列 原系列に対数変換を施して、その系列の差分系列をとったもの
季節調整済み系列 季節変動の影響を取り除いた系列

○自己相関係数(ACF), 偏自己相関係数(PACF)

自己相関係数とは、過去の値とどれくらい似ているかを表したものです。以下の関数の定義式を用いて計算されます。

自己相関係数(ACF) = \frac{ \sum{ (y_t - \overline{y} )y_{t-lag} - \overline{y} )} }{ \sum{(y_t - \overline{y})^2 }}

  • 分母は、分散
  • y_t : 時刻tにおける値
  • lag : ラグ
  • \overline{y} : 平均

相関係数の時系列バージョンという感じですね。値も-1から1までの値をとります。

こちらで自己相関係数を実際に Rでプロットしているものがあるんですが、こんな感じで、今現在の値が過去のどの時点に影響を受けているか、を見ることは大事です。

このプロットされているグラフはコレログラフといい、Rとかでめっちゃ簡単に表せます(Pythonでもできます)。

以下で定常性の話をしますが、定常性を満たしているかどうかを確認する上でも、この自己相関係数は重要です。以下の事実は、こちらにある通り、重要なのでここでも紹介させていただきます。

  • データが定常じゃないと直線になってしまう
  • データが定常だと「指数的に減衰」または「sinカーブを描きながら、減衰」となる

相関係数とは、注目している時点以外の要因を無視した自己相関係数のことです。例えば、昨日の関係はみたいけど、一昨日の要因は差排除して関係を見たいとかそういう時に使います。

以下の動画はACFとかPACFを理解するために参考になりました。
youtu.be

そこで紹介されていたのが、以下のテーブル。一応メモがてらこれだけ残しておきます笑。

AR(p) MA(q) ARMA(p,q)
ACF Tails off Cuts off after lag q Tails Off
PACF Cuts off after lag p Tails Off Tails Off

○(弱)定常性

時間依存を調べることは、データの並び順に意味を見いだすことになります。なので、データの並び順を考慮しない「データが独立に抽出された標本」という前提条件に基づいた分析手法では、時間依存関係を調査することはできません。

そこで、「データが同一の分布に従う」という条件を元に、時間に依存した前提条件を考えることで、時系列データ解析が可能になります。その前提条件というのが、弱定常性というものです。

定常性には大まかに2種類定義があり、弱定常性と強定常性の二つがあるのですが、まずは弱定常性のみを示します。


【弱定常性の定義】
弱定常性を持つという定義は、任意のthに対して、以下を全て満たす時に言います。

  1. E(y_t)=a => 平均が一定
  2. Var(y_t)=\sigma_0 => 分散が一定
  3. Cov(y_t, y_{t-h}) = \sigma_h => 自己共分散がラグhにのみ依存


次に、強定常性の定義です。

【強定常性】
任意のthに対して、(y_t, y_{t+1},...,y_{t+h})^{T}の同時分布が同一になる場合、過程は強定常性という。

これらの定義から、弱定常性は「時点ではなく、lagにのみに線形の依存関係が存在する」ことを示していること、強定常性は「時点ではなく、lagにのみに線形の依存関係が存在するだけでなく、すべての形の依存構造がlagにのみにある」ことを示していることになります。

○White Noise

定常な時系列の中でももっとも簡単で重要な系列であるのが、このWhite Noise(ホワイトノイズ、白色雑音)です。White Noiseでとは、平均が0、分散がある一定の値をとり、全ての自己共分散が0になっているものをさします。

【定義】

  • E(y_t)=0 => 平均が0
  • Var(y_t)=\sigma^2 => 分散がある一定の値をとる
  • Cov(y_t, y_{t-h}) = 0 => 自己共分散が0

このWhite Noiseは、時系列モデルにおいて確率的変動を表現するところとして表現することができます。また、White Noiseが弱定常性を満たすことは明らかです。

■参考文献

White noise - Wikipedia

○見せかけの回帰・単位根検定・共和分検定

ARIMAなどのモデルに入る前に、このテーマについて扱っておきます。

見せかけの回帰とは、こちらのブログで示されている説明を引用させていただくと、

デタラメな2つの数字同士であっても、それが「前の日の分に今日の分を足す」操作をするだけで、勝手にお互いに関連があるように見えてしまうのです。これが見せかけの回帰です。

ということらしいです。見せかけの回帰についてや単位根過程についてはこちらに詳しくかいてあり、それも参考になりました。

○AR(Auto Regressive model)

まず、定義は以下の通り。

y_{t} = \sum_{i=1}^{p} \gamma_{i}  y_{t-i} + C + \epsilon_{t}

  • p : lagの数
  • C : Constant
  • \gamma_{i} : parameter
  • \epsilon_{t} : White Noise

\gamma_{i}の値が例えば正の値を取ると、過去のその時点と同じ方向に進もうとする傾向が強くなるので、時系列におけるデータの変化が同じ方向に行こうとします。

逆に、負の値を取ると、過去のその時点と逆の方向に進もうとする傾向が強くなるので、時系列における変化がブレブレになります。

○MA(Moving average model)

定義は以下の通り。

y_{t} = C + \epsilon_{t} + \sum_{i=1}^{q} \theta_{i}\epsilon_{t-i}

  • q : lagの数
  • C : Constant
  • \theta_{i} : parameter
  • \epsilon_{t} : White Noise

これを見ると、パラメーター\theta_{i}の値が正だと、同じ方向に動く傾向があり、また負だと逆方向に進む傾向が強くなるので、時系列における変化がブレブレになります。これは、ARと同じような感じです。

○ARMA

先ほど示したARモデルとMAモデルを組み合わせたものです。定義は以下の通り。

y_{t} = C + \sum_{i=1}^{q} \theta_{i}\epsilon_{t-i} +  \sum_{i=1}^{p} \gamma_{i}  y_{t-i}

○ARIMA(Auto Regressive Integrated Moving Average)

沖本先生の本に実際の定義はあるらしいのですが、こちらの方から引用させていただくと、

d階差分をとった系列が定常かつ反転可能なARMA(p,q)過程に従う過程は次数(p,d,q)の自己回帰和分移動平均過程もしくはARIMA(p,d,q)と呼ばれる。

ということらしいです。d=0の時は、ARMAモデルということになりますね。

○ARIMAX

これは、ARIMAモデルは基本的には上で適宜される1変量による自己回帰なんですが、例えば曜日とか天気とか気温とかそういう効果を取り入れたいときに、使用するモデルです。これについては、こちらの記事が参考になりました。

○ARFIMA、SARIMA、、、

他にもたくさんあるみたいです笑。またここは調べたら更新します。

Python/Rでの実装

Pythonでもできるみたいですが、色々調べた感じでは、Rの方がパッケージの充実度としては高い感じの印象を受けました。Pythonの方が言語としては好きなので、色々頑張りましたが結局Rで実装しました笑

時系列解析系で使えるRのパッケージの一覧は以下にあります。

CRAN Task View: Time Series Analysis

ありすぎてやばいっすね。笑

で、どうしよっかなーと思っていたら、以下の資料を見つけました。

www.slideshare.net

○DeepLearningで時系列解析

以下の資料を最近見つけた。

qiita.com


○参考にした本



経済・ファイナンスデータの計量時系列分析


また書き足したら更新します。

Macでscreenを使うときのインストールからコマンドまでのまとめ

こんにちは。以下、自分用のメモです。

○Screenとは

仮想的に複数の端末を起動させて、いろんな作業を同時にやっちゃおうっていうことをしたり、画面を分割したりできる便利なやつです。

○Homebrewでインストー

普通にHomebrewでインストール可能です。ただ、縦方向の分割もしたい場合は、バージョンを最新のやつで入れたほうがいいのと、Macに標準で入っている場合とのバッティングがあるので、それを回避する必要があります。

brew update
brew tap homebrew/dupes # tapします
brew info screen # 最新のscreenの情報の確認
brew install --HEAD screen   # 最新のバージョンのインストール

○Screenの環境設定

基本的には、以下のサイトを見ればだいたいやりたいことができるので、そこにおまかせします。

wadap.hatenablog.com

○Screenでよく使うコマンドまとめ

「A=>B」 は、「Aの後B」という意味。

目的 コマンド
screenの起動 terminalでscreenと入力
複数のシェルの起動 terminalでscreen -t newtermと入力
とある番号の端末に移動 ctrl + j => 数字
端末のリストを確認 ctrl + j => l (アルファベットのエル)
画面を横方向に分割 ctrl + j => S
画面を縦方向に分割 ctrl + j => l(棒線)
ターミナルの移動 ctrl + j => TAB
画面分割を閉じる ctrl + k => X