ITPub博客

首页 > 应用开发 > Python > Python 分析天气,告诉你中秋国庆应该去哪里

Python 分析天气,告诉你中秋国庆应该去哪里

原创 Python 作者:juyxii 时间:2020-09-12 10:15:43 0 删除 编辑

  国庆中秋小长假又要大到了,不知道各位小伙伴儿有没有想好去哪里玩呢。不过说实在的,每到节假日,到处都是人山人海,那句“我动也不能动”,还不时的出现在我的耳畔呢。

  但是又说回来,假期出游,除了人的因素外,天气的因素是不是也要考虑下呢,今天,我们就带大家来看看,中秋小长假,哪些地方适宜出游。

  获取数据

  数据的获取,就从中国天气网站上直接抓取,网络上的一些 API,有的信息不是很全,只能获取最近3天的数据,有的又需要付费,还不如自己抓来的痛快。

  http://www.weather.com.cn/weather15d/10124020102A.shtml

  网站也没有做什么限制,我们抓数据的时候,只需要控制好访问频率,不要影响人家的正常运行就可以。

  同时还需要准备四个数据文件

  省会城市列表,provincial_capital

  全国城市 id 信息表,china-city-list.csv

  著名景点名称列表,attractions

  全国景点 id 信息表,china-scenic-list.txt

  抓取的过程不再详细说明了,直接给出完整代码

  # coding = utf-8

  """

  @author: zhou

  @time:2019/9/5 14:36

  @File: main.py

  """

  import requests

  from bs4 import BeautifulSoup

  import time

  import os

  def get_data(name, city, code):

  print("正在下载城市%s的数据" % city)

  url = 'http://www.weather.com.cn/weather15d/%s.shtml' % code[2:]

  res = requests.get(url).content.decode()

  content = BeautifulSoup(res, "html.parser")

  weather_list = content.find('ul', attrs={'class': 't clearfix'}).find_all('li')

  items = map(parse_item, weather_list)

  save_to_csv(name, city, items)

  time.sleep(1)

  def parse_item(item):

  time = item.find('span', attrs={'class': 'time'}).text

  wea = item.find('span', attrs={'class': 'wea'}).text

  tem = item.find('span', attrs={'class': 'tem'}).text

  wind = item.find('span', attrs={'class': 'wind'}).text

  wind_level = item.find('span', attrs={'class': 'wind1'}).text

  result = {

  "time": time,

  "wea": wea,

  "tem": tem,

  "wind": wind,

  "wind_level": wind_level

  }

  return result

  def save_to_csv(name, city, data):

  if not os.path.exists('%s_data.csv' % name):

  with open('%s_data.csv' % name, 'a+', encoding='utf-8') as f:

  f.write('city,time,wea,tem,wind,wind_level\n')

  for d in data:

  try:

  row = '{},{},{},{},{},{}'.format(city,

  d['time'],

  d['wea'],

  d['tem'],

  d['wind'],

  d['wind_level'])

  f.write(row)

  f.write('\n')

  except:

  continue

  else:

  with open('%s_data.csv' % name, 'a+', encoding='utf-8') as f:

  for d in data:

  try:

  row = '{},{},{},{},{},{}'.format(city,

  d['time'],

  d['wea'],

  d['tem'],

  d['wind'],

  d['wind_level'])

  f.write(row)

  f.write('\n')

  except:

  continue

  if __name__ == '__main__':

  import pandas as pd

  provincial = pd.read_csv('provincial_capital')

  china_city_code = pd.read_csv('china-city-list.csv')

  china_scenic_code = pd.read_csv('china-scenic-list.txt', sep='\t')

  china_scenic_code.columns = ['ID', 'name', 'area', 'provincial']

  attraction = pd.read_csv('attractions')

  provincial_data = pd.DataFrame()

  attraction_data = pd.DataFrame()

  # 省会抓取

  for i in provincial['city'].values.tolist():

  for j in china_city_code['City_CN'].values.tolist():

  if j == i:

  provincial_data = pd.concat([china_city_code[china_city_code['City_CN'] == j], provincial_data])

  for city in provincial_data['City_CN'].values.tolist():

  city_id = provincial_data[provincial_data['City_CN'] == city]['City_ID'].values.tolist()[0]

  get_data('weather', city, city_id)

  # 景点抓取

  for a in attraction['attractions'].values.tolist():

  for c in china_scenic_code['name'].values.tolist():

  if c == a:

  attraction_data = pd.concat([china_scenic_code[china_scenic_code['name'] == c], attraction_data])

  for attrac in attraction_data['name'].values.tolist():

  city_id = attraction_data[attraction_data['name'] == attrac]['ID'].values.tolist()[0]

  get_data('attraction', attrac, city_id)

  省会天气分析

  我们首先来看看省会天气,毕竟省会城市是每个省份的中心,也是旅游的重点城市。

  降水和温度

  对于降水的概率,我采取的是如果预报是有雨,则设置降水概率为80,如果是预报是晴,则降水概率为20.

  weather_dict = {

  "snow": 100,

  "rain": 80,

  "cloud": 50,

  "overcast": 60,

  "sun": 20

  }

  在 国庆中秋这几天,各个省会城市的降水和温度

  Python 分析天气,告诉你 国庆中秋应该去哪里

  能够看出,大部分城市在这一天都是天公不作美的,降水的概率都非常的大。而温度的话,大概率降水的城市,温度都不是很高,早晚出行,可能还会很凉哦。温度最高的应该就是南昌了,还能达到30°C,一个艳阳高照的日子,是不是去看看革命圣地?

  接下来我们再通过一个双轴图来更加直观的查看下降水和温度的情况

  Python 分析天气,告诉你中秋应该去哪里

  看来在进入9月之后,全国普遍的温度都在慢慢回落了,温度适宜出行,但是就是会伴随着绵绵的细雨呀。

  再来看下几大城市在中秋前后一周的天气情况

  北京

  Python 分析天气,告诉你中秋应该去哪里

  北京的气温还是比较平稳的,没有太大的波动,可能早晚一件薄外套就能hold的住,不过这几天,应该都会是阴蒙蒙的,不会有太好的阳光。

  上海

  Python 分析天气,告诉你中秋应该去哪里

  上海的降水概率要比北京大一些,不过温度倒是相差不多。

  杭州

  Python 分析天气,告诉你中秋应该去哪里

  杭州的平均温度还是要高一些,降水的概率也较高,毕竟典型的东南沿海城市嘛,雨天的西湖,你期待不?

  成都

  Python 分析天气,告诉你中秋应该去哪里

  成都基本天天下雨了,那还出门看大熊猫嘛,这是个问题啊!

  著名景区天气

  下面我们再来看看一些著名景区的天气情况,我大好河山,景区太多了,只能简单列举一些最著名的地方来看看了。

  降水情况

  Python 分析天气,告诉你中秋应该去哪里

  在我选取的这些景区当中,大部分都是会有降水的,不过也会有阳光明媚的地方。

  比如说黄山和八达岭长城,预计会是晴天,去爬爬长城和黄山,是不错的选择。

  而美丽的九寨沟和西湖等,虽说会下雨,但是在雨天漫步,也不失为一种情趣吧。

  降水和温度

  我们再来看看各地的温度情况

  Python 分析天气,告诉你中秋应该去哪里

  不知道为啥承德的温度会那么低,感觉去避暑已经不太合适了,而长白山已经只有7°C了,慌不慌?

  降水与温度分布

  降水

  Python 分析天气,告诉你中秋应该去哪里

  进入9月,东南沿海降水明显增多,京津地区也是阴雨连绵,这是一场秋雨一场寒的节奏吗!

  温度

  Python 分析天气,告诉你中秋应该去哪里

  东南半壁,温度还是比较适宜的,现在的天气下,不冷不热,正是出游好温度。

  好了,今天的分析就到这里了,祝大家有个愉快的小长假!!!

  源码地址

  https://github.com/zhouwei713/data_analysis/tree/master/weather


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69934488/viewspace-2718994/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-08-28

  • 博文量
    11
  • 访问量
    9810