https://github.com/sshh12/sheet-log
Push Python metrics and plots directly into Google Sheets.
https://github.com/sshh12/sheet-log
google-sheets logging machine-learning-experimentation
Last synced: about 1 year ago
JSON representation
Push Python metrics and plots directly into Google Sheets.
- Host: GitHub
- URL: https://github.com/sshh12/sheet-log
- Owner: sshh12
- License: mit
- Created: 2021-05-29T19:18:25.000Z (about 5 years ago)
- Default Branch: main
- Last Pushed: 2021-05-31T18:50:58.000Z (about 5 years ago)
- Last Synced: 2025-02-14T12:17:38.219Z (over 1 year ago)
- Topics: google-sheets, logging, machine-learning-experimentation
- Language: Python
- Homepage:
- Size: 9.77 KB
- Stars: 0
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# sheet-log
## Install
1. `pip install git+https://github.com/sshh12/sheet-log`
2. Create a script on [script.google.com](https://script.google.com/), copy-paste the contents of `Code.gs`, then deploy (`Execute as: Me`, `Who has access: Anyone`) as web-app.
3. Create a [google sheet](https://sheet.new) that includes a tab named `sheetlog`. This is to ensure the web-app only modifies spreadsheets that are used by this app.
## Usage
### Scikit-learn GridCV Table
```python
from sklearn.datasets import make_classification
from sklearn.model_selection import GridSearchCV
from sklearn.svm import SVC
from sheetlog import SheetLog
sl = SheetLog(
app_url="https://script.google.com/macros/s/.../exec",
spreadsheet_id="5F31_GE54Vi_....",
)
param_grid = {"kernel": ("linear", "rbf"), "C": [1, 10, 100]}
base_estimator = SVC(gamma="scale")
X, y = make_classification(n_samples=1000)
gcv = GridSearchCV(base_estimator, param_grid, cv=5)
gcv.fit(X, y)
for params, mean_test_score, rank_test_score in zip(
gcv.cv_results_["params"], gcv.cv_results_["mean_test_score"], gcv.cv_results_["rank_test_score"]
):
sl.add(dict(**params, test_score=mean_test_score, rank_score=rank_test_score))
```

### Scikit-learn TSNE Tabs
Code example adapted from _[t-SNE: The effect of various perplexity values on the shape](https://scikit-learn.org/stable/auto_examples/manifold/plot_t_sne_perplexity.html)_.
```python
from sklearn import manifold, datasets
import matplotlib.pyplot as plt
import numpy as np
import time
from sheetlog import SheetLog
sl = SheetLog(
app_url="https://script.google.com/macros/s/.../exec",
spreadsheet_id="5F31_GE54Vi_....",
)
n_samples = 300
n_components = 2
perplexities = [5, 30, 50, 100]
X, y = datasets.make_circles(n_samples=n_samples, factor=0.5, noise=0.05)
red = y == 0
green = y == 1
for i, perplexity in enumerate(perplexities):
t0 = time.time()
tsne = manifold.TSNE(n_components=n_components, init="random", random_state=0, perplexity=perplexity)
Y = tsne.fit_transform(X)
t1 = time.time()
name = "circles, perplexity=%d in %.2g sec" % (perplexity, t1 - t0)
plt.title("Perplexity=%d" % perplexity)
plt.scatter(Y[red, 0], Y[red, 1], c="r")
plt.scatter(Y[green, 0], Y[green, 1], c="g")
plt.axis("tight")
sl.add(dict(perplexity=perplexity, time=t1 - t0, plot=sl.get_current_plot()), sheet=name)
X, color = datasets.make_s_curve(n_samples, random_state=0)
for i, perplexity in enumerate(perplexities):
t0 = time.time()
tsne = manifold.TSNE(n_components=n_components, init="random", random_state=0, perplexity=perplexity)
Y = tsne.fit_transform(X)
t1 = time.time()
name = "S-curve, perplexity=%d in %.2g sec" % (perplexity, t1 - t0)
plt.title("Perplexity=%d" % perplexity)
plt.scatter(Y[:, 0], Y[:, 1], c=color)
plt.axis("tight")
sl.add(dict(perplexity=perplexity, time=t1 - t0, plot=sl.get_current_plot()), sheet=name)
x = np.linspace(0, 1, int(np.sqrt(n_samples)))
xx, yy = np.meshgrid(x, x)
X = np.hstack(
[
xx.ravel().reshape(-1, 1),
yy.ravel().reshape(-1, 1),
]
)
color = xx.ravel()
for i, perplexity in enumerate(perplexities):
t0 = time.time()
tsne = manifold.TSNE(n_components=n_components, init="random", random_state=0, perplexity=perplexity)
Y = tsne.fit_transform(X)
t1 = time.time()
name = "uniform grid, perplexity=%d in %.2g sec" % (perplexity, t1 - t0)
plt.title("Perplexity=%d" % perplexity)
plt.scatter(Y[:, 0], Y[:, 1], c=color)
plt.axis("tight")
sl.add(dict(perplexity=perplexity, time=t1 - t0, plot=sl.get_current_plot()), sheet=name)
```
