728x90
반응형
이전 포스팅에서 만든 최종 결과로, 다항식을 만들어볼 예정입니다.
일단 제 실험 결과는 아래처럼 나왔습니다.
더보기
Folder | File | Delta | Rise_Time_s | Return_Time_s |
delta_-1.0 | run_1.csv | -1 | 1.029 | 1.027 |
delta_-1.0 | run_2.csv | -1 | 1.029 | 1.027 |
delta_-1.0 | run_3.csv | -1 | 1.03 | 0.822 |
delta_-1.0 | run_4.csv | -1 | 1.03 | 1.027 |
delta_-1.0 | run_5.csv | -1 | 1.029 | 1.028 |
delta_-2.0 | run_1.csv | -2 | 1.648 | 1.644 |
delta_-2.0 | run_2.csv | -2 | 1.75 | 1.644 |
delta_-2.0 | run_3.csv | -2 | 1.648 | 1.644 |
delta_-2.0 | run_4.csv | -2 | 1.75 | 1.028 |
delta_-2.0 | run_5.csv | -2 | 1.647 | 1.644 |
delta_-3.0 | run_1.csv | -3 | 2.369 | 2.159 |
delta_-3.0 | run_2.csv | -3 | 2.265 | 2.159 |
delta_-3.0 | run_3.csv | -3 | 2.265 | 2.055 |
delta_-3.0 | run_4.csv | -3 | 2.369 | 2.159 |
delta_-3.0 | run_5.csv | -3 | 2.367 | 2.158 |
delta_-4.0 | run_1.csv | -4 | 2.678 | 2.467 |
delta_-4.0 | run_2.csv | -4 | 2.883 | 2.467 |
delta_-4.0 | run_3.csv | -4 | 2.883 | 2.468 |
delta_-4.0 | run_4.csv | -4 | 2.781 | 2.467 |
delta_-4.0 | run_5.csv | -4 | 2.884 | 2.467 |
delta_-5.0 | run_1.csv | -5 | 3.296 | 2.673 |
delta_-5.0 | run_2.csv | -5 | 3.398 | 2.672 |
delta_-5.0 | run_3.csv | -5 | 3.398 | 2.672 |
delta_-5.0 | run_4.csv | -5 | 3.398 | 2.672 |
delta_-5.0 | run_5.csv | -5 | 3.296 | 2.467 |
delta_-6.0 | run_1.csv | -6 | 4.015 | 2.98 |
delta_-6.0 | run_2.csv | -6 | 3.811 | 2.981 |
delta_-6.0 | run_3.csv | -6 | 3.81 | 2.981 |
delta_-6.0 | run_4.csv | -6 | 3.809 | 2.877 |
delta_-6.0 | run_5.csv | -6 | 3.81 | 2.98 |
delta_0.0 | run_1.csv | 0 | ||
delta_0.0 | run_2.csv | 0 | ||
delta_0.0 | run_3.csv | 0 | ||
delta_0.0 | run_4.csv | 0 | ||
delta_0.0 | run_5.csv | 0 | ||
delta_1.0 | run_1.csv | 1 | 1.132 | 1.028 |
delta_1.0 | run_2.csv | 1 | 1.028 | 1.027 |
delta_1.0 | run_3.csv | 1 | 1.028 | 1.13 |
delta_1.0 | run_4.csv | 1 | 1.131 | 1.028 |
delta_1.0 | run_5.csv | 1 | 1.132 | 1.027 |
delta_2.0 | run_1.csv | 2 | 1.749 | 1.748 |
delta_2.0 | run_2.csv | 2 | 1.543 | 1.541 |
delta_2.0 | run_3.csv | 2 | 1.647 | 1.645 |
delta_2.0 | run_4.csv | 2 | 1.749 | 1.644 |
delta_2.0 | run_5.csv | 2 | 1.749 | 1.644 |
delta_3.0 | run_1.csv | 3 | 2.47 | 2.262 |
delta_3.0 | run_2.csv | 3 | 2.263 | 2.261 |
delta_3.0 | run_3.csv | 3 | 2.367 | 2.159 |
delta_3.0 | run_4.csv | 3 | 2.264 | 2.261 |
delta_3.0 | run_5.csv | 3 | 2.263 | 2.261 |
delta_4.0 | run_1.csv | 4 | 2.675 | 2.673 |
delta_4.0 | run_2.csv | 4 | 2.779 | 2.569 |
delta_4.0 | run_3.csv | 4 | 2.676 | 2.364 |
delta_4.0 | run_4.csv | 4 | 2.779 | 2.467 |
delta_4.0 | run_5.csv | 4 | 2.882 | 2.569 |
delta_5.0 | run_1.csv | 5 | 3.191 | 2.776 |
delta_5.0 | run_2.csv | 5 | 3.088 | 2.878 |
delta_5.0 | run_3.csv | 5 | 3.088 | 2.775 |
delta_5.0 | run_4.csv | 5 | 2.984 | 2.775 |
delta_5.0 | run_5.csv | 5 | 3.19 | 2.57 |
delta_6.0 | run_1.csv | 6 | 3.602 | 2.877 |
delta_6.0 | run_2.csv | 6 | 3.603 | 2.878 |
delta_6.0 | run_3.csv | 6 | 3.705 | 2.877 |
delta_6.0 | run_4.csv | 6 | 3.602 | 2.981 |
delta_6.0 | run_5.csv | 6 | 3.499 | 2.878 |
이제, 이걸 다항식으로 만들어보겠습니다.
import numpy as np
import pandas as pd
from numpy.polynomial import Polynomial
import json
# ============================
# 1. Load and clean data
# ============================
# CSV 파일 로드
df = pd.read_csv("delta_summary_rise_return_times.csv")
# NaN 제거
clean_data = df.dropna(subset=["Rise_Time_s", "Return_Time_s"])
# ============================
# 2. Group by Delta and get mean
# ============================
# Delta별 평균 Rise/Return Time 계산
delta_avg = clean_data.groupby("Delta")[["Rise_Time_s", "Return_Time_s"]].mean().reset_index()
# 평균 Rise, Return도 함께 저장
delta_avg["Mean_Time"] = delta_avg[["Rise_Time_s", "Return_Time_s"]].mean(axis=1)
# 컬럼명 명확히
delta_avg.rename(columns={
"Rise_Time_s": "Mean_Rise_Time_s",
"Return_Time_s": "Mean_Return_Time_s"
}, inplace=True)
output_path = "delta_mean_times.csv"
round(delta_avg,2).to_csv(output_path, index=False)
# ============================
# 3. Polynomial Fit
# ============================
# Δ별 평균값 추출
deltas = delta_avg["Delta"].values
rise_times = delta_avg["Mean_Rise_Time_s"].values
return_times = delta_avg["Mean_Return_Time_s"].values
# 2차 다항식 피팅 후 standard basis로 변환
rise_poly = Polynomial.fit(deltas, rise_times, 2).convert()
return_poly = Polynomial.fit(deltas, return_times, 2).convert()
# ============================
# 4. Δ 입력 시 평균값 계산 함수
# ============================
def get_rise_return_time(delta_val):
if delta_val == 0:
return 0.0, 0.0
rise = rise_poly(delta_val)
ret = return_poly(delta_val)
return round(rise, 2), round(ret, 2)
# 예시 출력
print(f"다항식: rising : {rise_poly} \n return: {return_poly}")
example_outputs = {delta: get_rise_return_time(delta) for delta in [-6, -4.3, -2, 0, 1.5, 3.2, 6]}
print(example_outputs)
# ============================
# 5. 다항식 계수 JSON 저장 (JS 연동용)
# ============================
# 계수 추출
rise_coeffs = rise_poly.coef.tolist()
return_coeffs = return_poly.coef.tolist()
# JSON 파일로 저장
with open("rise_coeffs.json", "w") as f:
json.dump(rise_coeffs, f)
with open("return_coeffs.json", "w") as f:
json.dump(return_coeffs, f)
최종적으로 저장되는 형태
Delta | Mean_Rise_Time_s | Mean_Return_Time_s | Mean_Time |
-6 | 3.85 | 2.96 | 3.41 |
-5 | 3.36 | 2.63 | 2.99 |
-4 | 2.82 | 2.47 | 2.64 |
-3 | 2.33 | 2.14 | 2.23 |
-2 | 1.69 | 1.52 | 1.6 |
-1 | 1.03 | 0.99 | 1.01 |
1 | 1.09 | 1.05 | 1.07 |
2 | 1.69 | 1.64 | 1.67 |
3 | 2.33 | 2.24 | 2.28 |
4 | 2.76 | 2.53 | 2.64 |
5 | 3.11 | 2.75 | 2.93 |
6 | 3.6 | 2.9 | 3.25 |
728x90
반응형
'HCI > Arduino' 카테고리의 다른 글
[Arduino] dual thermal feedback (0) | 2025.05.22 |
---|---|
[Arduino] Thermistor, Peltier module 을 활용해 Rising time과 Return Time 계산하기 / 파이썬 / 아두이노 (0) | 2025.04.16 |
[Arduino] Thermistor 센서 값 받아 아두이노 출력 하기 (2) | 2024.09.27 |