大事なことしか話さない

学んだことの備忘録 python/金融工学/ベイズ統計学など

anacondaを使わずpip, pipenvでspyderを使う方法

Installation — Spyder 3 documentation

command not found: spyder

こんなエラーが出る人へ

公式ではanacondaを使ってインストールしろって言っているが、今更anacondaなんて使ってられない!って人向けに、pipenvだけでspyderを使う方法を示していく。

  1. Spyderのインストール
pip install spyder
  1. Spyder3の起動
spyder3

とターミナルで打つだけ。

この時spyder3なしで試して何度もハマってしまった

なんでpip installは3無しなのになぜ起動時は3が必要なんだ、、、


Spyder初回起動時に色々設定するように求められるが、以下のようにデフォルト設定でうまくいったので是非参考にしてほしい:

  • Console: Execute in current console
  • General settings: 空欄
  • Working Directory settings: The directory of the file being executed

f:id:bnbnp:20190423154628p:plain

2019-自殺統計についての意外な事実

平成30年中における自殺の状況

毎年3月になると厚生労働省が自殺についての統計を発表する(自殺の統計:各年の状況

いくつか興味深いことがあったので、統計的視点からいくつかピックアップしていく

  • 自殺者はバブル崩壊から年々減少傾向にあるが、バブルにめちゃくちゃ自殺率が上昇したのが回復しているだけで、1970年代と2019年の自殺者数・自殺死亡率はだいたい同じくらい

  • 2018年で自殺者が一番多いのは3月。これは季節の変わり目で自律神経が乱れることや、春で周りだけ楽しそうで自分が孤独感を感じてしまうことが原因だと報告されている*1

  • だから3月は自殺対策強化月間となっている

  • しかし、前からずっと3月が自殺率が高いわけではない。2003年には4月、2000年には6月だったり*2と、意外と時代によってバラバラ

=>イデア:自殺者数の先行指数となる係数(自然災害・失業率・寒暖差・降雨日数)から、将来の自殺者数の予測をし、自殺防止にかけるリソースを最適化するのはどうだろうか?
例えば、こころの相談室のオペレーターの数、広告数などを調節できそう
僅かな効果の違いでも、人が1人でも助かるなら効率化するリターンはあるはず
研究の例: Advanced Daily Prediction Model for National Suicide Numbers with Social Media Data (7日後の自殺者数をSNSのみんなの投稿から予測した論文。経済問題と感情に関する単語が多く出てきたときに自殺者が増えるらしい)

  • 自殺率が一番高いのは、ここしばらくずっと50~59歳

男女の話

 家庭問題 健康問題 経済・生活問題 勤務問題 男女問題 学校問題 その他 合計
男÷女 1.56 1.41 6.90 6.98 1.74 2.22 2.62 2.05
カテゴリ別自殺者数÷総自殺者数 15% 49% 16% 10% 3% 2% 5% 100%

男の自殺者数を女の自殺者数で割った数字を表にしてみた

中でも異様なのが、経済・生活問題勤務問題による自殺者数の男女差だろう

もしあなたが独裁する国で、この男女差は男女差別だ!と糾弾され、この男女差を減らす政策を打つとしたら、下の2つのうちどちらを行うだろうか?

①男性の職場環境、給与体系を中心に改善する
②女性の職場環境、給与体系を中心に改善する

直感的には①が支持されそうだが、②によって「働いてお金を稼ぐ」という男のジェンダーロールを解消してあげるのももしかしたら効果的かもしれない

科学者やめますか?p値やめますか?

www.itmedia.co.jp

声明:The ASA's Statement on p-Values: Context, Process, and Purpose

参考論文:Inferential Statistics as Descriptive Statistics: There Is No Replication Crisis if We Don’t Expect Replication

まとめ

「もうp値を盲目に信用するのやめて、ちゃんと実験されてるかチェックしようぜ」と科学者たちが声明を出して話題になってる

<引用>Rather than focusing our study reports on uncertain conclusions, we should thus focus on describing accurately how the study was conducted, what problems occurred, what data were obtained, what analysis methods were used and why, and what output those methods produced.*1
<意訳>(仮説検定をp値で判断するという)不確実な手法の結果なんて信用しないで、実験の形式・集まったデータの性質・分析手法・なぜその手法が使用されたのか・その手法を使って出た結果はどんなものであったのかに注目すべきである。

そもそもp値ってなに?

「第一種の過誤を犯す確率」という正確な定義もあるが、ざっくり言ってしまうと以下のようになる

<引用>Informally, a p-value is the probability under a specified statistical model that a statistical summary of the data (e.g., the sample mean difference between two compared groups) would be equal to or more extreme than its observed value.
<意訳>統計的な値(平均身長など)が2つのグループ(男と女)で同じである確率

なんでp値を使っちゃだめなの?

  • 5%を基準に、5%以下は意味がある、5%以上は意味がないという0か100で決めてしまうのは乱暴すぎるから

p値に関する誤解

  • p値が高いから、2つのグループには差がないと決めつけるのは誤り
    • よくありがちなのが「p値、つまり男女の平均身長が同じである確率が10%」という結果が出たとき、「5%以上だから平均身長に差はないよね」ってするのは直感的にも間違っていることがわかると思う。

じゃあどうすればいいの?

  • p値だけではなく、実験の手法、分析モデルなどをしっかり検証するべき
  • ベイズ的に考える。例えば男女の身長差がこれくらいあるよっていうのを5%!っていうふうに一意に決めないで、このくらい差がある確率はXX%という結果を出してあげる

でも実際、、、

世の中の多くの人は統計モデルなんて興味ないし、学者もこんな感じで間違えるし、みんなに「統計モデルを理解しよう」っていっても不可能に近い。

さらに、実際のビジネスの場では不確実性の中で決断をしなければ行けないシーンがあるので、信憑性が低いから分析結果を100%無視しましょうというのはもったいない。

やんわりとしたメッセージとしては「科学、統計の結果は100%信用しちゃいけないよ」といったところだろうか

www.tylervigen.com

こんなサイトが有る。
無関係の2つのデータを並べると、ピッタリ動きがあっているというものだ。
例えば「ニコラス・ケイジの一年間の映画出演本数」と「一年間にプールで溺死した人数」など。

このくらい馬鹿げた2つの変数の相関だったら誰も2つに関係があるとは思わないが、科学者・インテリが必死に考えた嘘を見破るのは難しいだろう

JupyterLabで行番号をデフォルト表示したい

【動機】

Jupyter Notebookの進化版であるJupyterLabで行番号をデフォルトで表示したい

【やり方】

  1. ⌘と,を同時押し、もしくは「Settings」→「Advanced Settings Editor」を開いて設定画面を開く

  2. Notebookを選択し、右側に

{
    "codeCellConfig": {
      "lineNumbers": true
    }
}

もしくは

{
    // Notebook
    // @jupyterlab/notebook-extension:tracker
    // Notebook settings.
    // **************************************

    // Code Cell Configuration
    // The configuration for all code cells.
    "codeCellConfig": {
      "insertSpaces": true,
      "lineHeight": null,
      "wordWrapColumn": 80,
      "fontSize": null,
      "lineNumbers": true,
      "tabSize": 4,
      "fontFamily": null,
      "autoClosingBrackets": true,
      "readOnly": false,
      "matchBrackets": true,
      "lineWrap": "off"
    },

    // Markdown Cell Configuration
    // The configuration for all markdown cells.
    "markdownCellConfig": {
      "insertSpaces": true,
      "lineHeight": null,
      "wordWrapColumn": 80,
      "fontSize": null,
      "lineNumbers": false,
      "tabSize": 4,
      "fontFamily": null,
      "autoClosingBrackets": false,
      "readOnly": false,
      "matchBrackets": false,
      "lineWrap": "on"
    },

    // Raw Cell Configuration
    // The configuration for all raw cells.
    "rawCellConfig": {
      "insertSpaces": true,
      "lineHeight": null,
      "wordWrapColumn": 80,
      "fontSize": null,
      "lineNumbers": false,
      "tabSize": 4,
      "fontFamily": null,
      "autoClosingBrackets": false,
      "readOnly": false,
      "matchBrackets": false,
      "lineWrap": "on"
    }
}

これを貼り付ける。

f:id:bnbnp:20190213221357p:plain

3. 右上のボタン、もしくは⌘+sで上書き保存してJupyterLabを再起動。

numpyが壊れていてimportは出来るもののその他の機能が使えない問題の解決法

【問題】

import pandas as pd
>>>AttributeError: module 'numpy' has no attribute '__version__'
import numpy as np
np.dot(hoge)
>>>AttributeError: module 'numpy' has no attribute 'dot'
import matplotlib
>>>Missing required dependencies ['pytz']

numpy自体のimportは成功するがpandas, matplotlibなど関連パッケージのimportや、numpyの中身が使えなくなってしまった。

【解決法の前に】

同じディレクトリにnumpy.pyみたいなファイルが紛れ込んでないかチェック。試すならなんにもないDesktopなりでipythonを走らせてimport pandasでもすればいい。

【解決法①】

condaでnumpyの再インストール。駄目ならanacondaの再インストール。

conda uninstall numpy
conda install numpy

これが一番手っ取り早い

【解決法②】

pipのnumpyの再インストール。pipを消したりいじってるとこれになるかも。自分はこれだった。

conda update --all
pip uninstall -y numpy
pip uninstall -y setuptools
pip install setuptools
pip install numpy