大事なことしか話さない

学んだことの備忘録 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

vscodeとpipenvでpylint - unable to importとなる問題

vscodepythonのファイルを開いた時、しっかりインストールされているはずなのにpylintのunable to importが出てしまうことがある。

これを解決するためのチェックリストを示していく

  1. vscodeで正しいフォルダごと開く
    vscodeで開くべきは.pyなどのファイルではなく、「Pipfileなどが入っているフォルダ」である。 例えば、以下のような例では、vscodeで開くべきはhoge.pyでも、srcでもなく、peterである。

f:id:bnbnp:20190416154606p:plain

  1. しっかりnumpyなどがインストールされてるか確認する
    説明不要

  2. .envでpythonのパスを変更する(参考)
    Pipfileが入っているフォルダに、

    PYTHONPATH=./backend

    と書かれたファイルを追加する
    この時、ファイルの名前を「.env」とする

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つに関係があるとは思わないが、科学者・インテリが必死に考えた嘘を見破るのは難しいだろう

pipenvでjupyter notebookが使えない(importできない)問題

【問題】

pipenvで

pipenv install jupyter numpy

のようにしてjupyter notebookを立ち上げたところ、

numpyImportError: No module named 'numpy' 

のようなエラーが出てしまう

なおterminalから直接.pyを起動させるとnumpyのimportはうまくいくのに、jupyterからだとimport出来ないので、明らかにjupyterの問題だと判別できる

【解決策】

pipenv install "tornado<6" numpy jupyter

以上のように、 "tornado<6"というのを一緒にダウンロードすると問題なくnumpyなどがimportできる

いつも使ってるコマンドを自分用にメモしておく↓

pipenv install numpy scipy pandas scikit-learn matplotlib jupyter "tornado<6"

最低限のツールは入っているのでここにどんどん必要なものを足していってほしい。

【tornadoって何?】(蛇足)

こんな邪魔なやつなんのためにあるんだよって思ったので調べてみた

tornadoはpythonのwebフレームワークのようで、jupyterとも関わりがあるっぽい。

Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed. By using non-blocking network I/O, Tornado can scale to tens of thousands of open connections, making it ideal for long polling, WebSockets, and other applications that require a long-lived connection to each user.

Tornado Web Server — Tornado 6.0.2 documentation

【参考資料】

https://github.com/jupyter/notebook/issues/4437

https://stackoverflow.com/questions/54963043/jupyter-notebook-no-connection-to-server-because-websocket-connection-fails