スクリーンリーダー利用者のためのデータサイエンス入門

音声グラフライブラリを使ったプログラミング入門

データサイエンスにおいては、分析に必要なデータを用意し、分析しやすいようにデータを加工処理の後、適切な手法を用いて分析をするといった一連の作業を、別々のツールではなく、プログラミングで柔軟に処理を組むことが出来れば、より効率的かつ高度な分析作業が可能になります。

本節では、Pythonプログラミングの中で、音声グラフを扱う方法を学びます。 様々なデータを用いた例を通じて、音声グラフによるデータの理解について、慣れ親しんでいきましょう。

音声グラフライブラリの準備

Google Colabであれば、次のように!pipコマンドを実行し、ライブラリをインストールしましょう。

本コンテンツでは、基本的にGoogle Colab環境を想定して書いておりますが、 もしコマンドプロンプト環境などをお使いの場合、!マーク無しでインストールが出来ます。

!pip install -q audio-plot-lib # ライブラリのインストール

次に、音声グラフライブラリが使えるようにするため、次のようにimportコマンドを実行しましょう。

import audio_plot_lib # ライブラリのインポート

また、音声を日本語にするために、以下の一行も実行しておきましょう。

audio_plot_lib.interactive.set_language("ja")

音声グラフライブラリの基本的な使い方

まずは、Desmosで試して頂いた内容と全く同じものを、Pythonの音声グラフライブラリでも表示してみることで、簡単な使い方を説明します。

Desmosのときと異なる点は、数式を記述するのではなく、グラフにしたいデータそのものを定義する必要があります。

試しに、xが0から5まで増えるのに従って、yが10から0まで減っていくような、反比例の関係にあるデータを定義してみましょう。

x = [0, 1, 2, 3, 4, 5]
y = [10, 8, 6, 4, 2, 0]
print(f"x = {x} y = {y}")

実行結果は次のような感じになると思います。

x = [0, 1, 2, 3, 4, 5] y = [10, 8, 6, 4, 2, 0]

そして次は、以下のコードを実行して、定義したxとyのデータを音声グラフに変換してみましょう。

また、あらかじめ出力される音声グラフの説明をしておくと、実行結果のエリアに、音声グラフについての基本的な説明、実際に描画されたグラフ、値を確認するためのスライダーの3点が並んでいます。

音声グラフの基本的な説明については、英語で定型文が書かれていますが、このあとに解説していくような内容が記述されているだけなので、読み飛ばしてしまっても大丈夫です。

そして、音声グラフの確認方法は二通りの手段が用意されています。

1つ目は、スライダーを動かして確認する方法です。スライダーを動かすことにより、その位置に応じた、xやyの値、またyの値を音程にした音が再生されます。スライダーを左右に動かして、データの分布を確認してみましょう。

また2つ目として、よりインタラクティブな確認方法も用意されています。マウスやタッチパッドなどでマウスカーソルの操作が可能な場合、適当にマウスカーソルを動かてみてください。表示されているグラフの上にマウスカーソルが重なると「エンターグラフ」と音声が再生されます。その状態で、グラフの上をなぞるようにマウスカーソルを動かせば、スライダーを動かしたとき同様に音声グラフの確認が出来ます。クリックをすることによって、値の読み上げなども出来ます。

事前説明が長くなりましたが、次のコードを実行して、実際に試してみましょう。注意点として、お使い環境によっては、初回のみ何も表示されないことがあるかもしれません。もし実行後に何も表示されなかったら、もう一度同じコードを実行してみてください。

audio_plot_lib.interactive.plot(x=x, y=y)

これまでの章でやってきたように、以下のような手順で実行結果を確認することができます。

  1. プログラムを入力したセル上で、Cntl+Enterを押して、セルを実行します。
  2. NVDA+Spaceキーを押して、ブラウズモードに切り替えます。
  3. 下矢印キーをを何度か押して、「クリック可能 スライダー」を読み上がられる場所まで移動します。
  4. スペースキーを押して、フォーカスモードに切り替え、スライダーを動かせるようにします。
  5. 左右キーを何度か押して、xとyの数値やそれに応じた音程の音声が再生されることを確認します。
  6. NVDA+Spaceキーを押して、ブラウズモードに切り替えます。
  7. Shift+Eを押して、先程プログラムを入力していたコードセルに戻ります。
  8. NVDA+Spaceキーを押して、フォーカスモードに切り替えます。

実行結果の例

実行結果の音声グラフを操作し、反比例に変化していく音を確認できましたでしょうか? Desmosとは多少使い勝手が異なりますが、データの値を音程で確認するといった基本的な原理は同じです。

続けて、Desmosでも試した2次曲線についても、音声グラフを作ってみましょう。

まずはデータの定義です。

x = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]
y = [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]
print(f"x = {x} y = {y}")

実行結果は次のような感じになると思います。

x = [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5] y = [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

次にデータから音声グラフを作成します。

audio_plot_lib.interactive.plot(x=x, y=y)

実行結果の例

音声の変化から、下向きに凸の2次曲線であることを読み取ることが出来ましたでしょうか?

また、Desmosでも試したような、キー操作を伴わずに、連続して音声を再生するような機能もあります。

これは、時系列に並んだデータを、手っ取り早く確認したい場合などに便利です。

試しに先程の2次曲線のデータを再生してみましょう。

アナウンスのあとに、値の大きさを音程に変換した、音声グラフの再生が開始されます。

audio_plot_lib.playable.plot(y, duration=100)  # xは指定出来ません。durationを小さくすると音同士の間隔が短くなり、再生スピードが早くなります

実行結果の例

以上が、音声グラフライブラリの基本的な機能となります。

音声グラフライブラリは他にも、音量など細かいパラメータを変更したり、様々なオプションを備えています。

すぐに確認する必要はありませんが、もっと踏み込んだ使い方をしたくなったり、 開発者にフィードバックの必要が出てきたときは、ライブラリの公開ページを参照してみてください。

様々なデータの音声グラフ

Desmosや上記基本的な使い方の説明では、数学的なグラフしか扱いませんでしたが、Pythonプログラミングと自由に組み合わせられる特徴を利用して、身近なデータを音声グラフに変換し、音声グラフの扱いに慣れていきましょう。

身長と体重の関係

1歳から18歳までの身長と体重の関係を、音声グラフで調べてみましょう。

政府統計ポータルサイト から取得できる2018年のデータを使います。

まずは、年齢ごとの平均身長と平均体重のデータを定義します。

height_male = [79.7,  88.6,  96. , 101.2, 110. , 115.6, 122. , 127.8, 131.8, 138.4, 145.7, 153.1, 160.3, 165.2, 168. , 173.9, 169.2, 170] # 1歳から18歳までの男性の平均身長
weight_male = [10.4, 12.6, 14.2, 15.4, 18.2, 20.4, 24.2, 26.6, 29.1, 33.8, 38.8, 43.4, 50.4, 51. , 57.9, 62.6, 57.3, 61.1] # 1歳から18歳までの男性の平均体重
height_female = [77.2,  87.5,  96.1, 102.3, 109.3, 114.8, 119.6, 125.7, 134.4, 140.6, 146.6, 150.1, 154.6, 154.9, 158.2, 156.6, 154.8, 157.4] # 1歳から18歳までの女性の平均身長
weight_female = [10.2, 12.3, 14.6, 15.9, 18.1, 20.3, 22.3, 26. , 29.7, 33.7, 37.1, 41.9, 47.2, 48.7, 49.5, 49.9, 47.2, 50.1] # 1歳から18歳までの女性の平均体重

今回は、男と女それぞれのデータを、同時に音声グラフにしてみたいと思います。

そのためには少し工夫が必要となり、各データが男と女のどちらのものかを表す、ラベルデータを新たに定義する必要があります。

次のようにグラフ用のデータを加工して用意しましょう。

x = height_male + height_female  # 男と女のそれぞれの身長データが入った配列を連結
y = weight_male + weight_female  # 男と女のそれぞれの体重データが入った配列を連結
label = [0]*len(height_male) + [1]*len(height_female)  # 男のラベルは0,女のラベルは1と定義
print(f"x = {x}\ny = {y}\nlabel = {label}")

データを音声グラフに変換します。

男と女の2種類のデータに応じて、スライダーも2つに増えているかと思います。

それぞれのスライダーを操作することにより、男と女それぞれの音声グラフを確認することが出来ます。

マウスカーソルで確認する場合は、ダブルクリックにより、確認するデータを切り替えることが出来ます。

audio_plot_lib.interactive.plot(x=x, y=y, label=label)

実行結果の例

身長と体重の関係を示す、緩やかな成長曲線が何となく理解出来ましたでしょうか?

また、10代前半までは男女が差あまり無い一方、後半にかけて差が出てくることにも気づきましたでしょうか?

降水量と気温の関係

気象分野で用いられる、ある地域の降水量と気温の関係(いわゆる雨温図)について、音声グラフを作成し、その特徴を理解してみましょう。

まずは、データの定義です。降水量と気温に関するデータは、気象庁のサイトを参考にしています。東京の1991年から2020年の平年値を使います。

month = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]   # x軸となる1月から12月までの値
rain = [59.7, 56.5, 116.0, 133.7, 139.7, 167.8, 156.2, 154.7, 224.9, 234.8, 96.3, 57.9]  # 1月から12月までの降水量
temperature = [5.4, 6.1, 9.4, 14.3, 18.8, 21.9, 25.7, 26.9, 23.3, 18.0, 12.5, 7.7]  # 1月から12月までの平均気温

グラフ用のデータを加工して用意します。

x = month + month
y = rain + temperature
label = [0]*len(rain) + [1]*len(temperature) # 降水量のラベルは0,気温のラベルは1と定義

データから音声グラフに変換します。

体重と身長の音声グラフ同様、確認するデータを切り替えながら、音声グラフの比較をしてみましょう。

今回、降水量と気温のデータの値の範囲が異なるため、multiple_axesのオプションを有効にし、それぞれの値の範囲にフィットした音声グラフを作成します。

audio_plot_lib.interactive.plot(x=x, y=y, label=label, multiple_axes=True)

実行結果の例

新型コロナの感染者数

最後に、新型コロナの感染者数の推移を、音声グラフで確認してみましょう。

データは、厚生労働省で公開されている最新データを、直接読み込んで利用します。

まずはデータを読み込みます。

import pandas as pd  # 表形式データを扱うためのライブラリをインポート(詳細は省略)
df = pd.read_csv("https://covid19.mhlw.go.jp/public/opendata/newly_confirmed_cases_daily.csv")  # 厚生労働省で公開されているデータの取得
y = df[df.Prefecture == "ALL"]["Newly confirmed cases"].rolling(7).mean().values[7::7].tolist()  # 全国新規感染者数の1週間ごとの平均値を抽出

print(f"{df.Date.min()}から{df.Date.max()}まで1週間ごとの新型コロナウイルス新規感染者数のデータ\ny = {y}")

データを音声グラフに変換してみましょう。今回は、単純に時系列データを再生するだけにしてみます。

audio_plot_lib.playable.plot(y)

実行結果の例

ニュースなどで耳にするように、いくつかの波を繰り返しながらも、徐々に増えていく様子が分かりましたでしょうか?(2021年8月現在)

本節のまとめ

本節では、Pythonプログラミングを通じて音声グラフを扱う方法を学びました。 音声グラフライブラリの基本的な使い方から始め、その後、様々なデータを用いて音声グラフの作成と解釈を試みました。 身長と体重の関係、降水量と気温の関係、新型コロナの感染者数の推移など、実世界のデータを音声グラフに変換し、その特性を理解することに挑戦しました。 これにより、音声グラフを用いてデータの特性を把握するスキルの一端に触れ、データサイエンスへの理解を深める第一歩を踏み出すことが出来たのではないでしょうか。


次へ

トップページへ