export const pyodideExample = () => {
const html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Machine Learning with Pyodide</title>
<script type="text/javascript" src="https://cdn.jsdelivr.net/pyodide/v0.25.1/full/pyodide.js"></script>
<script src="https://cdn.plot.ly/plotly-latest.min.js"></script>
</head>
<body>
<h1>Train and Test a Linear Regression Model using Python in WebAssembly</h1>
<input type="file" id="fileInput" accept=".csv">
<button id="trainModel">Train Model</button>
<div id="modelOptions" style="display: none;">
<h3>Select Features and Target</h3>
<label for="featureSelect">Select Feature:</label>
<select id="featureSelect"></select>
<label for="targetSelect">Select Target:</label>
<select id="targetSelect"></select>
<button id="train">Train</button>
</div>
<div id="testDataOptions" style="display: none;">
<h3>Upload Test Data</h3>
<input type="file" id="testDataFile" accept=".csv">
<button id="predict">Predict</button>
</div>
<div id="result"></div>
<div id="plotContainer"></div>
<script>
async function main() {
let pyodide = await loadPyodide();
await pyodide.loadPackage(['numpy', 'pandas', 'scikit-learn', 'matplotlib']);
console.log('Pyodide is ready to use!');
pyodide.runPython(\`
import pandas as pd
import numpy as np
import json
from sklearn.linear_model import LinearRegression
import base64
import io
import matplotlib.pyplot as plt
class LinearModel:
def __init__(self):
self.model = None
self.feature = None
self.target = None
self.df = None
def load_csv(self, file_content):
self.df = pd.read_csv(io.StringIO(file_content))
return self.df.to_json()
def get_columns(self):
return json.dumps(self.df.columns.tolist())
def train_model(self, feature, target):
self.feature = feature
self.target = target
X = self.df[[feature]].values
y = self.df[target].values
self.model = LinearRegression()
self.model.fit(X, y)
predictions = self.model.predict(X)
plt.figure()
plt.scatter(X, y, color='blue', label='Actual')
plt.plot(X, predictions, color='red', label='Predicted')
plt.xlabel(feature)
plt.ylabel(target)
plt.title('Linear Regression')
plt.legend()
buf = io.BytesIO()
plt.savefig(buf, format='png')
buf.seek(0)
img = base64.b64encode(buf.read()).decode('utf-8')
return img, self.model.coef_[0], self.model.intercept_
def predict(self, test_file_content):
test_df = pd.read_csv(io.StringIO(test_file_content))
X_test = test_df[self.feature].values.reshape(-1, 1)
predictions = self.model.predict(X_test)
return json.dumps({"Experience": X_test.flatten().tolist(), "Predicted": predictions.tolist()})
linear_model = LinearModel()
\`);
return pyodide;
}
const pyodide = main();
let jsonData;
const fileInput = document.getElementById('fileInput');
const trainModelButton = document.getElementById('trainModel');
const modelOptions = document.getElementById('modelOptions');
const featureSelect = document.getElementById('featureSelect');