{"id":288430,"name":"PyForecast","description":"A statistical modeling tool used by Reclamation water managers and reservoir operators to train and build predictive models for seasonal inflows and streamflows.","url":"https://github.com/doi-bor/pyforecast","last_synced_at":"2026-06-10T00:30:19.067Z","repository":{"id":44741642,"uuid":"167408506","full_name":"DOI-BOR/PyForecast","owner":"DOI-BOR","description":"PyForecast is a statistical modeling tool used by Reclamation water managers and reservoir operators to train and build predictive models for seasonal inflows and streamflows. PyForecast allows users to make current water-year forecasts using models developed with the program.","archived":false,"fork":false,"pushed_at":"2026-05-20T18:08:45.000Z","size":46205,"stargazers_count":31,"open_issues_count":22,"forks_count":12,"subscribers_count":8,"default_branch":"main","last_synced_at":"2026-05-26T01:02:19.374Z","etag":null,"topics":["forecasting","hydrology","machine-learning","python","statistical-models"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/DOI-BOR.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"license.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-01-24T17:32:26.000Z","updated_at":"2026-05-20T18:08:49.000Z","dependencies_parsed_at":"2026-05-18T01:01:09.633Z","dependency_job_id":null,"html_url":"https://github.com/DOI-BOR/PyForecast","commit_stats":{"total_commits":320,"total_committers":5,"mean_commits":64.0,"dds":0.55,"last_synced_commit":"cd0c4265aaece459bf6a3f186f7badca52290ca6"},"previous_names":["jellsonusbr/pyforecast","doi-bor/pyforecast","usbr/pyforecast"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/DOI-BOR/PyForecast","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DOI-BOR%2FPyForecast","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DOI-BOR%2FPyForecast/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DOI-BOR%2FPyForecast/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DOI-BOR%2FPyForecast/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DOI-BOR","download_url":"https://codeload.github.com/DOI-BOR/PyForecast/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/DOI-BOR%2FPyForecast/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33843611,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-02T02:00:07.132Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"DOI-BOR","name":"Bureau of Reclamation","uuid":"102251442","kind":"organization","description":"Bureau of Reclamation DOI GitHub","email":"jellson@usbr.gov","website":"https://www.usbr.gov/","location":"United States of America","twitter":null,"company":null,"icon_url":"https://avatars.githubusercontent.com/u/102251442?v=4","repositories_count":1,"last_synced_at":"2024-02-07T00:32:47.740Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/DOI-BOR","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2024-02-07T00:32:47.742Z","updated_at":"2024-02-07T00:32:47.742Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DOI-BOR","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/DOI-BOR/repositories"},"packages":[],"commits":{"id":1638133,"full_name":"doi-bor/pyforecast","default_branch":"NextFlow","total_commits":380,"total_committers":6,"total_bot_commits":1,"total_bot_committers":1,"mean_commits":63.333333333333336,"dds":0.6236842105263158,"past_year_total_commits":41,"past_year_total_committers":1,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":41.0,"past_year_dds":0.0,"last_synced_at":"2026-05-30T03:09:52.222Z","last_synced_commit":"d08eab8e29873ceb1a39ac6c6adf01edd753fea3","created_at":"2024-06-26T00:15:21.410Z","updated_at":"2026-05-30T03:09:51.958Z","committers":[{"name":"jrocha","email":"jrocha@usbr.gov","login":"tjrocha","count":143},{"name":"dloney","email":"dloney@usbr.gov","login":"dloney","count":104},{"name":"kevinfol","email":"kfoley@usbr.gov","login":"kevinfol","count":90},{"name":"Bob Lounsbury","email":"blounsbury@usbr.gov","login":"blounsbury-usbr","count":41},{"name":"dependabot[bot]","email":"49699333+dependabot[bot]","login":"dependabot[bot]","count":1},{"name":"Lanini","email":"JLanini@usbr.gov","login":"jslanini","count":1}],"past_year_committers":[{"name":"Bob Lounsbury","email":"blounsbury@usbr.gov","login":"blounsbury-usbr","count":41}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/doi-bor%2Fpyforecast/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-03T00:00:11.051Z","repositories_count":6253173,"commits_count":884097321,"contributors_count":35038436,"owners_count":1162368,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"doi-bor/pyforecast","html_url":"https://github.com/doi-bor/pyforecast","last_synced_at":"2026-05-26T01:02:09.022Z","status":"error","issues_count":0,"pull_requests_count":2,"avg_time_to_close_issue":null,"avg_time_to_close_pull_request":3334993.0,"issues_closed_count":0,"pull_requests_closed_count":2,"pull_request_authors_count":1,"issue_authors_count":0,"avg_comments_per_issue":null,"avg_comments_per_pull_request":0.0,"merged_pull_requests_count":2,"bot_issues_count":0,"bot_pull_requests_count":2,"past_year_issues_count":0,"past_year_pull_requests_count":2,"past_year_avg_time_to_close_issue":null,"past_year_avg_time_to_close_pull_request":3334993.0,"past_year_issues_closed_count":0,"past_year_pull_requests_closed_count":2,"past_year_pull_request_authors_count":1,"past_year_issue_authors_count":0,"past_year_avg_comments_per_issue":null,"past_year_avg_comments_per_pull_request":0.0,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":2,"past_year_merged_pull_requests_count":2,"created_at":"2024-06-26T00:15:21.647Z","updated_at":"2026-05-26T01:02:09.023Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/doi-bor%2Fpyforecast","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/doi-bor%2Fpyforecast/issues","issue_labels_count":{},"pull_request_labels_count":{"javascript":2,"dependencies":2},"issue_author_associations_count":{},"pull_request_author_associations_count":{"CONTRIBUTOR":2},"issue_authors":{},"pull_request_authors":{"dependabot[bot]":2},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-06-03T00:00:10.974Z","repositories_count":14746525,"issues_count":33251010,"pull_requests_count":109809389,"authors_count":11289399,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{"dependencies":2,"javascript":2},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{"CONTRIBUTOR":2},"past_year_issue_authors":{},"past_year_pull_request_authors":{"dependabot[bot]":2},"maintainers":[],"active_maintainers":[]},"events":{"total":{"DeleteEvent":10,"MemberEvent":1,"PullRequestEvent":10,"WatchEvent":2,"PushEvent":27,"CreateEvent":10},"last_year":{"DeleteEvent":10,"MemberEvent":1,"PullRequestEvent":10,"PushEvent":27,"CreateEvent":10}},"keywords":["forecasting","hydrology","machine-learning","python","statistical-models"],"dependencies":[{"ecosystem":"conda","filepath":"environment.yml","sha":null,"kind":"manifest","created_at":"2026-03-02T01:12:44.963Z","updated_at":"2026-03-02T01:12:44.963Z","repository_link":"https://github.com/DOI-BOR/PyForecast/blob/main/environment.yml","dependencies":[{"id":25828934256,"package_name":"python","ecosystem":"conda","requirements":"3.6","direct":true,"kind":"runtime","optional":false},{"id":25828934257,"package_name":"bitarray","ecosystem":"conda","requirements":"1.5.3","direct":true,"kind":"runtime","optional":false},{"id":25828934277,"package_name":"pip","ecosystem":"conda","requirements":"\u003e=20.1.1","direct":true,"kind":"runtime","optional":false},{"id":25828934278,"package_name":"openpyxl","ecosystem":"conda","requirements":"3.0.5","direct":true,"kind":"runtime","optional":false},{"id":25828934279,"package_name":"requests","ecosystem":"conda","requirements":"2.24.0","direct":true,"kind":"runtime","optional":false},{"id":25828934291,"package_name":"scipy","ecosystem":"conda","requirements":"1.5.2","direct":true,"kind":"runtime","optional":false},{"id":25828934292,"package_name":"scikit-learn","ecosystem":"conda","requirements":"0.23.2","direct":true,"kind":"runtime","optional":false},{"id":25828934297,"package_name":"tqdm","ecosystem":"conda","requirements":"4.49.0","direct":true,"kind":"runtime","optional":false},{"id":25828934299,"package_name":"xlrd","ecosystem":"conda","requirements":"1.2.0","direct":true,"kind":"runtime","optional":false}]}],"score":5.762051382780177,"created_at":"2024-06-26T00:15:19.946Z","updated_at":"2026-06-10T00:30:19.069Z","avatar_url":"https://github.com/DOI-BOR.png","language":"Python","category":"Natural Resources","sub_category":"Water Supply and Quality","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"***\n# PyForecast ![PyForecast logo][PF_ICON]\n***\nDevelop and analyze high-performing seasonal streamflow forecasts using PyForecast, \ndeveloped by Reclamation's MB-ART and CPN Regions. PyForecast takes advantage of \nmulti-threading and multiple processor cores to analyze thousands of forecasts in \nminutes using cutting-edge statistical techniques.\n\n## Table of Contents\n  - [Quick Start](#quick-start)\n  - [User Manual](#user-manual)\n    - [Installation and Updates]()\n    - [Software Overview](#software-overview)\n      - [Datasets Tab](#datasets-tab)\n      - [Data Tab](#data-tab)\n      - [Model Configurations Tab](#model-configurations-tab)\n      - [Saved Models Tab](#saved-models-tab)\n      - [File Menu](#file-menu)\n    - [Best Practices](#best-practices)\n    - [Example Forecast Development](#example-forecast-development)\n  - [Scientific Background](#scientific-background)\n    - [Datasets](#datasets)\n    - [Model Search](#model-search)\n    - [Uncertainty](#uncertainty)\n    - [Experimental Features](#experimental-features)\n  - [Programming Guide](#programming-guide)\n\n## Quick Start\n\n\n## User Manual\n\n### Installation and Updates\nThe latest release of PyForecast can be downloaded from the \n[Releases Page](https://github.com/usbr/PyForecast/releases) of this repository. \n![Picture of software releases page][RELEASES_PIC_1]\n\nSimply download and run the installer (FOR WINDOWS MACHINES ONLY!).\n\nPyForecast can automatically check for and download any updates using the \n\"Check for Updates\" button in the [File Menu](#file-menu).\n\n### Software Overview\nPyForecast is a statistical modeling tool useful in predicting seasonal inflows and \nstreamflows. The tool collects meterological and hydrologic datasets, analyzes hundreds \nto thousands of predictor subsets, and returns well-performing statistical regressions \nbetween predictors and streamflows.\n\n[Datasets](#datasets) are collected from web services located at NOAA, RCC-ACIS, NRCS, \nReclamation, and USGS servers, and is stored locally on the user’s machine. Data can be \nupdated with current values at any time, allowing the user to make current water-year \nforecasts using equations developed with the program.\n\nAfter potential predictor datasets are downloaded and manipulated, the tool allows the \nuser to develop statistically significant regression equations using multiple regression,\nprincipal components regression, and z-score regression. Models are developed using a \ncombination of sequential feature selection and cross validation, both described in the \n[Scientific Background](#scientific-background) section of this document.\n\n#### Datasets Tab\n![Datasets Tab Picture][DATASET_PIC_1]\nThe Datasets Tab allows users to locate datasets that may be valuable for their analysis.\nUsers can find SNOTEL stations and snow courses, reservoirs, stream gages, as well as \nPRISM and NRCC data gridded temperature and precipitation data, and climate indices.\n\nDatasets are found by navigating in the datasets map to the area of interest and browsing\nthrough the dataset markers. If the user decides that a particular dataset might be \nuseful in their analysis, they can choose the `Add Site` button in the dataset pop-up to\nadd the dataset to the selected datasets table. (datasets can later be removed from the \nselected datasets table by right-clicking one or more datasets and choosing \n`Remove Dataset(s)`).\n\nNote that removing datasets will also remove any forecasts or models that depend on that\ndataset.\n\nAdditionally, users can click within a watershed boundary to add the PRISM gridded \naverage temperature and humidity values to their analysis. Users can also use the \nmap-legend in the top right corner of the map to enable climate divisions and add \nclimate-division averaged Palmer Drought Severity values to their analysis.\n\nRight clicking the bottom of the datasets list will allow the user to \n`Add Climate Datasets`.\n\nDouble clicking or right clicking and choosing `Open Dataset` on a selected dataset will\nopen the `View Dataset` dialog window allowing the user to change properties of the \ndataset.\n\n![View Dataset Dialog Picture][DATASET_PIC_2]\n\nDataset options can be adjusted to retrieve alternative datasets from dataloaders \n(for example, a user could change the HydroMet parameter in a USBR dataset to retrieve \nreservoir forebay elevation instead of inflow). Users can also specify the units in \nwhich they want to display data. Users can also specify a file where data should be \nloaded from. \n\n##### Adding a CSV / Flat File dataset\nTo add a dataset from a flat file, right click in the dataset list and choose \n`Add new dataset`. Fill out the dataset description, and check the box labeled \n`Flat-file source?`. The `File Path` field is now enabled and you can choose the flat \nfile contianing your data. Note that the only supported file format is a CSV file with \n2 columns: The first column contains dates, and the second column contains data. There \nshould be colum headers. \n\n\n#### Data Tab\n![Data Tab Picture][DATA_PIC_1]\nThe Data Tab allows users to download data for the selected datasets. Data is downloaded\nin the dataset's `Raw Unit` and displayed to the user in the `Display Unit`. \n\nThe `Download all data` button will download data for datasets using a start date of \n1970-Oct-01, and ending today. The `Download recent data` button downloads data from \n45-days before the datasets last datapoint until now. (Note that the 45-day parameter \nand the default start date of 1970-Oct-01 can both be adjusted in the \n[application settings](#file-menu))\n\nData for selected datasets can be edited by pressing the `Edit Data in Excel` button at \nthe bottom left of the Data tab. A dialog will appear instructing the user how to save \nany changes.\n\n#### Model Configurations Tab\n![Model Configuration Tab Picture][MODELCONF_PIC_1]\nThe Model Configuration Tab allows you to set up \n#### Saved Models Tab\n![Datasets Tab Picture][SAVEDMODEL_PIC_1]\n#### File Menu\n![File Menu Picture][FILEMENU_PIC_1]\n### Best Practices\n### Example Forecast Development\n\n## Scientific Background\n### Datasets\n### Model Search\n### Uncertainty\n### Experimental Features\n\n## Programming Guide\n[PF_ICON]: Resources/Icons/AppIcon.ico \"PyForecast Logo\"\n[DATASET_PIC_1]: Documentation/Images/DatasetsTab1.PNG \"Datasets Tab\"\n[DATASET_PIC_2]: Documentation/Images/DatasetsTab2.PNG \"Dataset Options\"\n[DATA_PIC_1]: Documentation/Images/DataTab1.PNG \"Data Tab\"\n[MODELCONF_PIC_1]: Documentation/Images/ModelConfTab1.PNG \"Model Configuration Tab\"\n[SAVEDMODEL_PIC_1]: Documentation/Images/SavedModelTab1.PNG \"Saved Models Tab\"\n[RELEASES_PIC_1]: Documentation/Images/Releases1.PNG \"Software Releases Page\"\n[FILEMENU_PIC_1]: Documentation/Images/FileMenu1.PNG \"File Menu\"","funding_links":[],"readme_doi_urls":[],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["water-resources","oracle-database"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/288430","html_url":"https://ost.ecosyste.ms/projects/288430"}