perfspec-learning/html/prepare_perfspec.html

83 lines
320 KiB
HTML
Raw Normal View History

2025-01-28 14:18:51 +00:00
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<link rel="icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/favicon.ico" />
<!-- Preload is necessary because we show these images when we disconnect from the server,
but at that point we cannot load these images from the server -->
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/gradient-yHQUC_QB.png" as="image" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/noise-60BoTA8O.png" as="image" />
<!-- Preload the fonts -->
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/Lora-VariableFont_wght-B2ootaw-.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/PTSans-Regular-CxL0S8W7.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/PTSans-Bold-D9fedIX3.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/FiraMono-Regular-BTCkDNvf.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/FiraMono-Medium-DU3aDxX5.ttf" as="font" crossorigin="anonymous" />
<link rel="preload" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/FiraMono-Bold-CLVRCuM9.ttf" as="font" crossorigin="anonymous" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#000000" />
<meta name="description" content="a marimo app" />
<link rel="apple-touch-icon" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/apple-touch-icon.png" />
<link rel="manifest" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/manifest.json" />
<script data-marimo="true">
function __resizeIframe(obj) {
var scrollbarHeight = 20; // Max between windows, mac, and linux
function setHeight() {
var element = obj.contentWindow.document.documentElement;
// If there is no vertical scrollbar, we don't need to resize the iframe
if (element.scrollHeight === element.clientHeight) {
return;
}
// Create a new height that includes the scrollbar height if it's visible
var hasHorizontalScrollbar = element.scrollWidth > element.clientWidth;
var newHeight = element.scrollHeight + (hasHorizontalScrollbar ? scrollbarHeight : 0);
// Only update the height if it's different from the current height
if (obj.style.height !== `${newHeight}px`) {
obj.style.height = `${newHeight}px`;
}
}
// Resize the iframe to the height of the content and bottom scrollbar height
setHeight();
// Resize the iframe when the content changes
const resizeObserver = new ResizeObserver((entries) => {
setHeight();
});
resizeObserver.observe(obj.contentWindow.document.body);
}
</script>
<marimo-filename hidden>prepare_perfspec.py</marimo-filename>
<marimo-mode data-mode='read' hidden></marimo-mode>
<marimo-version data-version='0.10.17' hidden></marimo-version>
<marimo-user-config data-config='{"completion": {"activate_on_typing": true, "copilot": false}, "display": {"cell_output": "above", "code_editor_font_size": 14, "dataframes": "rich", "default_width": "medium", "theme": "light"}, "formatting": {"line_length": 79}, "keymap": {"overrides": {}, "preset": "default"}, "package_management": {"manager": "pip"}, "runtime": {"auto_instantiate": true, "auto_reload": "off", "on_cell_change": "autorun"}, "save": {"autosave": "after_delay", "autosave_delay": 1000, "format_on_save": false}, "server": {"browser": "default", "follow_symlink": false}, "snippets": {"custom_paths": [], "include_default_snippets": true}}' data-overrides='{}' hidden></marimo-user-config>
<marimo-app-config data-config='{"width": "medium"}' hidden></marimo-app-config>
<marimo-server-token data-token='static' hidden></marimo-server-token>
<title>prepare perfspec</title>
<script type="module" crossorigin crossorigin="anonymous" src="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/index-UhR0gcZS.js"></script>
<link rel="stylesheet" crossorigin crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist/assets/index-CRGfAcwh.css">
<script data-marimo="true">
window.__MARIMO_STATIC__ = {};
window.__MARIMO_STATIC__.version = "0.10.17";
window.__MARIMO_STATIC__.notebookState = {"cellIds": ["Hbol", "MJUe", "vblA", "bkHC", "lEQa", "PKri", "Xref", "SFPL", "BYtC", "RGSE", "Kclp", "emfo", "Hstk", "nWHF"], "cellNames": ["aGVhZGVy", "aW1wb3J0cw==", "aW50cm8=", "bG9hZF9yYXdfbG9ncw==", "Y3JlYXRlX21haW5fYXVkaXRfbG9ncw==", "Z2VuZXJlYXRlX2FjdGlvbnNfZGF0YQ==", "c2F2ZV9hY3Rpb25zX2RhdGE=", "cGxvdF9hdmFpbGFibGVfZm9udHM=", "bWFpbg==", "YWN0aW9uc19kaXN0cmli", "cGxvdF9hY3Rpb25zX2Rpc3RyaWI=", "cmV2aWV3X2FjdGlvbnNfZGlzdHJpYg==", "c2VsZWN0X2FjdGlvbnNfZGlzdHJpYg==", "Xw=="], "cellCodes": ["aW1wb3J0JTIwbWFyaW1vJTIwYXMlMjBtbyUwQSUwQW5vdGVib29rX25hbWUlMjAlM0QlMjAncHJlcGFyZV9wZXJmc3BlYy5weSclMEElMEFmcm9tJTIwbGliX3BlcmZzcGVjJTIwaW1wb3J0JTIwcGVyZnNwZWNfdmFycyUwQShfJTJDX2RlZnMpJTIwJTNEJTIwcGVyZnNwZWNfdmFycy5ydW4oKSUwQXBlcmZzcGVjJTIwJTNEJTIwX2RlZnMlNUIncGVyZnNwZWMnJTVEJTBBJTBBZnJvbSUyMGxpYl9wZXJmc3BlYyUyMGltcG9ydCUyMHBlcmZzcGVjX2hlYWRlciUwQShfJTJDX2RlZnMpJTIwJTNEJTIwcGVyZnNwZWNfaGVhZGVyLnJ1bigpJTBBbGliX2hlYWRlciUyMCUzRCUyMF9kZWZzJTVCJ2hlYWRlciclNUQlMEFsaWJfaW50cm8lMjAlM0QlMjBfZGVmcyU1QidpbnRybyclNUQlMEElMEFtby5tZCglMEElMjAlMjAlMjAlMjBmJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwJTdCbGliX2hlYWRlcihub3RlYm9va19uYW1lKSU3RCUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMyUyMFByZXBhcmUlMjBkYXRhJTIwdG8lMjB0cmFpbiUyMCoqJTdCcGVyZnNwZWMlNUInYXBwJyU1RCU1Qid0cmFpbl9tb2RlJyU1RCU3RCoqJTIwJTIwbW9kZWwlMEElMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEEp", "ZnJvbSUyMHBhdGhsaWIlMjBpbXBvcnQlMjBQYXRoJTBBaW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwanNvbiUwQWltcG9ydCUyMHBhbmRhcyUyMGFzJTIwcGQ=", "dmVyYm9zZSUyMCUzRCUyMHBlcmZzcGVjJTVCJ3NldHRpbmdzJyU1RCU1Qid2ZXJib3NlJyU1RCUwQXBlcmZzcGVjJTVCJ3ZhcnMnJTVEJTIwJTNEJTIwJTdCJTdEJTBBJTBBZnJvbSUyMGxpYl9wZXJmc3BlYyUyMGltcG9ydCUyMHBlcmZzcGVjX2FyZ3MlMEEoXyUyQ19kZWZzKSUyMCUzRCUyMHBlcmZzcGVjX2FyZ3MucnVuKCklMEElMEFpZiUyMG5vdCUyMFBhdGgocGVyZnNwZWMlNUInZGVmYXVsdHMnJTVEJTVCJ2RhdGFfZGlycGF0aCclNUQpLmV4aXN0cygpJTNBJTIwJTBBJTIwJTIwJTIwZXhpdChmJTIyZGF0YSUyMGRpciUyMHBhdGglMjBub3QlMjBmb3VuZCUzQSUyMCU3QnBlcmZzcGVjJTVCJ2RlZmF1bHRzJyU1RCU1QidkYXRhX2RpcnBhdGgnJTVEJTdEJTIyKSUyMCUyMCUwQSUwQW1vLm1kKCUwQSUyMCUyMCUyMCUyMGYlMjIlMjIlMjIlMEElMjAlMjAlMjAlMjAlN0JsaWJfaW50cm8obm90ZWJvb2tfbmFtZSklN0QlMEElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjIlMEEp", "ZGVmJTIwbG9hZF9yYXdfbG9ncyhmaWxlcGF0aCklM0ElMEElMjAlMjAlMjAlMjBmaWxlX3BhdGglMjAlM0QlMjBQYXRoKGZpbGVwYXRoKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMENoZWNrJTIwaWYlMjB0aGUlMjBmaWxlJTIwZXhpc3RzJTIwdXNpbmclMjBQYXRoJTBBJTIwJTIwJTIwJTIwaWYlMjBub3QlMjBmaWxlX3BhdGguZXhpc3RzKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjBleGl0KGYlMjJGaWxlJTIwbm90JTIwZm91bmQlM0ElMjAlN0JmaWxlcGF0aCU3RCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTZXQlMjB0aGUlMjBjaHVuayUyMHNpemUlMjAobnVtYmVyJTIwb2YlMjByb3dzJTIwdG8lMjBwcm9jZXNzJTIwYXQlMjBhJTIwdGltZSklMEElMjAlMjAlMjAlMjBjaHVua19zaXplJTIwJTNEJTIwMTAwMCUyMCUyMCUyMyUyMEFkanVzdCUyMGJhc2VkJTIwb24lMjB5b3VyJTIwYXZhaWxhYmxlJTIwbWVtb3J5JTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ3JlYXRlJTIwYW4lMjBlbXB0eSUyMGxpc3QlMjB0byUyMGhvbGQlMjB0aGUlMjBjaHVua3MlMEElMjAlMjAlMjAlMjBjaHVua3MlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjAlMjMlMjBJdGVyYXRlJTIwb3ZlciUyMHRoZSUyMGZpbGUlMjBpbiUyMGNodW5rcyUwQSUyMCUyMCUyMCUyMHRyeSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGNodW5rJTIwaW4lMjBwZC5yZWFkX2pzb24oZmlsZV9wYXRoJTJDJTIwbGluZXMlM0RUcnVlJTJDJTIwY2h1bmtzaXplJTNEY2h1bmtfc2l6ZSUyQyUyMGVuY29kaW5nX2Vycm9ycyUzRCdpZ25vcmUnKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEFwcGVuZCUyMGVhY2glMjBjaHVuayUyMHRvJTIwdGhlJTIwbGlzdCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNodW5rcy5hcHBlbmQoY2h1bmspJTBBJTIwJTIwJTIwJTIwZXhjZXB0JTIwVmFsdWVFcnJvciUyMGFzJTIwZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByaW50KGYlMjJFcnJvciUyMHdoaWxlJTIwcGFyc2luZyUyMEpTT04lM0ElMjAlN0JlJTdEJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMENvbWJpbmUlMjBhbGwlMjBjaHVua3MlMjBpbnRvJTIwYSUyMHNpbmdsZSUyMERhdGFGcmFtZSUwQSUyMCUyMCUyMCUyMGRmJTIwJTNEJTIwcGQuY29uY2F0KGNodW5rcyUyQyUyMGlnbm9yZV9pbmRleCUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwJTIzZGYlNUIndXNlcl9wYXJzZWQnJTVEJTIwJTNEJTIwZGYlNUIndXNlciclNUQuYXBwbHkoanNvbi5sb2FkcyklMEElMjAlMjAlMjAlMjAlMjNkZl9leHBsb2RlZCUyMCUzRCUyMGRmLmV4cGxvZGUoJ3VzZXInKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyME5vcm1hbGl6ZSUyMHRoZSUyMEpTT04lMjBzdHJ1Y3R1cmUlMjB0byUyMG
window.__MARIMO_STATIC__.assetUrl = "https://cdn.jsdelivr.net/npm/@marimo-team/frontend@0.10.17/dist";
window.__MARIMO_STATIC__.files = {"/@file/272-1812-o72hoJFj.csv": "data:text/csv;base64,QWN0aW9uLENvdW50CmRlbGV0ZV9hcGlzZXJ2aWNlcyw0NQpwYXRjaF9wb2RzLDMwMApjcmVhdGVfYXBpc2VydmljZXMsNDUKdXBkYXRlX2N1c3RvbXJlc291cmNlZGVmaW5pdGlvbnMsMTM1CnVwZGF0ZV92YWxpZGF0aW5nd2ViaG9va2NvbmZpZ3VyYXRpb25zLDIxCnVwZGF0ZV9tdXRhdGluZ3dlYmhvb2tjb25maWd1cmF0aW9ucywxOApwYXRjaF9ub2RlcywyNTUKY3JlYXRlX3NlcnZpY2VhY2NvdW50cywyMTYKY3JlYXRlX3BvZHMsMjQwCmNyZWF0ZV9jb25maWdtYXBzLDE0MQo=", "/@file/14-1812-MXBD1M1t.csv": "data:text/csv;base64,LEFjdGlvbixDb3VudAo="};
</script>
</head>
<body>
<div id="root"></div>
<marimo-code hidden="">
import%20marimo%0A%0A__generated_with%20%3D%20%220.10.17%22%0Aapp%20%3D%20marimo.App(width%3D%22medium%22)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20header()%3A%0A%20%20%20%20import%20marimo%20as%20mo%0A%0A%20%20%20%20notebook_name%20%3D%20'prepare_perfspec.py'%0A%0A%20%20%20%20from%20lib_perfspec%20import%20perfspec_vars%0A%20%20%20%20(_%2C_defs)%20%3D%20perfspec_vars.run()%0A%20%20%20%20perfspec%20%3D%20_defs%5B'perfspec'%5D%0A%0A%20%20%20%20from%20lib_perfspec%20import%20perfspec_header%0A%20%20%20%20(_%2C_defs)%20%3D%20perfspec_header.run()%0A%20%20%20%20lib_header%20%3D%20_defs%5B'header'%5D%0A%20%20%20%20lib_intro%20%3D%20_defs%5B'intro'%5D%0A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%7Blib_header(notebook_name)%7D%0A%0A%20%20%20%20%20%20%20%20%23%23%20Prepare%20data%20to%20train%20**%7Bperfspec%5B'app'%5D%5B'train_mode'%5D%7D**%20%20model%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20(%0A%20%20%20%20%20%20%20%20lib_header%2C%0A%20%20%20%20%20%20%20%20lib_intro%2C%0A%20%20%20%20%20%20%20%20mo%2C%0A%20%20%20%20%20%20%20%20notebook_name%2C%0A%20%20%20%20%20%20%20%20perfspec%2C%0A%20%20%20%20%20%20%20%20perfspec_header%2C%0A%20%20%20%20%20%20%20%20perfspec_vars%2C%0A%20%20%20%20)%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20imports()%3A%0A%20%20%20%20from%20pathlib%20import%20Path%0A%20%20%20%20import%20numpy%20as%20np%0A%20%20%20%20import%20json%0A%20%20%20%20import%20pandas%20as%20pd%0A%20%20%20%20return%20Path%2C%20json%2C%20np%2C%20pd%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20intro(Path%2C%20lib_intro%2C%20mo%2C%20notebook_name%2C%20perfspec)%3A%0A%20%20%20%20verbose%20%3D%20perfspec%5B'settings'%5D%5B'verbose'%5D%0A%20%20%20%20perfspec%5B'vars'%5D%20%3D%20%7B%7D%0A%0A%20%20%20%20from%20lib_perfspec%20import%20perfspec_args%0A%20%20%20%20(_%2C_defs)%20%3D%20perfspec_args.run()%0A%0A%20%20%20%20if%20not%20Path(perfspec%5B'defaults'%5D%5B'data_dirpath'%5D).exists()%3A%20%0A%20%20%20%20%20%20%20exit(f%22data%20dir%20path%20not%20found%3A%20%7Bperfspec%5B'defaults'%5D%5B'data_dirpath'%5D%7D%22)%20%20%0A%0A%20%20%20%20mo.md(%0A%20%20%20%20%20%20%20%20f%22%22%22%0A%20%20%20%20%20%20%20%20%7Blib_intro(notebook_name)%7D%0A%0A%20%20%20%20%20%20%20%20%22%22%22%0A%20%20%20%20)%0A%20%20%20%20return%20perfspec_args%2C%20verbose%0A%0A%0A%40app.cell(hide_code%3DTrue)%0Adef%20load_raw_logs(Path%2C%20mo%2C%20pd%2C%20perfspec)%3A%0A%20%20%20%20def%20load_raw_logs(filepath)%3A%0A%20%20%20%20%20%20%20%20file_path%20%3D%20Path(filepath)%0A%0A%20%20%20%20%20%20%20%20%23%20Check%20if%20the%20file%20exists%20using%20Path%0A%20%20%20%20%20%20%20%20if%20not%20file_path.exists()%3A%0A%20%20%20%20%20%20%20%20%20%20%20exit(f%22File%20not%20found%3A%20%7Bfilepath%7D%22)%0A%0A%20%20%20%20%20%20%20%20%23%20Set%20the%20chunk%20size%20(number%20of%20rows%20to%20process%20at%20a%20time)%0A%20%20%20%20%20%20%20%20chunk_size%20%3D%201000%20%20%23%20Adjust%20based%20on%20your%20available%20memory%0A%0A%20%20%20%20%20%20%20%20%23%20Create%20an%20empty%20list%20to%20hold%20the%20chunks%0A%20%20%20%20%20%20%20%20chunks%20%3D%20%5B%5D%0A%0A%20%20%20%20%20%20%20%20%23%20Iterate%20over%20the%20file%20in%20chunks%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20for%20chunk%20in%20pd.read_json(file_path%2C%20lines%3DTrue%2C%20chunksize%3Dchunk_size%2C%20encoding_errors%3D'ignore')%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%23%20Append%20each%20chunk%20to%20the%20list%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20chunks.append(chunk)%0A%20%20%20%20%20%20%20%20except%20ValueError%20as%20e%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20print(f%22Error%20while%20parsing%20JSON%3A%20%7Be%7D%22)%0A%0A%20%20%20%20%20%20%20%20%23%20Combine%20all%20chunks%20into%20a%20single%20DataFrame%0A%20%20%20%20%20%20%20%20df%20%3D%20pd.concat(chunks%2C%20ignore_index%3DTrue)%0A%0A%20%20%20%20%20%20%20%20%23df%5B'user_parsed'%5D%20%3D%20df%5B'user'%5D.apply(json.loads)%0A%20%20%20%20%20%20%20%20%23df_exploded%20%3D%20df.explode('user')%0A%0A%20%20%20%20%20%20%20%2
</marimo-code>
<marimo-code-hash hidden="">bb116188b7a79e8601a19ae893fb1707b120485586956d73b52b81db04dac132</marimo-code-hash>
</body>
</html>