[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DTE0XSCMJDW944J35GCXT8":3,"skill-same:01M6DTE0XSCMJDW944J35GCXT8":96},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":35,"linkOnly":36,"markdownContent":37,"markdownBody":38,"frontMatter":39,"refName":42,"commitSha":43,"skillDirectory":44,"forksCount":45,"repositoryHtmlUrl":46,"repositoryHomepageUrl":47,"ownerHtmlUrl":48,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":49,"install":50,"resources":63},"01M6DTE0XSCMJDW944J35GCXT8","metabolomics-quantification",null,"Load when imputing missing values (min \u002F median \u002F KNN) and normalising (TIC \u002F median \u002F log) a feature × sample metabolomics CSV. Skip when only normalisation is needed (use metabolomics-normalization); the input is raw spectra (use metabolomics-xcms-preprocessing).","TianGzlab\u002FOmicsClaw","TianGzlab","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F150978281?v=4","01M6DT9WNJJ470ADHPSMFAA02Y","01M6DT9WSN09C5K65GB6RK18R9",161,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002FSKILL.md",[],[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34],"metabolomics quantification","metabolomics","input","tic","knn","imputation","quantification","median","missing","csv","feature","preprocessing","sample","log","only","use","normalization","2026-11-10 10:12:30",false,"---\nname: metabolomics-quantification\ndescription: Load when imputing missing values (min \u002F median \u002F KNN) and normalising (TIC \u002F median \u002F log)\n  a feature × sample metabolomics CSV. Skip when only normalisation is needed (use metabolomics-normalization);\n  the input is raw spectra (use metabolomics-xcms-preprocessing).\ntrigger: metabolomics quantification, imputation, feature quantification, missing values\ntags:\n- metabolomics\n- quantification\n- imputation\n- normalization\n- knn\n- tic\n---\n\n# metabolomics-quantification\n\n## When to use\n\nImpute zeros\u002FNaNs and normalize sample intensities while keeping feature metadata. Use metabolomics-normalization for normalization alone.\n\n## Use from a step\n\n```python\nimport pandas as pd\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"metabolomics-quantification\")\ndata = read_input('features.csv', reader=pd.read_csv)\nresult = library.quantify(data)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs a seeded synthetic\nexample through the step runner and writes a table and Figure. Computations\nreturn new DataFrames, leave the input unchanged and expose diagnostics through\n`run_info(result)`. Plotting functions write no files.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `quantify(data, *, impute='min', normalize='tic')`\n\nReturn imputed and normalized intensities with metadata preserved.\n\n:param data: Feature table with sample\u002Fintensity columns; zeros and NaNs are missing.\n:param impute: CLI default min (half global positive minimum); median or knn also work.\n:param normalize: CLI default tic; median or log are alternatives.\n:returns: A new DataFrame with missing-value counts in attrs['run_info'].\n:raises ValueError: Samples are absent, have no positive observations or a method is unknown.\n:raises ImportError: KNN requires scikit-learn; use install_skill_deps.\n\n### `run_info(data, *, keep=True)`\n\nRead diagnostics attached to a returned table.\n\n:param data: DataFrame returned by this library.\n:param keep: Default True; use False in the CLI to remove diagnostics.\n:returns: An independent dictionary describing the run.\n:raises ValueError: The table carries no run_info.\n\n### `distribution_figure(data)`\n\nPlot sample intensities, excluding numeric feature metadata.\n\n:param data: The input or quantified feature table.\n:returns: A matplotlib Figure.\n:raises ValueError: No numeric sample columns are available.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nMin imputation uses half the global positive minimum, median uses each column positive median, and KNN uses neighbouring feature rows with up to five neighbours. TIC scales column sums to their median; median scales column medians; log computes log2(x+1).\n\n## Gotchas\n\n- `quantify` detects sample\u002Fintensity prefixes, then numeric columns excluding feature_id, mz, rt, name and id. Every sample needs a positive observed intensity; completely missing samples raise ValueError for all methods.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fquantified_features.csv`, `report.md` and `result.json`. Demo mode also writes its synthetic input CSV at the output root.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Fmet_quantify.py --demo --output \u002Ftmp\u002Fmetabolomics_quantification\n```\n\n## See also\n\n- [Parameters](references\u002Fparameters.md)\n- [Methodology](references\u002Fmethodology.md)\n- [Output contract](references\u002Foutput_contract.md)\n\n## Dependencies\n\n`numpy`, `pandas`, `scikit-learn`, `matplotlib`\n","# metabolomics-quantification\n\n## When to use\n\nImpute zeros\u002FNaNs and normalize sample intensities while keeping feature metadata. Use metabolomics-normalization for normalization alone.\n\n## Use from a step\n\n```python\nimport pandas as pd\nfrom skills._sdk.notebook import load_skill, read_input, write_output\nlibrary = load_skill(\"metabolomics-quantification\")\ndata = read_input('features.csv', reader=pd.read_csv)\nresult = library.quantify(data)\nwrite_output(result, 'tables\u002Fresult.csv')\n```\n\n[examples\u002Fexample_step.py](examples\u002Fexample_step.py) runs a seeded synthetic\nexample through the step runner and writes a table and Figure. Computations\nreturn new DataFrames, leave the input unchanged and expose diagnostics through\n`run_info(result)`. Plotting functions write no files.\n\n## API\n\n\u003C!-- api:begin generated from _api.py; regenerate with run.py api \u003Cskill dir> --write -->\n\n### `quantify(data, *, impute='min', normalize='tic')`\n\nReturn imputed and normalized intensities with metadata preserved.\n\n:param data: Feature table with sample\u002Fintensity columns; zeros and NaNs are missing.\n:param impute: CLI default min (half global positive minimum); median or knn also work.\n:param normalize: CLI default tic; median or log are alternatives.\n:returns: A new DataFrame with missing-value counts in attrs['run_info'].\n:raises ValueError: Samples are absent, have no positive observations or a method is unknown.\n:raises ImportError: KNN requires scikit-learn; use install_skill_deps.\n\n### `run_info(data, *, keep=True)`\n\nRead diagnostics attached to a returned table.\n\n:param data: DataFrame returned by this library.\n:param keep: Default True; use False in the CLI to remove diagnostics.\n:returns: An independent dictionary describing the run.\n:raises ValueError: The table carries no run_info.\n\n### `distribution_figure(data)`\n\nPlot sample intensities, excluding numeric feature metadata.\n\n:param data: The input or quantified feature table.\n:returns: A matplotlib Figure.\n:raises ValueError: No numeric sample columns are available.\n\n\u003C!-- api:end -->\n\n## Methods and parameters\n\nMin imputation uses half the global positive minimum, median uses each column positive median, and KNN uses neighbouring feature rows with up to five neighbours. TIC scales column sums to their median; median scales column medians; log computes log2(x+1).\n\n## Gotchas\n\n- `quantify` detects sample\u002Fintensity prefixes, then numeric columns excluding feature_id, mz, rt, name and id. Every sample needs a positive observed intensity; completely missing samples raise ValueError for all methods.\n\n## Inputs and outputs\n\nCSV input; `tables\u002Fquantified_features.csv`, `report.md` and `result.json`. Demo mode also writes its synthetic input CSV at the output root.\nThe function library returns objects; the CLI and step own file writes.\n\n## CLI\n\n```bash\npython skills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Fmet_quantify.py --demo --output \u002Ftmp\u002Fmetabolomics_quantification\n```\n\n## See also\n\n- [Parameters](references\u002Fparameters.md)\n- [Methodology](references\u002Fmethodology.md)\n- [Output contract](references\u002Foutput_contract.md)\n\n## Dependencies\n\n`numpy`, `pandas`, `scikit-learn`, `matplotlib`\n",{"name":5,"tags":40,"trigger":41,"description":7},[19,24,23,34,22,21],"metabolomics quantification, imputation, feature quantification, missing values","main","90a3bec3e6549bc33dddbf67e4b23869736c49d1","skills\u002Fmetabolomics\u002Fmetabolomics-quantification",27,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw","https:\u002F\u002FTianGzlab.github.io\u002FOmicsClaw\u002F","https:\u002F\u002Fgithub.com\u002FTianGzlab","2026-10-08 01:36:11",{"source":8,"skillName":5,"commands":51,"prompt":61,"zipAvailable":62},[52,55,58],{"tool":53,"command":54},"npx","npx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-quantification",{"tool":56,"command":57},"bunx","bunx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-quantification",{"tool":59,"command":60},"pnpm","pnpm dlx skills add TianGzlab\u002FOmicsClaw --skill metabolomics-quantification","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002FSKILL.md",true,[64,70,74,78,84,88,92],{"path":65,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":68,"sourceHtmlUrl":69},"_api.py","SCRIPT","脚本",2042,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002F_api.py",{"path":71,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":72,"sourceHtmlUrl":73},"examples\u002Fexample_step.py",478,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Fexamples\u002Fexample_step.py",{"path":75,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":76,"sourceHtmlUrl":77},"met_quantify.py",5784,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Fmet_quantify.py",{"path":79,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":82,"sourceHtmlUrl":83},"references\u002Fmethodology.md","REFERENCE","参考文档",493,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Freferences\u002Fmethodology.md",{"path":85,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":86,"sourceHtmlUrl":87},"references\u002Foutput_contract.md",509,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Freferences\u002Foutput_contract.md",{"path":89,"resourceType":80,"resourceTypeDesc":81,"sizeBytes":90,"sourceHtmlUrl":91},"references\u002Fparameters.md",450,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Freferences\u002Fparameters.md",{"path":93,"resourceType":66,"resourceTypeDesc":67,"sizeBytes":94,"sourceHtmlUrl":95},"tests\u002Ftest_api.py",1181,"https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fmetabolomics\u002Fmetabolomics-quantification\u002Ftests\u002Ftest_api.py",[97,115,127,144,169,192],{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":108,"publishedAt":35},"01M6DTP4X225Q92RMY8XXHPCTT","demo-skill","A fixture skill for the skill environment tests. Use it for nothing else.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fskillenv\u002Ffixtures\u002Fskills\u002Fdemo\u002Fdemo-skill\u002FSKILL.md",[103],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[109,110,111,112,113,33,114],"demo skill","demo","tests","fixture","fixture skill","environment",{"skillNo":116,"name":117,"nameZh":6,"description":118,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":119,"categories":120,"keywords":121,"publishedAt":35},"01M6DTP28JTWQK3HHXDNQV8BBV","fake-domains","Test fixture for the golden deployment in tests\u002Fentry. Load never; it has no script.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftests\u002Fentry\u002Ffake_skills\u002Fspatial\u002Ffake-domains\u002FSKILL.md",[],[122,123,124,111,112,125,126],"domains","fake domains","deployment","never","test",{"skillNo":128,"name":129,"nameZh":6,"description":130,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":131,"categories":132,"keywords":134,"publishedAt":35},"01M6DTNZ4AMWKTME1T18K5C643","replace-me-skill","Load when copying this directory to bootstrap a new OmicsClaw skill. Skip when an existing skill already covers the request.","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Ftemplates\u002Fskill\u002FSKILL.md",[133],{"categoryNo":104,"categoryName":105,"taxonomyType":106,"taxonomyTypeDesc":107},[135,136,137,138,139,140,141,142,143],"me","replace me skill","template","directory","skill template","existing skill","new skill","bootstrap","scaffold",{"skillNo":145,"name":146,"nameZh":6,"description":147,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":148,"categories":149,"keywords":150,"publishedAt":35},"01M6DTNV63MTD0Q6YRC52F0B1Y","spatial-velocity","Load when estimating RNA velocity on a spatial AnnData with `layers[\"spliced\"]` + `layers[\"unspliced\"]` via scVelo (stochastic \u002F deterministic \u002F dynamical) or veloVI (deep generative). Skip when input lacks the spliced\u002Funspliced layers (must be quantified upstream by velocyto \u002F kb-python \u002F STARsolo); non-spatial scRNA velocity (use sc-velocity).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-velocity\u002FSKILL.md",[],[151,152,153,154,20,155,156,157,158,159,160,161,162,163,164,165,166,33,167,168],"velocity","spatial velocity","Spatial","scvelo","starsolo","time","deep","RNA","kb-python","via","velocyto","rna-velocity","velovi","dynamics","upstream","kb","python","deterministic",{"skillNo":170,"name":171,"nameZh":6,"description":172,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":173,"categories":174,"keywords":175,"publishedAt":35},"01M6DTNPMR227NAT8QFY620YDW","spatial-trajectory","Load when inferring pseudotime \u002F lineage trajectories on a preprocessed spatial AnnData via DPT (default — diffusion pseudotime), CellRank (terminal-state + fate-probability), or Palantir (waypoint branch probabilities). Skip when the data has spliced\u002Funspliced layers and you want velocity-driven dynamics (use spatial-velocity); non-spatial scRNA pseudotime (use sc-pseudotime).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-trajectory\u002FSKILL.md",[],[153,176,177,178,179,180,181,182,160,183,184,185,186,187,151,188,33,189,190,191],"trajectory","spatial trajectory","state","terminal","lineage","diffusion","cellrank","palantir","dpt","pseudotime","probability","cell","default","branch","anndata","data",{"skillNo":193,"name":194,"nameZh":6,"description":195,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":196,"categories":197,"keywords":198,"publishedAt":35},"01M6DTNJEYFT33P84DGHDNXW95","spatial-statistics","Load when running spatial autocorrelation \u002F hotspot \u002F co-occurrence \u002F neighbourhood-enrichment \u002F Ripley K stats on a clustered spatial AnnData via squidpy. Skip when ranking spatially variable genes (use spatial-genes); tissue domain detection (use spatial-domains).","https:\u002F\u002Fgithub.com\u002FTianGzlab\u002FOmicsClaw\u002Fblob\u002Fmain\u002Fskills\u002Fspatial\u002Fspatial-statistics\u002FSKILL.md",[],[199,200,153,160,201,202,203,204,205,206,122,207,208,209,210,33,190,211,212,213],"spatial statistics","statistics","nhood-enrichment","co-occurrence","ripley","geary","moran","neighbourhood","ranking","autocorrelation","local","domain","detection","enrichment","stats"]