調べ物した結果

現役SEが仕事と直接関係ないことを調べた結果とか感想とか

JupyterLab初めてつかった


WEB+DB PRESSにPythonを使ったデータの可視化が乗ってたので
COVID−19のCSVの可視化のところを本の通りに動かしてみた

環境

古のMacBookAir

読んでもそのまま動かなかったところ

SSLCertVerificationError でうごかねぇ。

ほぼ。最初。まるっきり最初でインターネッツからCSVをダウンロードするところでつまづいた。
最初に答え
qiita.com
まぁ、ここの通り。Python3.8.5だったので、そこだけ合わせた。

Pythonをインストールした時に気づくべきだったんだけど、証明書の問題で10分ほどはまった。
JupyterLabも初めて触るものだから原因の切り分けに苦労したけど、割と綺麗に切り分けできたとおもう。10分程度のはまり方で済んだともいえる。
そこを褒めてあげたいので思考の流れとしては
SSL?あーん?Jupyterだからかな。。。とりあえず切り分けよ。」

VSCODE で同じソースを流してみる。同じエラーがでる」

「同じエラーということはJupyterLabが原因ではなさそう。ということはPythonでよくあるエラーだろうか。。。」

Mac Python SSLCertVerificationError」でググる

「あ。それっぽい記事ある。これやろ。ぶちこも」
という流れ。ライブラリの問題なのか端末の問題なのか環境の問題なのか。SSLってのが微妙に面倒だったけどうまくいってよかった。

年代の調整

年代がCSVに文字列で入ってたりして平均をとるには適さない状態になっている。
本書にそって、書いてあるとおり多少乱暴でも平均を取れるように調整してい場所でイレギュラーデータが増えていた。
本書の方は

df1['年代'] = df1['年代'].apply(lambda x: x.replace('0-10','1'))
df1['年代'] = df1['年代'].apply(lambda x: x.replace('不明','50'))

0−10という範囲と、年齢不詳を平均年齢の50に置き換えている。
この後intにキャストするがそこでエラーになった。前述の通りイレギュラーデータが増えていた。

df1['年代'] = df1['年代'].apply(lambda x: x.replace('90以上','90'))
df1['年代'] = df1['年代'].apply(lambda x: x.replace('100歳以上','100'))

エラー内容をみて上のように高齢の条件も追加してやった。「歳」がついてたりついてなかったりするところがなんとも生データらしいなぁと思う。
今後もイレギュラーが増える可能性もあるので、強制的にキャストするかエラー処理は考えた方がいいかもしれない。

感想とか

JupyterLabとても便利だった(語彙力)
Pythonのソースは少ない記述で異様にすぐ完成するからビビるんだけど、コードの実行結果をちょこちょこ見たい時にPrintデバッグが捗る捗る。
VSCODE等つかえばもちろんできなくもないんだけど、ざざざっとかいて結果流しながらコードいじれるのはすごくよい。
SQLなんかも似たようなデバッグをよくするんだけど(服問い合わせ部分をドラッグして結果見たり)あれと同じような感じ。というかSQLServerとかも似たように動いてくれないだろうか(書いてる側からDBアクセスされても困るっちゃ困るけどよー)

最後に筆者のGitHubソースコードでもForkしてちょこっと眺めて終わる。本誌に書いてるファイル名とかと微妙にちがってるからそのままじゃ動かないんだけど、まー想定読者的にはその程度なおすでしょう。といった感じ