python3でExcelを読み込むのにurllib,xlrdを用いた
python3だとなんか違って少しだけ躓いた
下記サイトでpandasの使い方などを練習してたところ
ITエンジニアのためのデータサイエンティスト養成講座(3):データを取り込む・格納するための方法を理解する (1/4) - @IT
pythonのバージョンの違いなどでライブラリが違ったのでメモ
自分の環境は
python3.4..3 :: Anaconda 2.3.0
Mac OsX 10.9
です
ライブラリのインストール
必要なライブラリ
・urllib
・xlrd
python3にurllib2は無い
記事内ではurllib2を用いているが、python3系にそのライブラリは無く
urllibというライブラリを使うことになる
おそらくurllibはpythonに最初から入っているので
($ python で対話モードに入って import urllib してそのまま続けれたら入ってるって確認できます)
また、xlrdというのは基本的にpipなどでインストールする必要がある
僕はanacondaを用いていたので最初からインストールされていましたが
入ってない場合は下記が参考になるかと
Excel ファイルを Python 3.2 で読む - potass' blog
urllibを使って動かしてみる
結論から言うと
socket = urllib2.urlopen(link)
ではなくて
socket = urllib.request.urlopen(link)
とすればよい
記事の4ページ目
ITエンジニアのためのデータサイエンティスト養成講座(3):データを取り込む・格納するための方法を理解する (4/4) - @IT
の、インターネット普及率の推移 のところをやってみようとして、ipythonで打ち込んでみる
socket = urllib2.urlopen(link)
のところはurllib2が使えないのでurllibで書き換えてみる
socket = urllib.urlopen(link) --------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-8-cd2bac749346> in <module>() ----> 1 socket = urllib.urlopen(link) AttributeError: 'module' object has no attribute 'urlopen'
moduleはそんなものもってませんって出る
じゃあどうやってopenするんだと思ってググってみると下記stackoverflowがヒットする
python - urllib "module object is not callable" - Stack Overflow
違う質問に関する記述だけど
どうやらオブジェクトとして呼び出す必要があるからって書かれてる
とりあえずURL呼び出せそうなのでこれで書きなおしてみる
ln [4]: socket = urllib.request.Request(link) ln [5]: opener = urllib.request.build_opener() ln [6]: response = opener.open(socket)
とすればちゃんといけました、が三行も書かないといけないの・・・?
と思ってドキュメント見たら一番上に載ってたちゃんと読めばよかった・・・orz
21.6. urllib.request — URL を開くための拡張可能なライブラリ — Python 3.3.6 ドキュメント
urllib.request.urlopen(url, data=None, [timeout, ]*, cafile=None, capath=None, cadefault=False)
でやればurlopenできますよって書いてあった
ので、全体を書き直すと以下のようにすればできました解決
In [1]: import pandas as pd In [2]: import urllib In [3]: link = 'http://www.soumu.go.jp/johotsusintokei/field/data/gt010102.xls' In [4]: socket = urllib.request.urlopen(link) In [5]: xls = pd.ExcelFile(socket) In [6]: df = xls.parse(xls.sheet_names[0], header=2, index_col=0, skip_footer=9) In [7]: df.T Out[7]: 世帯 個人 企業(従業者100人以上) 事業所(従業者5人以上) 平成9年末 6.4 9.2 68.2 12.3 平成10年末 11 13.4 63.8 19.2 平成11年末 19.1 21.4 78.3 31.8 平成12年末 34 37.1 89.3 44.8 平成13年末 60.5 46.3 94.5 68 平成14年末 81.4 57.8 96.3 79.1 平成15年末 88.1 64.3 97.9 82.6 平成16年末 86.8 66 98.7 81.8 平成17年末 87 70.8 97.6 85.7 平成18年末 79.3 72.6 98.8 85.6 平成19年末 91.3 73 99.3 - 平成20年末 91.1 75.3 99.3 - 平成21年末 92.7 78 99.9 - 平成22年末 93.8 78.2 99.7 - 平成23年末 86 79.1 99.3 - 平成24年末 86.2 79.5 99.9 - 平成25年末 84.9 82.8 99.9 -