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