ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

いい加減ちゃんと覚えたい統計学 四分位数編

bellcurve.jp

これを読んだあとのちゃんと理解しているか説明を並べる.

  • 四分位数
    • 代表値の一種
    • データを小さい順から並べて、4つに分割する
      • 1/4の位置のデータ → 第一四分位数 → 最小値から25%の位置
      • 2/4の位置のデータ → 第二四分位数 → 最小値から50%の位置 → 中央値
      • 3/4の位置のデータ → 第三四分位数 → 最小値から75%の位置
  • 奇数・偶数で求め方が違う
    • 求め方1つ!
      • 4k + 1のとき
        • 4の倍数+1のとき、各分点に対応する点があるので計算が簡単
        • データ数が5, 9, 13...
      • データ数が4k + 3のとき
        • 分点が、例えばa地点のデータからa + 1地点のデータの中点をとるので、近い2点のデータの重み付け平均を取るのが一般的な考え方
        • データ数が7, 11, 15...
        • 中央値以外は対応する点がないので、中央値で区切る → 中央値を含む左、右のグループで中央値を求める
      • データ数が偶数のとき
        • 区間幅が3/4などが登場する(ややこしい)
        • データ数が4,6,8,10...
        • 例えばデータが4つ(3,4,9,10)あった場合、幅の数は3なので区間幅は0.75となる
          • 第一四分位数は3 * 0.25 + 4 * 0.75
          • 第二四分位数は9 * 0.75 + 10 * 0.25
          • 分点から遠い側は0.25、近いのは0.75を重み付け平均としてかける
    • 2つめ(ヒンジ)
      • 中央で上半分と下半分に分けて,下半分の中央値を第1四分位数,上半分の中央値を第3四分位数とするといった考え方
      • pandas.quantileで試すと結果があわない・・・なぜ・・・・?(実装を見る元気がないので一旦終了)

追記

pandas.quantileで試すと結果があわない・・・なぜ・・・・?(実装を見る元気がないので一旦終了)

ドキュメントみたら把握した

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.quantile.html

f:id:aipacommander:20200630101538p:plain

linear: i + (j - i) * fraction, where fraction is the fractional part of the index surrounded by i and j.

データの位置が該当しない位置にあった場合どうやって保管する?オプションがあった。で、デフォルトが linear だったので調べたところ、データが10あれば、前半部分が1,2,3,4,5だったとき、i=3,j=4,faction=0.25として計算する。後半部分は6,7,8,9.10だったとき、i=7,j=8,faction=0.75として計算する。こうしたら結果があった。

もやもやが晴れた

ssh-agentを使ったsshログイン

macです。簡単です。

$ ssh-add -K ${登録したい鍵ファイルパス}
Enter passphrase for ${登録したい鍵ファイルパス}:

パスワードを入力してあげます。

その鍵を使ってログインするサーバへログインしてみます。

$ ssh ${configに設定したHOST名}

多段sshとかするときに毎回パスワード入力がだるいのでこれやるとスッキリおすすめ

時系列勉強雑メモ

  • 定常過程が分析しやすいデータである理由
    • 無数に存在する2020年1月1日という気温の特徴を手元にあるたった1つの2020年1月1日のデータで推測しなければならない → これは難しい
    • しかしデータが定常と仮定すると分析が楽
      • 期待値や分散の推定量が時点によって変化しない → 複数時点のデータの平均と分散をとればそのまま推定量として利用できる → これは簡単
  • 対数変換とその解釈
    • 対数変換したものはデータのばらつきがほぼ一定になる
      • ばらつきと指しているのはおそらく上下の振り幅
      • 対数についておさらい
        • log_a ap = p
        • log_2 8 = 3 <-> 23 = 8
        • log_a M = P <-> ap = M
    • Pythonのmath.logはdefaultの底は自然数
      • math.log(math.e) # 1.0
  • 移動平均モデル
    • 同じ値を使うことで自己相関を表現する
      • なんで自己相関を表現したかったんだっけ?
  • ARモデルとMAモデルの関係
    • 係数<1であるAR(1)モデルは∞次数のMAモデルで表現することができる
    • ほーん
  • MAモデルの反転可能性
    • 予測誤差(ε_t)の大小は過去データから判断することができる → ホワイトノイズって予測誤差だっけ???

Ubuntuにrpy2を入れたい

AnacondaがインストールされたUbuntuでrpy2を使いたいのでpipで入れようとした。

$ pip install rpy2

# ...
    ERROR: Complete output from command python setup.py egg_info:
    ERROR: cffi mode: CFFI_MODE.ANY
    Error: rpy2 in API mode cannot be built without R in the PATH or R_HOME defined. Correct this or force ABI mode-only by defining the environment variable RPY2_CFFI_MODE=ABI
    ----------------------------------------
ERROR: Command "python setup.py egg_info" failed with error code 1 in /tmp/pip-install-33y9jj0x/rpy2/

調べてみるとRがインストールされていないからだと。

$ apt install r-base -y

このあと再度pipを実行したらうまくいった。

paramikoでSFTPサーバのモックを用意する

さぁーがんばるぞーとぐぐってみたらあった

github.com

pipでinstallすることができます。

$ pip install sftpserver

鍵ファイルが必須と書いてあるため、とてもめんどくさいと思いました。なので、試行錯誤して鍵が必要なくなるよう設定やらコードをイジイジしてたのですが、、、paramiko全然わからん...

あきらめて鍵ファイルを落としてきました。paramikoのデモディレクトリにあります。

github.com

$ nohup sftpserver -k ./test_rsa.key -l DEBUG &

起動方法はこんな感じ。

$ sftp -P 3373  hoge@localhost

試しに接続するとうまくいきました。便利。