urllibでurlから画像ダウンロードするときにタイムアウトを設定する
pythonで画像ダウンロードする方法を調べたら出てきたのが
urllib.request.urlretrieve
を使う方法だったので、これを使っていました。
課題
しかしながら、たくさんの画像を一度にダウンロードしようとしたときにurllib.request.urlretrieve
を使う方法だとタイムアウトをセットできず、
無駄に時間がかかってしまう問題がありました。
解決方法
urllib.request.urlopen
はタイムアウトをセットできます。
これを使えば問題を解決できそうです。
21.6. urllib.request — URL を開くための拡張可能なライブラリ — Python 3.6.5 ドキュメント
実装
実装は以下のように一度 read()
でメモリ上に読み込んでからファイルに
書き込む必要があるみたいです。
timeoutは秒単位で設定できるということなので、10秒でセットしてみました。
try: data = urllib.request.urlopen(url, timeout=10).read() with open(file_name, mode="wb") as f: f.write(data) except: print("failed to download")
うまく動いてそうです。
ReactNativeにFlowを導入しようとして詰まった
静的方解析ツールFlowをReactNativeのプロジェクトに導入しようと思ったらいろいろ詰まったんですが、 解決は驚くほどあっけなかったです。
解決策
ReactNativeは標準でFlowに対応しているので、プロジェクト立ち上げ時に作成される .flowconfig
の中に書いてあるバージョンに従って flow-bin
をインストールすれば完了です。
.flowconfig
の一番下にこんなのが書いてあるはず。
[version] ^0.65.0
なので
npm i flow-bin@0.65.0 --save-dev
これで良いのです。
この記事を参考にしました。
何で詰まったか
Flowの公式インストール方法を参考にしたのが間違いでした。。。 flow.org
これでセットアップして npm run flow
すると node_modules/react-native/Libraries
の中でたくさんエラーが出ます。
それでおかしいなと思ってここを参考にして.flowconfigいじったり、
その後 npm run flow
して出てきた
Cannot resolve module react-native.
みたいなエラーに戸惑ったり。。。
完全に泥沼にハマりました。
matplotlibについて学ぶ
seabornがいいらしいとか書いておきながらですが、kaggleのkernelや世の中の機械学習の記事を 読んでいるとmatplotlibの使い方も知っておかないとなーと思いました。
以下がmatplotlibの公式サイトで、親切にチュートリアルや詳細なドキュメントが用意されています。
Matplotlib: Python plotting — Matplotlib 2.1.0.post440+gc280700 documentation
もちろん詳細な使い方が知りたくなった場合には公式サイトを見るべきですが、お手軽にはじめるには 以下の記事が入門として非常にまとまっていて参考になりました。
seabornでヒートマップを表示してみる
ぱっと見ただけではよくわからないデータの表も、ヒートマップを使えば意味のあるものに見えてくるということもあるでしょう。 seabornにはヒートマップを描くための関数が用意されているので、それを使ってみたいと思います。
seabornには機械学習のチュートリアルで良く用いられるデータセットが最初から含まれています。 今回はtitanicのデータセットを使います。
import pandas as pd import seaborn as sns import matplotlib.pyplot as plt titanic = sns.load_dataset("titanic") # titanicのデータセット読み込み sns.heatmap(titanic.corr(),annot=True) # 相関係数のヒートマップを作成 plt.show() # 描画
sns.heatmap()
の annot=True
でセルの中に値を表示することができます。
とても簡単にヒートマップを表示することができました。
matplotlibのラッパー、seabornで美しくデータ可視化ができるっぽい
seabornというmatplotlibのラッパーライブラリを使用すると、matplotlibよりも簡単に美しいグラフ描画ができるみたいです。
seaborn: statistical data visualization — seaborn 0.8.1 documentation
import seaborn as sns
matplotlibと一緒にimportしてやると、matplotlibで描画したグラフもスタイルがきれいになります。
公式サイトにTutorialとGalleryがあり、順を追って使い方を学ぶことも、使いたいグラフスタイルを逆引きすることもできます。
pandasでグルーピングとカウント
グルーピングはデータの集計に使えます。
例えばtitanicのtraining dataのDataFrameをtrain_df
として以下のように書くと
train_df.groupby('Sex').max()
こんな結果が得られます。
train_df
に対してSex
でグルーピングしてそれぞれの特徴量の最大値を取得したということです。
最大値が取得できないような特徴量は表示されません。
ただ、全ての特徴量の最大値を取得しても特に意味はないので、 実際に使うときは、どの特徴量を見るのかも指定することでしょう。
train_df.groupby('Sex').max().Age
これで男女それぞれの年齢の最大値だけ取り出せます。
Sex female 63.0 male 80.0 Name: Age, dtype: float64
また、複数の項目でグルーピングして、かつ、グルーピングに使った項目でカウントしたりもできます。
train_df.groupby(['Sex','Survived'])['Survived'].count()
出力
Sex Survived female 0 81 1 233 male 0 468 1 109 Name: Survived, dtype: int64
これで男女の生存数の内訳がわかりますね。
titanic生存予測のkernelがすごい
kaggleのtitanic生存予測のkernelのトップにあった。 まとめ方が見やすく、とにかく執念を感じる!
EDA To Prediction(DieTanic) | Kaggle
それぞれの特徴量のタイプ分けから、どうやって解析すべきか、から どのアルゴリズムを使って予測するのが良さそうかまで丁寧に取り扱ってます。