中秋佳節(jié)以到,不知道各位小伙伴兒有沒有想好去哪里玩呢。不過說實在的,每到節(jié)假日,到處都是人山人海,那句“我動也不能動”,還不時的出現(xiàn)在我的耳畔呢。
但是又說回來,假期出游,除了人的因素外,天氣的因素是不是也要考慮下呢,今天,我們就帶大家來看看,中秋小長假,哪些地方適宜出游。
獲取數(shù)據(jù)
數(shù)據(jù)的獲取,就從中國天氣網(wǎng)站上直接抓取,網(wǎng)絡(luò)上的一些 API,有的信息不是很全,只能獲取最近3天的數(shù)據(jù),有的又需要付費,還不如自己抓來的痛快。
http://www.weather.com.cn/weather15d/10124020102A.shtml
網(wǎng)站也沒有做什么限制,我們抓數(shù)據(jù)的時候,只需要控制好訪問頻率,不要影響人家的正常運行就可以。
同時還需要準備四個數(shù)據(jù)文件
- 省會城市列表,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的數(shù)據(jù)" % 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)
省會天氣分析
我們首先來看看省會天氣,畢竟省會城市是每個省份的中心,也是旅游的重點城市。
降水和溫度
對于降水的概率,我采取的是如果預(yù)報是有雨,則設(shè)置降水概率為80,如果是預(yù)報是晴,則降水概率為20.
weather_dict = {
"snow": 100,
"rain": 80,
"cloud": 50,
"overcast": 60,
"sun": 20
}
在中秋節(jié)這一天,各個省會城市的降水和溫度
能夠看出,大部分城市在這一天都是天公不作美的,降水的概率都非常的大。而溫度的話,大概率降水的城市,溫度都不是很高,早晚出行,可能還會很涼哦。溫度最高的應(yīng)該就是南昌了,還能達到30°C,一個艷陽高照的日子,是不是去看看革命圣地?
接下來我們再通過一個雙軸圖來更加直觀的查看下降水和溫度的情況
看來在進入9月之后,全國普遍的溫度都在慢慢回落了,溫度適宜出行,但是就是會伴隨著綿綿的細雨呀。
再來看下幾大城市在中秋前后一周的天氣情況
北京
北京的氣溫還是比較平穩(wěn)的,沒有太大的波動,可能早晚一件薄外套就能hold的住,不過這幾天,應(yīng)該都會是陰蒙蒙的,不會有太好的陽光。
上海
上海的降水概率要比北京大一些,不過溫度倒是相差不多。
杭州
杭州的平均溫度還是要高一些,降水的概率也較高,畢竟典型的東南沿海城市嘛,雨天的西湖,你期待不?
成都
成都基本天天下雨了,那還出門看大熊貓嘛,這是個問題啊!
著名景區(qū)天氣
下面我們再來看看一些著名景區(qū)的天氣情況,我大好河山,景區(qū)太多了,只能簡單列舉一些最著名的地方來看看了。
降水情況
在我選取的這些景區(qū)當中,大部分都是會有降水的,不過也會有陽光明媚的地方。
比如說黃山和八達嶺長城,預(yù)計會是晴天,去爬爬長城和黃山,是不錯的選擇。
而美麗的九寨溝和西湖等,雖說會下雨,但是在雨天漫步,也不失為一種情趣吧。
降水和溫度
我們再來看看各地的溫度情況
不知道為啥承德的溫度會那么低,感覺去避暑已經(jīng)不太合適了,而長白山已經(jīng)只有7°C了,慌不慌?
降水與溫度分布
降水
進入9月,東南沿海降水明顯增多,京津地區(qū)也是陰雨連綿,這是一場秋雨一場寒的節(jié)奏嗎!
溫度
東南半壁,溫度還是比較適宜的,現(xiàn)在的天氣下,不冷不熱,正是出游好溫度。
好了,今天的分析就到這里了,那么,你中秋節(jié)最終的選擇是哪里呢?
源碼地址
https://github.com/zhouwei713/data_analysis/tree/master/weather
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
