charting / app.py
JUNGU's picture
Update app.py
293c1c2
raw
history blame
4.01 kB
import streamlit as st
import pandas as pd
import matplotlib.pyplot as plt
import io
import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import make_pipeline
from sklearn.svm import SVR
from sklearn.ensemble import RandomForestRegressor
st.title("Webcam Color Detection Charting")
uploaded_file = st.file_uploader("Choose a CSV file", type="csv")
time_frame_options = [
"All",
"1 second",
"5 seconds",
"10 seconds",
"30 seconds",
"1 minute",
"5 minutes",
"10 minutes",
"30 minutes",
"60 minutes",
]
time_frame = st.selectbox("Data Time Frame", time_frame_options)
regression_options = [
"None",
"Linear Regression",
"Polynomial Regression",
"SVR (Support Vector Regression)",
"Random Forest Regression",
]
regression_type = st.selectbox("Regression Analysis Type", regression_options)
if uploaded_file is not None:
# CSV 파일 읽기
data = pd.read_csv(uploaded_file)
# μ‹œκ°„ ν”„λ ˆμž„μ— λ”°λ₯Έ 데이터 필터링
if time_frame != "All":
seconds = {
"1 second": 1,
"5 seconds": 5,
"10 seconds": 10,
"30 seconds": 30,
"1 minute": 60,
"5 minutes": 300,
"10 minutes": 600,
"30 minutes": 1800,
"60 minutes": 3600,
}
data['timestamp'] = pd.to_datetime(data['timestamp'], unit='ms')
data.set_index('timestamp', inplace=True)
data = data.resample(f"{seconds[time_frame]}S").mean().dropna().reset_index()
# 차트 생성
fig, axes = plt.subplots(2, 1, figsize=(10, 8))
# RGB 차트
axes[0].plot(data['R'], 'r', label='R')
axes[0].plot(data['G'], 'g', label='G')
axes[0].plot(data['B'], 'b', label='B')
# νšŒκ·€ 뢄석 μˆ˜ν–‰
X = np.arange(len(data)).reshape(-1, 1)
# μ„ ν˜• νšŒκ·€
if regression_type == "Linear Regression":
model = LinearRegression()
model.fit(X, data['R'])
axes[0].plot(X, model.predict(X), 'r--')
st.write(f"R: y = {model.coef_[0]} * x + {model.intercept_}")
model.fit(X, data['G'])
axes[0].plot(X, model.predict(X), 'g--')
st.write(f"G: y = {model.coef_[0]} * x + {model.intercept_}")
model.fit(X, data['B'])
axes[0].plot(X, model.predict(X), 'b--')
st.write(f"B: y = {model.coef_[0]} * x + {model.intercept_}")
# λ‹€ν•­ νšŒκ·€
elif regression_type == "Polynomial Regression":
polynomial_features = PolynomialFeatures(degree=2)
model = make_pipeline(polynomial_features, LinearRegression())
model.fit(X, data['R'])
axes[0].plot(X, model.predict(X), 'r--')
model.fit(X, data['G'])
axes[0].plot(X, model.predict(X), 'g--')
model.fit(X, data['B'])
axes[0].plot(X, model.predict(X), 'b--')
st.write("Polynomial regression equation is not easily representable.")
# SVR (Support Vector Regression)
elif regression_type == "SVR (Support Vector Regression)":
model = SVR()
model.fit(X, data['R'])
axes[0].plot(X, model.predict(X), 'r--')
model.fit(X, data['G'])
axes[0].plot(X, model.predict(X), 'g--')
model.fit(X, data['B'])
axes[0].plot(X, model.predict(X), 'b--')
st.write("SVR equation is not easily representable.")
# Random Forest Regression
elif regression_type == "Random Forest Regression":
model = RandomForestRegressor()
model.fit(X, data['R'])
axes[0].plot(X, model.predict(X), 'r--')
model.fit(X, data['G'])
axes[0].plot(X, model.predict(X), 'g--')
model.fit(X, data['B'])
axes[0].plot(X, model.predict(X), 'b--')
st.write("Random Forest equation is not easily representable.")
axes[0].legend(loc='upper right')
axes[0].set_title('RGB Values')
# HSV 차트
axes[1].plot(data['H'], 'r', label='H')
axes[1].plot(data['S'], 'g', label='S')
axes[1].plot(data['V'], 'b', label='V')
axes[1].legend(loc='upper right')
axes[1].set_title('HSV Values')
st.pyplot(fig)