Python 为天气预报建立实时数据管道

Python 为天气预报建立实时数据管道,python,machine-learning,apache-kafka,bigdata,Python,Machine Learning,Apache Kafka,Bigdata,我得到了一个小项目,作为大数据世界的开端,我想知道构建实时数据管道需要使用什么方法或工具 以下是作业: «作为芝加哥市民,我想知道未来的天气如何 在接下来的24小时内,每15分钟预测一次。我们想 评估创建数据管道的方式,包括监视和故障 公差,可以插入管道进行基本的机器学习 算法。您可以在上找到历史数据集 现场直播 所有其他相关数据集 欢迎光临。» 我试图在Google Colab笔记本上使用简单的Python进行数据提取和转换来解决这个难题,但我觉得这不是正确的方法,也不是好的工具 以下是我第一

我得到了一个小项目,作为大数据世界的开端,我想知道构建实时数据管道需要使用什么方法或工具

以下是作业:

«作为芝加哥市民,我想知道未来的天气如何 在接下来的24小时内,每15分钟预测一次。我们想 评估创建数据管道的方式,包括监视和故障 公差,可以插入管道进行基本的机器学习 算法。您可以在上找到历史数据集 现场直播 所有其他相关数据集 欢迎光临。»

我试图在Google Colab笔记本上使用简单的Python进行数据提取和转换来解决这个难题,但我觉得这不是正确的方法,也不是好的工具

以下是我第一次尝试提取历史天气数据的内容:

years = ['2018', '2017', '2016']
format_ ="txt"
months = ['01', '02', '03', '04', '05', '06', '07', '08', '09', '10', '11', '12']
start_day = '01'
end_day = '30'
for year in years:
  for month in months:
    query_url = "http://www.ogimet.com/display_metars2.php?lang=en&lugar=WSAP&tipo=SA&ord=REV&nil=SI&fmt={4}&ano={0}&mes={1}&day={2}&hora=00&anof={0}&mesf={1}&dayf={3}&horaf=00&minf=59&send=send".format(year, month, start_day, end_day, format_ )
    requests.get(query_url)
    filename = "chicago{0}{1}".format(year, month)
    r = requests.get(query_url)
    end = r.text.find('</pre>')
    with open(filename, 'w') as file: 
      file.write(r.text[1670:end])
    print(r.text)
我的问题是:我如何应对这个挑战/问题?遵循什么方法或使用什么工具?是否可以只使用Python并每天在虚拟机上运行最终脚本来完成这些预测


谢谢大家!

虽然你的问题很宽泛,但我会尽我所能回答。既然您询问的是一种方法,我就不必担心您发布的关于如何处理数据的代码,而是担心它可以运行什么

“作为芝加哥市民,我想知道未来24小时的天气情况,每15分钟预测一次。”

在我看来,这似乎是一个问题,您希望查看以前的/历史数据,并根据刚才看到的内容立即调整您的模型。这是RNN(递归神经网络)的完美选择。RNN处理刚接收到的新数据,并根据最近的数据调整具有更高重要性的模型。这些数据通常用于时间序列数据,例如股票市场预测(您的数据也是时间序列数据,因此它应该是一个完美的解决方案)

如果您希望尝试另一种方法,可以通过概率方法(如朴素贝叶斯)来实现。朴素贝叶斯的一个例子如下:你被告知天气多风多云,然后根据之前类似事件的数据,你确定有60%的几率下雨,20%的几率下雪,10%的几率下冰雹,还有10%的几率晒太阳。对于您的问题,这可能不是很有用,因为每次处理数据都需要大量的时间,而且非常具体。对于每一行(某些日期/时间),您必须为每种天气类型设置一列,然后使用二进制文件对它们进行检查和标记,如果天气类型发生,则为1,如果没有发生,则为0

最后,您可以尝试使用基本的NN(神经网络),但我的建议是只使用RNN

总的来说,您最好的选择是使用RNN,因为它是时间序列数据。所有这些代码都可以使用keras库用python编写(它包括示例/示例数据集,这样您就可以看到它是如何工作的)。是的,我建议您使用虚拟机来运行代码,因为在大型数据集上运行RNN可能需要很长时间


让我知道这是否有帮助

虽然你的问题很宽泛,但我会尽我所能回答。既然您询问的是一种方法,我就不必担心您发布的关于如何处理数据的代码,而是担心它可以运行什么

“作为芝加哥市民,我想知道未来24小时的天气情况,每15分钟预测一次。”

在我看来,这似乎是一个问题,您希望查看以前的/历史数据,并根据刚才看到的内容立即调整您的模型。这是RNN(递归神经网络)的完美选择。RNN处理刚接收到的新数据,并根据最近的数据调整具有更高重要性的模型。这些数据通常用于时间序列数据,例如股票市场预测(您的数据也是时间序列数据,因此它应该是一个完美的解决方案)

如果您希望尝试另一种方法,可以通过概率方法(如朴素贝叶斯)来实现。朴素贝叶斯的一个例子如下:你被告知天气多风多云,然后根据之前类似事件的数据,你确定有60%的几率下雨,20%的几率下雪,10%的几率下冰雹,还有10%的几率晒太阳。对于您的问题,这可能不是很有用,因为每次处理数据都需要大量的时间,而且非常具体。对于每一行(某些日期/时间),您必须为每种天气类型设置一列,然后使用二进制文件对它们进行检查和标记,如果天气类型发生,则为1,如果没有发生,则为0

最后,您可以尝试使用基本的NN(神经网络),但我的建议是只使用RNN

总的来说,您最好的选择是使用RNN,因为它是时间序列数据。所有这些代码都可以使用keras库用python编写(它包括示例/示例数据集,这样您就可以看到它是如何工作的)。是的,我建议您使用虚拟机来运行代码,因为在大型数据集上运行RNN可能需要很长时间


让我知道这是否有帮助

非常感谢你的努力和时间。是的,你的回答很有帮助。然而,这是项目的第一部分,我相信这是最重要的。这是数据采集部分,设置了一条几乎实时的数据管道,为我们的模型提供数据。我同意。通常情况下,实现AI/ML方法可能是最容易的部分之一。数据处理是非常耗时和必要的部分,因为如果数据格式不正确、不有序等,就无法对其执行任何操作。非常感谢您的努力和时间。是的,你的回答很有帮助。然而,这是第一部分
from wwo_hist import retrieve_hist_data

# export_csv: bool, default = True
# If False, no csv file will be exported to current directory.
# store_df: bool, default = False
# If True, retrieved dataframe(s) will be stored as list in the work space.

def get_hist_data(api_key,location,start_date,end_date,frequency):
  """
    api_key: string
  (Premium/ free trial) API key from worldweatheronline.com

  location_list: list of string
  US Zipcode, UK Postcode, Canada Postalcode, IP address, Latitude/Longitude (decimal degree) or city name

  start_date: string
  Preferred date format: 'dd-mmm-yyyy'

  end_date: string
  Preferred date format: 'dd-mmm-yyyy'

  frequency: integer
  1, 3, 6, 12, 24
  1 hourly, 3 hourly, 6 hourly, 12 hourly (day/night) or 24 hourly (day average)

  location_label: bool, default = False
  If True, all column names will have city name as prefix.

  export_csv: bool, default = True
  If False, no csv file will be exported to current directory.

  store_df: bool, default = False
  If True, retrieved dataframe(s) will be stored as list in the work space.

  """
  hist_weather_data = retrieve_hist_data(api_key,
                                location,
                                start_date,
                                end_date,
                                frequency,
                                location_label = False,
                                export_csv = True,
                                store_df = True)
  return "Done"