Как сделать прогноз погоды в питоне

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Недавно я работал над проектом машинного обучения, который требовалисторические данные прогноза погоды из нескольких городов, Несмотря на интенсивные исследования, мне было трудно найти хороший источник данных. Большинство веб-сайтов ограничивают доступ к историческим данным только за последние две недели. Если вам нужно больше, вам нужно заплатить. В моем случае мне потребовались данные за пять лет - почасовой исторический прогноз, который может быть дорогостоящим.

1. Бесплатно - по крайней мере, в течение пробного периода

Нет необходимости предоставлять информацию о кредитной карте.

2. Гибкий

гибкий, чтобы изменить интервал прогноза, периоды времени, места.

3. Воспроизводимый

Легко воспроизводить и внедрять на этапе производства.

В конце концов, я решил использовать данные изМировая Погода Онлайн, Мне потребовалось менее двух минут, чтобы подписаться на бесплатную пробную премиум-версию API - без заполнения информации о кредитной карте. (500 бесплатных запросов / ключ / день в течение 60 дней, по состоянию на 30 мая-2019).


Вы можете попробовать запросы в формате JSON или XMLВот, Результатом является вложенный JSON, который требует небольшой предварительной обработки перед подачей в модели ML. Поэтому я написал несколькоскриптыразобрать их в панды DataFrames и сохранить их как CSV для дальнейшего использования.

этопакет wwo -istиспользуется для извлечения и анализа исторических данных о погоде изМировая Погода Онлайнв панды DataFrame и CSV-файл.

Выход:location_name.csv

Имена выходных столбцов:date_time, maxtempC, mintempC, totalSnow_cm, sunHour, uvIndex, uvIndex, moon_illumination, восход луны, заход луны, восход, закат, DewPointC, FeelsLikeC, HeatIndexC, WindChillC, WindGustKmph, облачное покрытие, влажность, влажность воздуха, давление, температура, видение

Установите пакет:

WWO-истор

Импортная упаковка:

Установите рабочий каталог для хранения выходных файлов CSV:

Пример кода:

Укажите входные параметры и вызовretrieve_hist_data (),Пожалуйста, посетитемой репозиторий githubДля получения дополнительной информации о настройке параметров.

Это будет восстановить3-часовой интервалисторические данные прогноза погоды дляСингапура такжеКалифорнияот11-Dec-2018в11-Mar-2019, сохраните вывод в переменную hist_weather_data иCSVфайлы.




Вот оно! Подробный сценарий такжезадокументировано на GitHub,

Спасибо за чтение. Пожалуйста, попробуйте, и дайте мне знать ваши отзывы!

Подумайте о том, чтобы следовать за мнойGitHub,средний, а такжещебетчтобы получить больше статей и учебных пособий на ваш канал. Если вам нравится то, что я сделал, не нажимайте кнопку хлопка только один раз. Ударь 50 раз: D

Python предлагает несколько вариантов разработки графического интерфейса пользователя. Из всех методов графического интерфейса tkinter является наиболее часто используемым методом. Это стандартный интерфейс Python для инструментария Tk GUI, поставляемый с Python. Python с tkinter выводит самый быстрый и простой способ создания приложений с графическим интерфейсом. Теперь дело за фантазией или необходимостью разработчика, что он / она хочет разработать с помощью этого инструментария.

Чтобы создать ткинтер:

  • Импорт модуля — ткинтер
  • Создать главное окно (контейнер)
  • Добавьте любое количество виджетов в главное окно.
  • Примените триггер события к виджетам.

Давайте создадим простое приложение для определения погоды в реальном времени на основе графического интерфейса, которое может предоставлять информацию о погоде в любых городах.

Требуются модули:

Ниже приведена реализация:

from tkinter import * from tkinter import messagebox

import requests, json

complete_url = base_url + "appid keyword">+ api_key

+ "&q keyword">+ city_name

if x[ "cod" ] ! = "404" :

current_temperature = y[ "temp" ]

current_pressure = y[ "pressure" ]

current_humidiy = y[ "humidity" ]

weather_description = z[ 0 ][ "description" ]

temp_field.insert( 15 , str (current_temperature) + " Kelvin" )

atm_field.insert( 10 , str (current_pressure) + " hPa" )

humid_field.insert( 15 , str (current_humidiy) + " %" )

desc_field.insert( 10 , str (weather_description) )

messagebox.showerror( "Error" , "City Not Found \n"

"Please enter valid city name" )

city_field.delete( 0 , END)

city_field.delete( 0 , END)

temp_field.delete( 0 , END)

atm_field.delete( 0 , END)

humid_field.delete( 0 , END)

desc_field.delete( 0 , END)

if __name__ = = "__main__" :

root.title( "Gui Application" )

root.configure(background = "light green" )

headlabel = Label(root, text = "Weather Gui Application" ,

fg = 'black' , bg = 'red' )

label1 = Label(root, text = "City name : " ,

fg = 'black' , bg = 'dark green' )

label2 = Label(root, text = "Temperature :" ,

fg = 'black' , bg = 'dark green' )

label3 = Label(root, text = "atm pressure :" ,

fg = 'black' , bg = 'dark green' )

label4 = Label(root, text = "humidity :" ,

fg = 'black' , bg = 'dark green' )

label5 = Label(root, text = "description :" ,

fg = 'black' , bg = 'dark green' )

headlabel.grid(row = 0 , column = 1 )

label1.grid(row = 1 , column = 0 , sticky = "E" )

label2.grid(row = 3 , column = 0 , sticky = "E" )

label3.grid(row = 4 , column = 0 , sticky = "E" )

label4.grid(row = 5 , column = 0 , sticky = "E" )

label5.grid(row = 6 , column = 0 , sticky = "E" )

Если вы хотите создать команду weather с помощью discord.py и получить отличное дополнение к своему боту, я вас прикрыл, ниже я ответил, как создать команду weather в Discord. ру.

1 ответ

Мы создадим команду, которая будет работать так:

example

Сначала мы будем использовать API openweahtermap, для которого требуется ключ API, вы можете получить его бесплатно просто войдя на свой веб-сайт.

Как только вы получите ключ API, все готово.

Вторым шагом будет начало кодирования. Мы импортируем 2 модуля, кроме discord.py, а именно requests и json . Мы можем просто импортировать их -

После импорта мы можем определить следующие вещи, чтобы их было легче использовать.

Следующим шагом будет создание команды, которая принимает city в качестве аргумента.

После этого мы можем получить ответ веб-сайта с помощью requests , а затем прочитать ответ с помощью json . МЫ также определяем канал, в котором используется команда.

Теперь мы получаем информацию о погоде.

Теперь, когда у нас есть информация, мы помещаем ее в discord.Embed вот так:

Построив закладную, мы ее отправляем.

Мы также используем оператор else , который сообщает, что город не найден, если API не может получить информацию о погоде в указанном городе.

На этом вы успешно выполнили команду weather !

Если у вас возникнут какие-либо ошибки или возникнут сомнения, обязательно прокомментируйте их ниже. Я постараюсь помочь, чем смогу.

Звучит интригующе? Продолжай чтение, мой юный падаван.

Я пропущу подпрограмму GeoLookupXML и позволю вам разобраться с ней самостоятельно. Мы сфокусируемся на двух других командах: на WXCurrentObXML (текущие погодные условия) в этот раз и ForecastXML (прогноз) – в другой.

Замените ZIP-код США 80013 на ваш почтовый индекс или, если вы за пределами США, попробуйте город, страну – например, Chelyabinsk, Russia или London, England.

Как и в предыдущем случае, 80013 можно заменить на почтовый индекс или город, страну.

Итак, начнём с текущих погодных условий. Вставьте адрес в браузер, вы увидите значительный объём информации. Что из этой информации для вас важно, решайте сами, но мы рассмотрим несколько элементов.

Например, мы уделим внимание следующим тэгам:

Конечно, вы можете добавить другие тэги, которые вам интересны. Однако, выбранные нами тэги достаточный пример для того, чтобы вы могли двигаться дальше сами.

Выяснив, что мы ищем, давайте приступим к составлению программы. Рассмотрим в общих чертах алгоритм работы программы.

Первым делом проверим, что запросил пользователь. Если он указал местность, мы будем использовать её, в противном случае — местность, установленную по умолчанию. Затем мы передаём управление подпрограмме getCurrents. Местность используется для построения строки запроса и отправки её в сеть. Ответ из сети мы получаем с помощью urllib.urlopen, помещаем его в объект и передаём его в функцию анализа из библиотеки ElementTree. Затем мы закрываем соединение и приступаем к поиску нужных тэгов. Найдя интересующий нас тэг, мы сохраняем его текст в переменную, которую можно использовать для последующего вывода данных. Получив все сведения, мы отображаем их. Довольно простая концепция.

Назовём файл с кодом w_currents.py. Здесь часть кода с импортируемыми библиотеками:

Затем добавим строки помощи над импортированием (вверху справа).

Удостоверьтесь, что используете три двойные кавычки. Это позволит делать комментарии из нескольких строк. Мы обсудим эту часть немного подробнее.

Теперь мы создадим класс (внизу справа) и основную часть программы (на следующей странице).

Внимательный читатель заметит, что параметры -z и -l проверяются практически одинаково. Параметр -l можно дополнительно проверить на наличие пробелов и переформатировать строку перед тем, как передавать её в функцию. Это вы уже можете сделать сами.

Всё очень просто. Мы передаём местоположение и уровень отладки методу getCurrents, после чего вызываем метод output. Вывод данных можно было организовать и внутри метода getCurrents, но так мы добиваемся гибкости, чтобы выводить данные любым нужным нам способом.

Код метода getCurrents приведён на странице коды.

У метода есть параметр debuglevel. Если программа будет работать не так, как нам нужно, он поможет получить полезную информацию. Также он полезен, когда мы только начинаем писать код. Если вы будете довольны работой программы, то любой код, связанный с debuglevel, можно убрать. Если код программы будет опубликован, например, если программа пишется для кого-то другого, то этот код следует удалить и, прежде чем выпускать программу, её нужно протестировать ещё раз.

Если всё отработало как надо, код переходит к поиску тэгов. Во-первых, нужно найти тэг location при помощи команды tree.findall. Помните, что tree — это объект, возвращаемый elementree после синтаксического разбора. Часть того, что возвращает API веб-сайта, показана ниже.

Наконец, разберёмся с методом output, код которого приведён в странице коды.

Мы просто выводим значения переменных при помощи print.

Вот и всё. Пример вывода программы с моим почтовым индексом и со значением debuglevel равным 1 приведён в левой нижней части следующей страницы.

Заметьте, что я решил использовать тэг, который содержит температуру по шкале Фаренгейта и по шкале Цельсия. Если вы хотите выводить, например, только шкалу Цельсия, используйте тэг вместо тэга .

Читайте также: