Mathematica のインポート機能は、 バージョンを経るごとに着実に強化されて読み込み可能フォーマットが増え続けている。きっと、コンピューティング対象を広げることが、Mathematica 開発陣にとって大きな正義のひとつなのだろう。 今回は、 その中から、Mathematica 8 の、ウェブページつまり HTML インポートの機能の一部を紹介したい。

Mathematica 8 の FinancialData 関数では日本の株式の情報が取得できないが、例えば、Yahoo JAPAN のファイナンスのサイトには、最近1ヶ月の日経平均株価が掲載されたページがある。このページに掲載された1ヶ月分の終値を Mathematica に読み込むには、本稿執筆時点では次のようにする。

data0 = Import[
  "http://stocks.finance.yahoo.co.jp/stocks/history/?code=998407.O",
  {"HTML", "Data"}][[1, 2, 1, 3, 1, 2 ;;, {1, 5}]];
data = {#[[1]], ToExpression[StringReplace[#[[2]], "," -> ""]]} & /@
  data0;
DateListPlot[data, Joined -> True]

Import の第2引数に渡している {"HTML", "Data"} は、HTML ページから表形式のデータを読み込むための指定。

Import の後に続けた [[1, 2, 1, 3, 1, 2 ;;, {1, 5}]] は、このページから読み込まれたデータの特定の部分の位置を指示するもの。いちどこの指定なしで読み込んだ結果を表示してみて、続けて、[[1]] だけを付けた場合、[[1, 2]] を付けた場合、[[1, 2, 1]] を付けた場合...、という具合に、順に上の例と同じになるまで指定を増やしていくと、どういう風に位置を特定しているのかが分かる。

注意して欲しいのは、このアドレスで得られるページの HTML ソースの構成が変わってしまう可能性が常にあることだ。ページのレイアウトが変わると、上で示した [[1, 2, 1, 3, 1, 2 ;;, {1, 5}]] の位置指定では目的のデータをひけなくなるかもしれない。また、table タグによる記述が使われなくなって {"HTML", "Data"} では読み込めなくなることもあるかもしれない。上で「本稿執筆時点では」と断ったのはそのためで、上のコードはあくまで参考例。

Yahoo ファイナンスページでは、金額数値が3桁区切りで「,」を挟む形になっているため、数値ではなく文字列として読み込まれてしまう。 2行目で、 StringReplace したあと ToExpression しているのは、 これを数値に戻すための処理。
元ページの日付文字列は「2011年4月11日」といった形式だったが、Mathematica 8 では、これはこのまま DateListPlot に渡すことができた。

いかがだろうか。
今回は、ver.6 以降で使えるようになった、HTML 中の table タグ部分を読み込む {"HTML", "Data"} を紹介したが、ver.8 では、この他にも次のような情報を読み込むことができる。ヘルプの ref/format/HTML もご参照。

  • ページ内のリンクアドレス一覧 "Hyperlinks"
  • ページに貼られている画像 "Images"
  • ページに貼られている画像のアドレス "ImageLinks"
  • ページ内のテキスト情報をプレーンテキストにしたもの "Plaintext"
  • ページのソース "Source"
  • ページのタイトル "Title"
  • ページソースを Mathematica の XMLObject / XMLElement 式にしたもの "XMLObject"

{"HTML", "Data"} では抽出できない情報を利用したい場合は、"XMLObject" で読み込んでおいて Cases で抽出するのが手軽なことが多い。もちろん、 "Source" で読み込んで、RegularExpressionStringCases を使った文字列操作で抽出した方がよいケースもあるだろう。

ちなみに、ローカルファイルとインターネット上のファイルは、区別なくインポートできるので、ダウンロードした HTML ファイルからのインポートも可能だ。

※この記事の内容は執筆者の個人的見解で、ヒューリンクスによる公式情報ではありません。[免責事項]

トラックバック

この記事へのトラックバックURL
http://blog.hulinks.co.jp/cgi/mt/mt-tb.cgi/466
内容に対しての関連性がみられないものは削除する場合があります

コメントの投稿

Emailアドレスは表示されません。は必須項目です。
ヒューリンクス取り扱い製品の内容や購入に関するお問い合わせはヒューリンクスサイト連絡先へお願いいたします。投稿前にその他の注意事項もご覧ください。

HULINKS サイトの新着情報