├── .flake8 ├── .gitignore ├── CODE_OF_CONDUCT.md ├── Procfile ├── README.md ├── app.py ├── assets └── styles.css ├── constants.py ├── datasets ├── Hip Hop _ Vocab Chart - Full.csv ├── allBirthData.csv ├── annual_precipitation.csv ├── classic-rock-song-list.csv └── nba.csv ├── pages ├── home.py └── view.py ├── requirements.txt ├── screenshots ├── 1.png ├── 2.png ├── 3.png └── 4.png └── utils.py /.flake8: -------------------------------------------------------------------------------- 1 | [flake8] 2 | max-line-length = 120 3 | extend-ignore = E203 4 | exclude = 5 | .pytest_cache, 6 | __pycache__, 7 | dash_enterprise/components/__init__.py 8 | dash_enterprise/components/components/ 9 | build/ 10 | dist/ 11 | venv*/ 12 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | *.rdb 3 | tmp/ 4 | 5 | # Byte-compiled / optimized / DLL files 6 | __pycache__/ 7 | *.py[cod] 8 | *$py.class 9 | 10 | # C extensions 11 | *.so 12 | 13 | # Distribution / packaging 14 | .Python 15 | build/ 16 | develop-eggs/ 17 | dist/ 18 | downloads/ 19 | eggs/ 20 | .eggs/ 21 | lib/ 22 | lib64/ 23 | parts/ 24 | sdist/ 25 | var/ 26 | wheels/ 27 | share/python-wheels/ 28 | *.egg-info/ 29 | .installed.cfg 30 | *.egg 31 | MANIFEST 32 | 33 | # PyInstaller 34 | # Usually these files are written by a python script from a template 35 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 36 | *.manifest 37 | *.spec 38 | 39 | # Installer logs 40 | pip-log.txt 41 | pip-delete-this-directory.txt 42 | 43 | # Unit test / coverage reports 44 | htmlcov/ 45 | .tox/ 46 | .nox/ 47 | .coverage 48 | .coverage.* 49 | .cache 50 | nosetests.xml 51 | coverage.xml 52 | *.cover 53 | *.py,cover 54 | .hypothesis/ 55 | .pytest_cache/ 56 | cover/ 57 | 58 | # Translations 59 | *.mo 60 | *.pot 61 | 62 | # Django stuff: 63 | *.log 64 | local_settings.py 65 | db.sqlite3 66 | db.sqlite3-journal 67 | 68 | # Flask stuff: 69 | instance/ 70 | .webassets-cache 71 | 72 | # Scrapy stuff: 73 | .scrapy 74 | 75 | # Sphinx documentation 76 | docs/_build/ 77 | 78 | # PyBuilder 79 | .pybuilder/ 80 | target/ 81 | 82 | # Jupyter Notebook 83 | .ipynb_checkpoints 84 | 85 | # IPython 86 | profile_default/ 87 | ipython_config.py 88 | 89 | # pyenv 90 | # For a library or package, you might want to ignore these files since the code is 91 | # intended to run in multiple environments; otherwise, check them in: 92 | # .python-version 93 | 94 | # pipenv 95 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 96 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 97 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 98 | # install all needed dependencies. 99 | #Pipfile.lock 100 | 101 | # PEP 582; used by e.g. github.com/David-OConnor/pyflow 102 | __pypackages__/ 103 | 104 | # Celery stuff 105 | celerybeat-schedule 106 | celerybeat.pid 107 | 108 | # SageMath parsed files 109 | *.sage.py 110 | 111 | # Environments 112 | .env 113 | .venv 114 | env/ 115 | venv/ 116 | ENV/ 117 | env.bak/ 118 | venv.bak/ 119 | 120 | # Spyder project settings 121 | .spyderproject 122 | .spyproject 123 | 124 | # Rope project settings 125 | .ropeproject 126 | 127 | # mkdocs documentation 128 | /site 129 | 130 | # mypy 131 | .mypy_cache/ 132 | .dmypy.json 133 | dmypy.json 134 | 135 | # Pyre type checker 136 | .pyre/ 137 | 138 | # pytype static type analyzer 139 | .pytype/ 140 | 141 | # Cython debug symbols 142 | cython_debug/ -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at accounts@plot.ly. All complaints will be reviewed and investigated and will result in a response that is deemed necessary and appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant](http://contributor-covenant.org), version 1.4, available at [http://contributor-covenant.org/version/1/4](http://contributor-covenant.org/version/1/4/), and may also be found online at . 44 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn app:server --workers 4 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # All in AI Demo App 2 | 3 |
4 | 5 | Maintained by Plotly 6 | 7 |
8 | 9 | A demo app for the [All in AI](https://allinevent.ai/) presentation on September 27, 2023. 10 | 11 | Developed & presented by Nathan Drezner ([@ndrezn](https://github.com/ndrezn)). 12 | 13 | 14 | https://github.com/plotly/all-in-ai-demo-app/assets/32049495/35f40db8-e83d-4ad7-af9b-a9390f696bde 15 | 16 | 17 | This application uses [Dash Chart Editor](https://github.com/BSd3v/dash-chart-editor) and the [OpenAI Python library](https://github.com/openai/openai-python) to build an application allowing users to ask questions about a dataset and persist views of their dataset with analytics associated. 18 | 19 | Once a dataset is uploaded, context on that dataset is added to the prompt for the chat window, and users can interact with the dataset with natural language. After building charts, users can click the "Copy link" button to save those charts to a permanent link, using Redis to save state. 20 | 21 |

22 | 23 |

24 | 25 | 26 | ## Usage 27 | > Note: You must provide an [OpenAI API key](https://platform.openai.com/account/api-keys) as an environment variable at `$OPEN_AI_KEY`. 28 | 29 | Install the dependencies with: 30 | ``` 31 | pip install -r requirements.txt 32 | ``` 33 | 34 | And run the application with: 35 | ``` 36 | python app.py 37 | ``` 38 | 39 | Or, provide your API key directly if it is not in your environment: 40 | ``` 41 | OPEN_AI_KEY=... python app.py 42 | ``` 43 | -------------------------------------------------------------------------------- /app.py: -------------------------------------------------------------------------------- 1 | import os 2 | import pickle 3 | import uuid 4 | 5 | import dash_bootstrap_components as dbc 6 | import dash_mantine_components as dmc 7 | import openai 8 | from dash import Dash, Input, Output, State, callback, page_container 9 | from flask import request 10 | 11 | import utils 12 | from constants import redis_instance 13 | 14 | openai.api_key = os.getenv("OPEN_AI_KEY") 15 | 16 | app = Dash( 17 | __name__, 18 | suppress_callback_exceptions=True, 19 | external_scripts=["https://cdn.plot.ly/plotly-2.18.2.min.js"], 20 | external_stylesheets=[dbc.themes.BOOTSTRAP], 21 | title="AI Data Insights", 22 | use_pages=True, 23 | ) 24 | 25 | 26 | server = app.server 27 | 28 | 29 | def layout(): 30 | return dmc.MantineProvider( 31 | [ 32 | utils.jumbotron(), 33 | page_container, 34 | ], 35 | ) 36 | 37 | 38 | app.layout = layout 39 | 40 | 41 | @callback( 42 | Output("save-clip", "content"), 43 | Input("save-clip", "n_clicks"), 44 | State("current-charts", "children"), 45 | prevent_initial_call=True, 46 | ) 47 | def copy_link_to_view(n, current): 48 | figure_id = str(uuid.uuid4()) 49 | redis_instance.set(figure_id, pickle.dumps(current)) 50 | return request.host_url[:-1] + app.get_relative_path(f"/view?layout={figure_id}") 51 | 52 | 53 | if __name__ == "__main__": 54 | app.run(debug=True) 55 | -------------------------------------------------------------------------------- /assets/styles.css: -------------------------------------------------------------------------------- 1 | #chat-submit { 2 | margin: 5px 3 | } 4 | 5 | #chat-output { 6 | overflow-y: scroll; 7 | height: 400px; 8 | } 9 | 10 | #chart-editor { 11 | height: 100%; 12 | width: 50vw 13 | } 14 | 15 | #chat-container { 16 | width: 50vw; 17 | border-width: 20px; 18 | padding: 20px; 19 | border-left: 1px solid rgb(206, 212, 218); /* Adjust the width and color as needed */ 20 | } 21 | 22 | #flex { 23 | display: flex 24 | } 25 | 26 | #padded #current-charts { 27 | padding: 20px 28 | } 29 | 30 | #current-charts{ 31 | margin: 20px 32 | } 33 | 34 | .chat-item { 35 | border: 1px solid rgb(206, 212, 218); 36 | border-radius: 4px; 37 | padding: 10px; 38 | margin: 10px; 39 | display: flex; 40 | justify-content: space-between; 41 | } 42 | 43 | .question { 44 | color: black; 45 | margin-right: 20px; /* Add 5px margin to the right of the question */ 46 | } 47 | 48 | .answer { 49 | color: grey; 50 | margin-left: 20px; /* Add 5px margin to the left of the answer */ 51 | } 52 | 53 | #loader { 54 | height:15px 55 | } 56 | -------------------------------------------------------------------------------- /constants.py: -------------------------------------------------------------------------------- 1 | import os 2 | 3 | import redis 4 | 5 | redis_instance = redis.StrictRedis.from_url( 6 | os.environ.get("REDIS_URL", "redis://127.0.0.1:6379") 7 | ) 8 | -------------------------------------------------------------------------------- /datasets/Hip Hop _ Vocab Chart - Full.csv: -------------------------------------------------------------------------------- 1 | notes,recalc,era,rapper,rapper_clean,color,words,id,source 2 | ,2988,2010s,21 Savage,21 Savage,,2988,21-savage,new 3 | ,3812,2010s,2 Chainz,2 Chainz,,4148,2chainz,poster 4 | ,3815,1990s,2Pac,2Pac,west nowutang second,"3,970",2pac,site 5 | ,3384,2000s,50 Cent,50 Cent,east nowutang first,"3,591",50-cent,site 6 | ,4534,2010s,Ab-Soul,Ab-Soul,,4534,absoul,new 7 | ,5233,2010s,Action Bronson,Action Bronson,,6186,action,poster 8 | ,7879,2000s,Aesop Rock,Aesop Rock,east nowutang seventh,"7,392",aesop,site 9 | ,4414,2010s,A$AP Rocky,A$AP Rocky,,4414,asap,new 10 | ,3851,2010s,A$AP Ferg,A$AP Ferg,,3851,asap-ferg,new 11 | ,4730,2000s,Atmosphere,Atmosphere,,4829,atmosphere,poster 12 | ,4632,1980s,Beastie Boys,Beastie Boys,east nowutang sixth,"5,090",beastie-boys,site 13 | ,4655,1980s,Big Daddy Kane,Big Daddy Kane,east nowutang fifth,"4,768",big-daddy-kane,site 14 | ,3823,2010s,Big KRIT,Big KRIT,,3823,big-krit,new 15 | ,4011,1990s,Big L,Big L,,4011,big-l,new 16 | ,3563,2010s,Big Sean,Big Sean,,3563,big-sean,new 17 | ,4423,1980s,Biz Markie,Biz Markie,east nowutang fourth,"4,313",biz-markie,site 18 | ,5741,2000s,Blackalicious,Blackalicious,west nowutang sixth,"5,480",blackalicious,site 19 | ,3748,2010s,BoB,BoB,,"3,748",bob,new 20 | ,3219,1990s,Bone Thugs-n-Harmony,Bone Thugs-n-Harmony,midwest nowutang first,"3,219",bone-thugs,site 21 | ,2738,2010s,A Boogie wit da Hoodie,A Boogie wit da Hoodie,,2738,boogie-hoodie,new 22 | ,4542,1990s,Brand Nubian,Brand Nubian,east nowutang fifth,"4,609",brand-nubian,site 23 | ,3924,2010s,Brockhampton,Brockhampton,,3924,brockhampton,new 24 | ,4928,2000s,Brother Ali,Brother Ali,midwest nowutang fifth,"4,700",brother-ali,site 25 | remove,3875,2000s,Bun B,Bun B,,"3,875",bunb,new 26 | ,7324,2000s,Busdriver,Busdriver,,7324,busdriver,new 27 | ,4613,1990s,Busta Rhymes,Busta Rhymes,east nowutang fifth,"4,839",busta-rhymes,site 28 | ,4236,2000s,Cam'ron,Cam'ron,east nowutang fourth,"4,406",camron,site 29 | ,5915,2000s,Canibus,Canibus,east nowutang seventh,"5,991",canibus,site 30 | ,3682,2010s,Childish Gambino,Childish Gambino,,4465,childish,poster 31 | remove,,,Clipse,Clipse,south nowutang fourth,"4,514",clipse,site 32 | ,5138,1990s,Common,Common,midwest nowutang sixth,"4,974",common,site 33 | ,5496,2000s,CunninLynguists,CunninLynguists,south nowutang seventh,"5,971",cunninlynguists,site 34 | ,3965,2010s,Cupcakke,Cupcakke,,3965,cupcakke,new 35 | ,4644,1990s,Cypress Hill,Cypress Hill,west nowutang fourth,"4,568",cypress-hill,site 36 | ,4361,2010s,Danny Brown,Danny Brown,,,danny,poster 37 | ,5178,1990s,Das EFX,Das EFX,east nowutang sixth,"5,005",das-efx,site 38 | ,4812,1990s,De La Soul,De La Soul,east nowutang sixth,"4,933",de-la-soul,site 39 | ,4282,2010s,Death Grips,Death Grips,,"4,282",death,new 40 | ,5845,1990s,Del the Funky Homosapian,Del the Funky Homosapian,,6135,del,poster 41 | ,4426,2010s,Denzel Curry,Denzel Curry,,4426,denzel,new 42 | ,3863,2000s,Dizzee Rascal,Dizzee Rascal,,3863,dizzee-rascal,new 43 | ,2936,1990s,DMX,DMX,east nowutang first,"2,936",dmx,site 44 | ,3347,2010s,Drake,Drake,other nowutang first,"3,347",drake,site 45 | ,5004,1990s,E-40,E-40,west nowutang sixth,"5,207",e-40,site 46 | ,4480,2000s,Eminem,Eminem,midwest nowutang fourth,"4,494",eminem,site 47 | ,3642,2000s,Eve,Eve,,3642,eve, 48 | ,4626,1990s,Fat Joe,Fat Joe,east nowutang fifth,"4,686",fat-joe,site 49 | ,4879,2010s,Flatbush Zombies,Flatbush Zombies,,4879,flatbush,new 50 | ,3782,1990s,Foxy Brown,Foxy Brown,,"3,782",foxy-brown, 51 | ,3321,2010s,Future,Future,,3321,future,new 52 | ,3468,2010s,G-Eazy,G-Eazy,,3468,g-eazy,new 53 | ,4236,2000s,The Game,The Game,west nowutang fourth,"4,416",game,site 54 | ,4598,1990s,Gang Starr,Gang Starr,east nowutang fifth,"4,794",gang-starr,site 55 | ,4364,1990s,Geto Boys,Geto Boys,south nowutang fourth,"4,180",geto-boys,site 56 | ,5901,2000s,Ghostface Killah (only solo albums),Ghostface Killah,east wutang seventh,"5,774",ghostface-killah,site 57 | ,4980,1990s,Goodie Mob,Goodie Mob,south nowutang fifth,"4,814",goodie-mob,site 58 | ,3515,2000s,Gucci Mane,Gucci Mane,south nowutang second,"3,885",gucci-mane,site 59 | ,6390,1990s,GZA (only solo albums),GZA,east wutang seventh,"6,426",gza,site 60 | ,3898,2010s,Hopsin,Hopsin,,3898,hopsin,new 61 | ,4338,1990s,Ice Cube,Ice Cube,west nowutang fourth,"4,371",ice-cube,site 62 | ,4334,1980s,Ice T,Ice T,east nowutang fourth,"4,431",ice-t,site 63 | ,5930,2000s,Immortal Technique,Immortal Technique,,5841,immortal,poster 64 | ,3905,1990s,Insane Clown Posse,Insane Clown Posse,midwest nowutang third,"4,146",insane-clown-posse,site 65 | ,3426,2010s,J Cole,J Cole,,3911,j-cole,poster 66 | ,4172,2000s,Jadakiss,Jadakiss,east nowutang third,"4,108",jadakiss,site 67 | ,4163,2010s,Jay Rock,Jay Rock,,4163,jay-rock,new 68 | ,4275,1990s,Jay-Z,Jay-Z,east nowutang fourth,"4,506",jay-z,site 69 | ,5738,2000s,Jean Grae,Jean Grae,,5835,jean,poster 70 | ,6424,2000s,Jedi Mind Tricks,Jedi Mind Tricks,,6336,jedi,poster 71 | ,4523,2000s,Joe Budden,Joe Budden,,4523,joe-budden,new 72 | ,4871,2010s,Joey BadA$$,Joey BadA$$,,4871,joey,new 73 | remove,3675,2000s,Juelz Santana,Juelz Santana,,3675,juelz,new 74 | ,3275,2000s,Juicy J,Juicy J,,3275,juicy-j,new 75 | ,3442,1990s,Juvenile,Juvenile,south nowutang second,"3,630",juvenile,site 76 | remove,4620,1999s,K-Rino,K-Rino,,4900,k-rino,poster 77 | ,5107,2010s,KAAN,KAAN,,5107,kaan,new 78 | ,4144,2000s,Kano,Kano,,4144,kano,new 79 | ,3760,2000s,Kanye West,Kanye West,midwest nowutang second,"3,982",kanye-west,site 80 | ,4017,2010s,Kendrick Lamar,Kendrick Lamar,,"4,013",kendrick,poster 81 | ,4318,2000s,Kevin Gates,Kevin Gates,,4318,kevin-gates,new 82 | ,3318,2010s,Kid Cudi,Kid Cudi,,3318,kid-cudi,new 83 | ,3055,2010s,Kid Ink,Kid Ink,,"3,055",kid-ink,new 84 | ,5704,2000s,Killah Priest,Killah Priest,east wutang seventh,"5,737",killah-priest,site 85 | ,3197,2010s,Kodak Black,Kodak Black,,"3,197",kodak,new 86 | ,5554,1990s,Kool G Rap,Kool G Rap,east nowutang sixth,"5,394",kool-g-rap,site 87 | ,5566,1990s,Kool Keith,Kool Keith,east nowutang seventh,"6,238",kool-keith,site 88 | ,4571,1990s,"KRS-One (only solo albums, excl. boogie productions)",KRS-One,east nowutang fourth,"4,585",krs-one-excl-boogie-production,site 89 | remove,3687,2000s,LeCrae,LeCrae,,3687,lecrae,new 90 | remove,3842,2010s,Lil B,Lil B,west nowutang second,"3,724",lil-b,site 91 | ,2762,2010s,Lil Baby,Lil Baby,,"2,762",lil-baby,new 92 | ,2988,2010s,Lil Durk,Lil Durk,,2988,lil-durk,new 93 | ,4150,2000s,Lil' Kim,Lil' Kim,east nowutang fourth,"4,474",lil-kim,site 94 | ,2556,2010s,Lil Uzi Vert,Lil Uzi Vert,,"2,556",lil-uzi-vert,new 95 | ,3486,2000s,Lil Wayne,Lil Wayne,south nowutang second,"3,486",lil-wayne,site 96 | ,3161,2010s,Lil Yachty,Lil Yachty,,"3,161",lil-yachty,new 97 | ,4638,1980s,LL Cool J,LL Cool J,east nowutang fifth,"4,743",ll-cool-j,site 98 | ,3281,2010s,Logic,Logic,,3281,logic,new 99 | ,4572,2000s,Ludacris,Ludacris,south nowutang fifth,"4,806",ludacris,site 100 | ,4645,2000s,Lupe Fiasco,Lupe Fiasco,midwest nowutang fourth,"4,439",lupe-fiasco,site 101 | ,3960,2010s,Mac Miller,Mac Miller,,4246,mac-miller,poster 102 | remove,4577,1990s,Mac Dre,Mac Dre,,5039,macdre,poster 103 | ,3690,2010s,Machine Gun Kelly,Machine Gun Kelly,,3690,machine,new 104 | ,3580,1990s,Master P,Master P,south nowutang second,"3,612",master-p,site 105 | ,3817,1990s,MC Lyte,MC Lyte,,"3,817",mc-lyte, 106 | ,3454,2010s,Meek Mill,Meek Mill,,3454,meek,new 107 | ,4910,1990s,Method Man (only solo albums),Method Man,east wutang sixth,"4,951",method-man,site 108 | ,6169,2000s,MF DOOM,MF DOOM,east nowutang sixth,"5,204",mf-doom,site 109 | ,3193,2010s,Migos,Migos,,3193,migos,new 110 | ,3747,2000s,Missy Elliot,Missy Elliot,east nowutang second,"3,874",missy-elliot,site 111 | ,4243,1990s,Mobb Deep (incl. both Prodigy and Havoc),Mobb Deep,east nowutang fifth,"4,756",mobb-deep,site 112 | ,4827,2000s,Mos Def,Mos Def,east nowutang fifth,"4,729",mos-def,site 113 | ,4772,2000s,Murs,Murs,,4723,murs,poster 114 | ,4977,1990s,Nas,Nas,east nowutang sixth,"5,096",nas,site 115 | ,4091,2000s,Nelly,Nelly,south nowutang fourth,"4,413",nelly,site 116 | ,2472,2010s,NF,NF,,2472,nf,new 117 | 4,3616,2010s,Nicki Minaj,Nicki Minaj,east nowutang third,"4,162",nicki-minaj,site 118 | ,4545,1990s,Outkast,Outkast,south nowutang sixth,"5,212",outkast,site 119 | remove,,,Petey Pablo,Petey Pablo,south nowutang second,"3,617",petey-pablo,site 120 | ,4261,1990s,Public Enemy,Public Enemy,east nowutang fourth,"4,481",public-enemy,site 121 | remove,4323,1990s,Puff Daddy,Puff Daddy,east nowutang default fourth,"4,429",puff-daddy,site 122 | ,5428,1990s,Raekwon (only solo albums),Raekwon,east wutang sixth,"5,001",raekwon,site 123 | ,4301,1980s,Rakim (including Eric B. & Rakim),Rakim,east nowutang fifth,4621,rakim,site 124 | ,5196,1990s,Redman,Redman,east nowutang sixth,"5,331",redman,site 125 | remove,2853,2010s,Rich Homie Quan,Rich Homie Quan,,2853,rich-homie,new 126 | remove,2709,2010s,Rich the Kid,Rich the Kid,,2709,rich-the-kid,new 127 | ,3907,2000s,Rick Ross,Rick Ross,,4233,rickross,poster 128 | ,4757,2010s,Rittz,Rittz,,4757,rittz,new 129 | ,5781,1990s,The Roots,The Roots,east nowutang seventh,"5,803",roots,site 130 | ,4392,2000s,Royce da 5'9,Royce da 5'9,midwest nowutang fourth,"4,430",royce-da-5-9,site 131 | ,3899,1980s,Run-D.M.C.,Run-D.M.C.,east nowutang third,"4,039",run-dmc,site 132 | ,3491,2010s,Russ,Russ,,"3,491",russ,new 133 | ,6018,2000s,RZA (only solo albums),RZA,east wutang seventh,"5,905",rza,site 134 | ,5443,2000s,Sage Francis,Sage Francis,,6246,sage,poster 135 | ,3601,1990s,Salt-n-Pepa,Salt-n-Pepa,east nowutang second,"3,612",salt-n-pepa,site 136 | ,3902,1990s,Scarface,Scarface,south nowutang third,"4,123",scarface,site 137 | ,4097,2010s,ScHoolboy Q,ScHoolboy Q,,4097,schoolboy,new 138 | remove,3931,2000s,Skyzoo,Skyzoo,,3931,skyzoo,new 139 | ,3797,1990s,Snoop Dogg,Snoop Dogg,west nowutang second,"3,974",snoop,site 140 | ,4374,2010s,$uicideboy$,$uicideboy$,,"4,374",suicideboys,new 141 | ,4171,2000s,T.I.,T.I.,south nowutang third,"4,151",t-i-,site 142 | ,4678,2000s,Talib Kweli,Talib Kweli,east nowutang fifth,"4,703",talib-kweli,site 143 | ,4406,2000s,Tech n9ne,Tech n9ne,midwest nowutang fifth,"4,830",tech-nine,site 144 | ,3978,1990s,Three 6 Mafia,Three 6 Mafia,south nowutang fourth,"4,225",three-six-mafia,site 145 | remove,2778,1980s,Too Short,Too Short,west nowutang first,"3,391",too-short,site 146 | ,3392,2010s,Travis Scott,Travis Scott,,"3,392",travis-scott,new 147 | ,4838,1990s,A Tribe Called Quest,A Tribe Called Quest,east nowutang fifth,"4,635",tribe-called-quest,site 148 | ,3447,2000s,Trick Daddy,Trick Daddy,,3750,trick,poster 149 | ,3537,2000s,Trina,Trina,,"3,537",trina, 150 | ,4522,2000s,Twista,Twista,midwest nowutang fifth,"4,705",twista,site 151 | ,3946,2010s,Tyga,Tyga,west nowutang fifth,"4,601",tyga,site 152 | ,4431,2010s,Tyler the Creator,Tyler the Creator,,"4,431",tyler,new 153 | ,3869,1990s,UGK,UGK,south nowutang third,"4,011",ugk,site 154 | ,3883,2010s,Vince Staples,Vince Staples,,"3,883",vince,new 155 | ,4272,2010s,Wale,Wale,east nowutang fifth,"4,896",wale,site 156 | ,5413,2010s,Watsky,Watsky,,5651,watsky,poster 157 | ,3048,2010s,Wiz Khalifa,Wiz Khalifa,midwest nowutang second,"3,707",wiz-khalifa,site 158 | ,6196,1990s,Wu-Tang Clan,Wu-Tang Clan,east wutang,"5,895",wu-tang,site 159 | ,4787,2000s,Xzibit,Xzibit,west nowutang sixth,"4,982",xzibit,site 160 | ,3029,2010s,YG,YG,,3029,yg,new 161 | ,2724,2010s,YoungBoy Never Broke Again,YoungBoy Never Broke Again,,2724,young-boy,new 162 | ,3486,2000s,Young Jeezy,Young Jeezy,south nowutang second,"3,650",young-jeezy,site 163 | ,3395,2010s,Young Thug,Young Thug,,3395,young-thug,new 164 | ,,,MC Frontalot,"MC Frontalot, ",,,,new 165 | ,,,K-OS,"K-OS, ",,not enough,,new 166 | ,,,Dej Loaf,"Dej Loaf, ",,,, 167 | ,,,Princess Nokia,"Princess Nokia, ",,,, 168 | ,,,Rae Sremmurd,"Rae Sremmurd, ",,,, 169 | ,,,Dreezy,"Dreezy, ",,not enough,, 170 | ,,,Remy Ma,"Remy Ma, ",,Not enough,, 171 | ,,,Dej Loaf,"Dej Loaf, ",,Not enough,, 172 | ,,,Da Brat,"Da Brat, ",,Not enough,, 173 | ,,,Princess Nokia,"Princess Nokia, ",,not enough,, 174 | ,,,Queen Latifah,"Queen Latifah, ",,not enough,, 175 | ,,,Azealia Banks,"Azealia Banks, ",,not enough,, 176 | ,,,Nav,"Nav, ",,not enough words,, 177 | ,,,Dreezy,"Dreezy, ",,not enough,, 178 | ,,,Earl Sweatshirt,"Earl Sweatshirt, ",,not enough,, 179 | ,,,Eyedea,"Eyedea, ",,not enough,, 180 | ,,,Gunna,"Gunna, ",,not enough,, 181 | ,,,Jay Electronica,"Jay Electronica, ",,not enough,, 182 | ,,,Pharoahe Monch,"Pharoahe Monch, ",,not enough,, 183 | ,,,Pusha T,"Pusha T, ",,not enough,, 184 | ,,,Saba,"Saba, ",,not enough,, 185 | ,,,Soulja Boy,"Soulja Boy, ",,not enough,, 186 | ,,,Waka Floka Flame,"Waka Floka Flame, ",,not enough,, 187 | ,,,XXXTentacion,"XXXTentacion, ",,not enough,, -------------------------------------------------------------------------------- /datasets/annual_precipitation.csv: -------------------------------------------------------------------------------- 1 | id,city,station,average,latitude,longitude,state,total19 2 | USW00021504,Hilo,HILO INTL AP,112.9,19.7192,-155.0531,HI,100.8 3 | USW00094240,Forks,QUILLAYUTE STATE AP,105.4,47.9375,-124.555,WA,81 4 | USS0021B01S,Skykomish,Stevens Pass,92.9,47.75,-121.09,WA,65.6 5 | USS0022E07S,Foster,Jump Off Joe,87,44.39,-122.17,OR,65.7 6 | USC00455840,Rockport,NEWHALEM,80.9,48.6758,-121.2419,WA,56.9 7 | USC00084461,North Palm Beach,JUNO BEACH,78,26.86,-80.0553,FL,89.5 8 | USC00352973,Florence,FLORENCE #2,75.7,44.0039,-124.0947,OR,64.8 9 | USC00353705,Yamhill,HASKINS DAM,75.1,45.3128,-123.35,OR,50.9 10 | USW00094224,Warrenton,ASTORIA RGNL AP,73.3,46.1569,-123.8825,OR,51.5 11 | USW00025501,Kodiak,KODIAK AP,73.2,57.7511,-152.4856,AK,73.8 12 | USC00451679,Concrete,CONCRETE PPL FISH STN,72.8,48.5397,-121.7422,WA,52.4 13 | USC00355221,Idanha,MARION FORKS FISH HATCHERY,72.5,44.6125,-121.9486,OR,54.9 14 | USC00097827,Sautee Nacoochee,SAUTEE 3W,72,34.6647,-83.7342,GA,81 15 | USW00013899,Pensacola,PENSACOLA RGNL AP,71.1,30.4781,-87.1869,FL,52.6 16 | USC00160558,Baton Rouge,BATON ROUGE SHERWOOD,70.9,30.4494,-91.0478,LA,75.9 17 | USC00406162,Monteagle,MONTEAGLE,70.7,35.2242,-85.8414,TN,81.9 18 | USW00094225,Hoquiam,HOQUIAM BOWERMAN AP,69.9,46.9728,-123.9303,WA,45.2 19 | USW00012839,Miami,MIAMI INTL AP,69,25.7906,-80.3164,FL,67.2 20 | USW00013894,Mobile,MOBILE,67.7,30.6794,-88.2397,AL,64.7 21 | US1FLOK0029,Mary Esther,MARY ESTHER 0.6 E,67.1,30.4109,-86.6475,FL,54.6 22 | USW00013970,Baton Rouge,BATON ROUGE RYAN AP,66.5,30.5372,-91.1469,LA,64.1 23 | RQW00011641,Carolina,SAN JUAN L M MARIN AP,66.3,18.4325,-66.0108,PR,47 24 | USW00025309,Juneau,JUNEAU INTL AP,66.2,58.3567,-134.5639,AK,60.5 25 | USC00164700,Jennings,JENNINGS,65.5,30.2003,-92.6642,LA,69 26 | US1FLMD0022,Miami,HAMMOCKS 0.5 SSE,65.4,25.665,-80.4395,FL,63 27 | USC00400284,Athens,ATHENS,64.8,35.4322,-84.5833,TN,75.7 28 | USW00093874,Gulfport,GULFPORT - BILOXI AP,64.2,30.4119,-89.0808,MS,49.2 29 | USW00012916,Kenner,NEW ORLEANS INTL AP,63.7,29.9933,-90.2511,LA,62.6 30 | USC00462211,Davis,DAVIS 3SE,63.2,39.0981,-79.4322,WV,63.8 31 | US1FLHB0004,Valrico,VALRICO 2.2 SE,62.7,27.9125,-82.2261,FL,68.1 32 | USW00013748,Wilmington,WILMINGTON INTL AP,62.3,34.2675,-77.8997,NC,49.1 33 | USC00226527,Olive Branch,OLIVE BRANCH,62.3,34.9536,-89.8297,MS,85.2 34 | USW00013833,Hattiesburg,HATTIESBURG CHAIN MUNI AP,61.6,31.2819,-89.2531,MS,66.6 35 | USW00003937,Lake Charles,LAKE CHARLES,61.6,30.125,-93.2158,LA,66 36 | USC00177238,Robbinston,ROBBINSTON,61.3,45.0853,-67.1206,ME,70 37 | USW00003940,Flowood,JACKSON INTL AP,61.1,32.3206,-90.0778,MS,64.2 38 | USC00449272,Woolwine,WOOLWINE 1 SE,61,36.7736,-80.2622,VA,56.6 39 | US1TNHT0001,Tennessee Ridge,TENNESSEE RIDGE 1.4 SW,60.4,36.3087,-87.7842,TN,61.6 40 | US1MSLD0008,Collinsville,COLLINSVILLE 4.0 NNE,60.4,32.5498,-88.8206,MS,67.6 41 | USC00405956,Memphis,MEMPHIS WFO,60.3,35.1297,-89.8036,TN,76.7 42 | USC00220656,Golden,BELMONT 2 SSE,60.1,34.4772,-88.1994,MS,76.8 43 | US1FLBV0001,Palm Bay,PALM BAY 2.6 SSE,59.6,27.9512,-80.642,FL,67.8 44 | USW00003847,Crossville,CROSSVILLE MEM AP,59.6,35.9508,-85.0814,TN,68 45 | USC00030130,Paron,ALUM FK,59.3,34.7961,-92.8417,AR,73.9 46 | USC00407184,Pikeville,PIKEVILLE,58.6,35.5983,-85.1939,TN,70.2 47 | USC00408868,Tazewell,TAZEWELL,58.6,36.465,-83.5603,TN,71.7 48 | USC00408160,Selmer,SELMER,58.4,35.1647,-88.5994,TN,71.8 49 | US1MSWN0002,Noxapater,NOXAPATER 3.3 WSW,58.3,32.9751,-89.117,MS,75.6 50 | USC00303851,Constableville,HIGHMARKET,58.3,43.5753,-75.5208,NY,65.4 51 | USW00093805,Tallahassee,TALLAHASSEE,57.6,30.3975,-84.3289,FL,39.1 52 | USW00013865,Meridian,MERIDIAN KEY FLD,57.6,32.3347,-88.7442,MS,60.6 53 | USS0019K07S,Reno,Mt Rose Ski Area,57.6,39.32,-119.89,NV,80.7 54 | USW00093862,Tupelo,TUPELO RGNL AP,57.3,34.2622,-88.7714,MS,77 55 | US1TNMY0008,Columbia,COLUMBIA 1.2 SSW,57.3,35.6072,-87.0592,TN,64.7 56 | USC00157215,Scottsville,SCOTTSVILLE,57.3,36.7461,-86.2258,KY,69.5 57 | US1TNRD0001,Murfreesboro,MURFREESBORO 5.5 NNW,57.2,35.9247,-86.4367,TN,69 58 | US1INDB0001,Huntingburg,HUNTINGBURG 0.4 SSW,56.9,38.2929,-86.9611,IN,68.2 59 | USC00365344,Mahanoy City,MAHANOY CITY 2 N,56.7,40.8344,-76.1353,PA,56.7 60 | USC00155097,Park City,MAMMOTH CAVE,56.6,37.1317,-86.1481,KY,64.9 61 | US1KYTD0002,Guthrie,GUTHRIE 0.8 WNW,56.5,36.6534,-87.184,KY,61.2 62 | US1GACW0002,Sharpsburg,SHARPSBURG 6.0 N,56.5,33.4273,-84.6607,GA,55 63 | USW00013893,Memphis,MEMPHIS INTL AP,56.4,35.0564,-89.9864,TN,73.7 64 | USC00154958,Louisville,LOUISVILLE WFO,56.2,38.115,-85.6444,KY,59.2 65 | USW00013882,Chattanooga,CHATTANOOGA LOVELL AP,56.2,35.0311,-85.2014,TN,63.2 66 | USW00003811,Jackson,JACKSON MCKELLAR AP,56.1,35.5931,-88.9167,TN,66.2 67 | USC00414325,Sugar Land,HOUSTON-WESTBURY,56.1,29.66,-95.6275,TX,55.2 68 | US1GACW0009,Newnan,NEWNAN 2.6 W,55.8,33.384,-84.8338,GA,56.9 69 | USW00013876,Birmingham,BIRMINGHAM AP,55.7,33.5656,-86.745,AL,52.6 70 | USC00178792,Topsfield,TOPSFIELD 2,55.7,45.4353,-67.7214,ME,61 71 | USW00013942,Monroe,MONROE RGNL AP,55.7,32.5156,-92.0406,LA,61.7 72 | USW00003952,North Little Rock,LITTLE ROCK,55.6,34.8364,-92.2619,AR,66.2 73 | USW00003889,Jackson,JACKSON,55.6,37.5908,-83.3131,KY,57.6 74 | USW00003856,Madison,HUNTSVILLE INTL AP,55.4,34.6439,-86.7861,AL,61.6 75 | US1GAFT0019,Atlanta,EAST POINT 6.3 WNW,54.8,33.7014,-84.5722,GA,55.2 76 | US1PABR0002,Reading,READING 3.5 SW,54.7,40.3162,-75.9887,PA,66.6 77 | USC00301625,Colden,COLDEN 1W,54.6,42.6472,-78.7111,NY,54.9 78 | USC00085359,Marco Island,MARCO IS,54.5,25.9492,-81.7139,FL,57.1 79 | USW00013880,Charleston Afb,CHARLESTON INTL AP,54.4,32.8986,-80.0403,SC,49.5 80 | USW00012842,Tampa,TAMPA INTL AP,54.3,27.9619,-82.5403,FL,60.8 81 | USW00093820,Lexington,LEXINGTON BLUEGRASS AP,54.3,38.0408,-84.6058,KY,56.1 82 | USW00013891,Alcoa,KNOXVILLE MCGHEE TYSON AP,54.2,35.8181,-83.9858,TN,64.3 83 | US1INOW0009,Spencer,SPENCER 7.0 S,54.1,39.1858,-86.7782,IN,65.1 84 | USC00166584,Natchitoches,NATCHITOCHES #2,54,31.8142,-93.0856,LA,60.8 85 | USC00450482,Battle Ground,BATTLE GROUND,53.9,45.7717,-122.5286,WA,40.6 86 | USW00003816,West Paducah,PADUCAH,53.8,37.0683,-88.7719,KY,70.3 87 | US1INWK0005,Boonville,BOONVILLE 2.4 N,53.8,38.0805,-87.2758,IN,66.5 88 | USC00382735,Edisto Island,EDISTO IS MIDDLETON PLANTATION,53.8,32.6072,-80.3258,SC,58.1 89 | USW00013963,Little Rock,LITTLE ROCK AP ADAMS FLD,53.7,34.7272,-92.2389,AR,60.5 90 | USW00003812,Fletcher,ASHEVILLE RGNL AP,53.6,35.4319,-82.5375,NC,57.2 91 | USC00065445,Norfolk,NORFOLK 2 SW,53.5,41.9725,-73.2208,CT,53.3 92 | USC00190736,Milton,BLUE HILL,53.4,42.2122,-71.1136,MA,57.2 93 | USW00013897,Nashville,NASHVILLE INTL AP,53.2,36.1189,-86.6892,TN,64.3 94 | USW00093808,Bowling Green,BOWLING GREEN WARREN CO AP,53.1,36.9647,-86.4239,KY,62.1 95 | USW00012918,Houston,HOUSTON HOBBY AP,52.9,29.6381,-95.2819,TX,55.1 96 | USC00195984,Norton,NORTON W,52.8,41.9928,-71.1667,MA,58.8 97 | USW00093821,Louisville,LOUISVILLE INTL AP,52.2,38.1811,-85.7392,KY,53.3 98 | USC00171131,Cape Neddick,CAPE NEDDICK,52.2,43.2242,-70.6389,ME,57.8 99 | USC00443375,Buena Vista,GLASGOW 1 SE,52.1,37.6183,-79.4358,VA,48.7 100 | USW00024227,Olympia,OLYMPIA AP,52.1,46.9733,-122.9033,WA,37.1 101 | US1NCWK0013,Raleigh,RALEIGH 5.9 ENE,52.1,35.8624,-78.5665,NC,50.2 102 | USC00185934,Manchester,MILLERS 4 NE,52,39.7194,-76.8028,MD,48.2 103 | USC00193624,Hingham,HINGHAM,52,42.2269,-70.9125,MA,62.3 104 | US1NCNS0002,Nashville,NASHVILLE 3.2 W,51.6,35.9713,-78.0134,NC,48 105 | USC00448192,Suffolk,SUFFOLK LAKE KILBY,51.5,36.7297,-76.6014,VA,49.8 106 | USW00003870,Greer,GREER,51.5,34.8831,-82.2203,SC,51.9 107 | USC00173862,Hollis Center,HOLLIS,51.3,43.6475,-70.675,ME,53.5 108 | USW00013874,Atlanta,ATLANTA HARTSFIELD INTL AP,51.2,33.63,-84.4417,GA,43.8 109 | US1DENC0002,Newark,NEWARK 3.9 SSW,51.1,39.6249,-75.7861,DE,51.6 110 | USW00012960,Houston,HOUSTON INTERCONT AP,51.1,29.98,-95.36,TX,52 111 | USC00360868,Bradford,BRADFORD 4SW RSCH 5,51,41.8981,-78.7144,PA,54.4 112 | USW00014737,Catasauqua,ALLENTOWN INTL AP,50.9,40.6508,-75.4492,PA,60.7 113 | USW00094728,New York,NEW YORK CNTRL PK TWR,50.8,40.7789,-73.9692,NY,53.1 114 | USW00013895,Montgomery,MONTGOMERY AP,50.6,32.2997,-86.4075,AL,47.7 115 | USC00368361,Springboro,SPRINGBORO 3 WNW,50.6,41.8161,-80.425,PA,51 116 | USW00094746,Worcester,WORCESTER RGNL AP,50.6,42.2706,-71.8731,MA,54.8 117 | USW00012834,Daytona Beach,DAYTONA BEACH INTL AP,50.4,29.1828,-81.0483,FL,59 118 | USS0022F18S,Chemult,Diamond Lake,50.3,43.19,-122.14,OR,44.9 119 | USC00091500,Camilla,CAMILLA 3SE,50.2,31.1903,-84.2036,GA,43 120 | USW00013873,Athens,ATHENS BEN EPPS AP,50.1,33.9481,-83.3275,GA,46.3 121 | USC00175736,New Sharon,NEW SHARON,50,44.6353,-70.0003,ME,51.5 122 | US1DENC0010,Wilmington,NEWPORT 2.4 WNW,49.9,39.7256,-75.6488,DE,48.4 123 | USS0015B02S,Mullan,Lookout,49.9,47.46,-115.71,ID,37.8 124 | USW00093718,North Myrtle Beach,N MYRTLE BCH AP,49.9,33.8117,-78.7239,SC,56 125 | USW00012816,Gainesville,GAINESVILLE RGNL AP,49.9,29.6919,-82.2756,FL,49.7 126 | USC00178817,Turner,TURNER,49.8,44.2822,-70.2561,ME,51.4 127 | USC00361810,Coudersport,COUDERSPORT 7SE,49.8,41.7392,-77.9711,PA,55.4 128 | USC00387687,Pendleton,SANDY SPRINGS 2 NE,49.7,34.6111,-82.7269,SC,41.8 129 | USW00012815,Orlando,ORLANDO INTL AP,49.7,28.4339,-81.325,FL,48 130 | US1FLLK0003,Groveland,GROVELAND 1.7 E,49.7,28.565,-81.824,FL,48.6 131 | US1NHMR0006,Danbury,DANBURY 2.2 ESE,49.7,43.52,-71.819,NH,49.9 132 | US1INDV0001,Washington,WASHINGTON 1.5 NW,49.6,38.6754,-87.19,IN,62 133 | USC00170409,Bath,BATH,49.6,43.9317,-69.8564,ME,54.4 134 | USW00013889,Jacksonville,JACKSONVILLE,49.5,30.4844,-81.7019,FL,46.4 135 | USC00172048,Durham,DURHAM,49.4,43.9997,-70.0964,ME,52.7 136 | USC00300321,Auburn,AUBURN,49.4,42.9328,-76.5447,NY,50.5 137 | USW00014764,Portland,PORTLAND INTL JETPORT,49.3,43.6497,-70.3003,ME,52.2 138 | USW00093814,Hebron,CINCINNATI NORTHERN KY AP,49.3,39.0431,-84.6717,KY,52.8 139 | USC00317845,Shelby,SHELBY 2 NW,49.2,35.3111,-81.5708,NC,52.6 140 | USW00093842,Columbus,COLUMBUS METRO AP,49.2,32.5161,-84.9422,GA,49 141 | USW00012838,Melbourne,MELBOURNE INTL AP,49.1,28.1011,-80.6439,FL,55.7 142 | USW00003860,Huntington,HUNTINGTON TRI STATE AP,49.1,38.365,-82.555,WV,49.4 143 | USW00014765,Warwick,PROVIDENCE T F GREEN AP,48.9,41.7219,-71.4325,RI,52 144 | USC00353971,Sweet Home,HOLLEY,48.9,44.3525,-122.7842,OR,43.1 145 | USW00014711,Middletown,MIDDLETOWN HARRISBURG INTL AP,48.7,40.1936,-76.7633,PA,47.9 146 | USC00367732,Brogue,SAFE HARBOR DAM,48.7,39.8958,-76.3947,PA,49.1 147 | USC00317202,Reidsville,REIDSVILLE 2 NW,48.6,36.3797,-79.6944,NC,49.7 148 | USW00014734,Elizabeth,NEWARK INTL AP,48.5,40.6825,-74.1694,NJ,58.6 149 | USW00013722,Morrisville,RALEIGH DURHAM INTL AP,48.5,35.8922,-78.7819,NC,43 150 | USW00053860,Jacksonville,JACKSONVILLE CRAIG MUNI AP,48.3,30.3361,-81.5147,FL,47.6 151 | USW00014740,Windsor Locks,HARTFORD BRADLEY INTL AP,48.3,41.9381,-72.6825,CT,52.5 152 | USC00319675,Yadkinville,YADKINVILLE 6 E,48.2,36.1306,-80.5481,NC,47 153 | USC00235027,Lockwood,LOCKWOOD,48.2,37.3908,-93.9492,MO,60.5 154 | USW00013866,Charleston,CHARLESTON YEAGER AP,48.2,38.3794,-81.59,WV,46.9 155 | US1INHN0011,Fortville,MCCORDSVILLE 2.6 NE,48.2,39.937,-85.9,IN,50.5 156 | USC00314996,Lincolnton,LINCOLNTON 4 W,48.2,35.4606,-81.3297,NC,53.9 157 | USC00406534,Newport,NEWPORT 1 NW,48.2,35.9833,-83.2008,TN,57.6 158 | USW00013957,Shreveport,SHREVEPORT,48,32.4506,-93.8411,LA,42.9 159 | USW00013964,Fort Smith,FT SMITH RGNL AP,48,35.3331,-94.3625,AR,67.5 160 | USC00446475,Painter,PAINTER 2 W,48,37.5844,-75.8217,VA,46.4 161 | USW00003962,Bismarck,HOT SPRINGS ASOS,47.9,34.29,-93.06,AR,52.4 162 | USS0021C28S,Naches,White Pass E.S.,47.7,46.64,-121.38,WA,33.8 163 | USW00093987,Diboll,LUFKIN ANGELINA CO AP,47.7,31.2361,-94.7544,TX,41.7 164 | US1NCGL0008,Greensboro,GREENSBORO 5.3 NNE,47.6,36.1515,-79.7968,NC,51.8 165 | USW00013786,Elizabeth City,ELIZABETH CITY CGAS,47.6,36.2606,-76.175,NC,55 166 | USW00013781,New Castle,WILMINGTON NEW CASTLE CO AP,47.5,39.6728,-75.6008,DE,48 167 | USW00012923,Galveston,GALVESTON SCHOLES FLD,47.4,29.2733,-94.8592,TX,59.3 168 | USW00093721,Hanover,BALTIMORE WASH INTL AP,47.3,39.1667,-76.6833,MD,38.2 169 | US1ILSC0003,Belleville,BELLEVILLE 2.2 SE,47.3,38.5096,-89.9711,IL,54.8 170 | USC00193276,Groveland,GROVELAND,47.3,42.7467,-71.0425,MA,50.2 171 | USS0013A27S,Cut Bank,Many Glacier,47.1,48.8,-113.67,MT,40.9 172 | USW00093720,Salisbury,SALISBURY WICOMICO RGNL AP,46.9,38.3406,-75.5103,MD,36.9 173 | USC00272302,Milford,E MILFORD,46.9,42.8267,-71.6261,NH,45.7 174 | USW00003822,Savannah,SAVANNAH INTL AP,46.7,32.13,-81.21,GA,51.4 175 | USW00004781,Ronkonkoma,ISLIP LI MACARTHUR AP,46.7,40.7939,-73.1017,NY,48.8 176 | USC00190120,Amherst,AMHERST,46.6,42.3861,-72.5375,MA,45 177 | USC00351897,Cottage Grove,COTTAGE GROVE 2E,46.5,43.7917,-123.0275,OR,42.2 178 | US1MOFSA065,Salem,SALEM 1.8 NW,46.5,37.6605,-91.5535,MO,53.9 179 | USC00237263,Rolla,ROLLA MISSOURI S&T,46.3,37.9567,-91.7761,MO,50.5 180 | USC00313555,Graham,GRAHAM 2 ENE,46.3,36.0503,-79.3728,NC,52.4 181 | US1ILWL0051,Plainfield,PLAINFIELD 2.4 SSE,46.2,41.5819,-88.1937,IL,63.7 182 | USW00013877,Blountville,BRISTOL TRI CITY AP,46.1,36.4731,-82.4044,TN,56 183 | USW00014732,East Elmhurst,NEW YORK LAGUARDIA AP,46.1,40.7794,-73.8803,NY,50.9 184 | USW00014778,Montoursville,WILLIAMSPORT,46,41.2433,-76.9217,PA,48.7 185 | USW00013741,Roanoke,ROANOKE RGNL AP,45.8,37.3169,-79.9742,VA,42.6 186 | USW00013971,Harrison,HARRISON BOONE CO AP,45.8,36.2667,-93.1567,AR,57 187 | USC00274234,Hudson,HUDSON 1 SSE,45.7,42.7831,-71.4147,NH,52.6 188 | USW00003813,Macon,MACON MIDDLE GA RGNL AP,45.7,32.6847,-83.6528,GA,44.6 189 | USW00013723,Greensboro,PIEDMONT TRIAD INTL AP,45.7,36.0969,-79.9433,NC,52 190 | USC00368469,Austin,STEVENSON DAM,45.6,41.4039,-78.0183,PA,54.7 191 | USW00004725,Johnson City,BINGHAMTON,45.6,42.1997,-75.985,NY,44 192 | USC00307705,Sherburne,SHERBURNE,45.6,42.6772,-75.5067,NY,44 193 | USW00013740,Richmond,RICHMOND INTL AP,45.6,37.505,-77.3203,VA,42.9 194 | USW00014860,Erie,ERIE INTL AP,45.6,42.08,-80.1825,PA,40.4 195 | USC00128784,Tipton,TIPTON 5 SW,45.5,40.2233,-86.1086,IN,40.4 196 | USS0005J37S,Bellvue,Joe Wright,45.5,40.53,-105.89,CO,44.7 197 | USW00013883,West Columbia,COLUMBIA,45.5,33.9486,-81.1186,SC,42.3 198 | USW00094702,Stratford,BRIDGEPORT SIKORSKY MEM AP,45.5,41.1583,-73.1289,CT,51.1 199 | USC00441955,Concord,CONCORD 4 SSW,45.5,37.2819,-78.9592,VA,45.9 200 | USS0015C05S,Pierce,Pierce R.S.,45.4,46.49,-115.8,ID,41.4 201 | US1OHMD0002,Brunswick,BRUNSWICK 0.5 NE,45.4,41.2498,-81.8133,OH,43.6 202 | USW00013736,Morgantown,MORGANTOWN HART FLD,45.2,39.6428,-79.9164,WV,45.1 203 | USC00444148,Huddleston,HUDDLESTON 4 SW,45.2,37.1258,-79.525,VA,47.9 204 | USW00094789,Springfield Gardens,NEW YORK JFK INTL AP,45.1,40.6386,-73.7622,NY,52 205 | USW00013995,Springfield,SPRINGFIELD,45.1,37.2353,-93.4003,MO,54.5 206 | USW00013881,Charlotte,CHARLOTTE DOUGLAS AP,45.1,35.2236,-80.9553,NC,54.1 207 | USW00003872,Beaver,BECKLEY RALEIGH CO AP,45.1,37.7836,-81.1231,WV,44.1 208 | USW00093739,Horntown,WALLOPS ISLAND FLIGHT FAC,45.1,37.9406,-75.4631,VA,46.7 209 | USW00014852,Vienna,YOUNGSTOWN RGNL AP,45,41.2544,-80.6739,OH,49.8 210 | USW00093846,Anderson,ANDERSON CO AP,44.9,34.4978,-82.7097,SC,39.4 211 | USC00125407,Martinsville,MARTINSVILLE 2 SW,44.8,39.4039,-86.453,IN,52.5 212 | US1OHFR0003,Columbus,GRANDVIEW HEIGHTS 0.1 N,44.6,39.981,-83.0401,OH,42.2 213 | USC00369408,Wellsboro,WELLSBORO 4 SW,44.5,41.7003,-77.3872,PA,47.8 214 | USC00330279,Athens,ATHENS OU,44.5,39.3225,-82.0994,OH,52.1 215 | USC00367409,Renovo,RENOVO,44.5,41.33,-77.7381,PA,47.4 216 | USW00003901,Longview,LONGVIEW E TX RGNL AP,44.5,32.3847,-94.7117,TX,48.3 217 | USW00014895,Canton,AKRON CANTON RGNL AP,44.4,40.9167,-81.4333,OH,44.3 218 | USW00014820,Cleveland,CLEVELAND,44.3,41.4131,-81.86,OH,40 219 | USW00093819,Indianapolis,INDIANAPOLIS,44.2,39.7075,-86.2803,IN,47.2 220 | USC00117457,Romeoville,ROMEOVILLE WFO,44.2,41.6042,-88.085,IL,56.8 221 | USW00013994,Bridgeton,ST LOUIS LAMBERT INTL AP,44.1,38.7525,-90.3736,MO,54 222 | USW00014607,Caribou,CARIBOU MUNI AP,44,46.8706,-68.0172,ME,41.6 223 | USC00360132,Duncansville,ALTOONA 7 SW,44,40.4189,-78.4197,PA,44.8 224 | US1OHPT0012,Mogadore,MOGADORE 4.7 SE,43.9,41.0085,-81.329,OH,51.9 225 | USC00440766,Blacksburg,BLACKSBURG NWSO,43.9,37.2039,-80.4144,VA,42.7 226 | USC00368449,State College,STATE COLLEGE,43.8,40.7933,-77.8672,PA,41.5 227 | USC00441159,Buena Vista,BUENA VISTA,43.7,37.7267,-79.3628,VA,43.2 228 | USW00014821,Columbus,COLUMBUS PORT COLUMBUS INTL AP,43.7,39.9914,-82.8808,OH,44 229 | USC00231801,Columbia,COLUMBIA U OF M,43.6,38.9425,-92.3206,MO,46.5 230 | USW00014891,Mansfield,MANSFIELD LAHM MUNI AP,43.5,40.8203,-82.5178,OH,47.9 231 | USW00004751,Lewis Run,BRADFORD RGNL AP,43.5,41.8031,-78.6403,PA,44.8 232 | US1MDAL0002,Cumberland,CRESAPTOWN-BEL AIR 0.9 SSE,43.5,39.5768,-78.8498,MD,43 233 | USW00014745,Concord,CONCORD MUNI AP,43.4,43.1953,-71.5011,NH,45.2 234 | US1ILGY0001,Morris,CARBON HILL 3.1 N,43.4,41.3414,-88.2981,IL,60.3 235 | USW00013878,Saint Simons Island,BRUNSWICK MALCOLM MCKINNON AP,43.1,31.1522,-81.3908,GA,44.4 236 | USW00013733,Lynchburg,LYNCHBURG RGNL AP,43.1,37.3208,-79.2067,VA,39.1 237 | USC00211198,Caledonia,CALEDONIA,42.8,43.6308,-91.5028,MN,47.9 238 | USC00315356,Marshall,MARSHALL,42.7,35.8033,-82.6658,NC,47.3 239 | US1ILWD0005,Morrison,MORRISON 3.2 E,42.6,41.816,-89.904,IL,56.1 240 | USW00014606,Bangor,BANGOR INTL AP,42.6,44.7978,-68.8186,ME,52 241 | USW00003820,Augusta,AUGUSTA BUSH FLD AP,42.5,33.3644,-81.9633,GA,50.9 242 | USW00094823,Coraopolis,PITTSBURGH INTL AP,42.5,40.4847,-80.2144,PA,52.5 243 | USW00013743,Arlington,WASHINGTON REAGAN AP,42.4,38.8483,-77.0342,VA,42.4 244 | USC00437054,Saint Johnsbury,SAINT JOHNSBURY,42.4,44.42,-72.0194,VT,47.5 245 | USC00369823,Bedford,WOLFSBURG,42.4,40.0394,-78.5239,PA,47 246 | US1ILCN0003,Assumption,PANA 6.2 NNE,42.2,39.4736,-89.0462,IL,51.5 247 | USC00442044,Covington,COVINGTON FLTR PLT,42.1,37.8111,-79.9883,VA,38.2 248 | USC00474790,Lodi,LODI,42.1,43.3217,-89.5311,WI,52.8 249 | USW00024233,Seattle,SEATTLE TACOMA INTL AP,42.1,47.4444,-122.3139,WA,33.9 250 | USC00464840,Keyser,KEYSER 2 SSW,42,39.4214,-79.005,WV,39.5 251 | USS0020L02S,Tahoma,Rubicon #2,41.9,39,-120.13,CA,52.6 252 | USW00014733,Buffalo,BUFFALO,41.6,42.9486,-78.7369,NY,47.8 253 | USW00094860,Grand Rapids,GRAND RAPIDS,41.6,42.8939,-85.5447,MI,51.4 254 | USW00093815,Vandalia,DAYTON INTL AP,41.5,39.9061,-84.2186,OH,43 255 | USW00094908,Dubuque,DUBUQUE RGNL AP,41.5,42.3978,-90.7036,IA,54.9 256 | USC00304996,Malone,MALONE,41.4,44.8419,-74.3081,NY,41.4 257 | USW00094846,Elk Grove Village,CHICAGO OHARE INTL AP,41.4,41.995,-87.9336,IL,49.6 258 | USC00115961,Mundelein,MUNDELEIN 4 WSW,41.2,42.2553,-88.0775,IL,54.2 259 | USW00003904,College Station,COLLEGE STN,41.2,30.5892,-96.3647,TX,36.3 260 | US1OHSN0003,Tiffin,TIFFIN 5.2 SE,41.1,41.0589,-83.1127,OH,45.8 261 | USW00024213,Eureka,EUREKA WFO WOODLEY ISLAND,41.1,40.8097,-124.1603,CA,44 262 | USW00003947,Kansas City,KANSAS CITY INTL AP,41.1,39.2972,-94.7306,MO,53.2 263 | USW00014827,Fort Wayne,FT WAYNE INTL AP,41.1,40.9706,-85.2064,IN,39.1 264 | USW00014842,Peoria,PEORIA GTR PEORIA AP,41.1,40.6675,-89.6839,IL,50.8 265 | US1IASR0002,Ames,AMES 1.5 NNE,41.1,42.0448,-93.6174,IA,40.1 266 | US1MIIN0001,Saranac,SARANAC 2.6 NE,41,42.9576,-85.1738,MI,49.9 267 | USC00476827,Prairie Du Chien,PRAIRIE DU CHIEN,40.9,43.0514,-91.135,WI,52.3 268 | USS0020K27S,Tahoe City,Tahoe City Cross,40.9,39.17,-120.15,CA,53.9 269 | USW00014605,Augusta,AUGUSTA STATE AP,40.9,44.3206,-69.7972,ME,42.9 270 | USC00474937,Eastman,LYNXVILLE DAM 9,40.8,43.2117,-91.0986,WI,54.8 271 | USC00476718,Portage,PORTAGE,40.7,43.5278,-89.4342,WI,47.3 272 | US1VASH0002,Strasburg,STRASBURG 3.7 N,40.7,39.0422,-78.3506,VA,40.5 273 | USW00024232,Salem,SALEM MCNARY FLD,40.7,44.905,-123.0011,OR,30.9 274 | USC00114710,Kewanee,KEWANEE 1 E,40.6,41.2428,-89.8997,IL,50.9 275 | USW00093822,Springfield,SPRINGFIELD CAPITAL AP,40.5,39.8447,-89.6839,IL,49.4 276 | USC00478540,Beaver Dam,TOWN OF WESTFORD,40.5,43.4719,-88.8825,WI,48.3 277 | USW00013972,Tyler,TYLER POUNDS FLD,40.4,32.3542,-95.4025,TX,42.6 278 | US1OHDR0001,Bradford,BRADFORD 2.3 NW,40.4,40.1526,-84.4613,OH,42.2 279 | USC00436995,Rutland,RUTLAND,40.4,43.6253,-72.9781,VT,45.7 280 | USC00208774,Wellston,WELLSTON 1N,40.3,44.2294,-85.9572,MI,51.8 281 | US1OHSM0005,Cuyahoga Falls,CUYAHOGA FALLS 1.1 ESE,40.3,41.1623,-81.5037,OH,44.8 282 | USC00231580,Chillicothe,CHILLICOTHE 2S,40.2,39.775,-93.5358,MO,55.4 283 | USC00336405,Pandora,PANDORA,40.2,40.9461,-83.9614,OH,44.3 284 | USS0007M33S,Silverton,Red Mountain Pass,40.2,37.89,-107.71,CO,46.7 285 | USW00013870,Alma,ALMA BACON CO AP,39.9,31.5358,-82.5067,GA,34.2 286 | USS0007K06S,Cedaredge,Park Reservoir,39.9,39.05,-107.87,CO,48.3 287 | USW00094290,Seattle,SEATTLE SAND PT WSFO,39.8,47.6872,-122.2553,WA,31.3 288 | US1INEL0008,Goshen,WAKARUSA 2.4 NNE,39.8,41.5655,-85.9933,IN,42.9 289 | USW00014923,Moline,MOLINE QUAD CITY INTL AP,39.8,41.4653,-90.5233,IL,49.6 290 | USW00014742,South Burlington,BURLINGTON INTL AP,39.8,44.4683,-73.15,VT,43.5 291 | USW00012836,Key West,KEY WEST INTL AP,39.7,24.555,-81.7522,FL,35.4 292 | USC00470124,Alma,ALMA DAM 4,39.7,44.3272,-91.9194,WI,52.8 293 | USW00014837,Madison,MADISON DANE RGNL AP,39.6,43.1406,-89.3453,WI,46.4 294 | USC00471078,Brodhead,BRODHEAD,39.6,42.6333,-89.3867,WI,50.1 295 | USC00200230,Ann Arbor,ANN ARBOR U OF MICH,39.6,42.2981,-83.6639,MI,45.5 296 | US1IAWB0005,Badger,BADGER 3.1 NW,39.5,42.6426,-94.1879,IA,40.2 297 | USW00094822,Rockford,ROCKFORD GTR ROCKFORD AP,39.3,42.1928,-89.0931,IL,49.4 298 | USC00472973,Friendship,FRIENDSHIP,39.3,43.975,-89.8308,WI,50.1 299 | USC00200758,Frankfort,BEULAH 7SSW,39.2,44.5317,-86.1311,MI,42.7 300 | USC00200228,Ann Arbor,ANN ARBOR SE,39,42.2417,-83.6933,MI,44.9 301 | USW00014933,Des Moines,DES MOINES INTL AP,39,41.5339,-93.6531,IA,49.4 302 | USC00115079,Lincoln,LINCOLN,39,40.1519,-89.3386,IL,45.7 303 | USW00014840,Muskegon,MUSKEGON CO AP,39,43.1711,-86.2367,MI,48 304 | USC00475581,Montello,MONTELLO,38.9,43.7806,-89.3169,WI,48.4 305 | USC00470045,Janesville,AFTON,38.9,42.6475,-89.0644,WI,49.9 306 | USC00203096,Gaylord,GAYLORD,38.8,45.0333,-84.7114,MI,47.3 307 | USW00024152,Meacham,MEACHAM,38.8,45.5114,-118.4247,OR,35.5 308 | USW00012935,Palacios,PALACIOS MUNI AP,38.8,28.7247,-96.2536,TX,37.7 309 | USW00013968,Tulsa,TULSA INTL AP,38.8,36.1994,-95.8872,OK,59.6 310 | USC00118684,Tuscola,TUSCOLA,38.8,39.7947,-88.2911,IL,44.1 311 | USC00476200,Oconomowoc,OCONOMOWOC,38.7,43.1003,-88.5036,WI,41.9 312 | USC00470265,Appleton,APPLETON,38.7,44.2769,-88.4378,WI,49 313 | USC00043578,Sebastopol,GRATON,38.6,38.4306,-122.8647,CA,45 314 | USW00013960,Dallas,DALLAS LOVE FLD,38.5,32.8519,-96.8556,TX,39.6 315 | USW00014920,La Crosse,LA CROSSE MUNI AP,38.5,43.8789,-91.2528,WI,44.7 316 | USW00024229,Portland,PORTLAND INTL AP,38.4,45.5908,-122.6003,OR,26.7 317 | USC00331042,Bryan,BRYAN 2 SE,38.4,41.4619,-84.5272,OH,47.3 318 | US1IAGT0001,Jamaica,JAMAICA 3.2 S,38.4,41.7991,-94.3093,IA,37.2 319 | USW00014897,Wausau,WAUSAU DWTN AP,38.2,44.9258,-89.6256,WI,48.1 320 | USC00368868,Tioga,TIOGA HAMMOND DAM,38.1,41.8975,-77.1419,PA,39.3 321 | USC00142401,El Dorado,EL DORADO,38,37.8183,-96.8444,KS,53.1 322 | USW00094910,Waterloo,WATERLOO MUNI AP,38,42.5544,-92.4011,IA,41.9 323 | USW00013967,Oklahoma City,OKLAHOMA CITY WILL ROGERS AP,38,35.3889,-97.6006,OK,45.4 324 | USS0020K13S,Truckee,Truckee #2,38,39.3,-120.18,CA,51.5 325 | US1TXCRL003,Kempner,KEMPNER 6.7 ENE,37.7,31.0916,-97.89,TX,38.2 326 | US1OKCV0032,Norman,NORMAN 2.1 SE,37.7,35.1979,-97.4182,OK,40.5 327 | USC00361838,Lawrenceville,COWANESQUE DAM,37.6,41.9903,-77.1567,PA,42.3 328 | USS0007J05S,Meeker,Ripple Creek,37.6,40.11,-107.29,CO,47.4 329 | USW00014847,Sault Sainte Marie,SAULT STE MARIE SANDERSON FLD,37.6,46.4794,-84.3572,MI,46.2 330 | USS0005J10S,Grand Lake,Lake Irene,37.5,40.41,-105.82,CO,36.1 331 | USW00094830,Swanton,TOLEDO EXPRESS AP,37.5,41.5886,-83.8014,OH,44.6 332 | USW00014925,Rochester,ROCHESTER INTL AP,37.5,43.9042,-92.4917,MN,55.2 333 | USC00346386,Norman,NORMAN 3SSE,37.4,35.1808,-97.4378,OK,41 334 | USC00413285,Fort Worth,FT WORTH WSFO,37.3,32.8339,-97.2975,TX,36.6 335 | USW00014750,Queensbury,GLENS FALLS AP,37.3,43.35,-73.6167,NY,44.1 336 | USW00013958,Austin,AUSTIN-CAMP MABRY,37.3,30.3208,-97.7603,TX,31.9 337 | USC00130200,Boone,AMES 8 WSW,37.2,42.0208,-93.7742,IA,36.1 338 | USC00132171,Denison,DENISON,37.2,42.0364,-95.3289,IA,35.8 339 | USS0006H24S,Laramie,Cinnabar Park,37.1,41.24,-106.23,WY,38.7 340 | USW00024221,Eugene,EUGENE MAHLON SWEET AP,37.1,44.1278,-123.2206,OR,36.3 341 | USC00475364,Merrill,MERRILL,37,45.1786,-89.6617,WI,43 342 | USS0006H13S,Centennial,Brooklyn Lake,36.9,41.36,-106.23,WY,38.3 343 | US1KSSG0002,Wichita,MAIZE 5.7 S,36.9,37.6916,-97.4797,KS,44.8 344 | USW00013996,Topeka,TOPEKA MUNI AP,36.8,39.0725,-95.6261,KS,48.8 345 | USS0020L10S,South Lake Tahoe,Fallen Leaf,36.8,38.93,-120.05,CA,42 346 | USW00014991,Eau Claire,EAU CLAIRE RGNL AP,36.7,44.8664,-91.4878,WI,44.1 347 | USC00410433,Austin,AUSTIN GREAT HILLS,36.7,30.4144,-97.7664,TX,28.9 348 | USW00013904,Austin,AUSTIN BERGSTROM AP,36.6,30.1831,-97.68,TX,29.1 349 | USW00094847,Romulus,DETROIT METRO AP,36.6,42.2314,-83.3308,MI,36.4 350 | USW00003927,Irving,DALLAS FT WORTH AP,36.5,32.8978,-97.0189,TX,34.5 351 | USW00014768,Rochester,ROCHESTER GTR INTL AP,36.5,43.1167,-77.6767,NY,34.5 352 | USC00471064,Brillion,BRILLION,36.4,44.1614,-88.0803,WI,43.7 353 | US1KSSG0020,Wichita,WICHITA 7.9 W,36.4,37.6925,-97.4877,KS,44 354 | USC00257545,Salem,SALEM 5SW,36.2,40.0225,-95.7883,NE,49.1 355 | USW00013959,Waco,WACO RGNL AP,36.2,31.6189,-97.2283,TX,33 356 | USS0006J01S,Steamboat Springs,Dry Lake,36.2,40.53,-106.78,CO,40.4 357 | USC00201468,Charlevoix,CHARLEVOIX,36.1,45.3172,-85.2672,MI,40.7 358 | USW00014898,Green Bay,GREEN BAY,36.1,44.4983,-88.1111,WI,48.6 359 | USC00412585,Austin,DRIPPING SPRINGS 6 E,35.9,30.2194,-97.9878,TX,34.5 360 | USC00418862,Taylor,TAYLOR 1NW,35.8,30.5844,-97.4156,TX,34.1 361 | USC00144972,Manhattan,MANHATTAN,35.8,39.1972,-96.5814,KS,52.8 362 | USC00253467,Omaha,GRETNA 4NE,35.8,41.1586,-96.1922,NE,43.3 363 | USS0006M22S,Antonito,Cumbres Trestle,35.8,37.02,-106.45,CO,47.4 364 | USW00014839,Milwaukee,MILWAUKEE MITCHELL AP,35.8,42.955,-87.9044,WI,46 365 | USS0005J39S,Estes Park,Bear Lake,35.7,40.31,-105.64,CO,35.2 366 | US1KSSG0003,Wichita,MAIZE 3.4 SSW,35.7,37.7248,-97.4786,KS,41.2 367 | USC00204161,Lake Linden,JACOBSVILLE,35.2,47.0083,-88.4317,MI,39 368 | US1SDMH0020,Sioux Falls,SIOUX FALLS 3.4 ESE,35.1,43.5267,-96.6658,SD,44.8 369 | USW00013961,Fort Worth,FT WORTH MEACHAM FLD,35,32.8192,-97.3614,TX,31.8 370 | USC00257800,Verdon,SHUBERT 2SW,34.8,40.2039,-95.7064,NE,50.6 371 | USC00473930,Jackson,JACKSON,34.7,43.3194,-88.1681,WI,48.7 372 | USC00145132,Mc Farland,MC FARLAND,34.6,39.0542,-96.2367,KS,48.7 373 | USW00003928,Wichita,WICHITA,34.5,37.6544,-97.4425,KS,42.1 374 | USC00258395,Syracuse,SYRACUSE,34.4,40.6661,-96.1892,NE,38.6 375 | USW00014922,Minneapolis,MINNEAPOLIS/ST PAUL AP,34.3,44.8831,-93.2289,MN,43.2 376 | USC00472055,Denmark,DENMARK WWTP,34.3,44.3514,-87.812,WI,44.7 377 | RQC00663532,Ensenada,ENSENADA 1 W,34.2,17.9728,-66.9458,PR,20.8 378 | USS0005K05S,Silverthorne,Loveland Basin,34.1,39.67,-105.9,CO,32.2 379 | USW00023213,Windsor,SANTA ROSA SONOMA CO AP,34.1,38.5039,-122.8103,CA,52 380 | USC00253050,Fremont,FREMONT,33.8,41.43,-96.4669,NE,40.4 381 | USW00014942,Omaha,OMAHA EPPLEY AIRFIELD,33.7,41.3103,-95.8992,NE,40 382 | USW00014826,Flint,FLINT BISHOP INTL AP,33.5,42.9667,-83.7494,MI,37.4 383 | USW00012921,San Antonio,SAN ANTONIO INTL AP,33.3,29.5442,-98.4839,TX,22.1 384 | USC00204090,Kingsford,IRON MTN-KINGSFORD WWTP,32.8,45.7858,-88.0842,MI,39.3 385 | USS0018E05S,Portland,Bourne,32.8,44.83,-118.19,OR,31.3 386 | USS0005J06S,Red Feather Lakes,Deadman Hill,32.7,40.81,-105.77,CO,32.8 387 | USC00250435,Brownville,AUBURN 5 ESE,32.7,40.3706,-95.7469,NE,38 388 | USW00094725,Massena,MASSENA INTL AP,32.6,44.9358,-74.8458,NY,34.3 389 | USC00141467,Cheney,CHENEY 5N,32.6,37.7206,-97.7936,KS,41.4 390 | USC00415429,Luling,LULING,32.5,29.6756,-97.6578,TX,26.6 391 | USW00014845,Freeland,SAGINAW MBS INTL AP,32.5,43.5331,-84.0797,MI,34.4 392 | USC00258465,Tecumseh,TECUMSEH 1S,32.5,40.3544,-96.1939,NE,42.7 393 | USS0008M06S,Dolores,El Diente Peak,32.5,37.79,-108.02,CO,39.3 394 | USW00014939,Lincoln,LINCOLN MUNI AP,32.3,40.8508,-96.7475,NE,36.1 395 | USW00014913,Duluth,DULUTH,32.3,46.8369,-92.2097,MN,34.3 396 | USC00259200,West Point,W PT,32.3,41.845,-96.7142,NE,31.5 397 | USW00094849,Alpena,ALPENA CO RGNL AP,32.1,45.0717,-83.5644,MI,36.6 398 | USC00340215,Ames,AMES,32,36.2483,-98.1883,OK,41.7 399 | US1TXWO0010,Adkins,ELMENDORF 5.6 ENE,32,29.2829,-98.2456,TX,23.6 400 | USW00014926,Saint Cloud,ST CLOUD RGNL AP,32,45.5433,-94.0514,MN,41.9 401 | USW00024257,Redding,REDDING MUNI AP,31.9,40.5175,-122.2986,CA,43.1 402 | USS0005J41S,Nederland,Lake Eldora,31.9,39.94,-105.59,CO,28.4 403 | USW00094814,Houghton Lake,HOUGHTON LK ROSCOMMON AP,31.9,44.3592,-84.6739,MI,38.1 404 | USC00259513,Benedict,YORK 3N,31.9,40.9153,-97.5997,NE,39.6 405 | USW00014943,Sioux City,SIOUX CITY GATEWAY AP,31.7,42.3914,-96.3792,IA,33.9 406 | USS0005J42S,Nederland,Niwot,31.7,40.04,-105.54,CO,30.1 407 | USS0007K02S,Meeker,Burro Mountain,31.3,39.88,-107.6,CO,33.7 408 | USS0011H07S,Garden City,Garden City Summit,31.2,41.92,-111.47,UT,31 409 | USS0007M27S,Ironton,Idarado,31.1,37.93,-107.68,CO,34.7 410 | USS0006K01S,Alma,Hoosier Pass,31,39.36,-106.06,CO,35.1 411 | USS0014F12S,Ketchum,Galena Summit,30.9,43.87,-114.71,ID,31.6 412 | USC00148950,Windom,WINDOM 7S,30.8,38.2936,-97.9114,KS,36.8 413 | USW00094911,Yankton,YANKTON 2 E,30.7,42.8783,-97.3633,SD,34.9 414 | USC00344019,Helena,HELENA 1 SSE,30.6,36.5381,-98.2661,OK,40.8 415 | US1KSJW0001,Webber,WEBBER 2.6 ENE,30.5,39.9421,-97.9872,KS,39.3 416 | USW00014944,Sioux Falls,SIOUX FALLS,30.4,43.5878,-96.7289,SD,39.6 417 | USW00013980,Anthony,ANTHONY,30.4,37.155,-98.0283,KS,42.4 418 | USS0007M05S,Durango,Cascade,30.3,37.65,-107.81,CO,39.9 419 | USW00012924,Corpus Christi,CORPUS CHRISTI,30.3,27.7839,-97.5108,TX,25.6 420 | USC00252037,Crofton,CROFTON,30.1,42.7364,-97.4969,NE,33.2 421 | USS0006J15S,Clark,Elk River,30,40.85,-106.97,CO,30.9 422 | USC00253065,Friend,FRIEND 3E,30,40.6558,-97.2208,NE,41.9 423 | USC00417327,Putnam,PUTNAM,29.8,32.3664,-99.1925,TX,31.9 424 | USC00412011,Corpus Christi,CORPUS CHRISTI NWS,29.6,27.7792,-97.5056,TX,24.6 425 | US1MTPK0007,Livingston,LIVINGSTON 6.6 ESE,29.3,45.6357,-110.4331,MT,33.7 426 | USS0005J18S,Allenspark,Copeland Lake,29.2,40.21,-105.57,CO,29.1 427 | USS0006K16S,Alma,Buckskin Joe,28.9,39.3,-106.11,CO,31.9 428 | USC00141179,Burr Oak,BURR OAK 1N,28.9,39.8775,-98.3036,KS,38.8 429 | USC00253175,Geneva,GENEVA,28.7,40.5314,-97.5964,NE,38.9 430 | USC00253660,Hastings,HASTINGS 4N,28.5,40.6472,-98.3836,NE,35.5 431 | USS0006K24S,Frisco,Copper Mountain,28.4,39.49,-106.17,CO,28.9 432 | USW00013966,Sheppard Afb,WICHITA FALLS MUNI AP,28.1,33.9786,-98.4928,TX,27.5 433 | USC00420819,Bountiful,BOUNTIFUL BENCH,28.1,40.8911,-111.8503,UT,32.3 434 | USC00045915,Walnut Creek,MT DIABLO JUNCTION,28.1,37.8792,-121.9303,CA,32.7 435 | USS0006K44S,Avon,Mccoy Park,28,39.6,-106.54,CO,32.3 436 | USS0007K13S,Meeker,Trapper Lake,27.9,40,-107.24,CO,28.7 437 | USS0007M35S,Durango,Cascade #2,27.9,37.66,-107.8,CO,38.1 438 | USW00003957,Medicine Lodge,MEDICINE LODGE,27.8,37.2839,-98.5528,KS,32.5 439 | USC00395481,Menno,MENNO,27.7,43.2358,-97.5714,SD,36.5 440 | USW00094949,Hastings,HASTINGS MUNI AP,27.7,40.6044,-98.4272,NE,35.2 441 | USC00411920,Comfort,COMFORT 2,27.6,29.9614,-98.8944,TX,21.3 442 | US1WASJ0003,Orcas,ORCAS 0.7 NNW,27.3,48.6079,-122.9466,WA,24.2 443 | USW00014935,Grand Island,GRAND ISLAND AP,27.3,40.9611,-98.3136,NE,39.7 444 | USW00012919,Brownsville,BROWNSVILLE,27.2,25.9156,-97.4186,TX,22.9 445 | USS0011R05S,Happy Jack,Happy Jack,27,34.75,-111.41,AZ,33.3 446 | USS0010D07S,Livingston,Northeast Entrance,26.9,45.01,-110.01,MT,28.9 447 | USC00342944,Erick,ERICK,26.9,35.2164,-99.8628,OK,33.4 448 | US1COBO0202,Ward,WARD 4.6 NE,26.8,40.1103,-105.4391,CO,27.2 449 | US1SDMN0001,Fulton,FULTON 9.4 N,26.8,43.8624,-97.7907,SD,42.1 450 | USW00014941,Norfolk,NORFOLK KARL STEFAN AP,26.7,41.9856,-97.4353,NE,27.1 451 | US1TXTY0005,Merkel,MERKEL 5.8 SW,26.6,32.4096,-100.0846,TX,26.8 452 | USC00147542,Smith Center,SMITH CTR,26.6,39.7772,-98.7783,KS,26.3 453 | USC00413508,George West,GEORGE WEST 2 SSW,26.6,28.3064,-98.1222,TX,18.6 454 | USS0005K27S,Idaho Springs,Echo Lake,26.6,39.66,-105.59,CO,24.6 455 | USC00417873,Uvalde,SABINAL,26.6,29.3283,-99.4653,TX,22.8 456 | USW00013962,Abilene,ABILENE RGNL AP,26.2,32.4106,-99.6822,TX,23.2 457 | USC00480140,Alta,ALTA 1 NNW,26.2,43.7728,-111.0339,WY,27.4 458 | USS0003E05S,Lead,North Rapid Creek,26.1,44.21,-103.79,SD,25.3 459 | USS0005J11S,Bellvue,Hourglass Lake,26.1,40.58,-105.63,CO,25.7 460 | USS0006K45S,Avon,Beaver Ck Village,26,39.6,-106.51,CO,29.2 461 | USS0006K12S,Parshall,Middle Fork Camp,25.9,39.8,-106.03,CO,26.4 462 | USS0013D10S,Dillon,Bloody Dick,25.7,45.17,-113.5,MT,20.6 463 | USC00250050,Ainsworth,AINSWORTH,25.5,42.5522,-99.8556,NE,37.3 464 | USC00252560,Arapahoe,EDISON,25.3,40.2764,-99.7836,NE,28.7 465 | USS0008G03S,Lander,South Pass,25.2,42.57,-108.84,WY,23.1 466 | USS0006G01S,Casper,Casper Mtn.,25.1,42.73,-106.32,WY,27 467 | USC00057317,Rye,RYE 1SW,25,37.9136,-104.9483,CO,25 468 | USC00143527,Hays,HAYS 1 S,24.6,38.8586,-99.3358,KS,31 469 | USS0006K30S,Meredith,Kiln,24.3,39.32,-106.61,CO,26.7 470 | US1SDPN0002,Rapid City,RAPID CITY 3.4 WNW,24.3,44.0886,-103.2997,SD,39.1 471 | USS0006H19S,Saratoga,South Brush Creek,24.2,41.33,-106.5,WY,21.5 472 | USS0012P02S,Williams,White Horse Lake,23.9,35.14,-112.15,AZ,30.2 473 | USS0006K14S,Silverthorne,Summit Ranch,23.8,39.72,-106.16,CO,25.5 474 | USW00014936,Huron,HURON RGNL AP,23.8,44.3981,-98.2231,SD,37.4 475 | USS0005N04S,Vadito,Tres Ritos,23.6,36.13,-105.53,NM,23.4 476 | USC00410394,Aspermont,ASPERMONT,23.4,33.1525,-100.2333,TX,29.8 477 | USW00014914,Fargo,FARGO HECTOR INTL AP,23.4,46.9253,-96.8111,ND,31.3 478 | USS0014F19S,Rexburg,Chocolate Gulch,22.9,43.77,-114.42,ID,25.6 479 | USC00056205,Ouray,OURAY #2,22.9,38.0264,-107.6725,CO,24.5 480 | USW00003103,Flagstaff,FLAGSTAFF PULLIAM AP,22.8,35.1442,-111.6664,AZ,26.1 481 | USW00023007,Childress,CHILDRESS MUNI AP,22.7,34.4272,-100.2831,TX,22.4 482 | USC00146637,Quinter,QUINTER,22.7,39.0667,-100.2389,KS,26.7 483 | USW00013985,Dodge City,DODGE CITY,22.6,37.7608,-99.9683,KS,22.9 484 | USC00140365,Ashland,ASHLAND,22.6,37.1942,-99.7633,KS,28.4 485 | USW00024023,North Platte,NORTH PLATTE RGNL AP,22.4,41.1214,-100.6694,NE,28.9 486 | USC00412121,Crosbyton,CROSBYTON,22.4,33.6517,-101.245,TX,20.1 487 | USW00014916,Grand Forks,GRAND FORKS INTL AP,22.2,47.9428,-97.1839,ND,28.1 488 | USC00418818,Tahoka,TAHOKA,22.2,33.1714,-101.7981,TX,18.3 489 | USW00023034,San Angelo,SAN ANGELO,22.1,31.3711,-100.4922,TX,17.7 490 | US1CACC0001,Martinez,MARTINEZ 0.8 SSE,21.7,37.9898,-122.1085,CA,26.3 491 | USW00024020,Hayes Center,HAYES CENTER 1NW,21.7,40.5233,-101.0344,NE,27.8 492 | USC00394516,Kennebec,KENNEBEC,21.7,43.9025,-99.8583,SD,35.8 493 | USC00417944,San Angelo,SAN ANGELO WFO,21.6,31.3708,-100.4944,TX,19.7 494 | USC00415821,Memphis,MEMPHIS,21.4,34.7261,-100.5372,TX,22.5 495 | USC00020678,,BELLEMONT WFO,21.2,35.2303,-111.8222,AZ,24.1 496 | USW00022010,Del Rio,DEL RIO INTL AP,21.1,29.3783,-100.9269,TX,14.8 497 | USW00014929,Aberdeen,ABERDEEN,21,45.4558,-98.4131,SD,30.4 498 | USW00024025,Pierre,PIERRE RGNL AP,21,44.3814,-100.2856,SD,31 499 | USC00397277,Roscoe,ROSCOE,21,45.4528,-99.3358,SD,29.5 500 | US1COBO0072,Boulder,BOULDER 1.3 NW,21,40.0242,-105.2689,CO,20.7 501 | USS0010F17S,Bondurant,East Rim Divide,20.9,43.13,-110.2,WY,21.1 502 | USC00325638,Max,MAX,20.7,47.8214,-101.2922,ND,24.2 503 | USC00254455,Ogallala,KINGSLEY DAM,20.6,41.2097,-101.6706,NE,24.4 504 | USW00024011,Bismarck,BISMARCK,20.5,46.7708,-100.7603,ND,29.6 505 | USS0009S06S,Morenci,Beaver Head,20.5,33.69,-109.22,AZ,25.9 506 | USS0006K06S,Meredith,Nast Lake,20.1,39.3,-106.61,CO,23.7 507 | USS0012P01S,Williams,Chalender,20.1,35.26,-112.06,AZ,29.4 508 | USC00325002,Lansford,LANSFORD,20,48.6272,-101.3764,ND,23.5 509 | USW00026615,Bethel Airport,BETHEL AP,20,60.785,-161.8292,AK,24.2 510 | USW00023047,Amarillo,AMARILLO,19.8,35.2333,-101.7089,TX,25.9 511 | US1COEP0055,Monument,MONUMENT 2.9 N,19.8,39.1125,-104.859,CO,21.8 512 | USC00100803,Bern,BERN,19.7,42.3353,-111.385,ID,22.2 513 | US1MTDL0001,Anaconda,ANACONDA 7.4 NW,19.7,46.1661,-113.0853,MT,18.5 514 | USC00048587,Elk Creek,STONY GORGE RSVR,19.7,39.5861,-122.5342,CA,32 515 | USC00418232,Shallowater,SHALLOWATER,19.4,33.6878,-101.9853,TX,20.6 516 | USC00047851,San Luis Obispo,SAN LUIS OBISPO POLY,19.4,35.3056,-120.6619,CA,29.1 517 | USC00058793,Walsh,WALSH 1 W,19.3,37.3822,-102.2986,CO,20 518 | USS0011P02S,Flagstaff,Fort Valley,19.2,35.27,-111.74,AZ,20 519 | US1TXLK0007,Lubbock,LUBBOCK 6.7 SW,19.1,33.5172,-101.9681,TX,22.8 520 | USW00023065,Goodland,GOODLAND,19,39.3669,-101.7,KS,22.8 521 | USC00417079,Plainview,PLAINVIEW,18.8,34.1892,-101.7022,TX,18.1 522 | USC00148287,Ulysses,ULYSSES 3NE,18.8,37.5983,-101.2908,KS,16.1 523 | USC00417081,Plainview,PLAINVIEW WTR PRODUCTN,18.8,34.1981,-101.7461,TX,16.8 524 | USC00414967,Justiceburg,LAKE ALAN HENRY,18.8,33.0642,-101.0489,TX,21.4 525 | USC00411000,Boys Ranch,BOYS RCH,18.7,35.5303,-102.2564,TX,27.5 526 | USC00053652,Canon City,GUFFEY 9SE,18.7,38.6867,-105.3925,CO,18.8 527 | USW00023232,Sacramento,SACRAMENTO EXECUTIVE AP,18.6,38.5069,-121.495,CA,24.9 528 | USC00142980,Garden City,GARDEN CITY EXP STN,18.5,37.9931,-100.8122,KS,17.5 529 | USW00024225,Central Point,MEDFORD ROGUE VLY AP,18.4,42.3811,-122.8722,OR,20.4 530 | USW00023042,Lubbock,LUBBOCK,18.4,33.6542,-101.8136,TX,24.4 531 | USC00411128,Brownfield,BROWNFIELD #2,18.3,33.1908,-102.2681,TX,17 532 | USC00252645,Ellsworth,ELLSWORTH 2W,18.2,42.0628,-102.3172,NE,19.7 533 | USW00026451,Anchorage,ANCHORAGE INTL AP,18.2,61.1689,-150.0278,AK,14.6 534 | US1COLR0259,Fort Collins,FCL 2.5 W,17.9,40.5857,-105.1317,CO,18.5 535 | USC00413972,Hart,HART,17.9,34.3697,-102.1175,TX,17.6 536 | USC00415183,Levelland,LEVELLAND,17.7,33.55,-102.3758,TX,13.1 537 | USC00291963,Clovis,CLOVIS 13 N,17.7,34.5989,-103.2161,NM,24.8 538 | USC00416074,Morton,MORTON,17.6,33.7186,-102.7586,TX,17.3 539 | USC00244715,Ekalaka,KNOBS 4 SW,17.5,45.8728,-104.1583,MT,21.4 540 | USC00244558,Kalispell,KALISPELL GLACIER AP,17.5,48.3042,-114.2636,MT,16.5 541 | US1WYSH0014,Sheridan,SHERIDAN 1.7 NW,17.5,44.8122,-106.9763,WY,19.6 542 | US1COLR0509,Loveland,LOV 4.0 W,17.2,40.3926,-105.1587,CO,18.2 543 | US1WYLM0036,Cheyenne,CHEYENNE 2.0 E,17.2,41.1449,-104.7547,WY,18.6 544 | US1CASM0006,San Mateo,FOSTER CITY 1.3 SW,17.1,37.5488,-122.2587,CA,20.6 545 | USW00022521,Honolulu,HONOLULU INTL AP,17,21.3239,-157.9294,HI,16.7 546 | USC00481676,Cheyenne,CHEYENNE WFO,16.9,41.1517,-104.8061,WY,18.4 547 | USW00024157,Spokane,SPOKANE INTL AP,16.9,47.6217,-117.5281,WA,15.5 548 | USW00024028,Scottsbluff,SCOTTSBLUFF HEILIG AP,16.8,41.8706,-103.5931,NE,19.6 549 | US1TXMDL006,Midland,MIDLAND 3.0 WSW,16.7,32.0063,-102.1463,TX,17.8 550 | USW00023051,Clayton,CLAYTON MUNI AIR PK,16.7,36.4486,-103.1539,NM,13.5 551 | USC00459376,Winthrop,WINTHROP 1 WSW,16.5,48.4742,-120.1886,WA,12.2 552 | USC00241938,Columbus,COLUMBUS,16.5,45.6444,-109.2675,MT,22.6 553 | USC00058781,Walsenburg,WALSENBURG 1 NW,16.4,37.6303,-104.7956,CO,16.2 554 | USC00418964,Texline,TEXLINE,16.4,36.3786,-103.0244,TX,17.5 555 | USC00054546,Kim,KIM 10SSE,16.3,37.115,-103.2986,CO,16 556 | USW00024029,Sheridan,SHERIDAN CO AP,16.3,44.7694,-106.9689,WY,18.1 557 | USW00024018,Cheyenne,CHEYENNE,16.2,41.1519,-104.8061,WY,18.1 558 | USC00055236,Loveland,LOVELAND 2N,16.2,40.435,-105.085,CO,15.1 559 | USW00024033,Billings,BILLINGS LOGAN INTL AP,16,45.8069,-108.5422,MT,19.1 560 | USW00023254,Concord,CONCORD BUCHANAN FLD,16,37.9917,-122.055,CA,20.2 561 | USW00094055,Baker,BAKER MUNI AP,15.7,46.3583,-104.25,MT,21.4 562 | USW00024127,Salt Lake City,SALT LAKE CITY INTL AP,15.7,40.7781,-111.9694,UT,20.1 563 | USW00093037,Colorado Springs,COLORADO SPRINGS MUNI AP,15.5,38.81,-104.6883,CO,11.8 564 | USW00023062,Denver,DENVER-STAPLETON,15.5,39.7633,-104.8694,CO,12.7 565 | USW00094008,Glasgow,GLASGOW INTL AP,15.5,48.2138,-106.6213,MT,17.8 566 | US1AZCH0017,Sierra Vista,SIERRA VISTA 1.3 E,15.5,31.549,-110.2776,AZ,16.7 567 | US1CASD0012,Poway,POWAY 3.2NE,15.3,32.9956,-117.0044,CA,25.5 568 | USS0009S04S,McNary,Nutrioso,15.3,33.9,-109.16,AZ,16.6 569 | USW00023190,Goleta,SANTA BARBARA MUNI AP,15,34.4258,-119.8425,CA,24.1 570 | USC00040029,Adin,ADIN RS,14.9,41.1936,-120.9447,CA,18.9 571 | US1COLR0662,Loveland,LOVELAND 2.0 SSE,14.8,40.3922,-105.0539,CO,12.7 572 | USC00051743,Collbran,COLLBRAN 1WSW,14.6,39.2367,-107.9797,CO,14.1 573 | USW00003017,Denver,DENVER INTL AP,14.3,39.8328,-104.6575,CO,15.5 574 | USW00024153,Missoula,MISSOULA INTL AP,14.2,46.9208,-114.0925,MT,15.2 575 | US1IDBV0006,Idaho Falls,IDAHO FALLS 11.7 NE,14.2,43.6176,-111.884,ID,14.7 576 | US1UTML0001,Oak City,OAK CITY 0.3 SSE,14.1,39.3723,-112.3339,UT,17.4 577 | USC00044997,Livermore,LIVERMORE,14,37.6922,-121.7692,CA,17.6 578 | USW00023023,Midland,MIDLAND ODESSA,13.8,31.9433,-102.1889,TX,14.3 579 | US1NMGR0027,Cliff,CLIFF 5.7 NE,13.8,33.023,-108.5441,NM,14.5 580 | US1COBO0143,Longmont,LONGMONT 2.1 N,13.7,40.2001,-105.1087,CO,16.4 581 | USW00023237,Stockton,STOCKTON METRO AP,13.5,37.8892,-121.2258,CA,17.1 582 | US1CALA0001,Glendale,GLENDALE 2.4 WSW,13.5,34.1689,-118.2947,CA,25.3 583 | USW00026411,Fairbanks,FAIRBANKS INTL AP,13.4,64.8039,-147.8761,AK,16.4 584 | USW00024149,Lewiston,LEWISTON NEZ PERCE CO AP,13.3,46.3747,-117.0156,ID,13.4 585 | USW00094012,Havre,HAVRE CITY CO AP,13.3,48.5428,-109.7633,MT,12.4 586 | US1CARV0008,Corona,CORONA 12.8 SE,13.2,33.7307,-117.4276,CA,22.5 587 | USW00024089,Casper,CASPER NATRONA CO AP,13.2,42.8975,-106.4636,WY,14.5 588 | US1AZPM0111,Tucson,TUCSON 10.5 ESE,13.2,32.139,-110.7674,AZ,16.6 589 | USC00051294,Canon City,CANON CITY,13.1,38.46,-105.2256,CO,12.7 590 | USW00024155,Pendleton,PENDLETON,13.1,45.6906,-118.8528,OR,12.4 591 | USC00054254,Ignacio,IGNACIO 6ESE,13,37.0856,-107.5333,CO,14.4 592 | USW00093026,McNeal,DOUGLAS BISBEE INL AP,12.8,31.4583,-109.6061,AZ,16.3 593 | USW00023293,San Jose,SAN JOSE,12.7,37.3592,-121.9239,CA,16.1 594 | USC00057033,Rifle,RIFLE 3ENE,12.6,39.5572,-107.7261,CO,14.4 595 | USC00051964,Crestone,CRESTONE 2 SE,12.4,37.9806,-105.6897,CO,12.1 596 | USW00024131,Boise,BOISE AIR TERMINAL,12.3,43.5667,-116.2406,ID,14.6 597 | USW00023233,Salinas,SALINAS MUNICIPAL AP,12.1,36.6636,-121.6081,CA,14.3 598 | USW00093134,Los Angeles,LOS ANGELES DWTN USC CAMPUS,12,34.0511,-118.2353,CA,21.6 599 | USC00422592,Escalante,ESCALANTE,12,37.7686,-111.5978,UT,12.9 600 | USW00024156,Pocatello,POCATELLO RGNL AP,12,42.9203,-112.5711,ID,12.4 601 | USW00023273,Santa Maria,SANTA MARIA PUBLIC AP,11.8,34.8994,-120.4486,CA,17.1 602 | USW00023009,Roswell,ROSWELL IND AIR PK,11.5,33.3075,-104.5083,NM,11.3 603 | USW00023129,Long Beach,LONG BEACH DAUGHERTY FLD,11.4,33.8117,-118.1464,CA,21.5 604 | USW00023160,Tucson,TUCSON INTL AP,11.3,32.1314,-110.9553,AZ,13.6 605 | USW00093058,Pueblo,PUEBLO MEM AP,11.3,38.29,-104.4983,CO,13.1 606 | USC00262570,Elko,ELKO NWS OFFICE,11.2,40.8603,-115.7425,NV,15.8 607 | USW00093209,Paso Robles,PASO ROBLES MUNI AP,11.1,35.6697,-120.6283,CA,17.3 608 | USC00042805,Lake Elsinore,ELSINORE,11,33.6861,-117.3458,CA,19 609 | USC00487105,Casper,PATHFINDER DAM,11,42.4717,-106.8528,WY,13.2 610 | US1NVWH0011,Reno,RENO 2.4 SSW,10.8,39.5084,-119.8442,NV,14.5 611 | USW00094185,Burns,BURNS MUNI AP,10.6,43.595,-118.9564,OR,14.7 612 | US1NVWH0002,Reno,RENO 1.4 NNE,10.6,39.5573,-119.8144,NV,14.4 613 | USW00023174,Los Angeles,LOS ANGELES INTL AP,10.6,33.9381,-118.3889,CA,18.7 614 | USW00024121,Elko,ELKO RGNL AP,10.6,40.8289,-115.7886,NV,14.8 615 | USW00093193,Fresno,FRESNO YOSEMITE INTL AP,10.5,36.78,-119.7194,CA,12.4 616 | USC00487760,Riverton,RIVERTON,10.5,43.0306,-108.3744,WY,11.2 617 | US1NMBR0034,Albuquerque,ALBUQUERQUE 4.6 E,10,35.1278,-106.5437,NM,11.9 618 | USW00003170,Eureka,EUREKA AIRPORT,9.9,39.6014,-116.0056,NV,13.7 619 | USW00023188,San Diego,SAN DIEGO LINDBERGH FLD,9.6,32.7336,-117.1831,CA,15.3 620 | USW00024138,Dillon,DILLON AP,9.6,45.2575,-112.5545,MT,8.8 621 | USC00029464,Wittmann,WITTMANN 1SE,9.6,33.7775,-112.5231,AZ,14.7 622 | US1NMBR0148,Albuquerque,ALBUQUERQUE 1.7 SSE,9.6,35.0944,-106.6123,NM,11 623 | USC00290231,Albuquerque,ALBUQUERQUE VALLEY,9.3,35.0217,-106.6939,NM,8.5 624 | USC00297477,Rio Rancho,RIO RANCHO #1,9.2,35.2836,-106.6194,NM,10.2 625 | USW00023066,Grand Junction,GRAND JUNCTION WALKER FLD,9.2,39.1342,-108.54,CO,8.6 626 | USW00024128,Winnemucca,WINNEMUCCA MUNI AP,9,40.9017,-117.8081,NV,10.2 627 | US1NMDA0116,Las Cruces,MESILLA 2.3 E,9,32.2718,-106.7668,NM,8.4 628 | USC00052184,Monte Vista,DEL NORTE 3ENE,8.8,37.6911,-106.3078,CO,12.2 629 | USW00023044,El Paso,EL PASO INTL AP,8.4,31.8111,-106.3758,TX,8.1 630 | USW00024243,Yakima,YAKIMA AIR TERMINAL,8.3,46.5683,-120.5428,WA,8.6 631 | USC00483396,Kemmerer,FONTENELLE DAM,8.2,41.9861,-110.0611,WY,8.5 632 | USC00483031,Greybull,EMBLEM,8.1,44.4972,-108.3906,WY,11.4 633 | USW00023185,Reno,RENO TAHOE INTL AP,8.1,39.4839,-119.7711,NV,11.2 634 | USW00023050,Albuquerque,ALBUQUERQUE INTL AP,8.1,35.0419,-106.6156,NM,8.8 635 | USC00027187,Eloy,ROBSON RCH,8,32.8117,-111.6314,AZ,11.3 636 | USC00297481,Rio Rancho,RIO RANCHO #2,7.9,35.2522,-106.6347,NM,8.3 637 | USW00023194,Winslow,WINSLOW MUNI AP,7.5,35.0281,-110.7208,AZ,7 638 | USW00023183,Phoenix,PHOENIX SKY HARBOR INTL AP,6.9,33.4278,-112.0039,AZ,5.9 639 | USW00023155,Bakersfield,BAKERSFIELD AP,6,35.4344,-119.0542,CA,9.1 640 | USW00023179,Needles,NEEDLES AP,4.6,34.7675,-114.6189,CA,8.5 641 | USW00023169,Las Vegas,LAS VEGAS MCCARRAN AP,4,36.0719,-115.1633,NV,6.9 -------------------------------------------------------------------------------- /pages/home.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | import dash_chart_editor as dce 4 | import dash_mantine_components as dmc 5 | import openai 6 | import pandas as pd 7 | from dash import Input, Output, State, callback, dcc, html, no_update, register_page 8 | 9 | import utils 10 | 11 | df = pd.read_csv("https://raw.githubusercontent.com/plotly/datasets/master/solar.csv") 12 | 13 | 14 | register_page(__name__, path="/") 15 | 16 | layout = html.Div( 17 | [ 18 | dmc.Paper( 19 | [ 20 | html.Div( 21 | [ 22 | dce.DashChartEditor( 23 | id="chart-editor", 24 | dataSources=df.to_dict("list"), 25 | ), 26 | dmc.Affix( 27 | dmc.Button("Save this chart", id="add-to-layout"), 28 | position={"bottom": 20, "left": 20}, 29 | ), 30 | ], 31 | ), 32 | html.Div( 33 | [ 34 | html.P("Ask about the dataset...", className="lead"), 35 | dmc.Textarea( 36 | placeholder=random.choice( 37 | [ 38 | '"Are there any outliers in this dataset?"', 39 | '"What trends do you see in this dataset?"', 40 | '"Anything stand out about this dataset?"', 41 | '"Do you recommend specific charts given this dataset?"', 42 | '"What columns should I investigate further?"', 43 | ] 44 | ), 45 | autosize=True, 46 | minRows=2, 47 | id="question", 48 | ), 49 | dmc.Group( 50 | [ 51 | dmc.Button( 52 | "Submit", 53 | id="chat-submit", 54 | disabled=True, 55 | ), 56 | ], 57 | position="right", 58 | ), 59 | dmc.LoadingOverlay( 60 | html.Div( 61 | id="chat-output", 62 | ), 63 | ), 64 | ], 65 | id="chat-container", 66 | ), 67 | ], 68 | shadow="xs", 69 | id="flex", 70 | ), 71 | utils.upload_modal(), 72 | html.Div(id="current-charts"), 73 | ], 74 | id="padded", 75 | ) 76 | 77 | 78 | @callback( 79 | Output("chat-output", "children"), 80 | Output("question", "value"), 81 | Input("chat-submit", "n_clicks"), 82 | State("chart-editor", "dataSources"), 83 | State("question", "value"), 84 | State("chat-output", "children"), 85 | prevent_initial_call=True, 86 | ) 87 | def chat_window(n_clicks, data, question, cur): 88 | df = pd.DataFrame(data) 89 | 90 | prompt = utils.generate_prompt(df, question) 91 | 92 | completion = openai.ChatCompletion.create( 93 | model="gpt-3.5-turbo", messages=[{"role": "user", "content": prompt}] 94 | ) 95 | 96 | question = [ 97 | dcc.Markdown( 98 | completion.choices[0].message.content, className="chat-item answer" 99 | ), 100 | dcc.Markdown(question, className="chat-item question"), 101 | ] 102 | 103 | return (question + cur if cur else question), None 104 | 105 | 106 | @callback( 107 | Output("chart-editor", "saveState"), 108 | Input("add-to-layout", "n_clicks"), 109 | prevent_initial_call=True, 110 | ) 111 | def save_figure_to_chart_editor(n): 112 | if n: 113 | return True 114 | 115 | 116 | @callback( 117 | Output("current-charts", "children"), 118 | Input("chart-editor", "figure"), 119 | State("chart-editor", "dataSources"), 120 | State("current-charts", "children"), 121 | prevent_initial_call=True, 122 | ) 123 | def save_figure(figure, data, cur): 124 | # cleaning data output for unnecessary columns 125 | figure = dce.cleanDataFromFigure( 126 | figure, 127 | ) 128 | df = pd.DataFrame(data) 129 | # create Figure object from dash-chart-editor figure 130 | figure = dce.chartToPython(figure, df) 131 | 132 | # Validate there's something to save 133 | if figure.data: 134 | item = [dmc.Paper([dcc.Graph(figure=figure)])] 135 | 136 | header = [ 137 | html.Div( 138 | [ 139 | html.H2("Saved figures"), 140 | dcc.Clipboard( 141 | id="save-clip", 142 | title="Copy link", 143 | style={"margin-left": "10px"}, 144 | ), 145 | ], 146 | style={"display": "flex"}, 147 | ) 148 | ] 149 | return cur + item if cur else header + item 150 | 151 | return no_update 152 | -------------------------------------------------------------------------------- /pages/view.py: -------------------------------------------------------------------------------- 1 | import json 2 | import pickle 3 | 4 | import dash 5 | import dash_bootstrap_components as dbc 6 | import dash_mantine_components as dmc 7 | import openai 8 | from dash import dcc, html 9 | 10 | from constants import redis_instance 11 | 12 | dash.register_page(__name__) 13 | 14 | 15 | def layout(layout=None): 16 | layout = redis_instance.get(layout) 17 | layout = pickle.loads(layout) 18 | 19 | figures = [i["props"]["children"][0]["props"]["figure"] for i in layout[1:]] 20 | 21 | question = ( 22 | "The following is a Plotly Dash layout with several charts. Summarize " 23 | "the charts for me and provide some maximums, mimumuns, trends, " 24 | "notable outliers, etc. Describe the data and content as the user doesn't know it's a layout." 25 | "The data may be truncated to comply with a max character count. " 26 | f"There should be {len(figures)} charts to follow:\n\n\n" 27 | ) 28 | 29 | completion = openai.ChatCompletion.create( 30 | model="gpt-3.5-turbo", 31 | messages=[{"role": "user", "content": question + json.dumps(figures)[0:3900]}], 32 | ) 33 | 34 | response = dcc.Markdown(completion.choices[0].message.content) 35 | 36 | return dmc.LoadingOverlay( 37 | [ 38 | dbc.Button( 39 | children="Home", 40 | href="/", 41 | style={"background-color": "#238BE6", "margin": "10px"}, 42 | ), 43 | html.Div([response, html.Div(layout[1:])], style={"padding": "40px"}), 44 | ] 45 | ) 46 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | dash 2 | dash-mantine-components==0.11.0 3 | dash-bootstrap-components 4 | gunicorn 5 | pandas 6 | dash-chart-editor 7 | openai 8 | dash-ag-grid 9 | redis 10 | -------------------------------------------------------------------------------- /screenshots/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotly/all-in-ai-demo-app/1f1fd60d71a98122665ec354dc1dd7589142b1ee/screenshots/1.png -------------------------------------------------------------------------------- /screenshots/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotly/all-in-ai-demo-app/1f1fd60d71a98122665ec354dc1dd7589142b1ee/screenshots/2.png -------------------------------------------------------------------------------- /screenshots/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotly/all-in-ai-demo-app/1f1fd60d71a98122665ec354dc1dd7589142b1ee/screenshots/3.png -------------------------------------------------------------------------------- /screenshots/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/plotly/all-in-ai-demo-app/1f1fd60d71a98122665ec354dc1dd7589142b1ee/screenshots/4.png -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | import base64 2 | import io 3 | 4 | import dash_ag_grid as dag 5 | import dash_bootstrap_components as dbc 6 | import dash_mantine_components as dmc 7 | import pandas as pd 8 | from dash import Input, Output, State, callback, dcc, html 9 | 10 | 11 | def chat_container(text, type_): 12 | return html.Div(text, id="chat-item", className=type_) 13 | 14 | 15 | def jumbotron(): 16 | return html.Div( 17 | dbc.Container( 18 | [ 19 | html.H2("Data insights with Dash and OpenAI", className="display-4"), 20 | dcc.Markdown( 21 | "This application uses [Dash Chart Editor](https://github.com/BSd3v/dash-chart-editor)" 22 | " as an interface to explore a dataset and OpenAI's API to interact in real-time with " 23 | "a dataset by asking questions about its contents.", 24 | className="lead", 25 | ), 26 | html.Hr(className="my-2"), 27 | html.P( 28 | "Start using the application by interacting with the sample dataset, or upload your own." 29 | ), 30 | html.P( 31 | [ 32 | dbc.Button( 33 | "Learn more", 34 | style={"background-color": "#238BE6"}, 35 | href="https://plotly.com/examples/generative-ai-chatgpt/", 36 | ), 37 | dbc.Button( 38 | "Upload your own CSV", 39 | id="modal-demo-button", 40 | style={ 41 | "background-color": "#238BE6", 42 | "margin-left": "10px", 43 | }, 44 | ), 45 | ], 46 | className="lead", 47 | style={"display": "flex"}, 48 | ), 49 | ], 50 | fluid=True, 51 | className="py-3", 52 | ), 53 | className="p-3 bg-light rounded-3", 54 | ) 55 | 56 | 57 | def upload_modal(): 58 | return html.Div( 59 | [ 60 | dmc.Modal( 61 | title="Upload Modal", 62 | id="upload-modal", 63 | size="lg", 64 | zIndex=10000, 65 | children=[ 66 | dcc.Upload( 67 | id="upload-data", 68 | children=html.Div( 69 | ["Drag and Drop or ", html.A("Select Files")] 70 | ), 71 | style={ 72 | "width": "100%", 73 | "height": "60px", 74 | "lineHeight": "60px", 75 | "borderWidth": "1px", 76 | "borderStyle": "dashed", 77 | "borderRadius": "5px", 78 | "textAlign": "center", 79 | "margin": "10px", 80 | "font-family": "-apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica, Arial," 81 | " sans-serif, Apple Color Emoji, Segoe UI Emoji", 82 | }, 83 | # Allow multiple files to be uploaded 84 | multiple=False, 85 | ), 86 | dmc.Space(h=20), 87 | html.Div(id="summary"), 88 | dmc.Group( 89 | [ 90 | dmc.Button( 91 | "Close", 92 | color="red", 93 | variant="outline", 94 | id="modal-close-button", 95 | ), 96 | ], 97 | position="right", 98 | ), 99 | ], 100 | ), 101 | ] 102 | ) 103 | 104 | 105 | def generate_prompt(df, question): 106 | # Generate insights 107 | insights = [] 108 | 109 | # Basic DataFrame Information 110 | insights.append( 111 | f"The DataFrame contains {len(df)} rows and {len(df.columns)} columns." 112 | ) 113 | insights.append("Here are the first 5 rows of the DataFrame:\n") 114 | insights.append(df.head().to_string(index=False)) 115 | 116 | # Summary Statistics 117 | insights.append("\nSummary Statistics:") 118 | insights.append(df.describe().to_string()) 119 | 120 | # Column Information 121 | insights.append("\nColumn Information:") 122 | for col in df.columns: 123 | insights.append(f"- Column '{col}' has {df[col].nunique()} unique values.") 124 | 125 | # Missing Values 126 | missing_values = df.isnull().sum() 127 | insights.append("\nMissing Values:") 128 | for col, count in missing_values.items(): 129 | if count > 0: 130 | insights.append(f"- Column '{col}' has {count} missing values.") 131 | 132 | # Most Common Values in Categorical Columns 133 | categorical_columns = df.select_dtypes(include=["object"]).columns 134 | for col in categorical_columns: 135 | top_value = df[col].mode().iloc[0] 136 | insights.append(f"\nMost common value in '{col}' column: {top_value}") 137 | 138 | insights_text = "\n".join(insights) 139 | 140 | # Compliment and Prompt 141 | prompt = ( 142 | "You are a data analyst and chart design expert helping users build charts and answer " 143 | "questions about arbitrary datasets. The user's question will be provided. Ensure you " 144 | "answer the user's question accurately and given the context of the dataset. The user " 145 | "will use the results of your commentary to work on a chart or to research the data " 146 | "using Dash Chart Editor, a product built by Plotly. If the user's question doesn't " 147 | " make sense, feel free to make a witty remark about Plotly and Dash. Your response " 148 | "should use Markdown markup. Limit your response to only 1-3 sentences. Address the " 149 | "user directly as they can see your response." 150 | ) 151 | 152 | prompt = f"{prompt}\n\nContext:\n\n{insights_text}\n\nUser's Question: {question}" 153 | 154 | return prompt 155 | 156 | 157 | @callback( 158 | Output("chart-editor", "dataSources"), 159 | Output("summary", "children"), 160 | Input("upload-data", "contents"), 161 | State("upload-data", "filename"), 162 | prevent_initial_call=True, 163 | ) 164 | def update_output(contents, filename): 165 | content_type, content_string = contents.split(",") 166 | decoded = base64.b64decode(content_string) 167 | df = pd.read_csv(io.StringIO(decoded.decode("utf-8"))) 168 | 169 | preview = html.Div( 170 | [ 171 | html.H5(filename), 172 | dag.AgGrid( 173 | rowData=df.to_dict("records"), 174 | columnDefs=[{"field": i} for i in df.columns], 175 | defaultColDef={"sortable": True, "resizable": True, "editable": True}, 176 | ), 177 | ] 178 | ) 179 | 180 | return df.to_dict("list"), preview 181 | 182 | 183 | @callback( 184 | Output("upload-modal", "opened"), 185 | Input("modal-demo-button", "n_clicks"), 186 | Input("modal-close-button", "n_clicks"), 187 | State("upload-modal", "opened"), 188 | prevent_initial_call=True, 189 | ) 190 | def modal_demo(nc1, nc2, opened): 191 | return not opened 192 | 193 | 194 | @callback(Output("chat-submit", "disabled"), Input("question", "value")) 195 | def disable_submit(question): 196 | return not bool(question) 197 | --------------------------------------------------------------------------------