pandasでDataFrameを作成する場合はcsvファイルなどから読み込むことが多いと思いますが,今回はpandasを使ってWEBからDataFrameを作成する方法を紹介します.pandas.read_htmlを使うのですがlxml, beautifulsoup4, html5libに依存していますのでcondaかpipで先に入れておきます.
pip install lxml beautifulsoup4 html5lib
株価データなどの取得を例にしていることが多いですが,今回はWikipediaの量子化学計算パッケージ一覧からテーブルを取得します.
import pandas as pd url = 'https://en.wikipedia.org/wiki/List_of_quantum_chemistry_and_solid-state_physics_software' dfs = pd.read_html(url) print(len(dfs)) df = dfs[0][1:]; df.columns=dfs[0].loc[0,:] df.head()
Package | License† | Language | Basis | Periodic‡ | Mol. mech. | Semi-emp. | HF | Post-HF | DFT | GPU | |
---|---|---|---|---|---|---|---|---|---|---|---|
1 | ABINIT | Free, GPL | Fortran | PW | 3d | Yes | No | No | No | Yes | Yes |
2 | ACES | Free, GPL | Fortran, C++ | GTO | No | No | No | Yes | Yes | Yes | Yes |
3 | AMPAC | Academic | Unknown | Unknown | Unknown | No | Yes | No | No | No | No |
4 | ADF | Commercial | Fortran | STO | Any | Yes | Yes4 | Yes | No | Yes | Yes |
5 | Atomistix ToolKit (ATK) | Commercial | C++, Python | NAO, EHT | 3d9 | Yes | Yes | No | No | Yes | No |
read_htmlはhtmlを読み込んでタグを取得し,テーブルをリストで返します.今回はテーブルは1つですが,複数のテーブルがある場合は望みのテーブルがどれかを中身を確認していく必要があります.
df[df.Language == 'Python']
Package | License† | Language | Basis | Periodic‡ | Mol. mech. | Semi-emp. | HF | Post-HF | DFT | GPU | |
---|---|---|---|---|---|---|---|---|---|---|---|
69 | PyQuante | Free, BSD | Python | GTO | No | No | Yes | Yes | Yes | Yes | No |
70 | PySCF | Free, BSD | Python | GTO | Yes | No | No | Yes | Yes | Yes | No |
試しにpythonで書かれているパッケージを表示してみるとPyQuanteとPySCFがでてきます.PyQuanteは現在PyQuante2になっていますが,python2.7のみです.どちらのパッケージも速度的にGaussianやGamessを置き換えると言うよりも量子化学の教育用途を想定しているようです.
今回扱ったWEBから自動で情報を取得する方法はスクレイピングと呼ばれていています.最初にインストールしたbeautifulsoupはスクレイピング用のpythonライブラリで,データ分析を行う前の下準備に大変有用です.スクレイピングを行う際には著作権等にも気をつける必要がありますので,そのうち記事にする予定です.
コメント