Yosuke Tsuchiya - Fab Futures - Data Science
Home About
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 [ ]: