この記事では、読み込んだcsvファイルデータに対して、指定間隔でデータの間引きを行う方法をご紹介していきます。
単純に間引きを行うだけではなく、指定間隔ごとに前後のデータを使って線形補間するようにしています。
データ処理の際にぜひご活用ください。
それではさっそくやっていきましょう。
やりたいことのイメージ共有
まずはこの記事の内容があなたのやりたいことと一致していなければいけませんので、ざっくりと概要をご紹介しておきます。
今回対象となるデータは以下の画像のようなデータです。
簡単にデータ概要を解説すると以下のような感じですね。
〇時系列データである
〇時刻の取得タイミングには微妙にずれがある
今回はこのデータを以下のように指定間隔で間引き(今回は1.0)、さらに間引く際には線形補間を行うという処理を行っていきます。
※最初に紹介したデータは時刻が約0.1刻みだったのが、1刻みに変更されていることがわかると思います。さらに間引き語の時刻1をみると最初のデータの時刻1前後のデータを使って線形補間がされていることがわかると思います。
今回はこんなことをやっていきます。
あなたのやりたいことと一致していればぜひ続きをご覧ください。
必要なライブラリ一覧
以降で紹介するサンプルプログラムは以下のライブラリを使用していきます。
〇numpy
〇pandas
〇matplotlib
インストールしていないものがあればまずはインストール作業を進めましょう。
線形補間しながらデータを間引くサンプルコード
それではさっそくですが、以下が先ほど紹介した内容を実行してくれるサンプルコードです。
(ベースデータが入っているsample_data.csvというファイルがプログラム実行ファイルと同じ場所に保存されていることを前提に書いています。)
#ライブラリインポート
import pandas as pd
import numpy as np
#情報入力
file_name='sample_data.csv'
dt=1.0
#ベースデータの読み込み
df=pd.read_csv(file_name,header=0)
data=df.values
header=df.columns
file=open('new_data.csv','w')
#データ間引き処理開始
#時刻0はそのままの値を使う
new_data=[]
pick_time=dt
file.write(str(header[0])+','+str(header[1])+'\n')
file.write(str(data[0][0])+','+str(data[0][1])+'\n')
new_data.append(data[0])
#dtごとに線形補間してデータ取得
for i in range(len(data)):
if data[i,0]>pick_time:
x=data[i,0],data[i-1,0]
y=data[i,1],data[i-1,1]
a,b=np.polyfit(x,y,1)
file.write(str(pick_time)+','+str(a*pick_time+b)+'\n')
new_data.append([pick_time,a*pick_time+b])
pick_time+=dt
new_data=np.array(new_data)
file.close()
※今回は間引き後のデータをcsvファイルに保存するという処理と、numpy配列として新規作成するという2つの処理を同時並行で行うようにしています。
このプログラムを実行すると、プログラムの実行ファイルと同じ場所にnew_data.csvというファイル名で間引き後のデータが保存されているはずです。
また間引き後のデータをそのまま使いたい場合はnew_dataという変数に配列としてデータが格納されています。
必要に応じて適宜使い分けてください。
間引き後データの確認
最後にmatplotlibをつかって間引き後データが正しく取得できているか確認してみましょう。
※この工程はあらたにできあがったcsvファイルの中身を確認していただくだけでもOKです。
先ほどのプログラム実行後に以下のコードを実行してみましょう。
#グラフ化処理
import matplotlib.pyplot as plt
plt.scatter(new_data[:,0], new_data[:,1], s=80, c="pink", alpha=0.5, linewidths="2",edgecolors="red")
plt.scatter(data[:,0], data[:,1], s=20, c="blue", alpha=0.5, linewidths="2",edgecolors="black")
plt.xlim(0,10)
plt.grid()
plt.xticks(np.linspace(0,10,11))
plt.show()
こいつを実行すると以下の図が出力されました。
この結果は青点がもともとのデータ、赤点が間引き後のデータを示したものです。
問題なくデータを等間隔で間引くことができていますね。
※微妙にプロット点がずれているのは線形補間をしているためです。
というわけで問題なくやりたいことが実行できました。
おわりに
というわけで今回はpython上で、読み込んだデータを線形補間しながら間引く方法をご紹介しました。
データ処理の際などにぜひご活用ください。
このように、私のブログでは様々なスキルを紹介しています。
今は仕事中で時間がないかもしれませんが、ぜひ通勤時間中などに他の記事も読んでいただけると嬉しいです。
⇒興味をもった方は【ヒガサラ】で検索してみてください。
確実にスキルアップできるはずです。
最後に、この記事が役に立ったという方は、ぜひ応援よろしくお願いします。
↓ 応援ボタン
にほんブログ村
それではまた!
Follow @HigashiSalary
コメント