国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

python天氣數(shù)據(jù)可視化分析

這篇具有很好參考價(jià)值的文章主要介紹了python天氣數(shù)據(jù)可視化分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

引言

網(wǎng):tianqihoubao

對(duì)深圳近幾月的天氣進(jìn)行分析可視化

python天氣可視化,python,python,pandas,數(shù)據(jù)分析

?

需要用的庫(kù)

pandas:用于數(shù)據(jù)挖掘,數(shù)據(jù)分析

requests:用來(lái)get網(wǎng)頁(yè)數(shù)據(jù)建立連接

bs4:用來(lái)分析html數(shù)據(jù)進(jìn)行格式化

matplotlib:用于繪制可視化圖形,類(lèi)似 MATLAB 的繪圖工具,是個(gè)很厲害的庫(kù)

過(guò)程

?get函數(shù)

用于get網(wǎng)頁(yè)數(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見(jiàn)下圖
    # 尋找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)向'] = fengxiang

    return _data

?數(shù)據(jù)都在tr便簽里所以只提取tr標(biāo)簽里的數(shù)據(jù)

python天氣可視化,python,python,pandas,數(shù)據(jù)分析

?調(diào)用?

提取深圳近三個(gè)月的數(shù)據(jù),并用pandas庫(kù)中的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ù)來(lái)避免將舊索引添加為列:
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ù)如下?

python天氣可視化,python,python,pandas,數(shù)據(jù)分析

?數(shù)據(jù)處理

# 畫(huà)圖
# 設(shè)置字體
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負(fù)號(hào)的亂碼問(wèn)題
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ù)字了

python天氣可視化,python,python,pandas,數(shù)據(jù)分析

?畫(huà)圖

直接看注釋吧

# 設(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度 可通過(guò)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)向的各類(lèi)型占比  數(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天氣可視化,python,python,pandas,數(shù)據(jù)分析

?python天氣可視化,python,python,pandas,數(shù)據(jù)分析文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-516712.html

完整代碼?

import requests
from bs4 import  BeautifulSoup
import pandas
import pandas as pd
from matplotlib import pyplot as plt


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標(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)向'] = fengxiang

    return _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ù)來(lái)避免將舊索引添加為列:
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')


# 畫(huà)圖
# 設(shè)置字體
plt.rcParams['font.sans-serif'] = ['SimHei']
# 解決負(fù)號(hào)的亂碼問(wèn)題
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['最低氣溫']

# 畫(huà)圖
# 設(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度 可通過(guò)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)向的各類(lèi)型占比  數(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()

到了這里,關(guān)于python天氣數(shù)據(jù)可視化分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包