2023年03月17日08時00分 / 提供:マイナビニュース
今回は、グラフに描画するデータを整理する作業について説明する。
インターネット経由でさまざまなデータを取得できるようになったことで、Webで公開されているデータを利用する機会が増えている。PowerShellは、そうした厳密には構造化されているとは言えないデータから、目的の数値データを取り出す処理にも使うことができる。
→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。
【こちらもオススメ】
【連載】意外と知らないMicrosoft Edgeの便利な使い方
【連載】定時で上がろう! Excel関数の底力
データの準備
Webで公開されているデータにはさまざまなものがあるが、ここでは気象庁が「気象庁|最新の気象データ」で公開している気温データを取得してグラフに描画するケースを考える。このWebページは、執筆時点では次のようなレイアウトでデータが配置されている。
このデータの中から、東京都のデータを取り出すことを考える。東京都のデータは、次のように掲載されている。
Microsoft Edgeの開発者ツールで該当部分を見てみると、table要素の中に記載されていることがわかる。
該当ページのHTMLをダウンロードし、Visual Studio Codeで確認すると次のようになっている。
Visual Studio Codeで閲覧するとフォーマットが自動的に整えられてしまうので、メモ帳でも確認しておく。
要するに、この文字列から地名と気温を抽出するPowerShellスクリプトを書けばよいということになる。
なお、このページのデータはCSVデータとしても提供されているので、通常ならそちらのデータを使う方がロジカルな選択だ。しかし今回は、フォーマットが曖昧な状態のテキストから、目的とする数値を取り出す例を示したいので、あえてWebページからデータを取得している。
Webページを取得するPowerShellスクリプト
まず、対象のWebページを取得して表示するPowerShellスクリプトを作成する。Webページの取得には、Windowsにデフォルトでインストールされているcurlコマンドを使う。curlは強力なコマンドで、LinuxやMacでもよく使われている。
#!/usr/bin/env pwsh
#========================================================================
# 気温データを取得して整理する
#========================================================================
$URL = 'https://www.data.jma.go.jp/obd/stats/data/mdrr/tem_rct/alltable/mxtemsad00.html'
$SrcFile = New-TemporaryFile
curl --get $URL > $SrcFile 2> $null
#========================================================================
# 取得したデータの中身を確認
#========================================================================
Get-Content $SrcFile
#========================================================================
# 作業用の一時ファイルを削除
#========================================================================
Remove-Item $SrcFile
実行すると次のようになる。
PS C:\Users\daichi> .\test-1.ps1
気象庁|最新の気象データ
...
略
...
PS C:\Users\daichi>
必要なデータを取り出すPowerShellスクリプト
次に、必要になる部分だけを抽出する処理を加える。取得したHTMLを中身を分析すると、「>東京都 $SrcFile 2> $null
#========================================================================
# 必要な部分のデータを抽出する
#========================================================================
Get-Content $SrcFile |
Select-String '>東京都