python数据可视化从入门到实战_《Python编程从入门到实践》json数据可视化练习详解...
《Python編程從入門到實(shí)踐》16.2中,計(jì)算收盤價(jià)均值的程序有些不易看懂,結(jié)合我自己的理解進(jìn)行一些說(shuō)明。
使用的數(shù)據(jù)集:join格式的數(shù)據(jù),
數(shù)據(jù)集是由多個(gè)字典為元素組成的列表。每個(gè)字典包含如下信息
[{
"date": "2017-01-01",
"month": "01",
"week": "52",
"weekday": "Sunday",
"close": "6928.6492"
}......
{
"date": "2017-12-12",
"month": "12",
"week": "50",
"weekday": "Tuesday",
"close": "113732.6745"
}]
計(jì)算均值的程序?yàn)?#xff1a;
跳過(guò)函數(shù),從idx_month = dates.index('2017-12-01')看起,index函數(shù)為返回列表的索引值,看下面例子:
因此,這部分代碼意為,首先讓集合了所有日期的列表dates用index方法取2017-12-01這一天的索引,并將其賦給idx_month,之后months[:idx_month], closes[:idx_month]表示分別對(duì)日期列表months,收盤價(jià)列表closes進(jìn)行切片處理,取到了索引從0到idx_months的所有值,也就是2017-12-01這一天之前的所有日期,以及對(duì)應(yīng)的收盤價(jià),并將其和另外兩個(gè)實(shí)參傳遞到函數(shù)draw_line中。下面對(duì)函數(shù)中的每個(gè)語(yǔ)句進(jìn)行說(shuō)明。
def draw_line(x_data, y_data, title, y_legend):
#定義函數(shù)
xy_map = []
#定義一個(gè)空列表,用于存儲(chǔ)
for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):
#zip(x_data, y_data)表示將傳入的日期列表months和收盤價(jià)列表closes,分別按順序各取一個(gè)元素打包成元組列表組合成一個(gè)新的迭代器——zip類,即[(1,6928), (1,7070) …… (11,65583)]。
第二層的sorted函數(shù)對(duì)元組列表進(jìn)行排序,得到了按照月份從小到大,同一月份的收盤價(jià)從小到大排序的元組列表[(1, 5383), (1,5566) …… (1,6928), (1,7070) …… (11,65583)]。這里sorted函數(shù)先把第一位從小到大排好,再排第二位,以此類推。
第三層的groupby函數(shù),是一個(gè)分組聚合函數(shù),key=lambda _: [0]是用匿名函數(shù)Lambda(Lambda表達(dá)式基于數(shù)學(xué)中的λ演算得名)表示的條件。
lambda函數(shù):
lambda 參數(shù)列表: 對(duì)參數(shù)需要進(jìn)行的操作
key=lambda _: _[0]就表示取列表中索引為[0]的值,并將返回值賦給key(下劃線表示臨時(shí)變量,僅用一次之后銷毀),key這個(gè)表達(dá)式表示groupby分組的依據(jù),意味著按照元組列表的第一個(gè)元素進(jìn)行分類。每循環(huán)一次,得到一組數(shù)據(jù),x就是分類的key值。最后循環(huán)十一次,x=1~11,y則是對(duì)應(yīng)的元組列表,得到:
x: 1 y: [(1,5383), (1,5566) …… (1,7835)]
2 [(2,6793), (2,6811) …… (2,8206)]
……
y_list = [v for _, v in y]
#下劃線表示沒有用到的值,這里即為y中元組的第一個(gè)值,將每個(gè)月的收盤價(jià)添加到y(tǒng)_list中
xy_map.append([x, sum(y_list) / len(y_list)])
#計(jì)算每個(gè)月的收盤價(jià)均值,并將元素以(月份,均值)的格式添加到空列表中。
x_unique, y_mean = [*zip(*xy_map)]
#*zip(iterable)函數(shù)是zip函數(shù)的逆過(guò)程,可將zip函數(shù)處理后的結(jié)果恢復(fù)為之前的樣子。*可理解為解壓。看例子:
所以它將xy_map中每個(gè)元組中的第一個(gè)元素全部取出,賦給x_unique,得到x_unique=(1,2,3,4,5,6,7,8,9,10,11),第二個(gè)元素全部取出,賦給y_mean,得到y(tǒng)_mean=(6285.870967741936, 7315.714285714285, 7789.032258064516, 8390.466666666667, 12963.935483870968, 18092.166666666668, 17146.16129032258, 26092.645161290322, 26865.633333333335, 35460.67741935484, 51436.166666666664)。
line_chart = pygal.Line()
#設(shè)置畫的圖為折線圖格式
line_chart.title = title
#設(shè)置標(biāo)題
line_chart.x_labels = x_unique
#設(shè)置x軸的標(biāo)簽
line_chart.add(y_legend, y_mean)
#加入y軸的數(shù)據(jù)及其它的含義
line_chart.render_to_file(title + '.svg')
#存儲(chǔ)圖片
return line_chart
#返回該圖片
參考資料:CSDN-專業(yè)IT技術(shù)社區(qū)-登錄 這篇博客也進(jìn)行了詳細(xì)的講解。
總結(jié)
以上是生活随笔為你收集整理的python数据可视化从入门到实战_《Python编程从入门到实践》json数据可视化练习详解...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 你可能不知道 微信的服务器今天才彻底搬到
- 下一篇: 骁龙8 Gen2加持!曝小米13/13