バイトHEX文字列を数値に変換する

ee9king に投稿

MATLABのところでも書いた。バイトHEX文字列を数値に変換する

Pythonではunpackを使う。これが分かりにくい、僕にとっては。しかし、pythonの方がこの手の記事は見つけやすい。

import pandas as pd
import numpy as np
import binascii
import struct
import datetime
from matplotlib import pyplot as plt
from matplotlib import dates as mdate

book=pd.ExcelFile(fname);
sheet=book.parse('all');

data=sheet['Data'].to_numpy(dtype=str);
dt=sheet['Timestamp'].to_numpy(dtype=str);
data_len=data.size;
tt=np.zeros(data_len,dtype=float);
tt_list=[];
temp=np.zeros(data_len,dtype=float);
for i in range(data_len):
    temp[i] = struct.unpack('>f', binascii.unhexlify(data[i]))[0];
    dto =  datetime.datetime.strptime(dt[i],'%Y-%m-%dT%H:%M:%S.%f000');
    tt[i]=dto.timestamp();

横軸時間でplotすると、軸ラベルが時間でうまく表示できない、結構頑張ったが今の所うまくできてない。この点MATLABだと、何も考えずに時間(日付)で表示できる。

fig=plt.figure();
plt.plot(tt,temp);
plt.xlim(tt[0],tt[-1]);
xt = np.arange(tt[0],tt[-1],86400*7);
st = [datetime.datetime.fromtimestamp(i).strftime('%y-%m-%d' )for i in xt];
plt.xticks(xt,st,rotation=270);
plt.grid()

時間配列はunixtimestampにしたので、1週間(7日=86400*7秒)ごとの表示ステップでやる。これだと表示後に拡大すると軸が表示されない。いまいち。

 

コメントを追加

Plain text

  • HTMLタグは利用できません。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。
  • 行と段落は自動的に折り返されます。