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