Skip to main content

High-definition graphics for time series analysis

Project description

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyfug-2.0.0.tar.gz (42.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

pyfug-2.0.0-py3-none-any.whl (44.1 kB view details)

Uploaded Python 3

File details

Details for the file pyfug-2.0.0.tar.gz.

File metadata

  • Download URL: pyfug-2.0.0.tar.gz
  • Upload date:
  • Size: 42.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pyfug-2.0.0.tar.gz
Algorithm Hash digest
SHA256 1516988a69f9f7f77c560db0b70a693459cb2b54f334772676975d213697246f
MD5 bb0f69e8997a72731e44943b81d7412b
BLAKE2b-256 8de9a49f28bb96a5448926120a98c85e8ec384fb6f0767cdc8b0165e97d5f450

See more details on using hashes here.

File details

Details for the file pyfug-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: pyfug-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 44.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for pyfug-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 24a62b13f9584e36837b7f75385c3c24232b4d6e132221a1d66b02da577aa2f0
MD5 efe96bf949b6fb8524fe422c86dfaffc
BLAKE2b-256 5207cb548cce4768b8d6da0c8969af65dae4c175cb2dbc3ed6151fd94eb5f925

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page