Data Science
Overview
Comprehensive data science skill for the QWARD quantum computing project. Covers visualization, statistical analysis, and machine learning workflows for analyzing quantum circuit metrics and producing publication-quality results.
Quick Start
Plot QWARD Metrics
import matplotlib.pyplot as plt
import pandas as pd
from qward import Scanner
from qward.metrics import QiskitMetrics, ComplexityMetrics
scanner = Scanner(circuit=circuit)
scanner.add_strategy(QiskitMetrics(circuit))
scanner.add_strategy(ComplexityMetrics(circuit))
results = scanner.calculate_metrics()
# Plot complexity metrics
df = results['complexity']
fig, ax = plt.subplots(figsize=(10, 6))
df.plot(kind='bar', ax=ax)
ax.set_title('Circuit Complexity Metrics')
plt.savefig('qward/examples/img/complexity.png', dpi=300, bbox_inches='tight')
Statistical Comparison
from scipy import stats
import numpy as np
# Compare metrics across circuits
t_stat, p_value = stats.ttest_ind(metrics_circuit_a, metrics_circuit_b)
cohens_d = (np.mean(metrics_circuit_a) - np.mean(metrics_circuit_b)) / np.sqrt(
(np.std(metrics_circuit_a)**2 + np.std(metrics_circuit_b)**2) / 2
)
print(f"t = {t_stat:.2f}, p = {p_value:.3f}, d = {cohens_d:.2f}")
Core Capabilities
1. Visualization (matplotlib + seaborn)
For creating plots, charts, and publication-ready figures.
Reference: See references/visualization.md for complete guidance on:
- Object-oriented matplotlib API (recommended over pyplot)
- All plot types: line, scatter, bar, histogram, heatmap, violin, radar
- Multi-panel figures with GridSpec and subplot_mosaic
- Seaborn statistical plots with automatic CIs
- Colorblind-safe palettes (Okabe-Ito, viridis, cividis)
- Publication export (PNG 300dpi, PDF/SVG vector, TIFF)
- Journal-specific styling (Nature, Science, Cell dimensions)
- 3D plots, contour plots, annotations
Quick patterns:
# Always use OO interface
fig, ax = plt.subplots(figsize=(10, 6), constrained_layout=True)
ax.plot(x, y, linewidth=2, label='data')
ax.set_xlabel('X Label (units)')
ax.set_ylabel('Y Label (units)')
ax.legend(frameon=False)
ax.spines['top'].set_visible(False)
ax.spines['right'].set_visible(False)
plt.savefig('qward/examples/img/plot.png', dpi=300, bbox_inches='tight')
2. Statistical Analysis
For hypothesis testing, assumption checking, and reporting.
Reference: See references/statistics.md for complete guidance on:
- Test selection guide (parametric vs non-parametric)
- Assumption checking (normality, homogeneity, linearity)
- t-tests, ANOVA, chi-square, Mann-Whitney, Kruskal-Wallis
- Effect sizes (Cohen's d, eta-squared, Cramer's V) with CIs
- Power analysis and sample size calculations
- Multiple comparison corrections (Bonferroni, FDR)
- Bayesian alternatives (Bayes Factors, credible intervals)
- APA-style reporting templates
3. Statistical Modeling (statsmodels)
For regression, GLMs, time series, and econometric analysis.
Reference: See references/modeling.md for complete guidance on:
- Linear regression (OLS, WLS, GLS) with diagnostics
- Generalized linear models (logistic, Poisson, Gamma)
- Time series (ARIMA, SARIMAX, VAR, exponential smoothing)
- Formula API (R-style):
smf.ols('y ~ x1 + C(group)', data=df)
- Robust standard errors (HC, HAC, cluster-robust)
- Model comparison (AIC, BIC, likelihood ratio tests)
- Residual diagnostics and influence analysis
4. Machine Learning (scikit-learn)
For classification, regression, clustering, and dimensionality reduction.
Reference: See references/machine-learning.md for complete guidance on:
- Pipelines and ColumnTransformer for production workflows
- Preprocessing (StandardScaler, OneHotEncoder, imputation)
- Supervised learning (RandomForest, GradientBoosting, SVM, KNN)
- Unsupervised learning (KMeans, DBSCAN, PCA, t-SNE, UMAP)
- Cross-validation and hyperparameter tuning (GridSearchCV)
- Metrics (classification_report, ROC AUC, silhouette score)
- Feature importance and model interpretability
QWARD-Specific Workflows
Analyzing Scanner Output
from qward import Scanner
from qward.metrics import QiskitMetrics, ComplexityMetrics
import pandas as pd
scanner = Scanner(circuit=circuit)
scanner.add_strategy(QiskitMetrics(circuit))
scanner.add_strategy(ComplexityMetrics(circuit))
results = scanner.calculate_metrics()
# Each value is a DataFrame
for metric_name, df in results.items():
print(f"\n{metric_name}:")
print(df.describe())
Comparing Circuits
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# Collect metrics across circuits
all_metrics = []
for name, circuit in circuits.items():
scanner = Scanner(circuit=circuit)
scanner.add_strategy(ComplexityMetrics(circuit))
result = scanner.calculate_metrics()
df = result['complexity']
df['circuit'] = name
all_metrics.append(df)
combined = pd.concat(all_metrics, ignore_index=True)
# Visualize
fig, ax = plt.subplots(figsize=(10, 6))
sns.boxplot(data=combined, x='circuit', y='gate_density', ax=ax)
ax.set_ylabel('Gate Density')
sns.despine()
plt.savefig('qward/examples/img/comparison.png', dpi=300, bbox_inches='tight')
Correlation Analysis
import seaborn as sns
import numpy as np
# Correlation between complexity metrics
corr = df_metrics.corr(method='spearman')
mask = np.triu(np.ones_like(corr, dtype=bool))
fig, ax = plt.subplots(figsize=(8, 6))
sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',
cmap='RdBu_r', center=0, square=True, ax=ax)
plt.savefig('qward/examples/img/correlation.png', dpi=300, bbox_inches='tight')
Best Practices
Visualization
- Use OO interface (
fig, ax = plt.subplots()) for production code
- Use
constrained_layout=True to prevent overlapping
- Use colorblind-friendly palettes (viridis, cividis, Okabe-Ito)
- Save images to
qward/examples/img/ per project convention
- 300 DPI for publications, vector (PDF/SVG) when possible
Statistics
- Always check assumptions before interpreting tests
- Report effect sizes with confidence intervals, not just p-values
- Use non-parametric tests when normality is violated
- Correct for multiple comparisons when testing many hypotheses
- Use Bayesian methods when you need evidence for the null
Machine Learning
- Always use Pipelines to prevent data leakage
- Use stratified splits for classification
- Set
random_state for reproducibility
- Scale features for SVM, KNN, neural networks (not for trees)
- Report cross-validated metrics, not just train/test
Converted and distributed by TomeVault — claim your Tome and manage your conversions.
1---2name: data-science-23description: Data science skill for scientific visualization, statistical analysis, and machine learning with Python. Use when creating plots (matplotlib, seaborn), performing statistical tests (scipy, statsmodels, pingouin), building ML models (scikit-learn), analyzing QWARD metric DataFrames, generating publication-ready figures, conducting hypothesis testing, regression analysis, time series forecasting, or producing APA-formatted statistical reports. Covers pandas, numpy, matplotlib, seaborn, statsmodels, scipy, and scikit-learn workflows. Use when this capability is needed.4---56# Data Science78## Overview910Comprehensive data science skill for the QWARD quantum computing project. Covers visualization, statistical analysis, and machine learning workflows for analyzing quantum circuit metrics and producing publication-quality results.1112## Quick Start1314### Plot QWARD Metrics1516```python17import matplotlib.pyplot as plt18import pandas as pd19from qward import Scanner20from qward.metrics import QiskitMetrics, ComplexityMetrics2122scanner = Scanner(circuit=circuit)23scanner.add_strategy(QiskitMetrics(circuit))24scanner.add_strategy(ComplexityMetrics(circuit))25results = scanner.calculate_metrics()2627# Plot complexity metrics28df = results['complexity']29fig, ax = plt.subplots(figsize=(10, 6))30df.plot(kind='bar', ax=ax)31ax.set_title('Circuit Complexity Metrics')32plt.savefig('qward/examples/img/complexity.png', dpi=300, bbox_inches='tight')33```3435### Statistical Comparison3637```python38from scipy import stats39import numpy as np4041# Compare metrics across circuits42t_stat, p_value = stats.ttest_ind(metrics_circuit_a, metrics_circuit_b)43cohens_d = (np.mean(metrics_circuit_a) - np.mean(metrics_circuit_b)) / np.sqrt(44 (np.std(metrics_circuit_a)**2 + np.std(metrics_circuit_b)**2) / 245)46print(f"t = {t_stat:.2f}, p = {p_value:.3f}, d = {cohens_d:.2f}")47```4849## Core Capabilities5051### 1. Visualization (matplotlib + seaborn)5253For creating plots, charts, and publication-ready figures.5455**Reference:** See `references/visualization.md` for complete guidance on:56- Object-oriented matplotlib API (recommended over pyplot)57- All plot types: line, scatter, bar, histogram, heatmap, violin, radar58- Multi-panel figures with GridSpec and subplot_mosaic59- Seaborn statistical plots with automatic CIs60- Colorblind-safe palettes (Okabe-Ito, viridis, cividis)61- Publication export (PNG 300dpi, PDF/SVG vector, TIFF)62- Journal-specific styling (Nature, Science, Cell dimensions)63- 3D plots, contour plots, annotations6465**Quick patterns:**66```python67# Always use OO interface68fig, ax = plt.subplots(figsize=(10, 6), constrained_layout=True)69ax.plot(x, y, linewidth=2, label='data')70ax.set_xlabel('X Label (units)')71ax.set_ylabel('Y Label (units)')72ax.legend(frameon=False)73ax.spines['top'].set_visible(False)74ax.spines['right'].set_visible(False)75plt.savefig('qward/examples/img/plot.png', dpi=300, bbox_inches='tight')76```7778### 2. Statistical Analysis7980For hypothesis testing, assumption checking, and reporting.8182**Reference:** See `references/statistics.md` for complete guidance on:83- Test selection guide (parametric vs non-parametric)84- Assumption checking (normality, homogeneity, linearity)85- t-tests, ANOVA, chi-square, Mann-Whitney, Kruskal-Wallis86- Effect sizes (Cohen's d, eta-squared, Cramer's V) with CIs87- Power analysis and sample size calculations88- Multiple comparison corrections (Bonferroni, FDR)89- Bayesian alternatives (Bayes Factors, credible intervals)90- APA-style reporting templates9192### 3. Statistical Modeling (statsmodels)9394For regression, GLMs, time series, and econometric analysis.9596**Reference:** See `references/modeling.md` for complete guidance on:97- Linear regression (OLS, WLS, GLS) with diagnostics98- Generalized linear models (logistic, Poisson, Gamma)99- Time series (ARIMA, SARIMAX, VAR, exponential smoothing)100- Formula API (R-style): `smf.ols('y ~ x1 + C(group)', data=df)`101- Robust standard errors (HC, HAC, cluster-robust)102- Model comparison (AIC, BIC, likelihood ratio tests)103- Residual diagnostics and influence analysis104105### 4. Machine Learning (scikit-learn)106107For classification, regression, clustering, and dimensionality reduction.108109**Reference:** See `references/machine-learning.md` for complete guidance on:110- Pipelines and ColumnTransformer for production workflows111- Preprocessing (StandardScaler, OneHotEncoder, imputation)112- Supervised learning (RandomForest, GradientBoosting, SVM, KNN)113- Unsupervised learning (KMeans, DBSCAN, PCA, t-SNE, UMAP)114- Cross-validation and hyperparameter tuning (GridSearchCV)115- Metrics (classification_report, ROC AUC, silhouette score)116- Feature importance and model interpretability117118## QWARD-Specific Workflows119120### Analyzing Scanner Output121122```python123from qward import Scanner124from qward.metrics import QiskitMetrics, ComplexityMetrics125import pandas as pd126127scanner = Scanner(circuit=circuit)128scanner.add_strategy(QiskitMetrics(circuit))129scanner.add_strategy(ComplexityMetrics(circuit))130results = scanner.calculate_metrics()131132# Each value is a DataFrame133for metric_name, df in results.items():134 print(f"\n{metric_name}:")135 print(df.describe())136```137138### Comparing Circuits139140```python141import pandas as pd142import seaborn as sns143import matplotlib.pyplot as plt144145# Collect metrics across circuits146all_metrics = []147for name, circuit in circuits.items():148 scanner = Scanner(circuit=circuit)149 scanner.add_strategy(ComplexityMetrics(circuit))150 result = scanner.calculate_metrics()151 df = result['complexity']152 df['circuit'] = name153 all_metrics.append(df)154155combined = pd.concat(all_metrics, ignore_index=True)156157# Visualize158fig, ax = plt.subplots(figsize=(10, 6))159sns.boxplot(data=combined, x='circuit', y='gate_density', ax=ax)160ax.set_ylabel('Gate Density')161sns.despine()162plt.savefig('qward/examples/img/comparison.png', dpi=300, bbox_inches='tight')163```164165### Correlation Analysis166167```python168import seaborn as sns169import numpy as np170171# Correlation between complexity metrics172corr = df_metrics.corr(method='spearman')173mask = np.triu(np.ones_like(corr, dtype=bool))174175fig, ax = plt.subplots(figsize=(8, 6))176sns.heatmap(corr, mask=mask, annot=True, fmt='.2f',177 cmap='RdBu_r', center=0, square=True, ax=ax)178plt.savefig('qward/examples/img/correlation.png', dpi=300, bbox_inches='tight')179```180181## Best Practices182183### Visualization184- Use OO interface (`fig, ax = plt.subplots()`) for production code185- Use `constrained_layout=True` to prevent overlapping186- Use colorblind-friendly palettes (viridis, cividis, Okabe-Ito)187- Save images to `qward/examples/img/` per project convention188- 300 DPI for publications, vector (PDF/SVG) when possible189190### Statistics191- Always check assumptions before interpreting tests192- Report effect sizes with confidence intervals, not just p-values193- Use non-parametric tests when normality is violated194- Correct for multiple comparisons when testing many hypotheses195- Use Bayesian methods when you need evidence for the null196197### Machine Learning198- Always use Pipelines to prevent data leakage199- Use stratified splits for classification200- Set `random_state` for reproducibility201- Scale features for SVM, KNN, neural networks (not for trees)202- Report cross-validated metrics, not just train/test203204---205> Converted and distributed by [TomeVault](https://tomevault.io/claim/xthecapx) — claim your Tome and manage your conversions.206<!-- tomevault:4.0:skill_md:2026-04-13 -->