In [1]:
import numpy as np
import matplotlib.pyplot as plt
import ReadPrusaLog as rpl
import pandas as pd
In [4]:
## benchy
df_temp_benchy = rpl.get_printer_temp_data('./datasets/printer_data_temperature_benchy.txt')
df_pos_benchy = rpl.get_printer_pos_data('./datasets/printer_data_position_benchy.txt')
df_benchy = pd.merge(df_pos_benchy,df_temp_benchy,on='timestamp',how="inner")
df_benchy = df_benchy.query('timestamp >= "2025/11/24 21:28:06" & timestamp <= "2025/11/24 22:14:24"')
df_benchy.loc[:,'filament'] = 1
df_benchy.loc[:,'lastdry'] = 7
df_benchy.loc[:,'model'] = 0
timestamp = df_benchy['ts_nano_x'].to_numpy()
ts_diff = np.diff(timestamp)
ts_diff = np.insert(ts_diff,0,0)
ts_sum = np.cumsum(ts_diff)
df_benchy.loc[:,'ts_sum'] = ts_sum
## dimensions
df_temp_dimensions = rpl.get_printer_temp_data('./experiments/printer_data_temp_dimensions.txt')
df_pos_dimensions = rpl.get_printer_pos_data('./experiments/printer_data_position_dimensions.txt')
df_dimensions = pd.merge(df_pos_dimensions,df_temp_dimensions,on='timestamp',how='inner')
df_dimensions = df_dimensions.query('timestamp >= "2025/12/01 10:33:50" & timestamp <= "2025/12/01 10:50:46"')
df_dimensions.loc[:,'filament'] = 1
df_dimensions.loc[:,'lastdry'] = 14
df_dimensions.loc[:,'model'] = 1
timestamp = df_dimensions['ts_nano_x'].to_numpy()
ts_diff = np.diff(timestamp)
ts_diff = np.insert(ts_diff,0,0)
ts_sum = np.cumsum(ts_diff)
df_dimensions.loc[:,'ts_sum'] = ts_sum
## finish
df_temp_finish = rpl.get_printer_temp_data('./experiments/printer_data_temp_finish.txt')
df_pos_finish = rpl.get_printer_pos_data('./experiments/printer_data_position_finish.txt')
df_finish = pd.merge(df_pos_finish,df_temp_finish,on='timestamp',how='inner')
df_finish = df_finish.query('timestamp <= "2025/12/01 11:22:00"')
df_finish.loc[:,'filament'] = 1
df_finish.loc[:,'lastdry'] = 14
df_finish.loc[:,'model'] = 2
timestamp = df_finish['ts_nano_x'].to_numpy()
ts_diff = np.diff(timestamp)
ts_diff = np.insert(ts_diff,0,0)
ts_sum = np.cumsum(ts_diff)
df_finish.loc[:,'ts_sum'] = ts_sum
df_integrate = pd.concat([df_benchy,df_dimensions,df_finish],ignore_index=True)
In [5]:
import json
import numpy as np
# 必要な列名(あなたのdfに合わせて調整)
COL_X, COL_Y, COL_Z = "X_pos", "Y_pos", "Z_pos"
COL_T = "heatbreak_temp_current"
COL_E = "e_total"
# 時間列があるならここに列名を。無いなら None のままでOK(行番号を使う)
COL_TIME = "ts_sum" # 例: "timestamp" や "t"
df_integrate = df_integrate.query('model == 2')
df2 = df_integrate[[COL_X, COL_Y, COL_Z, COL_T, COL_E] + ([COL_TIME] if COL_TIME else [])].dropna().copy()
# サンプル数が多い場合は間引き(まずは 20000 点くらいを推奨)
MAX_POINTS = 20000
if len(df2) > MAX_POINTS:
idx = np.linspace(0, len(df2)-1, MAX_POINTS).astype(int)
df2 = df2.iloc[idx].copy()
# time を作る(無ければ 0..N-1)
if COL_TIME and COL_TIME in df2.columns:
t = df2[COL_TIME].to_numpy()
else:
t = np.arange(len(df2), dtype=float)
payload = {
"columns": {
"x": COL_X, "y": COL_Y, "z": COL_Z,
"temp": COL_T, "e_total": COL_E,
"time": (COL_TIME if (COL_TIME and COL_TIME in df2.columns) else "index")
},
"data": {
"x": df2[COL_X].to_numpy().tolist(),
"y": df2[COL_Y].to_numpy().tolist(),
"z": df2[COL_Z].to_numpy().tolist(),
"temp": df2[COL_T].to_numpy().tolist(),
"e": df2[COL_E].to_numpy().tolist(),
"t": t.tolist()
}
}
with open("data_finish.json", "w", encoding="utf-8") as f:
json.dump(payload, f)
print("wrote: data.json", "N=", len(df2))
wrote: data.json N= 1327
In [ ]: