Skip to main content

pyfug — High-Definition Time Series Analysis Graphics

Version Python License

pyfug es la migración a Python del programa FUG 1.12 (C/gnuplot), diseñado por Arthur B. Treadway y David E. Guerrero. Produce gráficos de series temporales de alta definición con las proporciones precisas del diseño Jenkins-Treadway, ahora usando matplotlib como motor gráfico.

¿Qué aporta sobre el FUG original?

Original (C + gnuplot) pyfug (Python + matplotlib)
Solo entrada .inp .inp, CSV, Excel, pandas, numpy
Solo salida EPS PDF vectorial, SVG, PNG, interactivo (Jupyter)
Solo CLI CLI + API Python + Jupyter notebooks
Gnuplot externo matplotlib integrado (sin dependencias externas)
Compilación C pip install
Sin integración Conectable con statsmodels, scipy, pandas

Instalación

cd pyfug
pip install -e .

# Opcional: soporte Jupyter
pip install -e ".[jupyter]"

Uso rápido

Desde línea de comandos

# Gráfico combinado (serie + ACF/PACF) — igual que FUG original
pyfug PU.inp one -c

# Set de identificación con hasta 2 diferencias regulares y 1 estacional
pyfug PU.inp set 2 1 -c

# Solo ACF/PACF con 24 lags
pyfug PU.inp one -b -l 24

# Histograma + mean-deviation chart
pyfug PU.inp one -d -e

Desde Python

from pyfug import read_inp, diffgraph

# Leer datos
ser = read_inp("PU.inp")

# Gráfico combinado con log y 1 diferencia regular
result = diffgraph(ser,
    boxlam=0.0,    # log
    nrdiff=1,      # 1 diferencia regular
    case_c=True,   # combinado
    return_figs=True)

fig = result['figures'][0]
fig.savefig("output.pdf")

Desde pandas/CSV

import pandas as pd
from pyfug import read_pandas, diffgraph

# Desde DataFrame
df = pd.read_csv("mis_datos.csv")
ser = read_pandas(df["precios"], name="IPC", freq=12, begyear=2020)

# Generar gráficos
result = diffgraph(ser, boxlam=0.0, nrdiff=1, case_c=True)

En Jupyter

from pyfug import read_inp
from pyfug.jupyter import display_diffgraph

ser = read_inp("PU.inp")

# Muestra todos los gráficos inline
transformed = display_diffgraph(ser,
    boxlam=0.0, nrdiff=1, nadiff=0,
    case_c=True, case_d=True, case_e=True)

Con modelos de estimación (statsmodels)

from statsmodels.tsa.arima.model import ARIMA
from pyfug.jupyter import from_statsmodels_result, diagnostic_plots

# Ajustar modelo
model = ARIMA(ser.data, order=(1, 1, 1))
result = model.fit()

# Extraer residuos como Tseries
resid_ser = from_statsmodels_result(result, name="Residuos ARIMA(1,1,1)")

# Gráficos de diagnóstico completos
diagnostic_plots(resid_ser, model_name="ARIMA111")

Tipos de gráficos

Flag Gráfico Descripción
-a Serie temporal Línea con etiquetas de año precisas
-b ACF/PACF Correlograma con bandas ±2/√n y Q de Ljung-Box
-c Combinado Serie + ACF/PACF en layout multi-panel
-d Histograma Histograma estandarizado + curva normal
-e Mean-Deviation Medias vs desviaciones típicas estandarizadas

Estructura del proyecto

pyfug/
├── pyfug/
│   ├── __init__.py          # API pública
│   ├── core.py               # Tseries dataclass
│   ├── io.py                 # Lectura .inp, CSV, Excel, pandas
│   ├── transform.py          # Box-Cox, diferencias
│   ├── statistics.py         # ACF, PACF, Ljung-Box, estadísticos
│   ├── graphics/
│   │   ├── __init__.py
│   │   ├── base.py           # Constantes y tema Jenkins-Treadway
│   │   ├── series.py         # Gráfico de serie
│   │   ├── acf_pacf.py       # Correlograma ACF/PACF
│   │   ├── combined.py       # Serie + ACF/PACF combinado
│   │   ├── histogram.py      # Histograma + normal
│   │   ├── mean_deviation.py # Mean-Deviation chart
│   │   └── engine.py         # Motor principal (diffgraph)
│   ├── latex.py              # Salida LaTeX
│   ├── cli.py                # Interfaz línea de comandos
│   └── jupyter.py            # Integración Jupyter
├── tests/
├── examples/
├── pyproject.toml
└── README.md

Diseño Jenkins-Treadway

El valor distintivo de FUG/pyfug está en las proporciones precisas de los gráficos:

  • ACF/PACF: Sin ticks en el eje X — usa líneas verticales y etiquetas manuales en los lags; bandas de confianza ±2/√n en rojo; estadístico Ljung-Box como etiqueta del eje X.
  • Serie temporal: Etiquetas de año en lugar de ticks; borde solo en izquierda e inferior; grid horizontal; grosor de línea calibrado.
  • Layout combinado: Serie grande a la izquierda, ACF y PACF a la derecha en dos paneles con proporciones exactas según número de lags y frecuencia de los datos.
  • Histograma: Estructura cuadrada con curva normal superpuesta; asimetría, curtosis y Jarque-Bera como etiqueta del eje X.

Licencia

GNU General Public License v2.0 — mismo régimen que el FUG original.

Autores

  • Arthur B. Treadway — diseño original Jenkins-Treadway, FUG 1.x (C)
  • David E. Guerrero — FUG 1.x (C), migración a Python 2.0

Release files for pyfug 2.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pyfug 2.0.1
File Size Uploaded
pyfug-2.0.1.tar.gz 44.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pyfug 2.0.1
File Interpreter ABI Platform
pyfug-2.0.1-py3-none-any.whl Python 3 none any Details

Total release size: 89.7 kB

Release files / pyfug-2.0.1.tar.gz

Download URL pyfug-2.0.1.tar.gz
Size 44.7 kB
Tags Source
SHA-256 checksum
How to use checksums
44d6856a1ee7dd79cadb2ad496c58704d3d6583eed8b15f7a406a8cf550a3968
BLAKE2b-256 checksum
How to use checksums
0a6d7460a446dd32d2da77dcf2d91f042e6a6078c06a7e96935d350739452684
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release files / pyfug-2.0.1-py3-none-any.whl

Download URL pyfug-2.0.1-py3-none-any.whl
Size 45.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
641befedeb8323df4e62b1163c4e500706bdb81f61dd7728499cdb463d939108
BLAKE2b-256 checksum
How to use checksums
e45adcc39c3880e11b17a76b3668e94be4ac3aaa5033bfd4439563f2eb59c77f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 25, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

2.0.1 This release

2 release files

2.0.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page