ARIMA seasonal prediction with Python: x12a and x13as not found on path
Question: I am using Statsmodels to implement seasonal ARIMA prediction for time series.
Here is my code :

    
    
    import statsmodels.api  as sm
    from statsmodels.tsa.x13 import x13_arima_select_order, _find_x12
    import pandas
    import scipy
    import numpy
    import imp
    data_source = imp.load_source('data_source', '/mypath/')
    def main():
        data=data_source.getdata()
        res = x13_arima_select_order(data)
        print (res.order, res.sorder)
    
    main()
    

When running the code, I am getting this exception:

X13NotFoundError("x12a and x13as not found on path. Give the "
statsmodels.tools.sm_exceptions.X13NotFoundError: x12a and x13as not found on
path. Give the path, put them on PATH, or set the X12PATH or X13PATH
environmental variable.


Answer: From looking at the [source code for
statsmodels.tsa.x13](http://statsmodels.sourceforge.net/devel/_modules/statsmodels/tsa/x13.html)
you need to have either the `x12a` or `x13as` binary applications installed on
your system. In addition to that, the path to the folders where those binaries
are located must be set in your user's `PATH` environment variable. You don't
mention what operating system you're running, so here's a page with links to
OS specific download pages on the left hand side to help you install the
needed software. <https://www.census.gov/srd/www/x13as/>

This is the link to the source I'm referencing to figure out what you're
missing in your environment:
<http://statsmodels.sourceforge.net/devel/_modules/statsmodels/tsa/x13.html>

    
    
    def x13_arima_analysis(endog, maxorder=(2, 1), maxdiff=(2, 1), diff=None,
                           exog=None, log=None, outlier=True, trading=False,
                           forecast_years=None, retspec=False,
                           speconly=False, start=None, freq=None,
                           print_stdout=False, x12path=None, prefer_x13=True):
    ...
        x12path = _check_x12(x12path)
    
        if not isinstance(endog, (pd.DataFrame, pd.Series)):
            if start is None or freq is None:
                raise ValueError("start and freq cannot be none if endog is not "
                                 "a pandas object")
            endog = pd.Series(endog, index=pd.DatetimeIndex(start=start,
                                                            periods=len(endog),
                                                            freq=freq))
    

...

    
    
    def _check_x12(x12path=None):
        x12path = _find_x12(x12path)
        if not x12path:
            raise X13NotFoundError("x12a and x13as not found on path. Give the "
                                   "path, put them on PATH, or set the "
                                   "X12PATH or X13PATH environmental variable.")
        return x12path
    

...

    
    
    def _find_x12(x12path=None, prefer_x13=True):
        """
        If x12path is not given, then either x13as[.exe] or x12a[.exe] must
        be found on the PATH. Otherwise, the environmental variable X12PATH or
        X13PATH must be defined. If prefer_x13 is True, only X13PATH is searched
        for. If it is false, only X12PATH is searched for.
        """ 
    

