python天气数据可视化分析
生活随笔
收集整理的這篇文章主要介紹了
python天气数据可视化分析
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
引言
網(wǎng):tianqihoubao
對(duì)深圳近幾月的天氣進(jìn)行分析可視化
?
需要用的庫
pandas:用于數(shù)據(jù)挖掘,數(shù)據(jù)分析requests:用來get網(wǎng)頁數(shù)據(jù)建立連接bs4:用來分析html數(shù)據(jù)進(jìn)行格式化matplotlib:用于繪制可視化圖形,類似 MATLAB 的繪圖工具,是個(gè)很厲害的庫過程
?get函數(shù)
用于get網(wǎng)頁數(shù)據(jù)并進(jìn)行分析講需要的天氣數(shù)據(jù)進(jìn)行導(dǎo)出
def get_data(weather_url):rseponse = requests.get(weather_url)html = rseponse.content.decode('gbk')soup = BeautifulSoup(html, 'html.parser')tr_lsit = soup.find_all('tr')# 為啥是tr見下圖# 尋找tr標(biāo)簽下的所有內(nèi)容print(tr_lsit)dates, conditions, temp, fengxiang = [], [], [], []for data in tr_lsit[1:]:sub_data = data.text.split()# ['2022年09月30日', '雷陣雨', '/雷陣雨', '27℃', '/', '32℃', '東風(fēng)', '1-2級(jí)', '/東風(fēng)', '1-2級(jí)']dates.append(sub_data[0])conditions.append(''.join(sub_data[1:3]))temp.append(''.join(sub_data[3:6]))fengxiang.append(''.join(sub_data[6:9]))# join函數(shù)連接字符串# 數(shù)據(jù)保存_data = pandas.DataFrame()_data['日期'] = dates_data['天氣情況'] = conditions_data['氣溫'] = temp_data['風(fēng)向'] = fengxiangreturn _data?數(shù)據(jù)都在tr便簽里所以只提取tr標(biāo)簽里的數(shù)據(jù)
?調(diào)用?
提取深圳近三個(gè)月的數(shù)據(jù),并用pandas庫中的concat將三個(gè)get完的數(shù)據(jù)進(jìn)行整合
# 定義成函數(shù)形式進(jìn)行封裝 data_month_1 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202209.html') data_month_2 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202210.html') data_month_3 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202211.html')# 使用drop參數(shù)來避免將舊索引添加為列: data = pandas.concat([data_month_1, data_month_2, data_month_3]).reset_index(drop=True) # 導(dǎo)出csv表格 data.to_csv('shenzhen.csv', index=False, encoding='utf-8') # 讀表 data1 = pd.read_csv('shenzhen.csv')表格展示
導(dǎo)出的表格數(shù)據(jù)如下?
?數(shù)據(jù)處理
# 畫圖 # 設(shè)置字體 plt.rcParams['font.sans-serif'] = ['SimHei'] # 解決負(fù)號(hào)的亂碼問題 plt.rcParams['axes.unicode_minus'] = False # 讀表 datalsit = pandas.read_csv('shenzhen.csv',encoding='utf-8')# 數(shù)據(jù)處理 # 利用split分裂字符串‘/’取出最高最低氣溫 datalsit['最低氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[0] datalsit['最高氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[1] # 取出溫度中的℃符號(hào) datalsit['最低氣溫'] = datalsit['最低氣溫'].map(lambda x:int(x.replace('℃',''))) datalsit['最高氣溫'] = datalsit['最高氣溫'].map(lambda x:int(x.replace('℃','')))dates = datalsit['日期'] highs = datalsit['最高氣溫'] lows = datalsit['最低氣溫']此時(shí)清洗完的數(shù)據(jù)是純數(shù)字了
?畫圖
直接看注釋吧
# 設(shè)置可視化圖形規(guī)格 fig = plt.figure(dpi=128,figsize=(10,6)) # 線形圖的線條顏色粗細(xì)調(diào)整 plt.plot(dates,highs,c='red',alpha=0.5) plt.plot(dates,lows,c='blue',alpha=0.5) # 線條下方覆蓋為藍(lán)色 plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)# 圖表格式 # 設(shè)置圖標(biāo)的圖形格式 plt.title('2022深圳市9-12月天氣情況',fontsize=24) plt.xlabel('日期',fontsize=12) # # x軸標(biāo)簽傾斜 默認(rèn)30度 可通過rotation=30改變 fig.autofmt_xdate() plt.ylabel('氣溫',fontsize=12) # 刻度線樣式設(shè)置 plt.tick_params(axis='both',which='major',labelsize=10) # 修改刻度 數(shù)據(jù)每10組顯示1個(gè) plt.xticks(dates[::10])# 繪制風(fēng)向扇形圖 # 提取出風(fēng)向的各類型占比 數(shù)據(jù)清洗 fengxiang=data1['風(fēng)向'].value_counts() fengxiang = fengxiang[fengxiang.values > 3] plt.figure(figsize=(15,5)) # 保住餅圖是圓 不是默認(rèn)橢圓 plt.axes(aspect = 'equal') plt.pie(x =fengxiang.values,labels = fengxiang.index,autopct = "%.2f%%",radius = 1) plt.title('風(fēng)向占比')# 顯示 plt.show()結(jié)果
?
完整代碼?
import requests from bs4 import BeautifulSoup import pandas import pandas as pd from matplotlib import pyplot as pltdef get_data(weather_url):rseponse = requests.get(weather_url)html = rseponse.content.decode('gbk')soup = BeautifulSoup(html, 'html.parser')tr_lsit = soup.find_all('tr')# 尋找tr標(biāo)簽下的所有內(nèi)容print(tr_lsit)dates, conditions, temp, fengxiang = [], [], [], []for data in tr_lsit[1:]:sub_data = data.text.split()# ['2022年09月30日', '雷陣雨', '/雷陣雨', '27℃', '/', '32℃', '東風(fēng)', '1-2級(jí)', '/東風(fēng)', '1-2級(jí)']dates.append(sub_data[0])conditions.append(''.join(sub_data[1:3]))temp.append(''.join(sub_data[3:6]))fengxiang.append(''.join(sub_data[6:9]))# join函數(shù)連接字符串# 數(shù)據(jù)保存_data = pandas.DataFrame()_data['日期'] = dates_data['天氣情況'] = conditions_data['氣溫'] = temp_data['風(fēng)向'] = fengxiangreturn _data# print(_data)# _data.to_csv('anqing.csv',index=False,encoding='gbk')# 獲取數(shù)據(jù)并保存csv格式,進(jìn)行下面的數(shù)據(jù)分析# 定義成函數(shù)形式進(jìn)行封裝 data_month_1 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202209.html') data_month_2 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202210.html') data_month_3 = get_data('http://www.tianqihoubao.com/lishi/shenzhen/month/202211.html')# 使用drop參數(shù)來避免將舊索引添加為列: data = pandas.concat([data_month_1, data_month_2, data_month_3]).reset_index(drop=True) # 導(dǎo)出csv表格 data.to_csv('shenzhen.csv', index=False, encoding='utf-8') # 讀表 data1 = pd.read_csv('shenzhen.csv')# 畫圖 # 設(shè)置字體 plt.rcParams['font.sans-serif'] = ['SimHei'] # 解決負(fù)號(hào)的亂碼問題 plt.rcParams['axes.unicode_minus'] = False # 讀表 datalsit = pandas.read_csv('shenzhen.csv',encoding='utf-8')# 數(shù)據(jù)處理 # 利用split分裂字符串‘/’取出最高最低氣溫 datalsit['最低氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[0] datalsit['最高氣溫'] = datalsit['氣溫'].str.split('/',expand=True)[1] # 取出溫度中的℃符號(hào) datalsit['最低氣溫'] = datalsit['最低氣溫'].map(lambda x:int(x.replace('℃',''))) datalsit['最高氣溫'] = datalsit['最高氣溫'].map(lambda x:int(x.replace('℃','')))dates = datalsit['日期'] highs = datalsit['最高氣溫'] lows = datalsit['最低氣溫']# 畫圖 # 設(shè)置可視化圖形規(guī)格 fig = plt.figure(dpi=128,figsize=(10,6)) # 線形圖的線條顏色粗細(xì)調(diào)整 plt.plot(dates,highs,c='red',alpha=0.5) plt.plot(dates,lows,c='blue',alpha=0.5) # 線條下方覆蓋為藍(lán)色 plt.fill_between(dates,highs,lows,facecolor='blue',alpha=0.2)# 圖表格式 # 設(shè)置圖標(biāo)的圖形格式 plt.title('2022深圳市9-12月天氣情況',fontsize=24) plt.xlabel('日期',fontsize=12) # x軸標(biāo)簽傾斜 默認(rèn)30度 可通過rotation=30改變 fig.autofmt_xdate() plt.ylabel('氣溫',fontsize=12) # 刻度線樣式設(shè)置 plt.tick_params(axis='both',which='major',labelsize=10) # 修改刻度 數(shù)據(jù)每10組顯示1個(gè) plt.xticks(dates[::10])# 繪制風(fēng)向扇形圖 # 提取出風(fēng)向的各類型占比 數(shù)據(jù)清洗 fengxiang=data1['風(fēng)向'].value_counts() fengxiang = fengxiang[fengxiang.values > 3] plt.figure(figsize=(15,5)) # 保住餅圖是圓 不是默認(rèn)橢圓 plt.axes(aspect = 'equal') plt.pie(x =fengxiang.values,labels = fengxiang.index,autopct = "%.2f%%",radius = 1) plt.title('風(fēng)向占比')# 顯示 plt.show()總結(jié)
以上是生活随笔為你收集整理的python天气数据可视化分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 中兴cxt路测软件mos测试,LTEMO
- 下一篇: opencv-python画局部放大图