pandasでWEBサイトからデーターフレームを作成

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で書かれているパッケージを表示してみるとPyQuantePySCFがでてきます.PyQuanteは現在PyQuante2になっていますが,python2.7のみです.どちらのパッケージも速度的にGaussianやGamessを置き換えると言うよりも量子化学の教育用途を想定しているようです.

今回扱ったWEBから自動で情報を取得する方法はスクレイピングと呼ばれていています.最初にインストールしたbeautifulsoupはスクレイピング用のpythonライブラリで,データ分析を行う前の下準備に大変有用です.スクレイピングを行う際には著作権等にも気をつける必要がありますので,そのうち記事にする予定です.

コメント

タイトルとURLをコピーしました