今回は、グラフに描画するデータを整理する作業について説明する。

インターネット経由でさまざまなデータを取得できるようになったことで、Webで公開されているデータを利用する機会が増えている。PowerShellは、そうした厳密には構造化されているとは言えないデータから、目的の数値データを取り出す処理にも使うことができる。

→連載「PowerShell Core入門 - 基本コマンドの使い方」の過去回はこちらを参照。

データの準備

Webで公開されているデータにはさまざまなものがあるが、ここでは気象庁が「気象庁|最新の気象データ」で公開している気温データを取得してグラフに描画するケースを考える。このWebページは、執筆時点では次のようなレイアウトでデータが配置されている。

  • 気象庁|最新の気象データ

    気象庁|最新の気象データ

このデータの中から、東京都のデータを取り出すことを考える。東京都のデータは、次のように掲載されている。

  • 東京都の気温データ

    東京都の気温データ

Microsoft Edgeの開発者ツールで該当部分を見てみると、table要素の中に記載されていることがわかる。

  • 該当部分をMicrosoft Edgeの開発者ツールでチェック

    該当部分をMicrosoft Edgeの開発者ツールでチェック

該当ページのHTMLをダウンロードし、Visual Studio Codeで確認すると次のようになっている。

  • 該当部分のHTMLをVisual Studio Codeで確認

    該当部分のHTMLをVisual Studio Codeで確認

Visual Studio Codeで閲覧するとフォーマットが自動的に整えられてしまうので、メモ帳でも確認しておく。

  • 該当部分のHTMLをメモ帳で確認

    該当部分のHTMLをメモ帳で確認

要するに、この文字列から地名と気温を抽出する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
<!doctype html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>気象庁|最新の気象データ</title>
<meta name="Author" content="気象庁 Japan Meteorological Agency" />
<meta name="keywords" content="気象庁 Japan Meteorological Agency" />
<meta name="description" content="各地の日最高気温、日最低気温を表示します" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<link rel="stylesheet" type="text/css" href="/com/css/define.css" media="all" />
<link rel="stylesheet" type="text/css" href="../../../css/default.css" media="all" />
<link rel="stylesheet" type="text/css" href="../../../css/print.css" media="print" />
<script type="text/javascript" src="../../js/jquery.js"></script>
<style type="text/css" media="all">
...
略
...
PS C:\Users\daichi> 

必要なデータを取り出すPowerShellスクリプト

次に、必要になる部分だけを抽出する処理を加える。取得したHTMLを中身を分析すると、「>東京都</td」という文字列を含んだ行に、欲しいデータが含まれていることがわかる。Select-Stringコマンドレットで東京都の気象データだけを抽出する処理を行うように、先ほどのPowerShellスクリプトを書き換える。

#!/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                                        |
Select-String '>東京都</td'

#========================================================================
# 作業用の一時ファイルを削除
#========================================================================
Remove-Item $SrcFile

実行すると次のようになる。

PS C:\Users\daichi> .\test-2.ps1

<tr class="mtx"><td style="white-space:nowrap">東京都</td><td style="white-space:nowrap">西多摩郡奥多摩町</td><td style="wh
ite-space:nowrap">小河内(オゴウチ)</td><td style="text-align:right;white-space:nowrap;">15.2 ]</td><td style="text-align:

/td><td style="text-align:left;white-space:nowrap;"></td></tr>
<tr class="mtx"><td style="white-space:nowrap">東京都</td><td style="white-space:nowrap">青梅市</td><td style="white-space:


"text-align:left;white-space:nowrap;"></td></tr>
<tr class="mtx"><td style="white-space:nowrap">東京都</td><td style="white-space:nowrap">練馬区</td><td style="white-space:
...
略
...
PS C:\Users\daichi> 

正規表現を使って不要なデータを削除する

この記事は
Members+会員の方のみ御覧いただけます

ログイン/無料会員登録

会員サービスの詳細はこちら