91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

談談Python實戰數據可視化之matplotlib模塊(實戰篇)

發布時間:2020-07-28 18:57:50 來源:網絡 閱讀:7330 作者:CFishHome 欄目:編程語言

前沿

通過上一篇談談Python實戰數據可視化之matplotlib模塊(基礎篇)的學習,我們初步了解了matplotlib模塊的pyplot基礎,本節實戰將利用CSV模塊獲取某地的天氣數據,并且使用matplotlib模塊將天氣數據可視化。

配套資源

鑒于Python編程從入門到實戰這本書的配套資源網上難找的悲傷,我深有體會。所以,在此提供鏈接供下載(有幫助點個贊支持下我哦(●'?'●)):
百度云鏈接:https://pan.baidu.com/s/1-XE0pBS8IaDLoUBdO8hDOw 密碼:n39g

CSV文件格式

CSV - 逗號分隔值文件格式,逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。純文本意味著該文件是一個字符序列,不含必須像二進制數字那樣被解讀的數據。CSV文件由任意數目的記錄組成,記錄間以某種換行符分隔;每條記錄由字段組成,字段間的分隔符是其它字符或字符串,最常見的是逗號或制表符。通常,所有記錄都有完全相同的字段序列。通常都是純文本文件。
例如:

Country,Indicator,Year,Value
AFG,NGDP_R,2002,183.26
AFG,NGDP_R,2003,198.736
AFG,NGDP_R,2004,200.069
AFG,NGDP_R,2005,223.737
AFG,NGDP_R,2006,235.731
AFG,NGDP_R,2007,267.177
AFG,NGDP_R,2008,277.498
AFG,NGDP_R,2009,334.621
AFG,NGDP_R,2010,362.857
AFG,NGDP_R,2011,386.368
AFG,NGDP_R,2012,440.336
AFG,NGDP_R,2013,456.453
.......................
.......................

利用CSV模塊獲取天氣數據

先將sitka_weather_07-2014.csv文件放到項目同一目錄下,然后利用Python標準庫提供的CSV模塊可以用于分析CSV文件中的數據行(也就是上面提到的記錄),讓我們能快速提取感興趣的值。案例代碼如下:

import csv

# 包含一個sitka城市七月份天氣信息的CSV文件,里面都是用逗號隔開
filename = 'sitka_weather_07-2014.csv'

# 打開csv文件,實例化一個csv模塊的reader閱讀器對象,是一個可迭代對象,所以可以使用for循環遍歷該reader閱讀器對象,
# 也可以調用BIF-next函數遍歷下一行,需要注意的是reader里面的每行記錄只能被遍歷一次,其中reader有一個line_num屬性返回遍歷過程中對應的行號。
with open(filename) as f:
    reader = csv.reader(f)  # 返回的是一個csv的閱讀器對象,直接打印獲取不到里面的內容
    print(reader)  # 打印出的是<_csv.reader object at 0x000002D1B24912B8>
    head_row = next(reader)  # 返回第一行的記錄內容組成的字符串列表
    print(head_row)  # 打印 ['AKDT', 'Max TemperatureF'...]
    for row in reader:
        # 根據閱讀器對象的記錄(一行算一個記錄)只能遍歷一次的特性,行號從2開始了哦
        print(reader.line_num, row)  # 打印 2 ['2014-7-1', '64', '56', '50'....]

運行結果如下:
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
好了,初步獲取到了CSV文件的內容,但是我們有一點要注意,就是reader里面的每行記錄只能被遍歷一次,我們下面添加一行代碼更深刻領會:

import csv

filename = 'sitka_weather_07-2014.csv'

with open(filename) as f:
    reader = csv.reader(f)
    print(reader)
    print(list(reader))  # 值得注意的是,當先調用 print(list(reader)),發現遍歷到最后了,再執行后面的代碼就報錯了
    head_row = next(reader)
    print(head_row)
    for row in reader:
        print(reader.line_num, row)

運行結果如下:
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
對上面的結果進行分析:對于list內置函數,內部實現大概可以猜到是先將reader對象里面的記錄遍歷再添加進一個列表中,然后返回整個列表。調用list內置函數其實已經遍歷一次了,遍歷指針指向了最后一個記錄,并且因為reader的記錄(一行算一個記錄)只能被遍歷一次的特性,所以后面的代碼再遍歷reader對象就沒啥意義了。

繪制阿拉斯加錫特卡2014年7月每日最高氣溫折線圖

我們前面已經知道怎么獲取天氣數據了,那么我們將使用pyplot模塊繪制阿拉斯加錫特卡2014年7月每日最高氣溫折線圖。代碼如下(注釋有助于理解代碼):

# 繪制錫特卡7月份的天氣數據
# 導入python支持的csv模塊,用來處理csv文件,分析csv文件中的數據行,讓我們提取我們感興趣的值
import csv
# 導入matplotlib包里的pyplot模塊,用于可視化獲取到的每天最高溫度
from matplotlib import pyplot as plt

from datetime import datetime

# 包含一個城市天氣信息的CSV文件,里面都是用逗號隔開
filename = 'sitka_weather_07-2014.csv'

# 打開csv文件,實例化一個csv模塊的reader閱讀器對象
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 返回第一行的記錄內容組成的字符串列表,例如:['1','2'....]
    highs = []  # 用于存儲每天最高的溫度
    dates = []  # 用于存儲日期
    for row in reader:  # row也是返回遍歷行的記錄內容組成的字符串列表
        current_date = datetime.strptime(row[0], "%Y-%m-%d")  # 講時間字符串轉化為指定格式的datetime對象
        dates.append(current_date)
        high = int(row[1])  # 由于前面已經next過一次了,根據reader只能被遍歷一次的性質,這里for循環就從第二行開始遍歷
        highs.append(high)  # 將每天的最高溫度保存在highs列表中,這時候列表存儲的元素都是數字而非字符串,那么我們就可以利用這個列表進行可視化處理了
fig = plt.figure(dpi=128, figsize=(10, 6))
plt.plot(dates, highs, c='red')
plt.title("Daily high temperatures,July 2014", fontsize=24)
plt.xlabel('', fontsize=16)
fig.autofmt_xdate()  # 繪制傾斜的日期標簽
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=14)
plt.show()

運行結果如下:
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
仔細觀察上面的運行結果,X軸還是與書本圖片有些出入,其實無礙,這是正確的,因為我們運行的結果也是7月初開始,只不過X軸把6月份也包括進去了。

繪制阿拉斯加錫特卡2014年每日最高氣溫和最低氣溫折線圖

前面我們繪制了阿拉斯加錫特卡7月份每日最高氣溫折線圖,現在我們將獲取阿拉斯加錫特卡2014年整一年的天氣數據,再繪制阿拉斯加錫特卡2014年每日最高氣溫和最低氣溫折線圖。我們先將sitka_weather_2014.csv文件也放到項目同一目錄下。代碼如下:

# 繪制錫特卡整年的天氣數據,未進行錯誤檢查
# 導入python支持的csv模塊,用來處理csv文件,分析csv文件中的數據行,讓我們提取我們感興趣的值
import csv
# 導入matplotlib包里的pyplot模塊,用于可視化獲取到的每天最高溫度
from matplotlib import pyplot as plt

from datetime import datetime

# 包含一個城市天氣信息的CSV文件,里面都是用逗號隔開
filename = 'sitka_weather_2014.csv'

# 打開csv文件,實例化一個csv模塊的reader閱讀器對象
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 返回第一行的記錄內容組成的字符串列表,例如:['1','2'....]
    highs = []  # 用于存儲整年每一天中的最高溫度
    dates = []  # 用于存儲日期
    lows = []  # 用于存儲整年每一天中的最低溫度
    for row in reader:  # row也是返回遍歷行的元素內容組成的字符串列表
        current_date = datetime.strptime(row[0], "%Y-%m-%d")
        dates.append(current_date)
        high = int(row[1])  # 由于前面已經next過一次了,根據reader只能被遍歷一次的性質,這里for循環就從第二行開始遍歷
        highs.append(high)  # 將每天的最高溫度保存在highs列表中,這時候列表存儲的元素都是數字而非字符串,那么我們就可以利用這個列表進行可視化處理了
        low = int(row[3])
        lows.append(low)
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.1)  # 填充每日最高氣溫和最低氣溫之間的區域
plt.title("Daily high and low temperatures,- 2014", fontsize=24)
plt.xlabel('', fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=14)
plt.show()

運行結果如下:
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
由于有些氣象站會偶爾出現故障,未能收集全應該收集的數據,所以如果我們還是采用上一個代碼例子這樣獲取某個城市的天氣數據,那么就會報錯,因為這個城市的csv文件中某一天可能是缺少數據的,所以會報ValueError錯誤。就如下圖這樣缺少某天的數據:
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
所以,鑒于上面的問題,下一節獲取死亡谷整年的天氣數據將會采用異常處理機制就能預防這種情況。

繪制死亡谷2014年每日最高氣溫和最低氣溫折線圖

前面說了可能在實際應用中可能會出現缺少數據等問題,作為一名程序開發者,必須設想到各種可能出現的問題,并且采用實用的方法解決問題。我們將會采用異常處理機制來繪制死亡谷2014年每日最高氣溫和最低氣溫折線圖。代碼如下:

# 導入python支持的csv模塊,用來處理csv文件,分析csv文件中的數據行,讓我們提取我們感興趣的值
import csv
# 導入matplotlib包里的pyplot模塊,用于可視化獲取到的每天最高溫度
from matplotlib import pyplot as plt

from datetime import datetime

# 包含一個城市天氣信息的CSV文件
filename = 'death_valley_2014.csv'

# 打開csv文件,實例化一個csv模塊的reader閱讀器對象
with open(filename) as f:
    reader = csv.reader(f)
    head_row = next(reader)  # 返回第一行的記錄內容組成的字符串列表,例如:['1','2'....]
    highs = []  # 用于存儲每天最高的溫度
    dates = []  # 用于存儲日期
    lows = []  # 用于存儲每天最低的溫度
    for row in reader:  # row也是返回遍歷行的記錄內容組成的字符串列表
        try:
            current_date = datetime.strptime(row[0], "%Y-%m-%d")
            high = int(row[1])  # 由于前面已經next過一次了,根據reader只能被遍歷一次的性質,這里for循環就從第二行開始遍歷
            low = int(row[3])
        except ValueError:
            print(current_date,'missing data')
        else:
            dates.append(current_date)
            highs.append(high)  # 將每天的最高溫度保存在highs列表中,這時候列表存儲的元素都是數字而非字符串,那么我們就可以利用這個列表進行可視化處理了
            lows.append(low)
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.1)
plt.title("Daily high and low temperatures,- 2014\nDeath Valley.CA", fontsize=20)
plt.xlabel('', fontsize=16)
fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=14)
plt.show()

運行結果如下(兩張圖):
(1)折線圖
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
(2)終端圖
談談Python實戰數據可視化之matplotlib模塊(實戰篇)
通過上面兩個圖可以知道,2014-02-16這一天的溫度數據是丟失了,所以在折線圖其實沒有畫出2014-02-16這一天的最高和最低氣溫(由于太密集看不出)。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

北流市| 宣武区| 内乡县| 林州市| 廊坊市| 新安县| 安丘市| 韶关市| 宜春市| 宁德市| 石台县| 安达市| 甘谷县| 澄城县| 阳信县| 平凉市| 安阳县| 金溪县| 姚安县| 房山区| 青州市| 县级市| 香河县| 徐州市| 凤凰县| 洛隆县| 平利县| 托里县| 时尚| 屯留县| 铜陵市| 临邑县| 会泽县| 屏东县| 双鸭山市| 莱州市| 石台县| 无锡市| 五大连池市| 东光县| 湟中县|