小編寫這篇文章的主要目的,主要是給大家去做出一個解答,解答的是關(guān)于python的一些事情,解答的內(nèi)容包括如何使用python去進行采集,采集的內(nèi)容主要是天氣數(shù)據(jù),但是數(shù)據(jù)內(nèi)容還是比較的多的,采集完成之后,怎么去做可視化操作呢?下面給大家解答。
前言
最近天氣好像有了點小脾氣,總是在萬分晴朗得時候耍點小性子~
陰會天,下上一會的雨~提醒我們時刻記得帶傘哦,不然會被雨淋或者被太陽公公曬到????
那么今天我就來分享一下采集天氣數(shù)據(jù)并做數(shù)據(jù)可視化的代碼吧~
知識點:
動態(tài)數(shù)據(jù)抓包
requests發(fā)送請求
結(jié)構(gòu)化+非結(jié)構(gòu)化數(shù)據(jù)解析
開發(fā)環(huán)境:
python 3.8運行代碼
pycharm 2021.2輔助敲代碼
requests
如果安裝python第三方模塊:
win+R輸入cmd點擊確定,輸入安裝命令pip install模塊名(pip install requests)回車
在pycharm中點擊Terminal(終端)輸入安裝命令
代碼實現(xiàn):
發(fā)送請求
獲取數(shù)據(jù)
解析數(shù)據(jù)
保存數(shù)據(jù)
采集天氣數(shù)據(jù)代碼
導(dǎo)入模塊
import requests#第三方模塊提前安裝發(fā)送請求(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.發(fā)送請求
response=requests.get(url=url) #<Response[200]>:請求成功
2.獲取數(shù)據(jù)
#json數(shù)據(jù)傳輸格式 json_data=response.json()
#字典類型數(shù)據(jù)
3.解析數(shù)據(jù)
#結(jié)構(gòu)化數(shù)據(jù)解析 html_data=json_data['data'] selector=parsel.Selector(html_data) #正則css xpath json字典數(shù)據(jù)解析 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數(shù)據(jù)空行 with open('天氣.csv',mode='a',encoding='utf-8',newline='')as f: csv_writer=csv.writer(f) csv_writer.writerow(td)
數(shù)據(jù)分析代碼
導(dǎo)入包
import pandas as pd import datetime from pyecharts import options as opts from pyecharts.charts import* from pyecharts.commons.utils import JsCode
讀入數(shù)據(jù)
data=pd.read_csv('天氣.csv') data
數(shù)據(jù)預(yù)覽
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 #預(yù)覽 data.sample(5)
各城市初雪的時間
s_data=data[data['下雪嗎']=='是'] s_data[(s_data['月份']>=9)].groupby('年份').first().reset_index()
各城市下雪天氣分布
s_data.groupby(['城市','年份'])['日期'].count().to_frame('下雪天數(shù)').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免費領(lǐng) data_pivot
北上廣深2021年10月份天氣熱力圖分布
import matplotlib.pyplot as plt import matplotlib.colors as mcolors import seaborn as sns #設(shè)置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設(shè)置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設(shè)置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設(shè)置畫布長寬和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,#熱力圖上顯示數(shù)值 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) #設(shè)置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設(shè)置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設(shè)置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設(shè)置畫布長寬和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,#熱力圖上顯示數(shù)值 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) #設(shè)置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設(shè)置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設(shè)置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設(shè)置畫布長寬和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,#熱力圖上顯示數(shù)值 linewidths=0.5, ) #將x軸刻度放在最上面 ax_sz.xaxis.set_ticks_position('top') plt.title('廣州最近10個月天氣分布',fontsize=16)#圖片標題文本和字體大小 plt.show() #資料、解答、教程可加Q:261823976免費領(lǐng) 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) #設(shè)置全局默認字體為雅黑 plt.rcParams['font.family']=['Microsoft YaHei'] #設(shè)置全局軸標簽字典大小 plt.rcParams["axes.labelsize"]=14 #設(shè)置背景 sns.set_style("darkgrid",{"font.family":['Microsoft YaHei','SimHei']}) #設(shè)置畫布長寬和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,#熱力圖上顯示數(shù)值 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', #設(shè)置動畫 animation_opts=opts.AnimationOpts(animation_delay_update=800),#(animation_delay=1000,animation_easing="elasticOut"), #設(shè)置寬度、高度 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,#是否循環(huán)播放 width="780px", pos_left='30px', is_auto_play=True,#是否自動播放。 is_timeline_show=False) tl.render_notebook() #資料、解答、教程可加Q:261823976免費領(lǐng) data_10=data[(data['年份']==2021)&(data['月份']==10)] data_10.head()
綜上所述,這篇文章就給大家介紹到這里了,希望可以給大家?guī)砀鄮椭?/p>
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/128311.html
摘要:完成可視化熱搜榜和國內(nèi)疫情新增圖,提高學(xué)生的編程能力和分析問題解決問題的能力。下圖為百度微博知乎三大平臺的熱搜詞頻統(tǒng)計圖。后續(xù)我會補上薄弱項,為爭取做一名全棧技術(shù)人員而奮斗。 ...
摘要:本節(jié)中將繪制幅圖像收盤折線圖,收盤價對數(shù)變換,收盤價月日均值,收盤價周日均值,收盤價星期均值。對數(shù)變換是常用的處理方法之一。 《Python編程:從入門到實踐》筆記。本篇是Python數(shù)據(jù)處理的第二篇,本篇將使用網(wǎng)上下載的數(shù)據(jù),對這些數(shù)據(jù)進行可視化。 1. 前言 本篇將訪問并可視化以兩種常見格式存儲的數(shù)據(jù):CSV和JSON: 使用Python的csv模塊來處理以CSV(逗號分隔的值)...
摘要:對個月份進行抓取后再匯總,就得到了北京年全年的天氣數(shù)據(jù),包括最高溫度最低溫度天氣狀況風向等信息。按月查看溫度走勢日期天氣狀況分布天氣狀況晴天和多云是北京一年中主要的天氣。北京的降水天數(shù)不多,主要在月份。 本文來自 @范洺源 投稿,在其基礎(chǔ)上做了點修改 最近在學(xué)爬蟲和數(shù)據(jù)分析,看到 天氣網(wǎng) 上有國內(nèi)城市一年的天氣歷史數(shù)據(jù),想以此為數(shù)據(jù)源練習一下,于是就有了這個項目。今天在此簡單介紹一下實...
摘要:物聯(lián)網(wǎng)工程技術(shù)人員定義從事物聯(lián)網(wǎng)架構(gòu)平臺芯片傳感器智能標簽等技術(shù)的研究和開發(fā),以及物聯(lián)網(wǎng)工程的設(shè)計測試維護管理和服務(wù)的工程技術(shù)人員。近日,人力資源和社會保障部組織專家嚴格按照新職業(yè)評審標準對征集的新職業(yè)有關(guān)材料進行了評審論證,初步確定人工智能工程技術(shù)人員等15個擬發(fā)布新職業(yè),現(xiàn)予公示。15個擬發(fā)布新職業(yè)1.人工智能工程技術(shù)人員2.物聯(lián)網(wǎng)工程技術(shù)人員3.大數(shù)據(jù)工程技術(shù)人員4.云計算工程技術(shù)人員...
閱讀 923·2023-01-14 11:38
閱讀 895·2023-01-14 11:04
閱讀 756·2023-01-14 10:48
閱讀 2055·2023-01-14 10:34
閱讀 961·2023-01-14 10:24
閱讀 840·2023-01-14 10:18
閱讀 510·2023-01-14 10:09
閱讀 588·2023-01-14 10:02