π 곡λΆνλ μ§μ§μνμΉ΄λ μ²μμ΄μ§?
HTMLμμ Pythonμ μ¬μ©ν μ μλ PyScript (15) λ³Έλ¬Έ
π©π» λ°±μλ(Back-End)/Node js
HTMLμμ Pythonμ μ¬μ©ν μ μλ PyScript (15)
μ§μ§μνμΉ΄ 2022. 11. 28. 15:04728x90
λ°μν
<λ³Έ λΈλ‘κ·Έλ itadventrue λμ λΈλ‘κ·Έλ₯Ό μ°Έκ³ ν΄μ 곡λΆνλ©° μμ±νμμ΅λλ€ :-)>
https://itadventure.tistory.com/558
νλ(16) - νμ΄μ€ν¬λ¦½νΈμ νΉμ’μ~μ μΌλ‘ λ¨Έμ λ¬λ!
π³ 'νλ'λ ν¬λ μ΄κ° λμ νκ³ μλ νμ΄μ€ν¬λ¦½νΈ λμ κΈ°μ μ€μλ§μ λλ€. μ§λ κ²μκΈμμ μ°μ¬λλ κΈμ λλ€. : https://itadventure.tistory.com/557 νλ!(15) - λΌμνκ·μ 4μ°¨λ°©μ μκΉμ§ πΏ 'νλ'λ
itadventure.tistory.com
π μκ³ λ¦¬μ¦ μ’ λ₯λ₯Ό μ ννλ μΉ νμ΄μ§
- index.html
<html>
<head>
<title>λ€ννκ· + λΌμ 리그λ μ
</title>
<link rel="stylesheet"
href="https://pyscript.net/alpha/pyscript.css" />
<script defer
src="https://pyscript.net/alpha/pyscript.js"></script>
<py-env>
- pandas
- matplotlib
- seaborn
- scikit-learn
- paths :
- ./common.py
</py-env>
</head>
<body>
<link rel="stylesheet" href="pytable.css"/>
μκ³ λ¦¬μ¦ μ ν :
<select id="algorithm">
<option value="">μκ³ λ¦¬μ¦μ μ ννμΈμ</option>
<option value="ridge_value">λ¦Ώμ§ νκ· (Ridge Regression)</option>
<option value="lasso_value">λΌμ νκ· (Lasso Regression)</option>
</select><br/>
μνκ° μ ν :
<select id="alpha_value">
<option value="0.001">0.001</option>
<option value="0.01">0.01</option>
<option value="0.1">0.1</option>
<option value="1">1</option>
<option value="10">10</option>
<option value="100">100</option>
</select><br/>
νλ ¨μ μ : <span id="train_score" style=''></span><br/>
ν
μ€νΈμ μ : <span id="test_score" style=''></span><br/>
<div id="graph"></div>
<py-script>
import pandas as pd
from pyodide.http import open_url
from common import *
import numpy as np
from datetime import datetime
<!-- κ²½κ³ λ¬Έκ΅¬ μ κ±° -->
import warnings
warnings.filterwarnings( 'ignore' )
<!-- νλ€μ€μμ csv λ₯Ό λ°μ΄ν° νλ μμΌλ‘ μ½μ΄μ΄ -->
SalesData = pd.read_csv(open_url(
"http://dreamplan7.cafe24.com/pyscript/csv/avocado.csv"
))
<!-- # 3κ° νλλ§ μΆλ €μ λ°μ΄ν° νλ μμ λ€μ λ§λ¬ -->
SalesData = SalesData[[
'Date',
'Total Volume',
'AveragePrice'
]]
SalesData.columns = [
'Day',
'Amount',
'AveragePrice'
]
print(SalesData)
<!-- λ μ§λ³λ‘ ( μ£Ό λ¨μλ‘ ) κ·Έλ£Ήμ μ§μ λλ 맀μΆλμ κ·Έλ£Ήλ¨μλ‘ ν©μ°νμ¬ ν©κ³ -->
WeekdaysSales_sum = SalesData.fillna(0) \
.groupby('Day', as_index=False)[['Amount']].sum() \
.sort_values(by='Day', ascending=True)
WeekdaysSales_mean = SalesData.fillna(0) \
.groupby('Day', as_index=False)[['AveragePrice']].mean() \
.sort_values(by='Day', ascending=True)
<!-- 2κ°μ λ°μ΄ν° νλ μμ νλλ‘ merge (onμ κΈ°μ¬λ 'λ μ§'λ₯Ό κΈ°μ€) -->
WeekdaysSalesData = pd.merge(WeekdaysSales_sum, WeekdaysSales_mean, on = 'Day')
<!-- λ μ§(μκ°κ°) μΆκ° -->
WeekdaysSalesData.insert(1, 'Day(timeValue)',
'', True)
for i in WeekdaysSalesData['Day'].index:
WeekdaysSalesData['Day(timeValue)'].loc[i]=time.mktime(
datetime.strptime(
WeekdaysSalesData['Day'].loc[i],
'%Y-%m-%d'
).timetuple()
)
<!-- 10000μΌλ‘ λλ 맀μΆλ νλ μΆκ° -->
WeekdaysSalesData.insert(3, 'Amount(10000)',
WeekdaysSalesData['Amount']/10000,
True)
<!-- νλ ¨νμ΅μ©μΌλ‘ λ μ§λ₯Ό μ°λ, μ, μΌλ‘ λλλ€ -->
WeekdaysSalesData.insert(4, 'year', '', True)
WeekdaysSalesData.insert(5, 'month', '', True)
WeekdaysSalesData.insert(6, 'day', '', True)
WeekdaysSalesData.insert(7, 'week', '', True)
for i in WeekdaysSalesData['Day'].index:
temp = str(WeekdaysSalesData['Day'].loc[i]).split('-')
year = int(temp[0])
month = int(temp[1])
day = int(temp[2])
WeekdaysSalesData['year'].loc[i] = year
WeekdaysSalesData['month'].loc[i] = month
WeekdaysSalesData['day'].loc[i] = day
WeekdaysSalesData['week'].loc[i] = str(
datetime(year, month, day).isocalendar()[1]
)
createElementDiv(
document,
Element,
'output2'
).write(WeekdaysSalesData)
WeekdaysSalesDataTrain_numpy = WeekdaysSalesData[['Day(timeValue)', 'year', 'month', 'day', 'week', 'AveragePrice']].to_numpy()
WeekdaysSalesDataTest_numpy = WeekdaysSalesData['Amount(10000)'].to_numpy()
WeekdaysSalesDataDay_numpy = WeekdaysSalesData['Day'].to_numpy()
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = \
train_test_split(
WeekdaysSalesDataTrain_numpy,
WeekdaysSalesDataTest_numpy,
random_state=100,
shuffle=False)
<!-- PolynomialFeatures ( ν΄λ¦¬λ
Έλ―ΈμΌ νΌμ³ ), λ€ννΉμ± λͺ¨λ -->
<!-- μ κ³±μ΄λ κ³±νκΈ°ν μ μλ κ²½μ°μ μκ° λͺ¨λ λμ΄ -->
from sklearn.preprocessing import PolynomialFeatures
polynomial = PolynomialFeatures(degree=4, include_bias=False) # μ νΈ μμ±μ μ κ±°
polynomial.fit(X_train) # νΉμ±μ λ€νμΌλ‘ μλμΌλ‘ λΆλ¦Ό
train_polynomial_added = polynomial.transform(X_train) # νμ΅μ μΆκ°λ νλΌλ―Έν°μ λ§κ² λ€ν λ³ν
test_polynomial_added = polynomial.transform(X_test) # ν
μ€νΈ μΈνΈλ λ€ν λ³ν, fitνλ νλ ¨ poly λ₯Ό μ¬μ©.
<!-- μ€μΌμΌνλ 'λ°μ΄ν°λ₯Ό μμ ν' -->
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
scaler.fit(train_polynomial_added)
train_polynomial_added = scaler.transform(train_polynomial_added)
test_polynomial_added = scaler.transform(test_polynomial_added)
from sklearn.linear_model import Ridge
from sklearn.linear_model import Lasso
import matplotlib.pyplot as plt
import matplotlib as mat
<!-- μλ°μ€ν¬λ¦½νΈμ ν΅μ -->
from js import document
from pyodide import create_proxy
def graph_func(event):
def_algorithm = document.getElementById("algorithm").value
def_alpha_value = float(document.getElementById("alpha_value").value)
if def_algorithm=='ridge_value':
<!-- ===================================== -->
<!-- λ¦Ώμ§λͺ¨λΈ -->
ridge_model = Ridge(alpha=def_alpha_value)
ridge_model.fit(train_polynomial_added, y_train)
<!-- νλ ¨κ³Όμ μ λν μ²λλ₯Ό νκ° -> score() -->
print("λ¦Ώμ§ νλ ¨μ©λͺ¨λΈ μ νλ")
ridge_train_score = ridge_model.score(train_polynomial_added, y_train)
print("λ¦Ώμ§ ν
μ€νΈλͺ¨λΈ μ νλ")
ridge_test_score = ridge_model.score(test_polynomial_added, y_test)
document.getElementById("train_score").innerHTML = ridge_train_score
document.getElementById("test_score").innerHTML = ridge_test_score
<!-- μ€μΌμΌνλ λ°μ΄ν°λ₯Ό λ°νμΌλ‘ μμΈ‘κ²°κ³Ό -->
y_train_predict = ridge_model.predict(train_polynomial_added)
y_test_predict = ridge_model.predict(test_polynomial_added)
else :
<!-- ===================================== -->
<!-- λΌμλͺ¨λΈ -->
lasso_model = Lasso(alpha=def_alpha_value)
lasso_model.fit(train_polynomial_added, y_train)
<!-- νλ ¨κ³Όμ μ λν μ²λλ₯Ό νκ° -> score() -->
print("λΌμ νλ ¨μ©λͺ¨λΈ μ νλ")
lasso_train_score = lasso_model.score(train_polynomial_added, y_train)
print("λΌμ ν
μ€νΈλͺ¨λΈ μ νλ")
lasso_train_score = lasso_model.score(test_polynomial_added, y_test)
<!-- μ€μΌμΌνλ λ°μ΄ν°λ₯Ό λ°νμΌλ‘ μμΈ‘κ²°κ³Ό -->
y_train_predict = lasso_model.predict(train_polynomial_added)
y_test_predict = lasso_model.predict(test_polynomial_added)
<!-- κ·Έλν -->
fig = plt.figure(
figsize=(15, 7)
)
<!-- μ£Όμ μ΄μν μ¬λ°± μμ κΈ° -->
fig.tight_layout()
plt.xticks(
WeekdaysSalesDataTrain_numpy[:, 0],
WeekdaysSalesDataDay_numpy,
rotation=90)
plt.title('Weekdays Avocado SalesAmount ( + algorithm )')
<!-- μλ³Έ -->
plt.plot(
X_train[:,0],
y_train,
#marker='o',
color='gray',
label='Original'
)
plt.plot(
X_test[:,0],
y_test,
#marker='o',
color='gray'
)
<!-- νλ ¨ -->
plt.plot(
X_train[:,0],
y_train_predict,
marker='d',
color='blue',
label='Train pattern'
)
<!-- μμΈ‘ -->
plt.plot(
X_test[:,0],
y_test_predict,
marker='*',
color='green',
label='Predict pattern'
)
plt.legend(
shadow=True
)
plt.xticks(
WeekdaysSalesDataTrain_numpy[:, 0],
WeekdaysSalesDataDay_numpy,
rotation=90)
plt.xlabel('Day')
plt.ylabel('Amount(10000)')
ax = plt.gca()
<!-- μΆλ§ 그리λ -->
ax.xaxis.grid(True)
<!-- λ°°κ²½μ, λ§μ§ μ‘°μ -->
ax.set_facecolor('#e8e7d2')
ax.margins(x=0.01, y=0.02)
pyscript.write("graph", fig)
e1 = document.getElementById("algorithm")
e1.addEventListener("change", create_proxy(graph_func))
e2 = document.getElementById("alpha_value")
e2.addEventListener("change", create_proxy(graph_func))
</py-script>
</body>
</html>
- common.py
def createElementDiv(document, Element, name):
element = document.createElement('div')
element.id = name
document.body.append(element)
return Element(name)
728x90
λ°μν
'π©βπ» λ°±μλ(Back-End) > Node js' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
λ€μ λμ .. Flask GET μ¬μ©ν΄λ³΄κΈ° (6) (0) | 2022.12.01 |
---|---|
λ€μ λμ .. Flask CSV λΆλ¬μμ HTMLμ νλ‘ μκ°ννκΈ°(4) (0) | 2022.11.30 |
HTMLμμ Pythonμ μ¬μ©ν μ μλ PyScript (14) (0) | 2022.11.28 |
HTMLμμ Pythonμ μ¬μ©ν μ μλ PyScript (13) (1) | 2022.11.28 |
HTMLμμ Pythonμ μ¬μ©ν μ μλ PyScript (12) (0) | 2022.11.28 |
Comments