6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

matplotlib 2軸グラフ ①データ生成編

Last updated at Posted at 2018-11-12

はじめに

二軸グラフをpandasで奇麗に描画する方法がわからず、無限に時間を溶かしました
奇麗な二軸グラフの描画に悩む方がこの記事を参考にしていただければ幸いです

概要

時間軸のフォーマットが異なる二つのCSVデータを合成し、同じ描画エリアに二軸グラフのプロットを行ないます

構成

実在するセンサデータを使用すると怒られそうなのでデータを作るところから行います
全部で3部構成です

今回は「①データ生成編」です
使用するコードは以下に載せてあります
https://github.com/ozikot/BiaxialPlot/tree/master/ep1_generate

データ生成

二つのCSV形式のデータを作成します
異なるセンサから取得したセンサデータ、という設定です
以下にそれぞれのセンサデータの内容を示します

※あくまで模擬データです 実在するセンサ、センサデータとは関係ありません

  • 心拍
    • Time('YYYY/MM/DD hh :mm : ss')
      • 例) 2018年11月12日13時31分20秒 -> 2018/11/12 13:31:20
    • BPM
      • 例) 100 -> 100 (そのまま)
  • 体表温度
    • Time(センサ取得日の0時0分を0とした経過時間) [μs]
      • 例) 13時31分20秒 -> 48680000000
    • Temperature [10-1 °C]
      • 例) 25.4度 -> 254

心拍データの生成

まず最初に心拍データを生成します
初期値100で幾何ランダムウォークを用いました
以下の記事を参考にさせて頂きました

Pythonでランダムウォーク

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成するデータの行数
ds = 30000

# 幾何ランダムウォークで疑似的な心拍データの生成
dn = np.random.choice([-1, 1], size=ds)
p0 = 100   # 初期値は100
gwalk = np.cumprod(np.exp(dn * 0.001)) * p0
pd.Series(gwalk).plot()

# データフレームを生成
df = pd.DataFrame({
    'Time' : pd.date_range('2018/09/01 00:00:00', periods=ds, freq='1S'),
    'BPM' : pd.Series(gwalk)
})

# データフレームをCSVファイル形式で保存
df.to_csv('..//csv_file//heartbeat.csv')

グラフを描画してみます
heartbeat.png

いい感じですね
同じ要領で体表温度のデータを生成します

体表温度データの生成

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 生成するデータの行数
ds = 30000

# 幾何ランダムウォークで疑似的な体表温度データの生成
dn = np.random.choice([-1, 1], size=ds)
p0 = 20   # 初期値は20度
gwalk = np.cumprod(np.exp(dn * 0.001)) * p0
pd.Series(gwalk).plot()

# データフレームを生成
df = pd.DataFrame({
    'Time' : pd.Series([i * 1000000 for i in range(0, ds)]),
    'Temperature' : pd.Series(gwalk)
})

# データフレームをCSVファイル形式で保存
df.to_csv('..//csv_file//temp_bs.csv', index=None)

グラフを描画してみます
temp_bs.png

適当なところを拡大してみると、数値の遷移量がランダムになっており模擬データとしては十分だという事がわかります
キャプチャ.JPG

おわりに

いかがでしたでしょうか
何かありましたらコメントかTwitter(https://twitter.com/ozikot) にて教えてください!
次回は今回作成した二つのデータを一つのデータに合成します

6
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?