Python 天氣 簡單 數據分析及可視化


Python 天氣情況數據分析及可視化

環境配置

Pycharm開發環境 
python 版本 python3.7
Anconda 集成開發環境

第三方庫導入

## pip install 模塊 清華大學鏡像源
import requests 
from bs4 import  BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt

步驟

1.爬蟲requests 獲取數據
2.pandas 處理數據
3.matplotlib 繪制圖形
4.其他 保存數據進入csv格式,簡單處理,例如雷達圖

小案例

雷達圖

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:07
#@Author : dele
#@File : demo.py
#@Software: PyCharm


# 雷達圖
import pygal
# pip install pygal 安裝模塊

rader_chart = pygal.Radar()


rader_chart.title = '成績分析'
rader_chart.x_labels = ["數學","英語","文綜","理綜","體育"]
rader_chart.add('StdudetA',[139,122,80,250,10])
rader_chart.add('StdudetB',[129,100,80,250,40])
rader_chart.add('StdudetC',[150,100,80,150,60])
rader_chart.add('StdudetD',[99,140,80,150,90])
rader_chart.render_to_file('radar_chart.svg')

效果

在這里插入圖片描述

天氣案例

爬取天氣網站地址http://www.tianqihoubao.com/lishi/

在這里插入圖片描述

然后一直選擇找到你需要的數據地址

例如:如圖
在這里插入圖片描述

進行網頁分析 F12檢查網頁分析源代碼

Python 爬蟲代碼分析

Pandas matplotlib 模塊

Pandas

pandas 是基於NumPy 的一種工具,該工具是為了解決數據分析任務而創建的。Pandas 納入了大量庫和一些標准的數據模型,提供了高效地操作大型數據集所需的工具。pandas提供了大量能使我們快速便捷地處理數據的函數和方法。你很快就會發現,它是使Python成為強大而高效的數據分析環境的重要因素之一。

基本功能
1. 數據文件讀取/文本數據讀取
2. 索引、選取和數據過濾
3. 算法運算和數據對齊
4. 函數的應用和映射
5. 重置索引
6. 數學統計方法

在這里插入圖片描述

matplotlib

Matplotlib 是一個 Python 的 2D繪圖庫,它以各種硬拷貝格式和跨平台的交互式環境生成出版質量級別的圖形 。
通過 Matplotlib,開發者可以僅需要幾行代碼,便可以生成繪圖,直方圖,功率譜,條形圖,錯誤圖,散點圖等。

Matplotlib基礎知識

1.Matplotlib中的基本圖表包括的元素
x軸和y軸
水平和垂直的軸線
x軸和y軸刻度
刻度標示坐標軸的分隔,包括最小刻度和最大刻度
x軸和y軸刻度標簽
表示特定坐標軸的值
繪圖區域
實際繪圖的區域
2.hold屬性
hold屬性默認為True,允許在一幅圖中繪制多個曲線;將hold屬性修改為False,每一個plot都會覆蓋前面的plot。
但是不推薦去動hold這個屬性,這種做法(會有警告)。因此使用默認設置即可。
3.網格線
grid方法
使用grid方法為圖添加網格線
設置grid參數(參數與plot函數相同)
.lw代表linewidth,線的粗細
.alpha表示線的明暗程度
4.axis方法
如果axis方法沒有任何參數,則返回當前坐標軸的上下限
5.xlim方法和ylim方法
除了plt.axis方法,還可以通過xlim,ylim方法設置坐標軸范圍
6.legend方法

在這里插入圖片描述

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm


import requests
from bs4 import  BeautifulSoup
import io
import sys
import pandas


sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
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')

    print(tr_lsit)
    dates,conditions,temp = [],[],[]
    for data in tr_lsit[1:]:
        sub_data = data.text.split()
        dates.append(sub_data[0])
        conditions.append(''.join(sub_data[1:3]))
        temp.append(''.join(sub_data[3:6]))

    # 數據保存
    _data = pandas.DataFrame()
    _data['日期'] = dates
    _data['天氣情況'] = conditions
    _data['氣溫'] = temp

    return _data
    # print(_data)
    # _data.to_csv('anqing.csv',index=False,encoding='gbk')
    # 獲取數據並保存csv格式,進行下面的數據分析
    
# 定義成函數形式進行封裝
data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')

data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
data.to_csv('anqing.csv',index=False,encoding='gbk')

數據可視化

from matplotlib import pyplot as plt

# 畫圖
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')

# 數據處理
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('2020安慶市3-5月天氣情況',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('氣溫',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 顯示
plt.show()

效果

在這里插入圖片描述

完整代碼

#-*- codeing = utf-8 -*-
#@Time : 2020/6/2 20:26
#@Author : dele
#@File : weather.py
#@Software: PyCharm


import requests
from bs4 import  BeautifulSoup
import io
import sys
import pandas
from matplotlib import pyplot as plt

sys.stdout = io.TextIOWrapper(sys.stdout.buffer,encoding='utf-8')
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')

    print(tr_lsit)
    dates,conditions,temp = [],[],[]
    for data in tr_lsit[1:]:
        sub_data = data.text.split()
        dates.append(sub_data[0])
        conditions.append(''.join(sub_data[1:3]))
        temp.append(''.join(sub_data[3:6]))

    # 數據保存
    _data = pandas.DataFrame()
    _data['日期'] = dates
    _data['天氣情況'] = conditions
    _data['氣溫'] = temp

    return _data
    # print(_data)
    # _data.to_csv('anqing.csv',index=False,encoding='gbk')

# data_month_3 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202003.html')
# data_month_4 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202004.html')
# data_month_5 =get_data('http://www.tianqihoubao.com/lishi/anqing/month/202005.html')
#
# data = pandas.concat([data_month_3,data_month_4,data_month_5]).reset_index(drop=True)
# data.to_csv('anqing.csv',index=False,encoding='gbk')



plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False

datalsit = pandas.read_csv('G:/Python_Web/weather/anqing.csv',encoding='gbk')

# 數據處理
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('2020安慶市3-5月天氣情況',fontsize=24)
plt.xlabel('',fontsize=6)
fig.autofmt_xdate()
plt.ylabel('氣溫',fontsize=12)
plt.tick_params(axis='both',which='major',labelsize=10)
# 修改刻度
plt.xticks(dates[::20])
# 顯示
plt.show()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM