From 031104491180b1f3d091e3b29115a6ddd9595b43 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 19 Nov 2025 06:51:21 +0000 Subject: [PATCH] Rename package from tableqa to statqa The package name 'tableqa' is already taken on PyPI, so we're renaming to 'statqa' (Statistical QA). Changes: - Renamed main package directory: tableqa/ -> statqa/ - Updated pyproject.toml: package name, scripts, URLs, tool configs - Updated all import statements throughout codebase - Updated README.md and all documentation files - Updated example files and generated outputs - Updated GitHub workflow files - Updated CLI command: tableqa -> statqa - Updated version references in __init__.py and generator.py All references to 'tableqa' have been systematically replaced with 'statqa' while maintaining the same functionality and structure. --- .github/workflows/ci.yml | 6 +- .github/workflows/python-publish.yml | 2 +- README.md | 86 +++++++++---------- docs/QA_DATASET_GENERATION_PIPELINE.md | 22 ++--- docs/source/conf.py | 10 +-- docs/source/index.rst | 10 +-- examples/README.md | 22 ++--- examples/anes/README.md | 22 ++--- examples/anes/data/README.md | 2 +- examples/anes/extract_insights.py | 8 +- examples/basic_usage.py | 10 +-- examples/employee/README.md | 10 +-- examples/employee/qa_pairs.json | 70 +++++++-------- examples/employee/qa_pairs.jsonl | 70 +++++++-------- examples/employee/run_analysis.py | 12 +-- examples/iris/README.md | 10 +-- examples/iris/qa_pairs.json | 78 ++++++++--------- examples/iris/qa_pairs.jsonl | 78 ++++++++--------- examples/iris/run_analysis.py | 12 +-- examples/simple_survey/README.md | 18 ++-- examples/simple_survey/quick_start.py | 10 +-- examples/titanic/README.md | 10 +-- examples/titanic/qa_pairs.json | 56 ++++++------ examples/titanic/qa_pairs.jsonl | 56 ++++++------ examples/titanic/run_analysis.py | 12 +-- pyproject.toml | 24 +++--- {tableqa => statqa}/__init__.py | 12 +-- statqa/analysis/__init__.py | 14 +++ {tableqa => statqa}/analysis/bivariate.py | 4 +- {tableqa => statqa}/analysis/causal.py | 4 +- {tableqa => statqa}/analysis/temporal.py | 4 +- {tableqa => statqa}/analysis/univariate.py | 4 +- {tableqa => statqa}/cli/__init__.py | 0 {tableqa => statqa}/cli/main.py | 22 ++--- statqa/interpretation/__init__.py | 7 ++ {tableqa => statqa}/interpretation/context.py | 2 +- .../interpretation/formatter.py | 0 {tableqa => statqa}/metadata/__init__.py | 2 +- {tableqa => statqa}/metadata/enricher.py | 2 +- statqa/metadata/parsers/__init__.py | 8 ++ {tableqa => statqa}/metadata/parsers/base.py | 2 +- {tableqa => statqa}/metadata/parsers/csv.py | 4 +- {tableqa => statqa}/metadata/parsers/text.py | 4 +- {tableqa => statqa}/metadata/schema.py | 0 {tableqa => statqa}/py.typed | 0 {tableqa => statqa}/qa/__init__.py | 4 +- {tableqa => statqa}/qa/generator.py | 12 +-- {tableqa => statqa}/qa/templates.py | 0 {tableqa => statqa}/utils/__init__.py | 4 +- {tableqa => statqa}/utils/io.py | 0 {tableqa => statqa}/utils/stats.py | 0 statqa/visualization/__init__.py | 7 ++ {tableqa => statqa}/visualization/plots.py | 2 +- {tableqa => statqa}/visualization/themes.py | 0 tableqa/analysis/__init__.py | 14 --- tableqa/interpretation/__init__.py | 7 -- tableqa/metadata/parsers/__init__.py | 8 -- tableqa/visualization/__init__.py | 7 -- tests/conftest.py | 2 +- tests/test_parsers.py | 2 +- tests/test_schema.py | 2 +- tests/test_univariate.py | 4 +- 62 files changed, 448 insertions(+), 448 deletions(-) rename {tableqa => statqa}/__init__.py (70%) create mode 100644 statqa/analysis/__init__.py rename {tableqa => statqa}/analysis/bivariate.py (99%) rename {tableqa => statqa}/analysis/causal.py (98%) rename {tableqa => statqa}/analysis/temporal.py (99%) rename {tableqa => statqa}/analysis/univariate.py (98%) rename {tableqa => statqa}/cli/__init__.py (100%) rename {tableqa => statqa}/cli/main.py (94%) create mode 100644 statqa/interpretation/__init__.py rename {tableqa => statqa}/interpretation/context.py (99%) rename {tableqa => statqa}/interpretation/formatter.py (100%) rename {tableqa => statqa}/metadata/__init__.py (57%) rename {tableqa => statqa}/metadata/enricher.py (99%) create mode 100644 statqa/metadata/parsers/__init__.py rename {tableqa => statqa}/metadata/parsers/base.py (97%) rename {tableqa => statqa}/metadata/parsers/csv.py (98%) rename {tableqa => statqa}/metadata/parsers/text.py (98%) rename {tableqa => statqa}/metadata/schema.py (100%) rename {tableqa => statqa}/py.typed (100%) rename {tableqa => statqa}/qa/__init__.py (50%) rename {tableqa => statqa}/qa/generator.py (97%) rename {tableqa => statqa}/qa/templates.py (100%) rename {tableqa => statqa}/utils/__init__.py (53%) rename {tableqa => statqa}/utils/io.py (100%) rename {tableqa => statqa}/utils/stats.py (100%) create mode 100644 statqa/visualization/__init__.py rename {tableqa => statqa}/visualization/plots.py (99%) rename {tableqa => statqa}/visualization/themes.py (100%) delete mode 100644 tableqa/analysis/__init__.py delete mode 100644 tableqa/interpretation/__init__.py delete mode 100644 tableqa/metadata/parsers/__init__.py delete mode 100644 tableqa/visualization/__init__.py diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4064d82..0cf96c0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -29,16 +29,16 @@ jobs: - name: Lint with ruff run: | - ruff check tableqa tests + ruff check statqa tests - name: Type check with mypy run: | - mypy tableqa --ignore-missing-imports + mypy statqa --ignore-missing-imports continue-on-error: true - name: Run tests with pytest run: | - pytest --cov=tableqa --cov-report=xml --cov-report=term-missing + pytest --cov=statqa --cov-report=xml --cov-report=term-missing - name: Upload coverage to Codecov uses: codecov/codecov-action@v4 diff --git a/.github/workflows/python-publish.yml b/.github/workflows/python-publish.yml index e881b0a..ca261c5 100644 --- a/.github/workflows/python-publish.yml +++ b/.github/workflows/python-publish.yml @@ -41,7 +41,7 @@ jobs: environment: name: pypi - url: https://pypi.org/p/tableqa + url: https://pypi.org/p/statqa steps: - name: Download distribution packages diff --git a/README.md b/README.md index 00083ff..b430788 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ -# TableQA +# StatQA -[![CI](https://github.com/gojiplus/tableqa/actions/workflows/ci.yml/badge.svg)](https://github.com/gojiplus/tableqa/actions/workflows/ci.yml) -[![Documentation](https://github.com/gojiplus/tableqa/actions/workflows/docs.yml/badge.svg)](https://gojiplus.github.io/tableqa) -[![PyPI version](https://badge.fury.io/py/tableqa.svg)](https://pypi.org/project/tableqa/) +[![CI](https://github.com/gojiplus/statqa/actions/workflows/ci.yml/badge.svg)](https://github.com/gojiplus/statqa/actions/workflows/ci.yml) +[![Documentation](https://github.com/gojiplus/statqa/actions/workflows/docs.yml/badge.svg)](https://gojiplus.github.io/statqa) +[![PyPI version](https://badge.fury.io/py/statqa.svg)](https://pypi.org/project/statqa/) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -**TableQA** is a modern Python framework for automatically extracting structured facts, statistical insights, and Q/A pairs from tabular datasets. It converts raw columns and values into clear, human-readable statements, enabling rapid knowledge discovery, RAG corpus construction, and LLM training. +**StatQA** is a modern Python framework for automatically extracting structured facts, statistical insights, and Q/A pairs from tabular datasets. It converts raw columns and values into clear, human-readable statements, enabling rapid knowledge discovery, RAG corpus construction, and LLM training. ## 🎯 Key Features @@ -29,30 +29,30 @@ ### Basic Installation ```bash -pip install tableqa +pip install statqa ``` ### With Optional Features ```bash # Include LLM support (OpenAI/Anthropic) -pip install tableqa[llm] +pip install statqa[llm] # Include PDF parsing -pip install tableqa[pdf] +pip install statqa[pdf] # Development installation -pip install tableqa[dev] +pip install statqa[dev] # Complete installation -pip install tableqa[all] +pip install statqa[all] ``` ### From Source ```bash -git clone https://github.com/gojiplus/tableqa.git -cd tableqa +git clone https://github.com/gojiplus/statqa.git +cd statqa pip install -e ".[dev]" ``` @@ -61,7 +61,7 @@ pip install -e ".[dev]" ### 1. Create a Codebook ```python -from tableqa.metadata.parsers import TextParser +from statqa.metadata.parsers import TextParser codebook_text = """ # Variable: age @@ -90,7 +90,7 @@ codebook = parser.parse(codebook_text) ```python import pandas as pd -from tableqa.analysis import UnivariateAnalyzer, BivariateAnalyzer +from statqa.analysis import UnivariateAnalyzer, BivariateAnalyzer # Load your data data = pd.read_csv("survey_data.csv") @@ -114,7 +114,7 @@ result = biv_analyzer.analyze( ### 3. Generate Natural Language Insights ```python -from tableqa.interpretation import InsightFormatter +from statqa.interpretation import InsightFormatter formatter = InsightFormatter() insight = formatter.format_univariate(result) @@ -126,7 +126,7 @@ print(insight) ### 4. Create Q/A Pairs for LLM Training ```python -from tableqa.qa import QAGenerator +from statqa.qa import QAGenerator qa_gen = QAGenerator(use_llm=False) # Template-based qa_pairs = qa_gen.generate_qa_pairs(result, insight) @@ -139,7 +139,7 @@ for qa in qa_pairs: Each Q/A pair includes **provenance metadata** tracking: - **When** the answer was generated (timestamp) -- **What tool** was used (tableqa version) +- **What tool** was used (statqa version) - **What compute** was performed (analysis type, analyzer) - **How** it was generated (template vs. LLM paraphrase) - **Which LLM** was used (if applicable) @@ -147,11 +147,11 @@ Each Q/A pair includes **provenance metadata** tracking: ## 🎨 Complete Pipeline Example ```python -from tableqa import Codebook, UnivariateAnalyzer -from tableqa.metadata.parsers import CSVParser -from tableqa.interpretation import InsightFormatter -from tableqa.qa import QAGenerator -from tableqa.utils.io import load_data, save_json +from statqa import Codebook, UnivariateAnalyzer +from statqa.metadata.parsers import CSVParser +from statqa.interpretation import InsightFormatter +from statqa.qa import QAGenerator +from statqa.utils.io import load_data, save_json # 1. Parse codebook parser = CSVParser() @@ -184,7 +184,7 @@ with open("training_data.jsonl", "w") as f: ## πŸ“ Q/A Provenance Tracking -Every Q/A pair generated by TableQA includes detailed **provenance metadata** to ensure reproducibility and traceability: +Every Q/A pair generated by StatQA includes detailed **provenance metadata** to ensure reproducibility and traceability: ```json { @@ -193,7 +193,7 @@ Every Q/A pair generated by TableQA includes detailed **provenance metadata** to "type": "descriptive", "provenance": { "generated_at": "2025-11-19T10:30:45.123456+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "univariate", @@ -207,8 +207,8 @@ Every Q/A pair generated by TableQA includes detailed **provenance metadata** to | Field | Description | Example Values | |-------|-------------|----------------| | `generated_at` | ISO 8601 timestamp (UTC) | `2025-11-19T10:30:45+00:00` | -| `tool` | Software used for generation | `tableqa` | -| `tool_version` | Version of tableqa | `0.1.0` | +| `tool` | Software used for generation | `statqa` | +| `tool_version` | Version of statqa | `0.1.0` | | `generation_method` | How the Q/A was created | `template`, `llm_paraphrase` | | `analysis_type` | Statistical analysis performed | `univariate`, `bivariate`, `temporal`, `causal` | | `analyzer` | Specific analyzer class used | `UnivariateAnalyzer`, `BivariateAnalyzer` | @@ -222,20 +222,20 @@ This provenance tracking enables: ## πŸ–₯️ Command-Line Interface -TableQA provides a powerful CLI for common workflows: +StatQA provides a powerful CLI for common workflows: ```bash # Parse a codebook -tableqa parse-codebook codebook.csv --output codebook.json --enrich +statqa parse-codebook codebook.csv --output codebook.json --enrich # Run full analysis pipeline -tableqa analyze data.csv codebook.json --output-dir results/ --plots +statqa analyze data.csv codebook.json --output-dir results/ --plots # Generate Q/A pairs -tableqa generate-qa results/all_insights.json --output qa_pairs.jsonl --llm +statqa generate-qa results/all_insights.json --output qa_pairs.jsonl --llm # Complete pipeline -tableqa pipeline data.csv codebook.csv --output-dir output/ --enrich --qa +statqa pipeline data.csv codebook.csv --output-dir output/ --enrich --qa ``` ## πŸ“Š Supported Analyses @@ -268,7 +268,7 @@ tableqa pipeline data.csv codebook.csv --output-dir output/ --enrich --qa ### LLM-Powered Metadata Enrichment ```python -from tableqa.metadata import MetadataEnricher +from statqa.metadata import MetadataEnricher enricher = MetadataEnricher(provider="openai", api_key="your-key") enriched_codebook = enricher.enrich_codebook(codebook) @@ -279,7 +279,7 @@ enriched_codebook = enricher.enrich_codebook(codebook) ### Multiple Testing Correction ```python -from tableqa.utils.stats import correct_multiple_testing +from statqa.utils.stats import correct_multiple_testing p_values = [0.03, 0.01, 0.15, 0.002] reject, corrected_p = correct_multiple_testing(p_values, method="fdr_bh") @@ -288,7 +288,7 @@ reject, corrected_p = correct_multiple_testing(p_values, method="fdr_bh") ### Custom Visualizations ```python -from tableqa.visualization import PlotFactory +from statqa.visualization import PlotFactory plotter = PlotFactory(style="publication", figsize=(10, 6)) fig = plotter.plot_bivariate(data, var1, var2, output_path="plot.png") @@ -296,8 +296,8 @@ fig = plotter.plot_bivariate(data, var1, var2, output_path="plot.png") ## πŸ“š Documentation -- **Full Documentation**: [https://gojiplus.github.io/tableqa](https://gojiplus.github.io/tableqa) -- **API Reference**: [API Docs](https://gojiplus.github.io/tableqa/api/) +- **Full Documentation**: [https://gojiplus.github.io/statqa](https://gojiplus.github.io/statqa) +- **API Reference**: [API Docs](https://gojiplus.github.io/statqa/api/) - **Examples**: See [examples/](examples/) directory ## πŸ§ͺ Development @@ -305,20 +305,20 @@ fig = plotter.plot_bivariate(data, var1, var2, output_path="plot.png") ### Running Tests ```bash -pytest --cov=tableqa --cov-report=html +pytest --cov=statqa --cov-report=html ``` ### Code Quality ```bash # Linting -ruff check tableqa tests +ruff check statqa tests # Type checking -mypy tableqa +mypy statqa # Formatting -black tableqa tests +black statqa tests ``` ### Building Documentation @@ -354,9 +354,9 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file ## πŸ“¬ Contact & Support -- **Issues**: [GitHub Issues](https://github.com/gojiplus/tableqa/issues) -- **Discussions**: [GitHub Discussions](https://github.com/gojiplus/tableqa/discussions) -- **Email**: maintainers@tableqa.org +- **Issues**: [GitHub Issues](https://github.com/gojiplus/statqa/issues) +- **Discussions**: [GitHub Discussions](https://github.com/gojiplus/statqa/discussions) +- **Email**: maintainers@statqa.org ## πŸ—ΊοΈ Roadmap diff --git a/docs/QA_DATASET_GENERATION_PIPELINE.md b/docs/QA_DATASET_GENERATION_PIPELINE.md index c654059..b0be5c9 100644 --- a/docs/QA_DATASET_GENERATION_PIPELINE.md +++ b/docs/QA_DATASET_GENERATION_PIPELINE.md @@ -2,7 +2,7 @@ ## Overview -This document describes TableQA's pipeline for generating Q/A-style datasets from tabular data with metadata. The pipeline converts raw tables into structured question-answer pairs suitable for training or fine-tuning LLMs on data analysis tasks. +This document describes StatQA's pipeline for generating Q/A-style datasets from tabular data with metadata. The pipeline converts raw tables into structured question-answer pairs suitable for training or fine-tuning LLMs on data analysis tasks. ## Pipeline Architecture @@ -52,7 +52,7 @@ Output: Q/A Dataset for LLM Training **Example**: ```python -from tableqa.metadata.parsers import CSVParser +from statqa.metadata.parsers import CSVParser parser = CSVParser() codebook = parser.parse('codebook.csv') @@ -84,7 +84,7 @@ codebook = parser.parse('codebook.csv') **Example**: ```python -from tableqa.analysis import UnivariateAnalyzer, BivariateAnalyzer +from statqa.analysis import UnivariateAnalyzer, BivariateAnalyzer # Univariate analyzer = UnivariateAnalyzer() @@ -116,7 +116,7 @@ range=[25,000.00, 133,843.00]. N=500 [non-normal distribution]. **Example**: ```python -from tableqa.interpretation import InsightFormatter +from statqa.interpretation import InsightFormatter formatter = InsightFormatter() insight = formatter.format_univariate(result) @@ -143,7 +143,7 @@ insight = formatter.format_univariate(result) **Example**: ```python -from tableqa.qa import QAGenerator +from statqa.qa import QAGenerator # Template-based only qa_gen = QAGenerator(use_llm=False) @@ -325,10 +325,10 @@ A: **Survived**: most common category is '0' (60.2%), N=400. ```python from pathlib import Path -from tableqa.metadata.parsers import CSVParser -from tableqa.analysis import UnivariateAnalyzer, BivariateAnalyzer -from tableqa.interpretation import InsightFormatter -from tableqa.qa import QAGenerator +from statqa.metadata.parsers import CSVParser +from statqa.analysis import UnivariateAnalyzer, BivariateAnalyzer +from statqa.interpretation import InsightFormatter +from statqa.qa import QAGenerator # 1. Parse codebook parser = CSVParser() @@ -366,13 +366,13 @@ with open('qa_dataset.jsonl', 'w') as f: ```bash # Complete pipeline -tableqa pipeline data.csv codebook.csv \ +statqa pipeline data.csv codebook.csv \ --output-dir output/ \ --qa \ --enrich # Just Q/A generation from existing insights -tableqa generate-qa insights.json \ +statqa generate-qa insights.json \ --output qa_pairs.jsonl \ --format openai \ --llm diff --git a/docs/source/conf.py b/docs/source/conf.py index 033a91f..6b4b546 100644 --- a/docs/source/conf.py +++ b/docs/source/conf.py @@ -1,18 +1,18 @@ -"""Sphinx configuration for tableqa documentation.""" +"""Sphinx configuration for statqa documentation.""" import sys from pathlib import Path -from tableqa import __version__ +from statqa import __version__ # Add project root to path sys.path.insert(0, str(Path(__file__).parents[2])) # Project information -project = "tableqa" -copyright = "2025, TableQA Contributors" -author = "TableQA Contributors" +project = "statqa" +copyright = "2025, StatQA Contributors" +author = "StatQA Contributors" # Version version = __version__ diff --git a/docs/source/index.rst b/docs/source/index.rst index 1ea99fb..e274c64 100644 --- a/docs/source/index.rst +++ b/docs/source/index.rst @@ -1,7 +1,7 @@ -TableQA Documentation +StatQA Documentation ===================== -**TableQA** is a Python framework for automatically extracting structured facts, insights, and Q/A pairs from tabular datasets. +**StatQA** is a Python framework for automatically extracting structured facts, insights, and Q/A pairs from tabular datasets. Features -------- @@ -17,12 +17,12 @@ Quick Start Installation:: - pip install tableqa + pip install statqa Basic usage:: - from tableqa import Codebook, UnivariateAnalyzer - from tableqa.metadata.parsers import TextParser + from statqa import Codebook, UnivariateAnalyzer + from statqa.metadata.parsers import TextParser # Parse codebook parser = TextParser() diff --git a/examples/README.md b/examples/README.md index d299a60..ef7217c 100644 --- a/examples/README.md +++ b/examples/README.md @@ -1,6 +1,6 @@ # TableQA Examples -This directory contains examples demonstrating various features of the tableqa library. +This directory contains examples demonstrating various features of the statqa library. ## Quick Start @@ -9,7 +9,7 @@ Start with `basic_usage.py` for a simple introduction to the core concepts. ## Examples Overview ### Basic Usage (`basic_usage.py`) -A standalone script showing the fundamental tableqa workflow: +A standalone script showing the fundamental statqa workflow: - Creating codebooks from text - Running univariate and bivariate analyses - Generating insights and Q/A pairs @@ -76,9 +76,9 @@ cd examples/iris python -c " import pandas as pd import json -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.model import Codebook +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.model import Codebook data = pd.read_csv('data.csv') with open('codebook.json') as f: @@ -127,7 +127,7 @@ python extract_insights.py \ ### Generate Q/A Pairs ```python -from tableqa.qa.generator import QAGenerator +from statqa.qa.generator import QAGenerator qa_gen = QAGenerator(use_llm=False) # Template-based qa_pairs = qa_gen.generate_qa_pairs(result, answer) @@ -140,7 +140,7 @@ for qa in qa_pairs: ### Export Insights ```python import json -from tableqa.utils.io import export_insights +from statqa.utils.io import export_insights # Save to JSON with open('insights.json', 'w') as f: @@ -149,7 +149,7 @@ with open('insights.json', 'w') as f: ### Create Visualizations ```python -from tableqa.visualization.plots import PlotFactory +from statqa.visualization.plots import PlotFactory plotter = PlotFactory(style='seaborn') plotter.plot_univariate(result, output_path='distribution.png') @@ -187,9 +187,9 @@ examples/ ## Getting Help -- **Documentation**: https://gojiplus.github.io/tableqa -- **Issues**: https://github.com/gojiplus/tableqa/issues -- **Discussions**: https://github.com/gojiplus/tableqa/discussions +- **Documentation**: https://gojiplus.github.io/statqa +- **Issues**: https://github.com/gojiplus/statqa/issues +- **Discussions**: https://github.com/gojiplus/statqa/discussions ## Next Steps diff --git a/examples/anes/README.md b/examples/anes/README.md index 94ec804..294890b 100644 --- a/examples/anes/README.md +++ b/examples/anes/README.md @@ -4,7 +4,7 @@ This example demonstrates a complete analysis pipeline using the American Nation ## Overview -The ANES dataset is a comprehensive survey dataset covering American political behavior and attitudes over seven decades. This example shows how to use **tableqa** to: +The ANES dataset is a comprehensive survey dataset covering American political behavior and attitudes over seven decades. This example shows how to use **statqa** to: 1. Parse codebook metadata from PDF format 2. Extract statistical insights (univariate and bivariate) @@ -35,12 +35,12 @@ anes/ ### Prerequisites ```bash -# Install tableqa with optional dependencies -pip install tableqa[pdf,llm] +# Install statqa with optional dependencies +pip install statqa[pdf,llm] # Or install from source -git clone https://github.com/gojiplus/tableqa.git -cd tableqa +git clone https://github.com/gojiplus/statqa.git +cd statqa pip install -e ".[pdf,llm]" ``` @@ -179,8 +179,8 @@ See `data/README.md` for download instructions. You can extend the scripts to include additional analyses: ```python -from tableqa.analysis.temporal import TemporalAnalyzer -from tableqa.analysis.causal import CausalAnalyzer +from statqa.analysis.temporal import TemporalAnalyzer +from statqa.analysis.causal import CausalAnalyzer # Add temporal trend analysis temporal_analyzer = TemporalAnalyzer() @@ -194,7 +194,7 @@ effects = causal_analyzer.analyze(data, treatment, outcome, confounders) ### Custom Visualizations ```python -from tableqa.visualization.plots import PlotFactory +from statqa.visualization.plots import PlotFactory plotter = PlotFactory(style='publication', figsize=(10, 6)) plotter.plot_temporal(data, time_var, target_var, output_path='trend.png') @@ -211,7 +211,7 @@ plotter.plot_temporal(data, time_var, target_var, output_path='trend.png') ## Troubleshooting **Problem**: `pdfplumber` not found -**Solution**: Install with `pip install tableqa[pdf]` +**Solution**: Install with `pip install statqa[pdf]` **Problem**: OpenAI API errors **Solution**: Check API key, quota, and use `--skip-questions` to bypass @@ -237,11 +237,11 @@ If you use this example or the ANES data in your research, please cite: ## License -- **tableqa**: MIT License +- **statqa**: MIT License - **ANES Data**: See [ANES usage terms](https://electionstudies.org/data-center/anes-time-series-cumulative-data-file/) ## Support For issues or questions: -- tableqa package: [GitHub Issues](https://github.com/gojiplus/tableqa/issues) +- statqa package: [GitHub Issues](https://github.com/gojiplus/statqa/issues) - ANES data: [ANES Contact](https://electionstudies.org/contact/) diff --git a/examples/anes/data/README.md b/examples/anes/data/README.md index 3defc88..25b3a81 100644 --- a/examples/anes/data/README.md +++ b/examples/anes/data/README.md @@ -164,7 +164,7 @@ If you want to test the pipeline with a smaller dataset: For data-related questions: - **ANES support**: https://electionstudies.org/contact/ -- **tableqa issues**: https://github.com/gojiplus/tableqa/issues +- **statqa issues**: https://github.com/gojiplus/statqa/issues ## File Checksums diff --git a/examples/anes/extract_insights.py b/examples/anes/extract_insights.py index 01dc9dd..65f8b9f 100755 --- a/examples/anes/extract_insights.py +++ b/examples/anes/extract_insights.py @@ -31,10 +31,10 @@ import pandas as pd from tqdm.auto import tqdm -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.schema import Variable, VariableType -from tableqa.visualization.plots import PlotFactory +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.schema import Variable, VariableType +from statqa.visualization.plots import PlotFactory # Configure logging diff --git a/examples/basic_usage.py b/examples/basic_usage.py index 26d267e..4c3a3a8 100644 --- a/examples/basic_usage.py +++ b/examples/basic_usage.py @@ -10,11 +10,11 @@ import pandas as pd -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.parsers.text import TextParser -from tableqa.qa.generator import QAGenerator +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.parsers.text import TextParser +from statqa.qa.generator import QAGenerator # 1. Define codebook as text diff --git a/examples/employee/README.md b/examples/employee/README.md index aaed0cc..90d0b50 100644 --- a/examples/employee/README.md +++ b/examples/employee/README.md @@ -1,6 +1,6 @@ # Employee Survey Dataset -A synthetic employee survey dataset demonstrating tableqa with workplace data. +A synthetic employee survey dataset demonstrating statqa with workplace data. ## Dataset @@ -20,10 +20,10 @@ This dataset contains employee survey responses including: ```python import pandas as pd import json -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.model import Codebook +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.model import Codebook # Load data and codebook data = pd.read_csv('data.csv') diff --git a/examples/employee/qa_pairs.json b/examples/employee/qa_pairs.json index bc9cbb0..36d91ed 100644 --- a/examples/employee/qa_pairs.json +++ b/examples/employee/qa_pairs.json @@ -5,7 +5,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.441589+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -23,7 +23,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.441589+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -41,7 +41,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.445528+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -59,7 +59,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.450398+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -77,7 +77,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.450398+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -95,7 +95,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.454096+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -113,7 +113,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.460281+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -131,7 +131,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:19.460281+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -149,7 +149,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.469569+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -169,7 +169,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.469569+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -189,7 +189,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.469569+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -209,7 +209,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.475453+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -229,7 +229,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.475453+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -249,7 +249,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.475453+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -269,7 +269,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.484123+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -289,7 +289,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.484123+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -309,7 +309,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.484123+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -329,7 +329,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.488667+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -349,7 +349,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.488667+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -369,7 +369,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.488667+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -389,7 +389,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.494737+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -409,7 +409,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.494737+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -429,7 +429,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.494737+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -449,7 +449,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.513704+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -469,7 +469,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.513704+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -489,7 +489,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.513704+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -509,7 +509,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.520412+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -529,7 +529,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.520412+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -549,7 +549,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.520412+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -569,7 +569,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.524797+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -589,7 +589,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.524797+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -609,7 +609,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:19.524797+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -629,7 +629,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.531115+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -649,7 +649,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.531115+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -669,7 +669,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:19.531115+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", diff --git a/examples/employee/qa_pairs.jsonl b/examples/employee/qa_pairs.jsonl index 6ff97a2..3b62c11 100644 --- a/examples/employee/qa_pairs.jsonl +++ b/examples/employee/qa_pairs.jsonl @@ -1,35 +1,35 @@ -{"question": "What is the distribution of Respondent Age?", "answer": "**Respondent Age**: mean=46.27, median=46.50, std=16.19, range=[18.00, 74.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.441589+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} -{"question": "How variable is Respondent Age?", "answer": "**Respondent Age**: mean=46.27, median=46.50, std=16.19, range=[18.00, 74.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.441589+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} -{"question": "What is the frequency distribution of Education Level?", "answer": "**Education Level**: most common category is 'High school or equivalent' (41.2%), N=500. Distribution: High school or equivalent: 41.2%, Bachelor degree: 38.6%, Graduate degree (Masters/PhD): 20.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.445528+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["education"]}, "vars": ["education"]} -{"question": "What is the distribution of Annual Income?", "answer": "**Annual Income**: mean=65897.15, median=64511.00, std=23807.36, range=[25000.00, 133843.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.450398+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["income"]}, "vars": ["income"]} -{"question": "How variable is Annual Income?", "answer": "**Annual Income**: mean=65897.15, median=64511.00, std=23807.36, range=[25000.00, 133843.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.450398+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["income"]}, "vars": ["income"]} -{"question": "What is the frequency distribution of Job Satisfaction?", "answer": "**Job Satisfaction**: most common category is '3' (46.8%), N=500. Distribution: 3: 46.8%, 4: 25.2%, 2: 23.0%, 1: 3.4%, 5: 1.6%.", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.454096+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["job_satisfaction"]}, "vars": ["job_satisfaction"]} -{"question": "What is the distribution of Weekly Work Hours?", "answer": "**Weekly Work Hours**: mean=38.87, median=39.00, std=11.56, range=[20.00, 59.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.460281+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["work_hours"]}, "vars": ["work_hours"]} -{"question": "How variable is Weekly Work Hours?", "answer": "**Weekly Work Hours**: mean=38.87, median=39.00, std=11.56, range=[20.00, 59.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.460281+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["work_hours"]}, "vars": ["work_hours"]} -{"question": "How does age differ across education groups?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} -{"question": "What is the relationship between education and age?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} -{"question": "Does age vary by education?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} -{"question": "Are age and income correlated?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} -{"question": "What is the relationship between age and income?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} -{"question": "How strongly are age and income associated?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} -{"question": "How does age differ across job_satisfaction groups?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} -{"question": "What is the relationship between job_satisfaction and age?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} -{"question": "Does age vary by job_satisfaction?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} -{"question": "Are age and work_hours correlated?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} -{"question": "What is the relationship between age and work_hours?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} -{"question": "How strongly are age and work_hours associated?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} -{"question": "How does income differ across education groups?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} -{"question": "What is the relationship between education and income?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} -{"question": "Does income vary by education?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} -{"question": "How does work_hours differ across education groups?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} -{"question": "What is the relationship between education and work_hours?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} -{"question": "Does work_hours vary by education?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} -{"question": "How does income differ across job_satisfaction groups?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} -{"question": "What is the relationship between job_satisfaction and income?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} -{"question": "Does income vary by job_satisfaction?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} -{"question": "Are income and work_hours correlated?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} -{"question": "What is the relationship between income and work_hours?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} -{"question": "How strongly are income and work_hours associated?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} -{"question": "How does work_hours differ across job_satisfaction groups?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} -{"question": "What is the relationship between job_satisfaction and work_hours?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} -{"question": "Does work_hours vary by job_satisfaction?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} +{"question": "What is the distribution of Respondent Age?", "answer": "**Respondent Age**: mean=46.27, median=46.50, std=16.19, range=[18.00, 74.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.441589+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} +{"question": "How variable is Respondent Age?", "answer": "**Respondent Age**: mean=46.27, median=46.50, std=16.19, range=[18.00, 74.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.441589+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} +{"question": "What is the frequency distribution of Education Level?", "answer": "**Education Level**: most common category is 'High school or equivalent' (41.2%), N=500. Distribution: High school or equivalent: 41.2%, Bachelor degree: 38.6%, Graduate degree (Masters/PhD): 20.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.445528+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["education"]}, "vars": ["education"]} +{"question": "What is the distribution of Annual Income?", "answer": "**Annual Income**: mean=65897.15, median=64511.00, std=23807.36, range=[25000.00, 133843.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.450398+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["income"]}, "vars": ["income"]} +{"question": "How variable is Annual Income?", "answer": "**Annual Income**: mean=65897.15, median=64511.00, std=23807.36, range=[25000.00, 133843.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.450398+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["income"]}, "vars": ["income"]} +{"question": "What is the frequency distribution of Job Satisfaction?", "answer": "**Job Satisfaction**: most common category is '3' (46.8%), N=500. Distribution: 3: 46.8%, 4: 25.2%, 2: 23.0%, 1: 3.4%, 5: 1.6%.", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.454096+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["job_satisfaction"]}, "vars": ["job_satisfaction"]} +{"question": "What is the distribution of Weekly Work Hours?", "answer": "**Weekly Work Hours**: mean=38.87, median=39.00, std=11.56, range=[20.00, 59.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.460281+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["work_hours"]}, "vars": ["work_hours"]} +{"question": "How variable is Weekly Work Hours?", "answer": "**Weekly Work Hours**: mean=38.87, median=39.00, std=11.56, range=[20.00, 59.00]. N=500 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:19.460281+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["work_hours"]}, "vars": ["work_hours"]} +{"question": "How does age differ across education groups?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} +{"question": "What is the relationship between education and age?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} +{"question": "Does age vary by education?", "answer": "**age** differs across **education** groups: Bachelor degree: 46.04, Graduate degree (Masters/PhD): 47.68, High school or equivalent: 45.78 (ANOVA: F=0.50, p=0.609), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.469569+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "education"]}, "vars": ["age", "education"]} +{"question": "Are age and income correlated?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} +{"question": "What is the relationship between age and income?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} +{"question": "How strongly are age and income associated?", "answer": "**age** and **income** show a negligible positive correlation (r=0.06, p=0.151, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.475453+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "income"]}, "vars": ["age", "income"]} +{"question": "How does age differ across job_satisfaction groups?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} +{"question": "What is the relationship between job_satisfaction and age?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} +{"question": "Does age vary by job_satisfaction?", "answer": "**age** differs across **job_satisfaction** groups: 1: 41.41, 2: 46.42, 3: 45.69, 4: 48.17, 5: 41.12 (ANOVA: F=1.10, p=0.357), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.484123+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["age", "job_satisfaction"]}, "vars": ["age", "job_satisfaction"]} +{"question": "Are age and work_hours correlated?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} +{"question": "What is the relationship between age and work_hours?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} +{"question": "How strongly are age and work_hours associated?", "answer": "**age** and **work_hours** show a negligible positive correlation (r=0.02, p=0.610, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.488667+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "work_hours"]}, "vars": ["age", "work_hours"]} +{"question": "How does income differ across education groups?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} +{"question": "What is the relationship between education and income?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} +{"question": "Does income vary by education?", "answer": "**income** differs across **education** groups: Bachelor degree: 71193.60, Graduate degree (Masters/PhD): 96248.16, High school or equivalent: 46054.12 (ANOVA: F=432.12, p=0.000), \u03b7\u00b2=0.63 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.494737+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "income"]}, "vars": ["education", "income"]} +{"question": "How does work_hours differ across education groups?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} +{"question": "What is the relationship between education and work_hours?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} +{"question": "Does work_hours vary by education?", "answer": "**work_hours** differs across **education** groups: Bachelor degree: 38.45, Graduate degree (Masters/PhD): 40.27, High school or equivalent: 38.59 (ANOVA: F=0.93, p=0.397), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.513704+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["education", "work_hours"]}, "vars": ["education", "work_hours"]} +{"question": "How does income differ across job_satisfaction groups?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} +{"question": "What is the relationship between job_satisfaction and income?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} +{"question": "Does income vary by job_satisfaction?", "answer": "**income** differs across **job_satisfaction** groups: 1: 43037.41, 2: 53008.02, 3: 65523.12, 4: 79676.36, 5: 93673.50 (ANOVA: F=32.01, p=0.000), \u03b7\u00b2=0.21 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.520412+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["income", "job_satisfaction"]}, "vars": ["income", "job_satisfaction"]} +{"question": "Are income and work_hours correlated?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} +{"question": "What is the relationship between income and work_hours?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} +{"question": "How strongly are income and work_hours associated?", "answer": "**income** and **work_hours** show a negligible positive correlation (r=0.05, p=0.247, N=500) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:19.524797+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["income", "work_hours"]}, "vars": ["income", "work_hours"]} +{"question": "How does work_hours differ across job_satisfaction groups?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} +{"question": "What is the relationship between job_satisfaction and work_hours?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} +{"question": "Does work_hours vary by job_satisfaction?", "answer": "**work_hours** differs across **job_satisfaction** groups: 1: 42.23, 2: 38.44, 3: 39.23, 4: 38.49, 5: 33.62 (ANOVA: F=0.90, p=0.462), \u03b7\u00b2=0.01 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:19.531115+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["job_satisfaction", "work_hours"]}, "vars": ["job_satisfaction", "work_hours"]} diff --git a/examples/employee/run_analysis.py b/examples/employee/run_analysis.py index 381af1b..bb4ca52 100644 --- a/examples/employee/run_analysis.py +++ b/examples/employee/run_analysis.py @@ -5,11 +5,11 @@ import pandas as pd -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.schema import Codebook -from tableqa.qa.generator import QAGenerator +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.schema import Codebook +from statqa.qa.generator import QAGenerator # Get script directory script_dir = Path(__file__).parent @@ -20,7 +20,7 @@ variables_dict = json.load(f) # Convert variables dict to Codebook -from tableqa.metadata.schema import Variable +from statqa.metadata.schema import Variable variables = {} for var_name, var_data in variables_dict.items(): diff --git a/examples/iris/README.md b/examples/iris/README.md index ced0c28..28df157 100644 --- a/examples/iris/README.md +++ b/examples/iris/README.md @@ -1,6 +1,6 @@ # Iris Flowers Dataset -A classic dataset demonstrating tableqa with the famous Iris flower measurements. +A classic dataset demonstrating statqa with the famous Iris flower measurements. ## Dataset @@ -19,10 +19,10 @@ The Iris dataset contains measurements of 150 iris flowers from three species: ```python import pandas as pd import json -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.model import Codebook +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.model import Codebook # Load data and codebook data = pd.read_csv('data.csv') diff --git a/examples/iris/qa_pairs.json b/examples/iris/qa_pairs.json index 108915a..cbc0600 100644 --- a/examples/iris/qa_pairs.json +++ b/examples/iris/qa_pairs.json @@ -5,7 +5,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.295683+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -23,7 +23,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.295683+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -41,7 +41,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.300564+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -59,7 +59,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.300564+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -77,7 +77,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.305049+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -95,7 +95,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.305049+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -113,7 +113,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.310251+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -131,7 +131,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.310251+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -149,7 +149,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:34:30.314371+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -167,7 +167,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.319157+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -187,7 +187,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.319157+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -207,7 +207,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.319157+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -227,7 +227,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.323256+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -247,7 +247,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.323256+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -267,7 +267,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.323256+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -287,7 +287,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.327180+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -307,7 +307,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.327180+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -327,7 +327,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.327180+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -347,7 +347,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.334400+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -367,7 +367,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.334400+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -387,7 +387,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.334400+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -407,7 +407,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.339214+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -427,7 +427,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.339214+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -447,7 +447,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.339214+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -467,7 +467,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.342564+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -487,7 +487,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.342564+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -507,7 +507,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.342564+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -527,7 +527,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.349726+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -547,7 +547,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.349726+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -567,7 +567,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.349726+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -587,7 +587,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.353521+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -607,7 +607,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.353521+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -627,7 +627,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:34:30.353521+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -647,7 +647,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.359248+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -667,7 +667,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.359248+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -687,7 +687,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.359248+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -707,7 +707,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.368170+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -727,7 +727,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.368170+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -747,7 +747,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:34:30.368170+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", diff --git a/examples/iris/qa_pairs.jsonl b/examples/iris/qa_pairs.jsonl index 084d347..610c065 100644 --- a/examples/iris/qa_pairs.jsonl +++ b/examples/iris/qa_pairs.jsonl @@ -1,39 +1,39 @@ -{"question": "What is the distribution of Sepal Length?", "answer": "**Sepal Length**: mean=5.84, median=5.80, std=0.83, range=[4.30, 7.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.295683+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_length"]}, "vars": ["sepal_length"]} -{"question": "How variable is Sepal Length?", "answer": "**Sepal Length**: mean=5.84, median=5.80, std=0.83, range=[4.30, 7.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.295683+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_length"]}, "vars": ["sepal_length"]} -{"question": "What is the distribution of Sepal Width?", "answer": "**Sepal Width**: mean=3.06, median=3.00, std=0.44, range=[2.00, 4.40]. N=150 [2.7% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.300564+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_width"]}, "vars": ["sepal_width"]} -{"question": "How variable is Sepal Width?", "answer": "**Sepal Width**: mean=3.06, median=3.00, std=0.44, range=[2.00, 4.40]. N=150 [2.7% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.300564+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_width"]}, "vars": ["sepal_width"]} -{"question": "What is the distribution of Petal Length?", "answer": "**Petal Length**: mean=3.76, median=4.35, std=1.77, range=[1.00, 6.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.305049+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_length"]}, "vars": ["petal_length"]} -{"question": "How variable is Petal Length?", "answer": "**Petal Length**: mean=3.76, median=4.35, std=1.77, range=[1.00, 6.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.305049+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_length"]}, "vars": ["petal_length"]} -{"question": "What is the distribution of Petal Width?", "answer": "**Petal Width**: mean=1.20, median=1.30, std=0.76, range=[0.10, 2.50]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.310251+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_width"]}, "vars": ["petal_width"]} -{"question": "How variable is Petal Width?", "answer": "**Petal Width**: mean=1.20, median=1.30, std=0.76, range=[0.10, 2.50]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.310251+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_width"]}, "vars": ["petal_width"]} -{"question": "What is the frequency distribution of Iris Species?", "answer": "**Iris Species**: most common category is 'Iris setosa' (33.3%), N=150. Distribution: Iris setosa: 33.3%, Iris versicolor: 33.3%, Iris virginica: 33.3% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.314371+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["species"]}, "vars": ["species"]} -{"question": "Are sepal_length and sepal_width correlated?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} -{"question": "What is the relationship between sepal_length and sepal_width?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} -{"question": "How strongly are sepal_length and sepal_width associated?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} -{"question": "Are sepal_length and petal_length correlated?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} -{"question": "What is the relationship between sepal_length and petal_length?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} -{"question": "How strongly are sepal_length and petal_length associated?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} -{"question": "Are sepal_length and petal_width correlated?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} -{"question": "What is the relationship between sepal_length and petal_width?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} -{"question": "How strongly are sepal_length and petal_width associated?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} -{"question": "How does sepal_length differ across species groups?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} -{"question": "What is the relationship between species and sepal_length?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} -{"question": "Does sepal_length vary by species?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} -{"question": "Are sepal_width and petal_length correlated?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} -{"question": "What is the relationship between sepal_width and petal_length?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} -{"question": "How strongly are sepal_width and petal_length associated?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} -{"question": "Are sepal_width and petal_width correlated?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} -{"question": "What is the relationship between sepal_width and petal_width?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} -{"question": "How strongly are sepal_width and petal_width associated?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} -{"question": "How does sepal_width differ across species groups?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} -{"question": "What is the relationship between species and sepal_width?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} -{"question": "Does sepal_width vary by species?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} -{"question": "Are petal_length and petal_width correlated?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} -{"question": "What is the relationship between petal_length and petal_width?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} -{"question": "How strongly are petal_length and petal_width associated?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} -{"question": "How does petal_length differ across species groups?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} -{"question": "What is the relationship between species and petal_length?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} -{"question": "Does petal_length vary by species?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} -{"question": "How does petal_width differ across species groups?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} -{"question": "What is the relationship between species and petal_width?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} -{"question": "Does petal_width vary by species?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} +{"question": "What is the distribution of Sepal Length?", "answer": "**Sepal Length**: mean=5.84, median=5.80, std=0.83, range=[4.30, 7.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.295683+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_length"]}, "vars": ["sepal_length"]} +{"question": "How variable is Sepal Length?", "answer": "**Sepal Length**: mean=5.84, median=5.80, std=0.83, range=[4.30, 7.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.295683+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_length"]}, "vars": ["sepal_length"]} +{"question": "What is the distribution of Sepal Width?", "answer": "**Sepal Width**: mean=3.06, median=3.00, std=0.44, range=[2.00, 4.40]. N=150 [2.7% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.300564+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_width"]}, "vars": ["sepal_width"]} +{"question": "How variable is Sepal Width?", "answer": "**Sepal Width**: mean=3.06, median=3.00, std=0.44, range=[2.00, 4.40]. N=150 [2.7% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.300564+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sepal_width"]}, "vars": ["sepal_width"]} +{"question": "What is the distribution of Petal Length?", "answer": "**Petal Length**: mean=3.76, median=4.35, std=1.77, range=[1.00, 6.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.305049+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_length"]}, "vars": ["petal_length"]} +{"question": "How variable is Petal Length?", "answer": "**Petal Length**: mean=3.76, median=4.35, std=1.77, range=[1.00, 6.90]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.305049+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_length"]}, "vars": ["petal_length"]} +{"question": "What is the distribution of Petal Width?", "answer": "**Petal Width**: mean=1.20, median=1.30, std=0.76, range=[0.10, 2.50]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.310251+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_width"]}, "vars": ["petal_width"]} +{"question": "How variable is Petal Width?", "answer": "**Petal Width**: mean=1.20, median=1.30, std=0.76, range=[0.10, 2.50]. N=150 [non-normal distribution].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.310251+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["petal_width"]}, "vars": ["petal_width"]} +{"question": "What is the frequency distribution of Iris Species?", "answer": "**Iris Species**: most common category is 'Iris setosa' (33.3%), N=150. Distribution: Iris setosa: 33.3%, Iris versicolor: 33.3%, Iris virginica: 33.3% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:34:30.314371+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["species"]}, "vars": ["species"]} +{"question": "Are sepal_length and sepal_width correlated?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} +{"question": "What is the relationship between sepal_length and sepal_width?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} +{"question": "How strongly are sepal_length and sepal_width associated?", "answer": "**sepal_length** and **sepal_width** show a weak negative correlation (r=-0.12, p=0.152, N=150) [not statistically significant], effect size: small.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.319157+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "sepal_width"]}, "vars": ["sepal_length", "sepal_width"]} +{"question": "Are sepal_length and petal_length correlated?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} +{"question": "What is the relationship between sepal_length and petal_length?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} +{"question": "How strongly are sepal_length and petal_length associated?", "answer": "**sepal_length** and **petal_length** show a very strong positive correlation (r=0.87, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.323256+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_length"]}, "vars": ["sepal_length", "petal_length"]} +{"question": "Are sepal_length and petal_width correlated?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} +{"question": "What is the relationship between sepal_length and petal_width?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} +{"question": "How strongly are sepal_length and petal_width associated?", "answer": "**sepal_length** and **petal_width** show a very strong positive correlation (r=0.82, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.327180+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_length", "petal_width"]}, "vars": ["sepal_length", "petal_width"]} +{"question": "How does sepal_length differ across species groups?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} +{"question": "What is the relationship between species and sepal_length?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} +{"question": "Does sepal_length vary by species?", "answer": "**sepal_length** differs across **species** groups: Iris setosa: 5.01, Iris versicolor: 5.94, Iris virginica: 6.59 (ANOVA: F=119.26, p=0.000), \u03b7\u00b2=0.62 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.334400+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_length", "species"]}, "vars": ["sepal_length", "species"]} +{"question": "Are sepal_width and petal_length correlated?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} +{"question": "What is the relationship between sepal_width and petal_length?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} +{"question": "How strongly are sepal_width and petal_length associated?", "answer": "**sepal_width** and **petal_length** show a moderate negative correlation (r=-0.43, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.339214+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_length"]}, "vars": ["sepal_width", "petal_length"]} +{"question": "Are sepal_width and petal_width correlated?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} +{"question": "What is the relationship between sepal_width and petal_width?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} +{"question": "How strongly are sepal_width and petal_width associated?", "answer": "**sepal_width** and **petal_width** show a moderate negative correlation (r=-0.37, p=0.000, N=150) [statistically significant], effect size: medium.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.342564+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["sepal_width", "petal_width"]}, "vars": ["sepal_width", "petal_width"]} +{"question": "How does sepal_width differ across species groups?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} +{"question": "What is the relationship between species and sepal_width?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} +{"question": "Does sepal_width vary by species?", "answer": "**sepal_width** differs across **species** groups: Iris setosa: 3.43, Iris versicolor: 2.77, Iris virginica: 2.97 (ANOVA: F=49.16, p=0.000), \u03b7\u00b2=0.40 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.349726+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sepal_width", "species"]}, "vars": ["sepal_width", "species"]} +{"question": "Are petal_length and petal_width correlated?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} +{"question": "What is the relationship between petal_length and petal_width?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} +{"question": "How strongly are petal_length and petal_width associated?", "answer": "**petal_length** and **petal_width** show a very strong positive correlation (r=0.96, p=0.000, N=150) [statistically significant], effect size: large.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:34:30.353521+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["petal_length", "petal_width"]}, "vars": ["petal_length", "petal_width"]} +{"question": "How does petal_length differ across species groups?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} +{"question": "What is the relationship between species and petal_length?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} +{"question": "Does petal_length vary by species?", "answer": "**petal_length** differs across **species** groups: Iris setosa: 1.46, Iris versicolor: 4.26, Iris virginica: 5.55 (ANOVA: F=1180.16, p=0.000), \u03b7\u00b2=0.94 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.359248+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_length", "species"]}, "vars": ["petal_length", "species"]} +{"question": "How does petal_width differ across species groups?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} +{"question": "What is the relationship between species and petal_width?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} +{"question": "Does petal_width vary by species?", "answer": "**petal_width** differs across **species** groups: Iris setosa: 0.25, Iris versicolor: 1.33, Iris virginica: 2.03 (ANOVA: F=960.01, p=0.000), \u03b7\u00b2=0.93 (large).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:34:30.368170+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["petal_width", "species"]}, "vars": ["petal_width", "species"]} diff --git a/examples/iris/run_analysis.py b/examples/iris/run_analysis.py index 981cc5c..a308829 100644 --- a/examples/iris/run_analysis.py +++ b/examples/iris/run_analysis.py @@ -5,11 +5,11 @@ import pandas as pd -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.schema import Codebook -from tableqa.qa.generator import QAGenerator +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.schema import Codebook +from statqa.qa.generator import QAGenerator # Get script directory script_dir = Path(__file__).parent @@ -20,7 +20,7 @@ variables_dict = json.load(f) # Convert variables dict to Codebook -from tableqa.metadata.schema import Variable +from statqa.metadata.schema import Variable variables = {} for var_name, var_data in variables_dict.items(): diff --git a/examples/simple_survey/README.md b/examples/simple_survey/README.md index 6a0cd0a..dc96a9b 100644 --- a/examples/simple_survey/README.md +++ b/examples/simple_survey/README.md @@ -1,6 +1,6 @@ # Simple Survey Example: Quick Start -A minimal example demonstrating tableqa with synthetic survey data. Perfect for learning the basics without downloading large datasets. +A minimal example demonstrating statqa with synthetic survey data. Perfect for learning the basics without downloading large datasets. ## Quick Start @@ -76,8 +76,8 @@ data['age'] = np.random.normal(45, 15, n).clip(18, 80) # normal instead of unif ### Run Custom Analyses ```python -from tableqa.analysis.temporal import TemporalAnalyzer -from tableqa.analysis.causal import CausalAnalyzer +from statqa.analysis.temporal import TemporalAnalyzer +from statqa.analysis.causal import CausalAnalyzer # Analyze trends over time temporal = TemporalAnalyzer() @@ -99,13 +99,13 @@ Replace the synthetic data generation with your own CSV: ```python import pandas as pd -from tableqa.utils.io import load_data +from statqa.utils.io import load_data # Load your data data = load_data('my_survey.csv') # Create codebook manually or from CSV -from tableqa.metadata.parsers import CSVParser +from statqa.metadata.parsers import CSVParser parser = CSVParser() codebook = parser.parse('my_codebook.csv') @@ -131,7 +131,7 @@ After running this example: 1. **Explore the code**: Open `quick_start.py` to see how it works 2. **Check the outputs**: Browse `output/` to see generated files 3. **Try ANES example**: See `../anes_example/` for a real-world dataset -4. **Read the docs**: Visit https://gojiplus.github.io/tableqa +4. **Read the docs**: Visit https://gojiplus.github.io/statqa 5. **Build your own**: Adapt this example to your dataset ## Comparison with ANES Example @@ -147,7 +147,7 @@ After running this example: ## Troubleshooting **Problem**: Import errors -**Solution**: Install tableqa: `pip install tableqa` +**Solution**: Install statqa: `pip install statqa` **Problem**: No output directory **Solution**: Directory is created automatically; check file permissions @@ -158,5 +158,5 @@ After running this example: ## Support For questions or issues: -- **tableqa package**: https://github.com/gojiplus/tableqa/issues -- **Documentation**: https://gojiplus.github.io/tableqa +- **statqa package**: https://github.com/gojiplus/statqa/issues +- **Documentation**: https://gojiplus.github.io/statqa diff --git a/examples/simple_survey/quick_start.py b/examples/simple_survey/quick_start.py index 0d7d4f8..608c663 100755 --- a/examples/simple_survey/quick_start.py +++ b/examples/simple_survey/quick_start.py @@ -15,11 +15,11 @@ import numpy as np import pandas as pd -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.schema import Codebook, Variable, VariableType -from tableqa.visualization.plots import PlotFactory +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.schema import Codebook, Variable, VariableType +from statqa.visualization.plots import PlotFactory def generate_synthetic_survey(n: int = 1000, seed: int = 42) -> pd.DataFrame: diff --git a/examples/titanic/README.md b/examples/titanic/README.md index 68f362d..647e8e0 100644 --- a/examples/titanic/README.md +++ b/examples/titanic/README.md @@ -1,6 +1,6 @@ # Titanic Survival Dataset -The famous Titanic dataset demonstrating tableqa with historical passenger data. +The famous Titanic dataset demonstrating statqa with historical passenger data. ## Dataset @@ -20,10 +20,10 @@ This dataset contains information about Titanic passengers including: ```python import pandas as pd import json -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.model import Codebook +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.model import Codebook # Load data and codebook data = pd.read_csv('data.csv') diff --git a/examples/titanic/qa_pairs.json b/examples/titanic/qa_pairs.json index eed8671..13af903 100644 --- a/examples/titanic/qa_pairs.json +++ b/examples/titanic/qa_pairs.json @@ -5,7 +5,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.766321+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -23,7 +23,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.770831+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -41,7 +41,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.775116+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -59,7 +59,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.781827+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -77,7 +77,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.781827+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -95,7 +95,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.788552+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -113,7 +113,7 @@ "type": "distributional", "provenance": { "generated_at": "2025-11-19T06:35:05.788552+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", @@ -131,7 +131,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.821585+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -151,7 +151,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.821585+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -171,7 +171,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.821585+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -191,7 +191,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.827976+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -211,7 +211,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.827976+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -231,7 +231,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.827976+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -251,7 +251,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.841746+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -271,7 +271,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.841746+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -291,7 +291,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.841746+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -311,7 +311,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.847450+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -331,7 +331,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.847450+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -351,7 +351,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.847450+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -371,7 +371,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.853835+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -391,7 +391,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.853835+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -411,7 +411,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.853835+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -431,7 +431,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.859153+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -451,7 +451,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.859153+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -471,7 +471,7 @@ "type": "comparative", "provenance": { "generated_at": "2025-11-19T06:35:05.859153+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", @@ -491,7 +491,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:05.864122+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -511,7 +511,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:05.864122+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", @@ -531,7 +531,7 @@ "type": "correlational", "provenance": { "generated_at": "2025-11-19T06:35:05.864122+00:00", - "tool": "tableqa", + "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", diff --git a/examples/titanic/qa_pairs.jsonl b/examples/titanic/qa_pairs.jsonl index 7d4ce53..2e5729b 100644 --- a/examples/titanic/qa_pairs.jsonl +++ b/examples/titanic/qa_pairs.jsonl @@ -1,28 +1,28 @@ -{"question": "What is the frequency distribution of Survived?", "answer": "**Survived**: most common category is '0' (60.2%), N=400. Distribution: 0: 60.2%, 1: 39.8% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.766321+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["survived"]}, "vars": ["survived"]} -{"question": "What is the frequency distribution of Passenger Class?", "answer": "**Passenger Class**: most common category is '3' (54.8%), N=400. Distribution: 3: 54.8%, 1: 25.0%, 2: 20.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.770831+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["pclass"]}, "vars": ["pclass"]} -{"question": "What is the frequency distribution of Sex?", "answer": "**Sex**: most common category is 'Male' (66.8%), N=400. Distribution: Male: 66.8%, Female: 33.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.775116+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sex"]}, "vars": ["sex"]} -{"question": "What is the distribution of Age?", "answer": "**Age**: mean=31.12, median=30.75, std=13.57, range=[1.00, 66.90]. N=400 [0.2% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.781827+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} -{"question": "How variable is Age?", "answer": "**Age**: mean=31.12, median=30.75, std=13.57, range=[1.00, 66.90]. N=400 [0.2% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.781827+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} -{"question": "What is the distribution of Fare?", "answer": "**Fare**: mean=36.02, median=21.42, std=44.73, range=[5.00, 489.36]. N=400 [non-normal distribution, 9.0% outliers, highly skewed].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.788552+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["fare"]}, "vars": ["fare"]} -{"question": "How variable is Fare?", "answer": "**Fare**: mean=36.02, median=21.42, std=44.73, range=[5.00, 489.36]. N=400 [non-normal distribution, 9.0% outliers, highly skewed].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.788552+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["fare"]}, "vars": ["fare"]} -{"question": "How does age differ across survived groups?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} -{"question": "What is the relationship between survived and age?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} -{"question": "Does age vary by survived?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} -{"question": "How does fare differ across survived groups?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} -{"question": "What is the relationship between survived and fare?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} -{"question": "Does fare vary by survived?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} -{"question": "How does age differ across pclass groups?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} -{"question": "What is the relationship between pclass and age?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} -{"question": "Does age vary by pclass?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} -{"question": "How does fare differ across pclass groups?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} -{"question": "What is the relationship between pclass and fare?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} -{"question": "Does fare vary by pclass?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} -{"question": "How does age differ across sex groups?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} -{"question": "What is the relationship between sex and age?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} -{"question": "Does age vary by sex?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} -{"question": "How does fare differ across sex groups?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} -{"question": "What is the relationship between sex and fare?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} -{"question": "Does fare vary by sex?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} -{"question": "Are age and fare correlated?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} -{"question": "What is the relationship between age and fare?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} -{"question": "How strongly are age and fare associated?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "tableqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} +{"question": "What is the frequency distribution of Survived?", "answer": "**Survived**: most common category is '0' (60.2%), N=400. Distribution: 0: 60.2%, 1: 39.8% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.766321+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["survived"]}, "vars": ["survived"]} +{"question": "What is the frequency distribution of Passenger Class?", "answer": "**Passenger Class**: most common category is '3' (54.8%), N=400. Distribution: 3: 54.8%, 1: 25.0%, 2: 20.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.770831+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["pclass"]}, "vars": ["pclass"]} +{"question": "What is the frequency distribution of Sex?", "answer": "**Sex**: most common category is 'Male' (66.8%), N=400. Distribution: Male: 66.8%, Female: 33.2% [high diversity].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.775116+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["sex"]}, "vars": ["sex"]} +{"question": "What is the distribution of Age?", "answer": "**Age**: mean=31.12, median=30.75, std=13.57, range=[1.00, 66.90]. N=400 [0.2% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.781827+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} +{"question": "How variable is Age?", "answer": "**Age**: mean=31.12, median=30.75, std=13.57, range=[1.00, 66.90]. N=400 [0.2% outliers].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.781827+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["age"]}, "vars": ["age"]} +{"question": "What is the distribution of Fare?", "answer": "**Fare**: mean=36.02, median=21.42, std=44.73, range=[5.00, 489.36]. N=400 [non-normal distribution, 9.0% outliers, highly skewed].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.788552+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["fare"]}, "vars": ["fare"]} +{"question": "How variable is Fare?", "answer": "**Fare**: mean=36.02, median=21.42, std=44.73, range=[5.00, 489.36]. N=400 [non-normal distribution, 9.0% outliers, highly skewed].", "type": "distributional", "provenance": {"generated_at": "2025-11-19T06:35:05.788552+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "unknown", "variables": ["fare"]}, "vars": ["fare"]} +{"question": "How does age differ across survived groups?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} +{"question": "What is the relationship between survived and age?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} +{"question": "Does age vary by survived?", "answer": "**age** differs across **survived** groups: 0: 31.02, 1: 31.25 (t-test: p=0.870), Cohen's d=-0.02 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.821585+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "age"]}, "vars": ["survived", "age"]} +{"question": "How does fare differ across survived groups?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} +{"question": "What is the relationship between survived and fare?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} +{"question": "Does fare vary by survived?", "answer": "**fare** differs across **survived** groups: 0: 36.86, 1: 34.73 (t-test: p=0.642), Cohen's d=0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.827976+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["survived", "fare"]}, "vars": ["survived", "fare"]} +{"question": "How does age differ across pclass groups?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} +{"question": "What is the relationship between pclass and age?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} +{"question": "Does age vary by pclass?", "answer": "**age** differs across **pclass** groups: 1: 30.55, 2: 31.16, 3: 31.36 (ANOVA: F=0.12, p=0.888), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.841746+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "age"]}, "vars": ["pclass", "age"]} +{"question": "How does fare differ across pclass groups?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} +{"question": "What is the relationship between pclass and fare?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} +{"question": "Does fare vary by pclass?", "answer": "**fare** differs across **pclass** groups: 1: 37.22, 2: 32.41, 3: 36.80 (ANOVA: F=0.33, p=0.718), \u03b7\u00b2=0.00 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.847450+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["pclass", "fare"]}, "vars": ["pclass", "fare"]} +{"question": "How does age differ across sex groups?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} +{"question": "What is the relationship between sex and age?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} +{"question": "Does age vary by sex?", "answer": "**age** differs across **sex** groups: Female: 30.67, Male: 31.34 (t-test: p=0.643), Cohen's d=-0.05 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.853835+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "age"]}, "vars": ["sex", "age"]} +{"question": "How does fare differ across sex groups?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} +{"question": "What is the relationship between sex and fare?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} +{"question": "Does fare vary by sex?", "answer": "**fare** differs across **sex** groups: Female: 31.66, Male: 38.18 (t-test: p=0.170), Cohen's d=-0.15 (negligible).", "type": "comparative", "provenance": {"generated_at": "2025-11-19T06:35:05.859153+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "categorical_numeric", "variables": ["sex", "fare"]}, "vars": ["sex", "fare"]} +{"question": "Are age and fare correlated?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} +{"question": "What is the relationship between age and fare?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} +{"question": "How strongly are age and fare associated?", "answer": "**age** and **fare** show a negligible negative correlation (r=-0.05, p=0.329, N=400) [not statistically significant], effect size: negligible.", "type": "correlational", "provenance": {"generated_at": "2025-11-19T06:35:05.864122+00:00", "tool": "statqa", "tool_version": "0.1.0", "generation_method": "template", "analysis_type": "numeric_numeric", "variables": ["age", "fare"]}, "vars": ["age", "fare"]} diff --git a/examples/titanic/run_analysis.py b/examples/titanic/run_analysis.py index 5748daf..fbe7916 100644 --- a/examples/titanic/run_analysis.py +++ b/examples/titanic/run_analysis.py @@ -5,11 +5,11 @@ import pandas as pd -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.schema import Codebook -from tableqa.qa.generator import QAGenerator +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.schema import Codebook +from statqa.qa.generator import QAGenerator # Get script directory script_dir = Path(__file__).parent @@ -20,7 +20,7 @@ variables_dict = json.load(f) # Convert variables dict to Codebook -from tableqa.metadata.schema import Variable +from statqa.metadata.schema import Variable variables = {} for var_name, var_data in variables_dict.items(): diff --git a/pyproject.toml b/pyproject.toml index 4bad426..62bd26a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools>=68.0", "wheel"] build-backend = "setuptools.build_meta" [project] -name = "tableqa" +name = "statqa" version = "0.1.0" description = "Automatically extract structured facts, insights, and Q/A pairs from tabular datasets" readme = "README.md" @@ -76,24 +76,24 @@ docs = [ "sphinx-autodoc-typehints>=1.24.0", ] all = [ - "tableqa[llm,pdf,dev,docs]", + "statqa[llm,pdf,dev,docs]", ] [project.urls] -Homepage = "https://github.com/gojiplus/tableqa" -Documentation = "https://gojiplus.github.io/tableqa" -Repository = "https://github.com/gojiplus/tableqa" -"Bug Tracker" = "https://github.com/gojiplus/tableqa/issues" +Homepage = "https://github.com/gojiplus/statqa" +Documentation = "https://gojiplus.github.io/statqa" +Repository = "https://github.com/gojiplus/statqa" +"Bug Tracker" = "https://github.com/gojiplus/statqa/issues" [project.scripts] -tableqa = "tableqa.cli.main:app" +statqa = "statqa.cli.main:app" [tool.setuptools.packages.find] -include = ["tableqa*"] +include = ["statqa*"] namespaces = false [tool.setuptools.package-data] -tableqa = ["py.typed"] +statqa = ["py.typed"] # Pytest configuration [tool.pytest.ini_options] @@ -102,7 +102,7 @@ addopts = [ "-ra", "--strict-markers", "--strict-config", - "--cov=tableqa", + "--cov=statqa", "--cov-report=term-missing", "--cov-report=html", "--cov-report=xml", @@ -117,7 +117,7 @@ markers = [ # Coverage configuration [tool.coverage.run] -source = ["tableqa"] +source = ["statqa"] branch = true omit = [ "*/tests/*", @@ -173,7 +173,7 @@ ignore = [ "tests/**/*.py" = ["S101", "PLR2004"] [tool.ruff.lint.isort] -known-first-party = ["tableqa"] +known-first-party = ["statqa"] force-single-line = false lines-after-imports = 2 diff --git a/tableqa/__init__.py b/statqa/__init__.py similarity index 70% rename from tableqa/__init__.py rename to statqa/__init__.py index 850e9db..cbf2274 100644 --- a/tableqa/__init__.py +++ b/statqa/__init__.py @@ -11,17 +11,17 @@ from importlib.metadata import version -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.causal import CausalAnalyzer -from tableqa.analysis.temporal import TemporalAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.causal import CausalAnalyzer +from statqa.analysis.temporal import TemporalAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer # Import main public APIs -from tableqa.metadata.schema import Codebook, Variable, VariableType +from statqa.metadata.schema import Codebook, Variable, VariableType # Get version from package metadata -__version__ = version("tableqa") +__version__ = version("statqa") __version_info__ = tuple(int(i) for i in __version__.split(".") if i.isdigit()) diff --git a/statqa/analysis/__init__.py b/statqa/analysis/__init__.py new file mode 100644 index 0000000..dc5ec3e --- /dev/null +++ b/statqa/analysis/__init__.py @@ -0,0 +1,14 @@ +"""Statistical analysis modules.""" + +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.causal import CausalAnalyzer +from statqa.analysis.temporal import TemporalAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer + + +__all__ = [ + "BivariateAnalyzer", + "CausalAnalyzer", + "TemporalAnalyzer", + "UnivariateAnalyzer", +] diff --git a/tableqa/analysis/bivariate.py b/statqa/analysis/bivariate.py similarity index 99% rename from tableqa/analysis/bivariate.py rename to statqa/analysis/bivariate.py index 6847411..c978d3e 100644 --- a/tableqa/analysis/bivariate.py +++ b/statqa/analysis/bivariate.py @@ -13,8 +13,8 @@ import pandas as pd from scipy import stats -from tableqa.metadata.schema import Variable -from tableqa.utils.stats import calculate_effect_size, cramers_v +from statqa.metadata.schema import Variable +from statqa.utils.stats import calculate_effect_size, cramers_v class BivariateAnalyzer: diff --git a/tableqa/analysis/causal.py b/statqa/analysis/causal.py similarity index 98% rename from tableqa/analysis/causal.py rename to statqa/analysis/causal.py index 3a1622e..a7c6dca 100644 --- a/tableqa/analysis/causal.py +++ b/statqa/analysis/causal.py @@ -15,7 +15,7 @@ import pandas as pd import statsmodels.api as sm -from tableqa.metadata.schema import Variable +from statqa.metadata.schema import Variable class CausalAnalyzer: @@ -139,7 +139,7 @@ def identify_confounders( for var in potential_confounders: # Test association with treatment - from tableqa.analysis.bivariate import BivariateAnalyzer + from statqa.analysis.bivariate import BivariateAnalyzer biv_analyzer = BivariateAnalyzer(significance_level=self.alpha) diff --git a/tableqa/analysis/temporal.py b/statqa/analysis/temporal.py similarity index 99% rename from tableqa/analysis/temporal.py rename to statqa/analysis/temporal.py index d6b9490..dee9752 100644 --- a/tableqa/analysis/temporal.py +++ b/statqa/analysis/temporal.py @@ -14,8 +14,8 @@ import pandas as pd from scipy import stats -from tableqa.metadata.schema import Variable -from tableqa.utils.stats import mann_kendall_trend +from statqa.metadata.schema import Variable +from statqa.utils.stats import mann_kendall_trend class TemporalAnalyzer: diff --git a/tableqa/analysis/univariate.py b/statqa/analysis/univariate.py similarity index 98% rename from tableqa/analysis/univariate.py rename to statqa/analysis/univariate.py index 0c484b7..d4be87e 100644 --- a/tableqa/analysis/univariate.py +++ b/statqa/analysis/univariate.py @@ -13,8 +13,8 @@ import pandas as pd from scipy import stats -from tableqa.metadata.schema import Variable -from tableqa.utils.stats import detect_outliers, robust_stats +from statqa.metadata.schema import Variable +from statqa.utils.stats import detect_outliers, robust_stats class UnivariateAnalyzer: diff --git a/tableqa/cli/__init__.py b/statqa/cli/__init__.py similarity index 100% rename from tableqa/cli/__init__.py rename to statqa/cli/__init__.py diff --git a/tableqa/cli/main.py b/statqa/cli/main.py similarity index 94% rename from tableqa/cli/main.py rename to statqa/cli/main.py index 89b558a..ba98ba1 100644 --- a/tableqa/cli/main.py +++ b/statqa/cli/main.py @@ -14,16 +14,16 @@ from rich.console import Console from rich.progress import track -from tableqa import __version__ -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.interpretation.formatter import InsightFormatter -from tableqa.metadata.enricher import MetadataEnricher -from tableqa.metadata.parsers.csv import CSVParser -from tableqa.metadata.parsers.text import TextParser -from tableqa.qa.generator import QAGenerator -from tableqa.utils.io import load_data, save_json -from tableqa.visualization.plots import PlotFactory +from statqa import __version__ +from statqa.analysis.bivariate import BivariateAnalyzer +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.interpretation.formatter import InsightFormatter +from statqa.metadata.enricher import MetadataEnricher +from statqa.metadata.parsers.csv import CSVParser +from statqa.metadata.parsers.text import TextParser +from statqa.qa.generator import QAGenerator +from statqa.utils.io import load_data, save_json +from statqa.visualization.plots import PlotFactory app = typer.Typer(help="TableQA: Extract structured facts from tabular datasets") @@ -111,7 +111,7 @@ def analyze( with open(codebook_path) as f: codebook_data = json.load(f) - from tableqa.metadata.schema import Codebook + from statqa.metadata.schema import Codebook codebook = Codebook(**codebook_data) console.print(f"[green]βœ“[/green] Loaded codebook with {len(codebook.variables)} variables") diff --git a/statqa/interpretation/__init__.py b/statqa/interpretation/__init__.py new file mode 100644 index 0000000..1a8f777 --- /dev/null +++ b/statqa/interpretation/__init__.py @@ -0,0 +1,7 @@ +"""Natural language interpretation and formatting.""" + +from statqa.interpretation.context import ContextBuilder +from statqa.interpretation.formatter import InsightFormatter + + +__all__ = ["ContextBuilder", "InsightFormatter"] diff --git a/tableqa/interpretation/context.py b/statqa/interpretation/context.py similarity index 99% rename from tableqa/interpretation/context.py rename to statqa/interpretation/context.py index a4b226b..9cf666f 100644 --- a/tableqa/interpretation/context.py +++ b/statqa/interpretation/context.py @@ -7,7 +7,7 @@ from typing import Any -from tableqa.metadata.schema import Codebook, Variable +from statqa.metadata.schema import Codebook, Variable class ContextBuilder: diff --git a/tableqa/interpretation/formatter.py b/statqa/interpretation/formatter.py similarity index 100% rename from tableqa/interpretation/formatter.py rename to statqa/interpretation/formatter.py diff --git a/tableqa/metadata/__init__.py b/statqa/metadata/__init__.py similarity index 57% rename from tableqa/metadata/__init__.py rename to statqa/metadata/__init__.py index bf9e9a9..85d1e4f 100644 --- a/tableqa/metadata/__init__.py +++ b/statqa/metadata/__init__.py @@ -1,6 +1,6 @@ """Metadata parsing and enrichment.""" -from tableqa.metadata.schema import Codebook, Variable, VariableType +from statqa.metadata.schema import Codebook, Variable, VariableType __all__ = ["Codebook", "Variable", "VariableType"] diff --git a/tableqa/metadata/enricher.py b/statqa/metadata/enricher.py similarity index 99% rename from tableqa/metadata/enricher.py rename to statqa/metadata/enricher.py index 10765c5..11bb822 100644 --- a/tableqa/metadata/enricher.py +++ b/statqa/metadata/enricher.py @@ -28,7 +28,7 @@ except ImportError: HAS_ANTHROPIC = False -from tableqa.metadata.schema import Codebook, Variable, VariableType +from statqa.metadata.schema import Codebook, Variable, VariableType logger = logging.getLogger(__name__) diff --git a/statqa/metadata/parsers/__init__.py b/statqa/metadata/parsers/__init__.py new file mode 100644 index 0000000..db1fbe7 --- /dev/null +++ b/statqa/metadata/parsers/__init__.py @@ -0,0 +1,8 @@ +"""Codebook parsers for various formats.""" + +from statqa.metadata.parsers.base import BaseParser +from statqa.metadata.parsers.csv import CSVParser +from statqa.metadata.parsers.text import TextParser + + +__all__ = ["BaseParser", "CSVParser", "TextParser"] diff --git a/tableqa/metadata/parsers/base.py b/statqa/metadata/parsers/base.py similarity index 97% rename from tableqa/metadata/parsers/base.py rename to statqa/metadata/parsers/base.py index 7d51f50..509563c 100644 --- a/tableqa/metadata/parsers/base.py +++ b/statqa/metadata/parsers/base.py @@ -8,7 +8,7 @@ from pathlib import Path from typing import Any -from tableqa.metadata.schema import Codebook +from statqa.metadata.schema import Codebook class BaseParser(ABC): diff --git a/tableqa/metadata/parsers/csv.py b/statqa/metadata/parsers/csv.py similarity index 98% rename from tableqa/metadata/parsers/csv.py rename to statqa/metadata/parsers/csv.py index e305483..46d917b 100644 --- a/tableqa/metadata/parsers/csv.py +++ b/statqa/metadata/parsers/csv.py @@ -18,8 +18,8 @@ import pandas as pd -from tableqa.metadata.parsers.base import BaseParser -from tableqa.metadata.schema import Codebook, DataGeneratingProcess, Variable, VariableType +from statqa.metadata.parsers.base import BaseParser +from statqa.metadata.schema import Codebook, DataGeneratingProcess, Variable, VariableType class CSVParser(BaseParser): diff --git a/tableqa/metadata/parsers/text.py b/statqa/metadata/parsers/text.py similarity index 98% rename from tableqa/metadata/parsers/text.py rename to statqa/metadata/parsers/text.py index 6aa439b..4e062d0 100644 --- a/tableqa/metadata/parsers/text.py +++ b/statqa/metadata/parsers/text.py @@ -28,8 +28,8 @@ from pathlib import Path from typing import Any -from tableqa.metadata.parsers.base import BaseParser -from tableqa.metadata.schema import Codebook, DataGeneratingProcess, Variable, VariableType +from statqa.metadata.parsers.base import BaseParser +from statqa.metadata.schema import Codebook, DataGeneratingProcess, Variable, VariableType class TextParser(BaseParser): diff --git a/tableqa/metadata/schema.py b/statqa/metadata/schema.py similarity index 100% rename from tableqa/metadata/schema.py rename to statqa/metadata/schema.py diff --git a/tableqa/py.typed b/statqa/py.typed similarity index 100% rename from tableqa/py.typed rename to statqa/py.typed diff --git a/tableqa/qa/__init__.py b/statqa/qa/__init__.py similarity index 50% rename from tableqa/qa/__init__.py rename to statqa/qa/__init__.py index 991be24..cc0a200 100644 --- a/tableqa/qa/__init__.py +++ b/statqa/qa/__init__.py @@ -1,7 +1,7 @@ """Question-Answer generation from insights.""" -from tableqa.qa.generator import QAGenerator -from tableqa.qa.templates import QuestionTemplate +from statqa.qa.generator import QAGenerator +from statqa.qa.templates import QuestionTemplate __all__ = ["QAGenerator", "QuestionTemplate"] diff --git a/tableqa/qa/generator.py b/statqa/qa/generator.py similarity index 97% rename from tableqa/qa/generator.py rename to statqa/qa/generator.py index 5aa9eb6..bef2385 100644 --- a/tableqa/qa/generator.py +++ b/statqa/qa/generator.py @@ -19,18 +19,18 @@ except ImportError: HAS_OPENAI = False -from tableqa.qa.templates import QuestionTemplate, infer_question_type +from statqa.qa.templates import QuestionTemplate, infer_question_type logger = logging.getLogger(__name__) -def _get_tableqa_version() -> str: - """Get the tableqa package version.""" +def _get_statqa_version() -> str: + """Get the statqa package version.""" try: from importlib.metadata import version - return version("tableqa") + return version("statqa") except Exception: return "unknown" @@ -86,8 +86,8 @@ def _create_provenance( """ provenance = { "generated_at": datetime.now(UTC).isoformat(), - "tool": "tableqa", - "tool_version": _get_tableqa_version(), + "tool": "statqa", + "tool_version": _get_statqa_version(), "generation_method": method, "analysis_type": insight.get("analysis_type", "unknown"), } diff --git a/tableqa/qa/templates.py b/statqa/qa/templates.py similarity index 100% rename from tableqa/qa/templates.py rename to statqa/qa/templates.py diff --git a/tableqa/utils/__init__.py b/statqa/utils/__init__.py similarity index 53% rename from tableqa/utils/__init__.py rename to statqa/utils/__init__.py index 4c9f392..1f5c00b 100644 --- a/tableqa/utils/__init__.py +++ b/statqa/utils/__init__.py @@ -1,7 +1,7 @@ """Utility functions and helpers.""" -from tableqa.utils.io import load_data, save_json -from tableqa.utils.stats import calculate_effect_size, correct_multiple_testing +from statqa.utils.io import load_data, save_json +from statqa.utils.stats import calculate_effect_size, correct_multiple_testing __all__ = [ diff --git a/tableqa/utils/io.py b/statqa/utils/io.py similarity index 100% rename from tableqa/utils/io.py rename to statqa/utils/io.py diff --git a/tableqa/utils/stats.py b/statqa/utils/stats.py similarity index 100% rename from tableqa/utils/stats.py rename to statqa/utils/stats.py diff --git a/statqa/visualization/__init__.py b/statqa/visualization/__init__.py new file mode 100644 index 0000000..db434f8 --- /dev/null +++ b/statqa/visualization/__init__.py @@ -0,0 +1,7 @@ +"""Visualization and plotting utilities.""" + +from statqa.visualization.plots import PlotFactory +from statqa.visualization.themes import setup_theme + + +__all__ = ["PlotFactory", "setup_theme"] diff --git a/tableqa/visualization/plots.py b/statqa/visualization/plots.py similarity index 99% rename from tableqa/visualization/plots.py rename to statqa/visualization/plots.py index f04320b..8ae46fe 100644 --- a/tableqa/visualization/plots.py +++ b/statqa/visualization/plots.py @@ -11,7 +11,7 @@ import pandas as pd import seaborn as sns -from tableqa.metadata.schema import Variable +from statqa.metadata.schema import Variable class PlotFactory: diff --git a/tableqa/visualization/themes.py b/statqa/visualization/themes.py similarity index 100% rename from tableqa/visualization/themes.py rename to statqa/visualization/themes.py diff --git a/tableqa/analysis/__init__.py b/tableqa/analysis/__init__.py deleted file mode 100644 index 9ff8307..0000000 --- a/tableqa/analysis/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -"""Statistical analysis modules.""" - -from tableqa.analysis.bivariate import BivariateAnalyzer -from tableqa.analysis.causal import CausalAnalyzer -from tableqa.analysis.temporal import TemporalAnalyzer -from tableqa.analysis.univariate import UnivariateAnalyzer - - -__all__ = [ - "BivariateAnalyzer", - "CausalAnalyzer", - "TemporalAnalyzer", - "UnivariateAnalyzer", -] diff --git a/tableqa/interpretation/__init__.py b/tableqa/interpretation/__init__.py deleted file mode 100644 index f0e6f65..0000000 --- a/tableqa/interpretation/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Natural language interpretation and formatting.""" - -from tableqa.interpretation.context import ContextBuilder -from tableqa.interpretation.formatter import InsightFormatter - - -__all__ = ["ContextBuilder", "InsightFormatter"] diff --git a/tableqa/metadata/parsers/__init__.py b/tableqa/metadata/parsers/__init__.py deleted file mode 100644 index 9394326..0000000 --- a/tableqa/metadata/parsers/__init__.py +++ /dev/null @@ -1,8 +0,0 @@ -"""Codebook parsers for various formats.""" - -from tableqa.metadata.parsers.base import BaseParser -from tableqa.metadata.parsers.csv import CSVParser -from tableqa.metadata.parsers.text import TextParser - - -__all__ = ["BaseParser", "CSVParser", "TextParser"] diff --git a/tableqa/visualization/__init__.py b/tableqa/visualization/__init__.py deleted file mode 100644 index 0a5e6e7..0000000 --- a/tableqa/visualization/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -"""Visualization and plotting utilities.""" - -from tableqa.visualization.plots import PlotFactory -from tableqa.visualization.themes import setup_theme - - -__all__ = ["PlotFactory", "setup_theme"] diff --git a/tests/conftest.py b/tests/conftest.py index e422b31..2700ffa 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -4,7 +4,7 @@ import pandas as pd import pytest -from tableqa.metadata.schema import Codebook, Variable, VariableType +from statqa.metadata.schema import Codebook, Variable, VariableType @pytest.fixture diff --git a/tests/test_parsers.py b/tests/test_parsers.py index 7cd04f8..9c5139d 100644 --- a/tests/test_parsers.py +++ b/tests/test_parsers.py @@ -1,6 +1,6 @@ """Tests for codebook parsers.""" -from tableqa.metadata.parsers.text import TextParser +from statqa.metadata.parsers.text import TextParser def test_text_parser(): diff --git a/tests/test_schema.py b/tests/test_schema.py index 095efb8..fdcbf27 100644 --- a/tests/test_schema.py +++ b/tests/test_schema.py @@ -1,6 +1,6 @@ """Tests for metadata schema.""" -from tableqa.metadata.schema import Codebook, Variable, VariableType +from statqa.metadata.schema import Codebook, Variable, VariableType def test_variable_creation(): diff --git a/tests/test_univariate.py b/tests/test_univariate.py index 9c4ed14..3134c10 100644 --- a/tests/test_univariate.py +++ b/tests/test_univariate.py @@ -2,8 +2,8 @@ import pandas as pd -from tableqa.analysis.univariate import UnivariateAnalyzer -from tableqa.metadata.schema import Variable +from statqa.analysis.univariate import UnivariateAnalyzer +from statqa.metadata.schema import Variable def test_numeric_univariate(sample_numeric_data: pd.Series, sample_variable: Variable):