[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6XGP0K7R3V48D4Q1J8M6DNA":3,"skill-same:01M6XGP0K7R3V48D4Q1J8M6DNA":74},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":54,"commitSha":55,"skillDirectory":56,"forksCount":14,"repositoryHtmlUrl":57,"repositoryHomepageUrl":6,"ownerHtmlUrl":58,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":59,"install":60,"resources":73},"01M6XGP0K7R3V48D4Q1J8M6DNA","spectral-analysis",null,"Frequency-domain analysis — FFT, power spectral density (Welch\u002Fperiodogram), spectrograms, wavelet transforms, and coherence. Use for any signal with periodic, quasi-periodic, or transient frequency content in physics data.","fadrienne\u002FMyGitHub","fadrienne","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F197874571?v=4","01M6X64V8VWCRSMFZ4EPS2BWXG","Francesca Adrienne","01M6X64VD5MW4F9PHDWQKS7ZAF",0,"MIT","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fspectral-analysis\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"spectral","spectral analysis","analysis","processing","Frequency","Wavelets","PSD","signal","for","domain analysis","FFT","welch","physics","domain","coherence","scipy","numpy","periodic","power","use","2026-11-10 10:12:30",false,"---\nname: spectral-analysis\ndescription: Frequency-domain analysis — FFT, power spectral density (Welch\u002Fperiodogram), spectrograms, wavelet transforms, and coherence. Use for any signal with periodic, quasi-periodic, or transient frequency content in physics data.\ncategory: physics\nversion: 1.0.0\nauthor: Synthetic Sciences\nlicense: MIT\ntags: [FFT, Spectral Analysis, PSD, Wavelets, Signal Processing, Frequency, Physics]\ndependencies: [\"scipy>=1.11.0\", \"numpy>=1.24.0\", \"matplotlib>=3.7.0\"]\n---\n\n# Spectral Analysis\n\n## Overview\n\nExtract frequency content from physics signals using FFT, power spectral density estimation, spectrograms, and wavelet transforms. Covers stationary and non-stationary signals.\n\n## When to Use\n\n- Finding oscillation frequencies in time-series data\n- Computing power spectra of turbulence, vibrations, or wave data\n- Detecting transient features (spectrograms, wavelets)\n- Filtering signals (low-pass, band-pass, notch)\n- Cross-spectral analysis and coherence between signals\n\n## Core Workflows\n\n### 1. FFT (Fast Fourier Transform)\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Signal: sum of two sinusoids + noise\ndt = 0.001  # sampling interval [s]\nfs = 1 \u002F dt  # sampling frequency [Hz]\nt = np.arange(0, 1, dt)\nsignal = 1.5 * np.sin(2*np.pi*50*t) + 0.8 * np.sin(2*np.pi*120*t)\nsignal += 0.5 * np.random.randn(len(t))\n\n# Compute FFT\nN = len(t)\nfft_vals = np.fft.rfft(signal)\nfreqs = np.fft.rfftfreq(N, d=dt)\namplitude = 2.0 \u002F N * np.abs(fft_vals)  # single-sided amplitude\nphase = np.angle(fft_vals)\n\nfig, axes = plt.subplots(2, 1, figsize=(10, 7))\naxes[0].plot(t[:200], signal[:200], 'b-', linewidth=0.8)\naxes[0].set_xlabel('Time [s]')\naxes[0].set_ylabel('Amplitude')\naxes[0].set_title('Time Domain Signal')\naxes[0].grid(True, alpha=0.3)\n\naxes[1].plot(freqs, amplitude, 'r-', linewidth=0.8)\naxes[1].set_xlabel('Frequency [Hz]')\naxes[1].set_ylabel('Amplitude')\naxes[1].set_title('FFT Amplitude Spectrum')\naxes[1].set_xlim(0, 200)\naxes[1].grid(True, alpha=0.3)\n\nplt.tight_layout()\nplt.savefig('fft_analysis.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. Power Spectral Density (Welch Method)\n\n```python\nfrom scipy.signal import welch, periodogram\n\n# Welch PSD (better noise averaging than raw FFT)\nfreqs_w, psd_w = welch(signal, fs=fs, nperseg=256, noverlap=128)\n\n# Periodogram (raw, no averaging)\nfreqs_p, psd_p = periodogram(signal, fs=fs)\n\nfig, ax = plt.subplots(figsize=(10, 5))\nax.semilogy(freqs_p, psd_p, 'gray', alpha=0.3, label='Periodogram')\nax.semilogy(freqs_w, psd_w, 'r-', linewidth=2, label='Welch PSD')\nax.set_xlabel('Frequency [Hz]')\nax.set_ylabel('PSD [V²\u002FHz]')\nax.set_title('Power Spectral Density')\nax.legend()\nax.grid(True, alpha=0.3)\nax.set_xlim(0, 200)\nplt.savefig('psd.png', dpi=150, bbox_inches='tight')\n```\n\n**Welch parameters:**\n- `nperseg`: Segment length (frequency resolution = fs\u002Fnperseg)\n- `noverlap`: Overlap between segments (typically 50% = nperseg\u002F\u002F2)\n- `window`: Window function ('hann' default, 'blackman' for better sidelobe suppression)\n- Trade-off: longer segments → better frequency resolution, worse noise averaging\n\n### 3. Spectrogram (Time-Frequency)\n\n```python\nfrom scipy.signal import spectrogram\n\n# Chirp signal (frequency sweeps from 10 to 200 Hz)\nt_chirp = np.linspace(0, 2, 8000)\nchirp = np.sin(2*np.pi * (10*t_chirp + 47.5*t_chirp**2))\n\nf_spec, t_spec, Sxx = spectrogram(chirp, fs=4000, nperseg=256, noverlap=200)\n\nfig, ax = plt.subplots(figsize=(10, 5))\npcm = ax.pcolormesh(t_spec, f_spec, 10*np.log10(Sxx + 1e-20),\n                     shading='gouraud', cmap='inferno')\nax.set_ylabel('Frequency [Hz]')\nax.set_xlabel('Time [s]')\nax.set_title('Spectrogram')\nplt.colorbar(pcm, ax=ax, label='PSD [dB\u002FHz]')\nplt.savefig('spectrogram.png', dpi=150, bbox_inches='tight')\n```\n\n### 4. Wavelet Transform (Continuous)\n\n```python\nfrom scipy.signal import cwt, morlet2\n\n# Continuous wavelet transform with Morlet wavelet\nwidths = np.geomspace(1, 128, num=100)  # scale parameters\ncwtmatr = cwt(signal, morlet2, widths, w=6)\n\n# Convert scales to frequencies: f = w * fs \u002F (2*pi*scale)\nfrequencies = 6 * fs \u002F (2 * np.pi * widths)\n\nfig, ax = plt.subplots(figsize=(10, 5))\nax.pcolormesh(t, frequencies, np.abs(cwtmatr),\n              shading='gouraud', cmap='viridis')\nax.set_ylabel('Frequency [Hz]')\nax.set_xlabel('Time [s]')\nax.set_title('Continuous Wavelet Transform (Morlet)')\nax.set_ylim(0, 200)\nplt.colorbar(ax.collections[0], ax=ax, label='|CWT|')\nplt.savefig('cwt.png', dpi=150, bbox_inches='tight')\n```\n\n### 5. Cross-Spectral Analysis and Coherence\n\n```python\nfrom scipy.signal import coherence, csd\n\n# Two related signals\nsignal2 = 1.2 * np.sin(2*np.pi*50*t + 0.3) + 0.6 * np.random.randn(len(t))\n\n# Coherence (how correlated are the two signals at each frequency)\nf_coh, Cxy = coherence(signal, signal2, fs=fs, nperseg=256)\n\n# Cross-spectral density\nf_csd, Pxy = csd(signal, signal2, fs=fs, nperseg=256)\n\nfig, axes = plt.subplots(2, 1, figsize=(10, 7))\naxes[0].plot(f_coh, Cxy, 'b-', linewidth=1.5)\naxes[0].set_ylabel('Coherence')\naxes[0].set_title('Coherence between signals')\naxes[0].set_xlim(0, 200)\naxes[0].grid(True, alpha=0.3)\n\naxes[1].semilogy(f_csd, np.abs(Pxy), 'r-', linewidth=1.5)\naxes[1].set_xlabel('Frequency [Hz]')\naxes[1].set_ylabel('|CSD| [V²\u002FHz]')\naxes[1].set_title('Cross-Spectral Density')\naxes[1].set_xlim(0, 200)\naxes[1].grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('coherence.png', dpi=150, bbox_inches='tight')\n```\n\n### 6. Filtering\n\n```python\nfrom scipy.signal import butter, sosfilt, sosfiltfilt\n\ndef bandpass_filter(data, lowcut, highcut, fs, order=4):\n    \"\"\"Apply zero-phase Butterworth bandpass filter.\"\"\"\n    nyq = 0.5 * fs\n    sos = butter(order, [lowcut\u002Fnyq, highcut\u002Fnyq], btype='band', output='sos')\n    return sosfiltfilt(sos, data)\n\n# Example: extract 45-55 Hz component\nfiltered = bandpass_filter(signal, 45, 55, fs, order=4)\n```\n\n## Frequency Resolution vs Averaging Trade-off\n\n| Parameter | Effect on Resolution | Effect on Noise |\n|---|---|---|\n| Longer `nperseg` | Better frequency resolution | More noise (fewer averages) |\n| Shorter `nperseg` | Worse frequency resolution | Less noise (more averages) |\n| More `noverlap` | Same resolution | Slightly less noise |\n| Windowing (Hann) | Wider main lobe | Better sidelobe suppression |\n\n**Rule of thumb:** Frequency resolution Δf = fs \u002F nperseg\n\n## Common Pitfalls\n\n| Pitfall | Fix |\n|---|---|\n| Aliasing (fs too low) | Nyquist: fs ≥ 2 × f_max |\n| Spectral leakage | Apply window function (Hann, Blackman) |\n| Zero-padding confusion | Zero-padding interpolates FFT, doesn't improve resolution |\n| Wrong units on PSD | Check: V²\u002FHz for continuous, V² for discrete |\n| DC component dominates | Subtract mean before FFT |\n| Non-uniform sampling | Use Lomb-Scargle periodogram (`scipy.signal.lombscargle`) |\n","# Spectral Analysis\n\n## Overview\n\nExtract frequency content from physics signals using FFT, power spectral density estimation, spectrograms, and wavelet transforms. Covers stationary and non-stationary signals.\n\n## When to Use\n\n- Finding oscillation frequencies in time-series data\n- Computing power spectra of turbulence, vibrations, or wave data\n- Detecting transient features (spectrograms, wavelets)\n- Filtering signals (low-pass, band-pass, notch)\n- Cross-spectral analysis and coherence between signals\n\n## Core Workflows\n\n### 1. FFT (Fast Fourier Transform)\n\n```python\nimport numpy as np\nimport matplotlib.pyplot as plt\n\n# Signal: sum of two sinusoids + noise\ndt = 0.001  # sampling interval [s]\nfs = 1 \u002F dt  # sampling frequency [Hz]\nt = np.arange(0, 1, dt)\nsignal = 1.5 * np.sin(2*np.pi*50*t) + 0.8 * np.sin(2*np.pi*120*t)\nsignal += 0.5 * np.random.randn(len(t))\n\n# Compute FFT\nN = len(t)\nfft_vals = np.fft.rfft(signal)\nfreqs = np.fft.rfftfreq(N, d=dt)\namplitude = 2.0 \u002F N * np.abs(fft_vals)  # single-sided amplitude\nphase = np.angle(fft_vals)\n\nfig, axes = plt.subplots(2, 1, figsize=(10, 7))\naxes[0].plot(t[:200], signal[:200], 'b-', linewidth=0.8)\naxes[0].set_xlabel('Time [s]')\naxes[0].set_ylabel('Amplitude')\naxes[0].set_title('Time Domain Signal')\naxes[0].grid(True, alpha=0.3)\n\naxes[1].plot(freqs, amplitude, 'r-', linewidth=0.8)\naxes[1].set_xlabel('Frequency [Hz]')\naxes[1].set_ylabel('Amplitude')\naxes[1].set_title('FFT Amplitude Spectrum')\naxes[1].set_xlim(0, 200)\naxes[1].grid(True, alpha=0.3)\n\nplt.tight_layout()\nplt.savefig('fft_analysis.png', dpi=150, bbox_inches='tight')\n```\n\n### 2. Power Spectral Density (Welch Method)\n\n```python\nfrom scipy.signal import welch, periodogram\n\n# Welch PSD (better noise averaging than raw FFT)\nfreqs_w, psd_w = welch(signal, fs=fs, nperseg=256, noverlap=128)\n\n# Periodogram (raw, no averaging)\nfreqs_p, psd_p = periodogram(signal, fs=fs)\n\nfig, ax = plt.subplots(figsize=(10, 5))\nax.semilogy(freqs_p, psd_p, 'gray', alpha=0.3, label='Periodogram')\nax.semilogy(freqs_w, psd_w, 'r-', linewidth=2, label='Welch PSD')\nax.set_xlabel('Frequency [Hz]')\nax.set_ylabel('PSD [V²\u002FHz]')\nax.set_title('Power Spectral Density')\nax.legend()\nax.grid(True, alpha=0.3)\nax.set_xlim(0, 200)\nplt.savefig('psd.png', dpi=150, bbox_inches='tight')\n```\n\n**Welch parameters:**\n- `nperseg`: Segment length (frequency resolution = fs\u002Fnperseg)\n- `noverlap`: Overlap between segments (typically 50% = nperseg\u002F\u002F2)\n- `window`: Window function ('hann' default, 'blackman' for better sidelobe suppression)\n- Trade-off: longer segments → better frequency resolution, worse noise averaging\n\n### 3. Spectrogram (Time-Frequency)\n\n```python\nfrom scipy.signal import spectrogram\n\n# Chirp signal (frequency sweeps from 10 to 200 Hz)\nt_chirp = np.linspace(0, 2, 8000)\nchirp = np.sin(2*np.pi * (10*t_chirp + 47.5*t_chirp**2))\n\nf_spec, t_spec, Sxx = spectrogram(chirp, fs=4000, nperseg=256, noverlap=200)\n\nfig, ax = plt.subplots(figsize=(10, 5))\npcm = ax.pcolormesh(t_spec, f_spec, 10*np.log10(Sxx + 1e-20),\n                     shading='gouraud', cmap='inferno')\nax.set_ylabel('Frequency [Hz]')\nax.set_xlabel('Time [s]')\nax.set_title('Spectrogram')\nplt.colorbar(pcm, ax=ax, label='PSD [dB\u002FHz]')\nplt.savefig('spectrogram.png', dpi=150, bbox_inches='tight')\n```\n\n### 4. Wavelet Transform (Continuous)\n\n```python\nfrom scipy.signal import cwt, morlet2\n\n# Continuous wavelet transform with Morlet wavelet\nwidths = np.geomspace(1, 128, num=100)  # scale parameters\ncwtmatr = cwt(signal, morlet2, widths, w=6)\n\n# Convert scales to frequencies: f = w * fs \u002F (2*pi*scale)\nfrequencies = 6 * fs \u002F (2 * np.pi * widths)\n\nfig, ax = plt.subplots(figsize=(10, 5))\nax.pcolormesh(t, frequencies, np.abs(cwtmatr),\n              shading='gouraud', cmap='viridis')\nax.set_ylabel('Frequency [Hz]')\nax.set_xlabel('Time [s]')\nax.set_title('Continuous Wavelet Transform (Morlet)')\nax.set_ylim(0, 200)\nplt.colorbar(ax.collections[0], ax=ax, label='|CWT|')\nplt.savefig('cwt.png', dpi=150, bbox_inches='tight')\n```\n\n### 5. Cross-Spectral Analysis and Coherence\n\n```python\nfrom scipy.signal import coherence, csd\n\n# Two related signals\nsignal2 = 1.2 * np.sin(2*np.pi*50*t + 0.3) + 0.6 * np.random.randn(len(t))\n\n# Coherence (how correlated are the two signals at each frequency)\nf_coh, Cxy = coherence(signal, signal2, fs=fs, nperseg=256)\n\n# Cross-spectral density\nf_csd, Pxy = csd(signal, signal2, fs=fs, nperseg=256)\n\nfig, axes = plt.subplots(2, 1, figsize=(10, 7))\naxes[0].plot(f_coh, Cxy, 'b-', linewidth=1.5)\naxes[0].set_ylabel('Coherence')\naxes[0].set_title('Coherence between signals')\naxes[0].set_xlim(0, 200)\naxes[0].grid(True, alpha=0.3)\n\naxes[1].semilogy(f_csd, np.abs(Pxy), 'r-', linewidth=1.5)\naxes[1].set_xlabel('Frequency [Hz]')\naxes[1].set_ylabel('|CSD| [V²\u002FHz]')\naxes[1].set_title('Cross-Spectral Density')\naxes[1].set_xlim(0, 200)\naxes[1].grid(True, alpha=0.3)\nplt.tight_layout()\nplt.savefig('coherence.png', dpi=150, bbox_inches='tight')\n```\n\n### 6. Filtering\n\n```python\nfrom scipy.signal import butter, sosfilt, sosfiltfilt\n\ndef bandpass_filter(data, lowcut, highcut, fs, order=4):\n    \"\"\"Apply zero-phase Butterworth bandpass filter.\"\"\"\n    nyq = 0.5 * fs\n    sos = butter(order, [lowcut\u002Fnyq, highcut\u002Fnyq], btype='band', output='sos')\n    return sosfiltfilt(sos, data)\n\n# Example: extract 45-55 Hz component\nfiltered = bandpass_filter(signal, 45, 55, fs, order=4)\n```\n\n## Frequency Resolution vs Averaging Trade-off\n\n| Parameter | Effect on Resolution | Effect on Noise |\n|---|---|---|\n| Longer `nperseg` | Better frequency resolution | More noise (fewer averages) |\n| Shorter `nperseg` | Worse frequency resolution | Less noise (more averages) |\n| More `noverlap` | Same resolution | Slightly less noise |\n| Windowing (Hann) | Wider main lobe | Better sidelobe suppression |\n\n**Rule of thumb:** Frequency resolution Δf = fs \u002F nperseg\n\n## Common Pitfalls\n\n| Pitfall | Fix |\n|---|---|\n| Aliasing (fs too low) | Nyquist: fs ≥ 2 × f_max |\n| Spectral leakage | Apply window function (Hann, Blackman) |\n| Zero-padding confusion | Zero-padding interpolates FFT, doesn't improve resolution |\n| Wrong units on PSD | Check: V²\u002FHz for continuous, V² for discrete |\n| DC component dominates | Subtract mean before FFT |\n| Non-uniform sampling | Use Lomb-Scargle periodogram (`scipy.signal.lombscargle`) |\n",{"name":5,"tags":44,"author":48,"license":15,"version":49,"category":31,"description":7,"dependencies":50},[29,45,25,24,46,23,47],"Spectral Analysis","Signal Processing","Physics","Synthetic Sciences","1.0.0",[51,52,53],"scipy>=1.11.0","numpy>=1.24.0","matplotlib>=3.7.0","main","4aa39efd1cdab0b4657ecee16c92a92011a5b10f","openscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fspectral-analysis","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub","https:\u002F\u002Fgithub.com\u002Ffadrienne","2026-10-28 00:43:09",{"source":8,"skillName":5,"commands":61,"prompt":71,"zipAvailable":72},[62,65,68],{"tool":63,"command":64},"npx","npx skills add fadrienne\u002FMyGitHub --skill spectral-analysis",{"tool":66,"command":67},"bunx","bunx skills add fadrienne\u002FMyGitHub --skill spectral-analysis",{"tool":69,"command":70},"pnpm","pnpm dlx skills add fadrienne\u002FMyGitHub --skill spectral-analysis","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fopenscience\u002Fbackend\u002Fcli\u002Fskills\u002Fphysics\u002Fspectral-analysis\u002FSKILL.md",true,[],[75,104,129,163,190,217],{"skillNo":76,"name":77,"nameZh":6,"description":78,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":86,"publishedAt":39},"01M7167B28PK20HP7R7ZED2DY0","statistical-power","Sample size calculation, power analysis, and effect size conversion for scientific studies. Use BEFORE data collection (a priori) to determine required N, or after (post-hoc) to compute achieved power. Covers parametric tests (t-test, ANOVA, chi-square, proportions, correlation, regression), simulation-based power for complex\u002Fclustered\u002Fnested designs, and power curves. Use this skill when someone asks 'how many samples do I need', 'what is my power', 'what effect size can I detect', or any variant. Pairs with \u002Fexperimental-design (choose design first, then compute power) and \u002Fstatistical-analysis (analyze data after collection).","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-power\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[37,87,88,34,89,90,91,92,93,94,95,21,96,97,98,99,100,101,102,103],"statistical power","effect","regression","choose","design","uv","when","Bash","collection","calculation","ANOVA","conversion","analyze","t-test","chi-square","simulation","sample",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":113,"publishedAt":39},"01M71677EBCM8EPCE9BZCK8505","statistical-analysis","Guided statistical analysis with test selection and reporting. Use when you need help choosing appropriate tests for your data, assumption checking, power analysis, and APA-formatted results. Best for academic research reporting, test selection guidance. For implementing specific models programmatically use statsmodels.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fstatistical-analysis\u002FSKILL.md",[110],{"categoryNo":111,"categoryName":112,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000008","测试与质量",[21,114,37,115,116,117,93,118,119,120,27,121,38,122,123,124,125,126,127,128],"statistical analysis","academic research","implementing","selection","you","reporting","data","tests","with","test","research","results","statsmodels","models","help",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":144,"publishedAt":39},"01M71673R93XAHFH81DBNVNG7H","scientific-writing","Core skill for the deep research and writing tool. Write scientific manuscripts in full paragraphs (never bullet points). Use two-stage process with (1) section outlines with key points using research-lookup then (2) convert to flowing prose. IMRAD structure, citations (APA\u002FAMA\u002FVancouver), figures\u002Ftables, reporting guidelines (CONSORT\u002FSTROBE\u002FPRISMA), for research papers and journal submissions.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-writing\u002FSKILL.md",[135,138,139],{"categoryNo":136,"categoryName":137,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000036","内容创作者","PROFESSION","适用职业",[145,146,147,148,149,150,151,152,153,154,94,155,156,157,158,159,160,161,119,162],"writing","scientific","scientific writing","Citations","deep","deep research","never","papers","journal","false","api","prisma","structure","openrouter","Outlines","core skill","read","features",{"skillNo":164,"name":165,"nameZh":6,"description":166,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":167,"categories":168,"keywords":173,"publishedAt":39},"01M7166ZPKXBF4EBPHVTJPQBB1","scientific-visualization","Meta-skill for publication-ready figures. Use when creating journal submission figures requiring multi-panel layouts, significance annotations, error bars, colorblind-safe palettes, and specific journal formatting (Nature, Science, Cell). Orchestrates matplotlib\u002Fseaborn\u002Fplotly with publication styles. For quick exploration use seaborn or plotly directly.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fscientific-visualization\u002FSKILL.md",[169,172],{"categoryNo":170,"categoryName":171,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000013","分析与可视化",{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[174,146,175,176,177,178,179,180,181,153,93,182,183,184,185,186,187,188,27,189],"visualization","scientific visualization","error","ready","quick","exploration","meta-skill","Meta","safe","plotly","annotations","formatting","Publication","figures","panel","submission",{"skillNo":191,"name":192,"nameZh":6,"description":193,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":194,"categories":195,"keywords":202,"publishedAt":39},"01M7166VXJWQSSC3RQZP60WBGR","research-code","Debug, profile, review, and restructure Python research and analysis code. Use when analysis scripts crash, produce wrong results, run too slowly, or need a correctness review. Covers: reading tracebacks and diagnosing root causes, hypothesis-driven debugging, reviewing code for common statistical\u002Fnumerical errors, profiling data pipelines, improving reproducibility (seeds, environments, determinism), and structuring analysis scripts for sharing. Distinct from \u002Fexploratory-data-analysis (which understands data) and \u002Fstatistical-analysis (which chooses and runs tests) — this skill focuses on the code itself.","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fresearch-code\u002FSKILL.md",[196,199],{"categoryNo":197,"categoryName":198,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":200,"categoryName":201,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000030","开发工程师",[203,204,124,205,206,207,208,92,209,93,94,21,210,211,212,213,214,215,161,216],"code","research code","which","memory","data-analysis","errors","debugging","common","review","data pipelines","run","scripts","line","write",{"skillNo":218,"name":219,"nameZh":6,"description":220,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":221,"licenseFileUrl":6,"sourceHtmlUrl":222,"categories":223,"keywords":230,"publishedAt":39},"01M7166CF5HSR7SVZYZFWTDX55","markdown-mermaid-writing","Comprehensive markdown and Mermaid diagram writing skill. Use when creating any scientific document, report, analysis, or visualization. Establishes text-based diagrams as the default documentation standard with full style guides (markdown + mermaid), 24 diagram type references, and 9 document templates.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Ffadrienne\u002FMyGitHub\u002Fblob\u002Fmain\u002Fscientific-agent-skills\u002Fskills\u002Fmarkdown-mermaid-writing\u002FSKILL.md",[224,227,228,229],{"categoryNo":225,"categoryName":226,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000002","文档处理",{"categoryNo":136,"categoryName":137,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},[145,231,232,233,234,235,174,236,237,93,94,21,238,239,240,241,242,243,146,161],"markdown mermaid writing","mermaid","markdown","community","diagrams","project","default","team","guides","text","documentation","references","diagram"]