小編寫這篇文章的主要目的,主要是給大家去做出一個解答,解答的是關于python的一些事情,解答的內容包括如何使用python去進行采集,采集的內容主要是天氣數據,但是數據內容還是比較的多的,采集完成之后,怎么去做可視化操作呢?下面給大家解答。
前言
最近天氣好像有了點小脾氣,總是在萬分晴朗得時候耍點小性子~
陰會天,下上一會的雨~提醒我們時刻記得帶傘哦,不然會被雨淋或者被太陽公公曬到????
那么今天我就來分享一下采集天氣數據并做數據可視化的代碼吧~
知識點:
動態數據抓包
requests發送請求
結構化+非結構化數據解析
開發環境:
python 3.8運行代碼
pycharm 2021.2輔助敲代碼
requests
如果安裝python第三方模塊:
win+R輸入cmd點擊確定,輸入安裝命令pip install模塊名(pip install requests)回車
在pycharm中點擊Terminal(終端)輸入安裝命令
代碼實現:
發送請求
獲取數據
解析數據
保存數據
采集天氣數據代碼
導入模塊
import requests#第三方模塊提前安裝發送請求(Python里面瀏覽器)爆紅是因為你沒有安裝模塊 #如果安裝了但還是爆紅是因為什么呢?解釋器在pycharm里面配置的不對 import parsel import csv #翻譯插件
with open('天氣.csv',mode='a',encoding='utf-8',newline='')as f: csv_writer=csv.writer(f) csv_writer.writerow(["日期","最高溫度","最低溫度","天氣","風向","城市"]) city_list=[54511,58362,59287,59493] for city in city_list: for year in range(2011,2022): for month in range(1,13): url=f'https://tianqi.2345.com/Pc/GetHistory?areaInfo%5BareaId%5D={city}&areaInfo%5BareaType%5D=2&date%5Byear%5D={year}&date%5Bmonth%5D={month}'
1.發送請求
response=requests.get(url=url) #<Response[200]>:請求成功
2.獲取數據
#json數據傳輸格式 json_data=response.json()
#字典類型數據
3.解析數據
#結構化數據解析 html_data=json_data['data'] selector=parsel.Selector(html_data) #正則css xpath json字典數據解析 tr_list=selector.css('.history-table tr') #tr_list[1:]從列表的第二個元素開始取 for tr in tr_list[1:]: #<X>fhwaeuifhwiuf</X> td=tr.css('td::text').getall() if td[2]=='°': td[2]=td[1] if city==54511: td.append("北京") elif city==58362: td.append("上海") elif city==59287: td.append("廣州") elif city==59493: td.append("深圳") print(td) #文件名寫入方式追加寫入編碼方式utf-8數據空行 with open('天氣.csv',mode='a',encoding='utf-8',newline='')as f: csv_writer=csv.writer(f) csv_writer.writerow(td)
數據分析代碼
導入包
import pandas as pd import datetime from pyecharts import options as opts from pyecharts.charts import* from pyecharts.commons.utils import JsCode
讀入數據
data=pd.read_csv('天氣.csv') data
數據預覽
data.sample(5) data.info()
分割日期/星期
data[['日期','星期']]=data['日期'].str.split('',expand=True,n=1) data
去除多余字符
data[['最高溫度','最低溫度']]=data[['最高溫度','最低溫度']].apply(lambda x:x.str.replace('°','')) data.head()
計算下雪天氣
data.loc[data['天氣'].str.contains('雪'),'下雪嗎']='是' data.fillna('否',inplace=True)
分割日期時間
data['日期']=pd.to_datetime(data['日期']) data[['最高溫度','最低溫度']]=data[['最高溫度','最低溫度']].astype('int') data['年份']=data['日期'].dt.year data['月份']=data['日期'].dt.month data['日']=data['日期'].dt.day #預覽 data.sample(5)
各城市初雪的時間
s_data=data[data['下雪嗎']=='是'] s_data[(s_data['月份']>=9)].groupby('年份').first().reset_index()
各城市下雪天氣分布
s_data.groupby(['城市','年份'])['日期'].count().to_frame('下雪天數').reset_index()
做透視表
data_bj=data[(data['年份']==2021)&(data['城市']=='北京')] data_bj=data_bj.groupby(['月份','天氣'],as_index=False)['日期'].count() data_pivot=pd.pivot(data_bj, values='日期', index='月份', columns='天氣') data_pivot=data_pivot.astype('float') #按照索引年月倒序排序 data_pivot.sort_index(ascending=False,inplace=True) #資料、解答、教程可加Q:261823976免費領 data_pivot
北上廣深2021年10月份天氣熱力圖分布
import matplotlib.pyplot as plt import matplotlib.colors as mcolors import seaborn as sns #設置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設置畫布長寬和dpi plt.figure(figsize=(18,8),dpi=100) #自定義色卡 cmap=mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) #繪制熱力圖 ax=sns.heatmap(data_pivot,cmap=cmap,vmax=30, annot=True,#熱力圖上顯示數值 linewidths=0.5, ) #將x軸刻度放在最上面 ax.xaxis.set_ticks_position('top') plt.title('北京最近10個月天氣分布',fontsize=16)#圖片標題文本和字體大小 plt.show() data_gz=data[(data['年份']==2021)&(data['城市']=='廣州')] data_gz=data_gz.groupby(['月份','天氣'],as_index=False)['日期'].count() data_sz=data[(data['年份']==2021)&(data['城市']=='深圳')] data_sz=data_sz.groupby(['月份','天氣'],as_index=False)['日期'].count() data_sh=data[(data['年份']==2021)&(data['城市']=='上海')] data_sh=data_sh.groupby(['月份','天氣'],as_index=False)['日期'].count() data_pivot_sz=pd.pivot(data_sz, values='日期', index='月份', columns='天氣') data_pivot_sz=data_pivot_sz.astype('float') #按照索引年月倒序排序 data_pivot_sz.sort_index(ascending=False,inplace=True) #設置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設置畫布長寬和dpi plt.figure(figsize=(18,8),dpi=100) #自定義色卡 cmap=mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) #繪制熱力圖 ax_sz=sns.heatmap(data_pivot_sz,cmap=cmap,vmax=31, annot=True,#熱力圖上顯示數值 linewidths=0.5, ) #將x軸刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('深圳最近10個月天氣分布',fontsize=16)#圖片標題文本和字體大小 plt.show() data_pivot_gz=pd.pivot(data_gz, values='日期', index='月份', columns='天氣') data_pivot_gz=data_pivot_gz.astype('float') #按照索引年月倒序排序 data_pivot_gz.sort_index(ascending=False,inplace=True) #設置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設置畫布長寬和dpi plt.figure(figsize=(18,8),dpi=100) #自定義色卡 cmap=mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) #繪制熱力圖 ax_sz=sns.heatmap(data_pivot_gz,cmap=cmap,vmax=31, annot=True,#熱力圖上顯示數值 linewidths=0.5, ) #將x軸刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('廣州最近10個月天氣分布',fontsize=16)#圖片標題文本和字體大小 plt.show() #資料、解答、教程可加Q:261823976免費領 data_pivot_sh=pd.pivot(data_sh, values='日期', index='月份', columns='天氣') data_pivot_sh=data_pivot_sh.astype('float') #按照索引年月倒序排序 data_pivot_sh.sort_index(ascending=False,inplace=True) #設置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設置畫布長寬和dpi plt.figure(figsize=(18,8),dpi=100) #自定義色卡 cmap=mcolors.LinearSegmentedColormap.from_list("n",['#95B359','#D3CF63','#E0991D','#D96161','#A257D0','#7B1216']) #繪制熱力圖 ax_sz=sns.heatmap(data_pivot_sh,cmap=cmap,vmax=31, annot=True,#熱力圖上顯示數值 linewidths=0.5, ) #將x軸刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('上海最近10個月天氣分布',fontsize=16)#圖片標題文本和字體大小 plt.show() data_bj=data[(data['城市']=='北京')&(data['年份']==2021)] data_bj['日期']=pd.to_datetime(data_bj.日期,format="%Y年%m月%d日") data_bj=data_bj.sort_values(by='日期',ascending=True)
北京2021年每日最高最低溫度變化
color0=['#FF76A2','#24ACE6'] color_js0="""new echarts.graphic.LinearGradient(0,1,0,0, [{offset:0,color:'#FFC0CB'},{offset:1,color:'#ed1941'}],false)""" color_js1="""new echarts.graphic.LinearGradient(0,1,0,0, [{offset:0,color:'#FFFFFF'},{offset:1,color:'#009ad6'}],false)""" tl=Timeline() for i in range(0,len(data_bj)): coordy_high=list(data_bj['最高溫度'])<i> coordx=list(data_bj['日期'])<i> coordy_low=list(data_bj['最低溫度'])<i> x_max=list(data_bj['日期'])<i>+datetime.timedelta(days=10) y_max=int(max(list(data_bj['最高溫度'])[0:i+1]))+3 y_min=int(min(list(data_bj['最低溫度'])[0:i+1]))-3 title_date=list(data_bj['日期'])<i>.strftime('%Y-%m-%d') c=( Line( init_opts=opts.InitOpts( theme='dark', #設置動畫 animation_opts=opts.AnimationOpts(animation_delay_update=800),#(animation_delay=1000,animation_easing="elasticOut"), #設置寬度、高度 width='1500px', height='900px',) ) .add_xaxis(list(data_bj['日期'])[0:i]) .add_yaxis( series_name="", y_axis=list(data_bj['最高溫度'])[0:i],is_smooth=True,is_symbol_show=False, linestyle_opts={ 'normal':{ 'width':3, 'shadowColor':'rgba(0,0,0,0.5)', 'shadowBlur':5, 'shadowOffsetY':10, 'shadowOffsetX':10, 'curve':0.5, 'color':JsCode(color_js0) } }, itemstyle_opts={ "normal":{ "color":JsCode( """new echarts.graphic.LinearGradient(0,0,0,1,[{ offset:0, color:'#ed1941' },{ offset:1, color:'#009ad6' }],false)""" ), "barBorderRadius":[45,45,45,45], "shadowColor":"rgb(0,160,221)", } }, ) .add_yaxis( series_name="", y_axis=list(data_bj['最低溫度'])[0:i],is_smooth=True,is_symbol_show=False, #linestyle_opts=opts.LineStyleOpts(color=color0[1],width=3), itemstyle_opts=opts.ItemStyleOpts(color=JsCode(color_js1)), linestyle_opts={ 'normal':{ 'width':3, 'shadowColor':'rgba(0,0,0,0.5)', 'shadowBlur':5, 'shadowOffsetY':10, 'shadowOffsetX':10, 'curve':0.5, 'color':JsCode(color_js1) } }, ) .set_global_opts( title_opts=opts.TitleOpts("北京2021年每日最高最低溫度變化nn{}".format(title_date),pos_left=330,padding=[30,20]), xaxis_opts=opts.AxisOpts(type_="time",max_=x_max),#,interval=10,min_=i-5,split_number=20,axistick_opts=opts.AxisTickOpts(length=2500),axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey")) yaxis_opts=opts.AxisOpts(min_=y_min,max_=y_max),#坐標軸顏色,axisline_opts=opts.AxisLineOpts(linestyle_opts=opts.LineStyleOpts(color="grey")) ) ) tl.add(c,"{}".format(list(data_bj['日期'])<i>)) tl.add_schema( axis_type='time', play_interval=100,#表示播放的速度 pos_bottom="-29px", is_loop_play=False,#是否循環播放 width="780px", pos_left='30px', is_auto_play=True,#是否自動播放。 is_timeline_show=False) tl.render_notebook() #資料、解答、教程可加Q:261823976免費領 data_10=data[(data['年份']==2021)&(data['月份']==10)] data_10.head()
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家帶來更多幫助。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/128311.html
摘要:完成可視化熱搜榜和國內疫情新增圖,提高學生的編程能力和分析問題解決問題的能力。下圖為百度微博知乎三大平臺的熱搜詞頻統計圖。后續我會補上薄弱項,為爭取做一名全棧技術人員而奮斗。 ...
摘要:本節中將繪制幅圖像收盤折線圖,收盤價對數變換,收盤價月日均值,收盤價周日均值,收盤價星期均值。對數變換是常用的處理方法之一。 《Python編程:從入門到實踐》筆記。本篇是Python數據處理的第二篇,本篇將使用網上下載的數據,對這些數據進行可視化。 1. 前言 本篇將訪問并可視化以兩種常見格式存儲的數據:CSV和JSON: 使用Python的csv模塊來處理以CSV(逗號分隔的值)...
摘要:對個月份進行抓取后再匯總,就得到了北京年全年的天氣數據,包括最高溫度最低溫度天氣狀況風向等信息。按月查看溫度走勢日期天氣狀況分布天氣狀況晴天和多云是北京一年中主要的天氣。北京的降水天數不多,主要在月份。 本文來自 @范洺源 投稿,在其基礎上做了點修改 最近在學爬蟲和數據分析,看到 天氣網 上有國內城市一年的天氣歷史數據,想以此為數據源練習一下,于是就有了這個項目。今天在此簡單介紹一下實...
摘要:物聯網工程技術人員定義從事物聯網架構平臺芯片傳感器智能標簽等技術的研究和開發,以及物聯網工程的設計測試維護管理和服務的工程技術人員。近日,人力資源和社會保障部組織專家嚴格按照新職業評審標準對征集的新職業有關材料進行了評審論證,初步確定人工智能工程技術人員等15個擬發布新職業,現予公示。15個擬發布新職業1.人工智能工程技術人員2.物聯網工程技術人員3.大數據工程技術人員4.云計算工程技術人員...
閱讀 911·2023-01-14 11:38
閱讀 878·2023-01-14 11:04
閱讀 740·2023-01-14 10:48
閱讀 1983·2023-01-14 10:34
閱讀 942·2023-01-14 10:24
閱讀 819·2023-01-14 10:18
閱讀 499·2023-01-14 10:09
閱讀 572·2023-01-14 10:02