目錄
16.1.3 提取并讀取數(shù)據(jù)
highs_lows.py
highs_lows.py
16.1.4 繪制氣溫圖表
highs_lows.py
16.1.5 模塊 datetime
?編輯
16.1.6 在圖表中添加日期
highs_lows.py
16.1.7 涵蓋更長(zhǎng)的時(shí)間
highs_lows.py
highs_lows.py
16.1.9 給圖表區(qū)域著色
highs_lows.py
往期快速傳送門(mén)??(在文章最后):
感謝大家的支持!歡迎訂閱收藏!專(zhuān)欄將持續(xù)更新!
16.1.3 提取并讀取數(shù)據(jù)
知道需要哪些列中的數(shù)據(jù)后,我們來(lái)讀取一些數(shù)據(jù)。首先讀取每天的最高氣溫:
highs_lows.py
import csv
# 從文件中獲取最高氣溫
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
1 highs = []
2 for row in reader:
3 highs.append(row[1])
print(highs)
我們創(chuàng)建了一個(gè)名為highs的空列表(見(jiàn)1),再遍歷文件中余下的各行(見(jiàn)2)。閱讀器對(duì)象 從其停留的地方繼續(xù)往下讀取CSV文件,每次都自動(dòng)返回當(dāng)前所處位置的下一行。由于我們已經(jīng) 讀取了文件頭行,這個(gè)循環(huán)將從第二行開(kāi)始——從這行開(kāi)始包含的是實(shí)際數(shù)據(jù)。每次執(zhí)行該循環(huán) 時(shí),我們都將索引1處(第2列)的數(shù)據(jù)附加到highs末尾(見(jiàn)3)。 下面顯示了highs現(xiàn)在存儲(chǔ)的數(shù)據(jù):
['64', '71', '64', '59', '69', '62', '61', '55', '57', '61', '57', '59', '57',
'61', '64', '61', '59', '63', '60', '57', '69', '63', '62', '59', '57', '57',
'61', '59', '61', '61', '66']
我們提取了每天的最高氣溫,并將它們作為字符串整潔地存儲(chǔ)在一個(gè)列表中。 下面使用int()將這些字符串轉(zhuǎn)換為數(shù)字,讓matplotlib能夠讀取它們:
highs_lows.py
--snip--
highs = []
for row in reader:
1 high = int(row[1])
highs.append(high)
print(highs)
在1處,我們將表示氣溫的字符串轉(zhuǎn)換成了數(shù)字,再將其附加到列表末尾。這樣,最終的列 表將包含以數(shù)字表示的每日最高氣溫:
[64, 71, 64, 59, 69, 62, 61, 55, 57, 61, 57, 59, 57, 61, 64, 61, 59, 63, 60, 57,
69, 63, 62, 59, 57, 57, 61, 59, 61, 61, 66]
下面來(lái)對(duì)這些數(shù)據(jù)進(jìn)行可視化。
16.1.4 繪制氣溫圖表
為可視化這些氣溫?cái)?shù)據(jù),我們首先使用matplotlib創(chuàng)建一個(gè)顯示每日最高氣溫的簡(jiǎn)單圖形,如 下所示:
highs_lows.py
import csv
from matplotlib import pyplot as plt
# 從文件中獲取最高氣溫
--snip--
# 根據(jù)數(shù)據(jù)繪制圖形
fig = plt.figure(dpi=128, figsize=(10, 6))
1 plt.plot(highs, c='red')
# 設(shè)置圖形的格式
2 plt.title("Daily high temperatures, July 2014", fontsize=24)
3 plt.xlabel('', fontsize=16)
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
我們將最高氣溫列表傳給plot()(見(jiàn)1),并傳遞c='red'以便將數(shù)據(jù)點(diǎn)繪制為紅色(紅色顯 示最高氣溫,藍(lán)色顯示最低氣溫)。接下來(lái),我們?cè)O(shè)置了一些其他的格式,如字體大小和標(biāo)簽(見(jiàn) 2),這些都在第15章介紹過(guò)。鑒于我們還沒(méi)有添加日期,因此沒(méi)有給x軸添加標(biāo)簽,但plt.xlabel() 確實(shí)修改了字體大小,讓默認(rèn)標(biāo)簽更容易看清。圖16-1顯示了繪制的圖表:一個(gè)簡(jiǎn)單的折線圖, 顯示了阿拉斯加錫特卡2014年7月每天的最高氣溫。
16.1.5 模塊 datetime
下面在圖表中添加日期,使其更有用。在天氣數(shù)據(jù)文件中,第一個(gè)日期在第二行:
2014-7-1,64,56,50,53,51,48,96,83,58,30.19,--snip--
讀取該數(shù)據(jù)時(shí),獲得的是一個(gè)字符串,因?yàn)槲覀冃枰朕k法將字符串'2014-7-1'轉(zhuǎn)換為一個(gè) 表示相應(yīng)日期的對(duì)象。為創(chuàng)建一個(gè)表示2014年7月1日的對(duì)象,可使用模塊datetime中的方法 strptime()。我們?cè)诮K端會(huì)話中看看strptime()的工作原理:
>>> from datetime import datetime
>>> first_date = datetime.strptime('2014-7-1', '%Y-%m-%d')
>>> print(first_date)
2014-07-01 00:00:00
我們首先導(dǎo)入了模塊datetime中的datetime類(lèi),然后調(diào)用方法strptime(),并將包含所需日 期的字符串作為第一個(gè)實(shí)參。第二個(gè)實(shí)參告訴Python如何設(shè)置日期的格式。在這個(gè)示例中,'%Y-' 讓Python將字符串中第一個(gè)連字符前面的部分視為四位的年份;'%m-'讓Python將第二個(gè)連字符前 面的部分視為表示月份的數(shù)字;而'%d'讓Python將字符串的最后一部分視為月份中的一天 (1~31)。 方法strptime()可接受各種實(shí)參,并根據(jù)它們來(lái)決定如何解讀日期。表16-1列出了其中一些 這樣的實(shí)參。
16.1.6 在圖表中添加日期
知道如何處理CSV文件中的日期后,就可對(duì)氣溫圖形進(jìn)行改進(jìn)了,即提取日期和最高氣溫, 并將它們傳遞給plot(),如下所示:
highs_lows.py
import csv
from datetime import datetime
from matplotlib import pyplot as plt
# 從文件中獲取日期和最高氣溫
filename = 'sitka_weather_07-2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
1 dates, highs = [], []
for row in reader:
2 current_date = datetime.strptime(row[0], "%Y-%m-%d")
dates.append(current_date)
high = int(row[1])
highs.append(high)
# 根據(jù)數(shù)據(jù)繪制圖形
fig = plt.figure(dpi=128, figsize=(10, 6))
3 plt.plot(dates, highs, c='red')
# 設(shè)置圖形的格式
plt.title("Daily high temperatures, July 2014", fontsize=24)
plt.xlabel('', fontsize=16)
4 fig.autofmt_xdate()
plt.ylabel("Temperature (F)", fontsize=16)
plt.tick_params(axis='both', which='major', labelsize=16)
plt.show()
我們創(chuàng)建了兩個(gè)空列表,用于存儲(chǔ)從文件中提取的日期和最高氣溫(見(jiàn)1)。然后,我們將 包含日期信息的數(shù)據(jù)(row[0])轉(zhuǎn)換為datetime對(duì)象(見(jiàn)2),并將其附加到列表dates末尾。在 3處,我們將日期和最高氣溫值傳遞給plot()。在?處,我們調(diào)用了fig.autofmt_xdate()來(lái)繪制 斜的日期標(biāo)簽,以免它們彼此重疊。圖16-2顯示了改進(jìn)后的圖表。
16.1.7 涵蓋更長(zhǎng)的時(shí)間
設(shè)置好圖表后,我們來(lái)添加更多的數(shù)據(jù),以成一幅更復(fù)雜的錫特卡天氣圖。請(qǐng)將文件 sitka_weather_2014.csv復(fù)制到存儲(chǔ)本章程序的文件夾中,該文件包含Weather Underground提供的 整年的錫特卡天氣數(shù)據(jù)。
現(xiàn)在可以創(chuàng)建覆蓋整年的天氣圖了:
highs_lows.py
--snip--
# 從文件中獲取日期和最高氣溫
1 filename = 'sitka_weather_2014.csv'
with open(filename) as f:
--snip--
# 設(shè)置圖形的格式
2 plt.title("Daily high temperatures - 2014", fontsize=24)
plt.xlabel('', fontsize=16)
--snip--
我們修改了文件名,以使用新的數(shù)據(jù)文件sitka_weather_2014.csv(見(jiàn)1);我們還修改了圖表 的標(biāo)題,以反映其內(nèi)容的變化(見(jiàn)2)。圖16-3顯示了生成的圖形。
16.1.8 再繪制一個(gè)數(shù)據(jù)系列
圖16-3所示的改進(jìn)后的圖表顯示了大量意義深遠(yuǎn)的數(shù)據(jù),但我們可以在其中再添加最低氣溫 數(shù)據(jù),使其更有用。為此,需要從數(shù)據(jù)文件中提取最低氣溫,并將它們添加到圖表中,如下所示:
highs_lows.py
--snip--
# 從文件中獲取日期、最高氣溫和最低氣溫
filename = 'sitka_weather_2014.csv'
with open(filename) as f:
reader = csv.reader(f)
header_row = next(reader)
1 dates, highs, lows = [], [], []
for row in reader:
current_date = datetime.strptime(row[0], "%Y-%m-%d")
dates.append(current_date)
high = int(row[1])
highs.append(high)
2 low = int(row[3])
lows.append(low)
# 根據(jù)數(shù)據(jù)繪制圖形
fig = plt.figure(dpi=128, figsize=(10, 6))
3 plt.plot(dates, highs, c='red')
plt.plot(dates, lows, c='blue')
# 設(shè)置圖形的格式
4 plt.title("Daily high and low temperatures - 2014", fontsize=24)
--snip
在1處,我們添加了空列表lows,用于存儲(chǔ)最低氣溫。接下來(lái),我們從每行的第4列(row[3]) 提取每天的最低氣溫,并存儲(chǔ)它們(見(jiàn)2)。在3處,我們添加了一個(gè)對(duì)plot()的調(diào)用,以使用藍(lán) 色繪制最低氣溫。最后,我們修改了標(biāo)題(見(jiàn)4)。圖16-4顯示了這樣繪制出來(lái)的圖表。
16.1.9 給圖表區(qū)域著色
添加兩個(gè)數(shù)據(jù)系列后,我們就可以了解每天的氣溫范圍了。下面來(lái)給這個(gè)圖表做最后的修飾, 通過(guò)著色來(lái)呈現(xiàn)每天的氣溫范圍。為此,我們將使用方法fill_between(),它接受一個(gè)x值系列和 兩個(gè)y值系列,并填充兩個(gè)y值系列之間的空間:
highs_lows.py
--snip--
# 根據(jù)數(shù)據(jù)繪制圖形
fig = plt.figure(dpi=128, figsize=(10, 6))
1 plt.plot(dates, highs, c='red', alpha=0.5)
plt.plot(dates, lows, c='blue', alpha=0.5)
2 plt.fill_between(dates, highs, lows, facecolor='blue', alpha=0.1)
--snip--
1處的實(shí)參alpha指定顏色的透明度。Alpha值為0表示完全透明,1(默認(rèn)設(shè)置)表示完全不 透明。通過(guò)將alpha設(shè)置為0.5,可讓紅色和藍(lán)色折線的顏色看起來(lái)更淺。
在2處,我們向fill_between()傳遞了一個(gè)x值系列:列表dates,還傳遞了兩個(gè)y值系列:highs 和lows。實(shí)參facecolor指定了填充區(qū)域的顏色,我們還將alpha設(shè)置成了較小的值0.1,讓填充區(qū) 域?qū)蓚€(gè)數(shù)據(jù)系列連接起來(lái)的同時(shí)不分散觀察者的注意力。圖16-5顯示了最高氣溫和最低氣溫之 間的區(qū)域被填充的圖表。
通過(guò)著色,讓兩個(gè)數(shù)據(jù)集之間的區(qū)域顯而易見(jiàn)。
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全37-CSDN博客
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全25-CSDN博客文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-764664.html
關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全12-CSDN博客文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-764664.html
往期快速傳送門(mén)??(在文章最后):
感謝大家的支持!歡迎訂閱收藏!專(zhuān)欄將持續(xù)更新!
到了這里,關(guān)于關(guān)于“Python”的核心知識(shí)點(diǎn)整理大全46的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!