Date
  • 統計解析については R >> Python
  • その他についてはPython >> R言語
  • Jupyter notebook で PythonとRを組み合わせて使うスタイルがおすすめ
R Python
環境 RStudio, jupyter jupyter, etc
データ整形 dplyr(tidyverse) pandas
統計 いろいろ scipy.stats, statsmodels
グラフ ggplot2 seaborn, plotnine(ggplot-like)

Rの特徴

  • tidyverse(dplyr, ggplot)の使い勝手がよい
  • 統計パッケージは充実しておりドキュメント,本も豊富
  • それ以外の言語機能、パッケージについてはpythonより数段おちる?特に文字列処理など?
  • そもそもR言語の設計いまいち感を感じる。

Pythonの特徴

  • 文字列処理しやすい. 前処理に向いている.
  • グラフライブラリ seabornが有名だけど、ggplotと比較するとかなり使い方に癖がある.
  • 通常の統計解析はRより数段おとる

Jupyter notebook環境構築

手元の環境が汚れるのがいやなので、Dockerを使っている.

https://github.com/jupyter/docker-stacks/ をベースに必要なパッケージを追加している

official/Dockerfile

FROM jupyter/datascience-notebook

USER root

# .ipython/profile_default/startup/01-startup.ipy でデフォルトでロードされるモジュールを定義
ADD 01-startup.ipy /home/jovyan/.ipython/profile_default/startup/
RUN chown jovyan:users -R /home/jovyan/.ipython

RUN apt-get update && \
    apt-get install -y --no-install-recommends \
         fonts-ipafont graphviz libgraphviz-dev graphviz-dev pkg-config -y --no-install-recommends && \
    rm -rf /var/lib/apt/lists/*

RUN pip install --upgrade pip

USER $NB_UID

# Jupyter notebook extensions <https://github.com/ipython-contrib/jupyter_contrib_nbextensions> の設定
RUN pip install jupyter_contrib_nbextensions
RUN jupyter contrib nbextension install --user

RUN pip install tensorflow==1.10.0 numpy==1.14.5 pandas
RUN pip install openpyxl pymc3 plotnine pyarrow opencv-python keras plydata networkx --upgrade
RUN pip install sympy
RUN pip install scikit-misc graphviz
RUN pip install redis
RUN pip install xlsxwriter
RUN pip install flask flask-wtf flask-bootstrap

# fontList.jsonを消しておくと、フォント変更後にmatplotlib.font_manager._rebuild() する必要がない。<https://qiita.com/yniji/items/3fac25c2ffa316990d0c>
RUN rm .cache/matplotlib/fontList.json

RUN jupyter nbextension enable tox2/main
RUN jupyter nbextension enable nbextensions_configurator/tree_tab/main

.ipython/profile_default/startup/01-startup.ipy

import pandas as pd
import numpy as np
import seaborn as sns
import scipy.stats as stats
import matplotlib
from matplotlib import pylab as plt
from IPython.display import display, HTML
import statsmodels.api as sm
from statsmodels.formula.api import ols
from rpy2.robjects import r as R
%load_ext rpy2.ipython
%matplotlib inline

docker-compose.yml

version: '2.3'
services:
  official:
    restart: always
    build: official/.
    container_name: myjupyter
    ports:
       - "8888:8888"
       - "5000:5000"
    volumes:
       - ~/projects/myjupyter:/home/jovyan/myjupyter
       - ~/.keras:/home/jovyan/.keras
    command: "start-notebook.sh --NotebookApp.token=''"
    links:
      - redis

  redis:
    restart: always
    image: redis
    volumes:
      - ~/tmp/redis:/data
    command: redis-server --appendonly yes

一時ファイルのキャッシュとしてredisを使うのでdocker-composeで一括管理している

データ解析の基本的な流れ

  • pythonで
    • excel, csvのロードと匿名化
    • 前処置
    • 適宜、DataFrameはpickleしlocalのredisにセーブしておく
  • jupyter notebookで
    • rpy2をつかってRとpythonで相互にデータやりとりできる
    • データ整形、集計 (pandas, dplyr)
    • グラフ(plotnine, ggplot2)
    • 統計解析

Rpy2

RをIPython Notebookから使うhttps://oku.edu.mie-u.ac.jp/~okumura/stat/ipynb.html

Jupyterで1つのノートブック内にRとPythonを共存させる https://qiita.com/tanakarian/items/609b550c4b18e5a4b925

上記とおり、"%R -i", "%R -o", "%%R" だけで相互にデータやりとりできる


Comments

comments powered by Disqus