《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 unique函数_《Python编程从入门到实践》json数据可视化练习详解相关推荐

  1. python数据可视化从入门到实战_《Python编程从入门到实践》json数据可视化练习详解...

    <Python编程从入门到实践>16.2中,计算收盘价均值的程序有些不易看懂,结合我自己的理解进行一些说明. 使用的数据集:join格式的数据, 数据集是由多个字典为元素组成的列表.每个字 ...

  2. python编程从入门到实践 之 数据可视化部分总结和回顾(未完待续)

    15.1生成数据 matplotlib:是一个数学绘图库,使用它可以制作简单的图标. pygal包:专注于生成适合在数字设备上显示的图标.通过使用pygal,可以在与图表交互时突出元素以及调整大小,还 ...

  3. python unique函数_每30秒学会一个Python小技巧,GitHub星数4600+

    作者 | xiaoyu,数据爱好者来源 | Python数据科学(ID:PyDataScience)很多学习Python的朋友在项目实战中会遇到不少功能实现上的问题,有些问题并不是很难的问题,或者已经 ...

  4. python编程从入门到实战16章x轴刻度_PYTHON编程:从入门到实践之数据可视化

    数据可视化是指的通过可视化来表示探索数据,与数据挖掘紧密相关,数据挖掘是指的使用代码来探索数据集的规律和关联.可视化的目的是为了简洁的展示给观看者数据的规律和意义. 本文中使用的可视化模块为matpl ...

  5. Python编程从入门到实践~JSON

    import json #AttributeError: module 'json' has no attribute 'dump' #模块的名字被我命名成了json.py,名称冲突#使用json.d ...

  6. python蝴蝶代码_快速数论变换(NTT)及蝴蝶操作构造详解

    快速数论变换 本文不会从头开始介绍NTT算法,所以需要先了解FFT:永远在你身后:快速傅里叶变换(FFT)求解多项式乘法​zhuanlan.zhihu.com 除此之外,先简单的铺垫一些数论的概念同余 ...

  7. Python数据可视化 Matplotlib详解(一) —— 折线图与时序数据绘制

    目录 本小节内容 基础代码 实例讲解 如何多图绘制 多行多列的情况 多行单列的情况 Matplotlib 绘制时序数据 多时序变量绘图 如何给数据添加注释 Reference 本小节内容 今天这一小节 ...

  8. python 可视化图表 联动_Vue2+Echarts实现多种图表数据可视化Dashboard详解(附源码)...

    数据可视化 将数据通过图表的形式展现出来将大大的提升可读性和阅读效率 本例包含柱状图.折线图.散点图.热力图.复杂柱状图.预览面板等 技术栈 vue2.x vuex 存储公共变量,如色值等 vue-r ...

  9. Python笔记:网络爬虫之模拟人人网登录及获取数据的过程详解

    概述 使用urllib模拟人人网的登录的过程 使用urllib模拟人人网登录后获取个人数据的过程 使用urllib模拟登录及获取个人数据的过程 使用requests模拟登录及获取个人数据的过程 重点了 ...

最新文章

  1. Pandoc PDF 中文
  2. imp.load_module(#39_pywrap_tensorflow_internal#39
  3. docker的网络模式
  4. 函数模块:CTVB_COMPARE_TABLES
  5. POJ 1655 Balancing Act (求树的重心)【树形DP】(经典)
  6. sonar 规则之漏洞类型
  7. 【HDU - 6183】Color it(CDQ分治 或 动态开点线段树)
  8. Oracle Linux 6.5 RPM安装Mysql 5.7.11
  9. 使用two.js生成的卫星环绕动画效果
  10. php输入一个字符串 输出所有组合,C++_C语言实现输入一个字符串后打印出该字符串中字符的所有排列,本文实例讲述了C语言实现输入 - phpStudy...
  11. Rust:命令行参数与环境变量操作
  12. librtmp推流到YouTube失败
  13. 过去的过去,未来的未来
  14. 如何从dump文件中提取出C#源代码学习通http://www.bdgxy.com/
  15. 妈蛋!HR你搞我,我的缺点就是身体不好不能加班,怎么了?
  16. 个人公众号,以后文章会在公众号首发
  17. 打印万年历java程序,算法,java代码实现打印万年历
  18. python星期计算_python 计算一年内的所有周的具体日期
  19. 使用 PyTorch 进行音频信号处理的数据操作和转换
  20. ARM base instruction -- b bl bx blx

热门文章

  1. 【洛谷1090】合并果子
  2. python第十八天
  3. 关于php单引号和双引号
  4. oracle 日期trunc,Oracle TRUNC(date) TRUNC(number)
  5. Python使用pdfminer3k提取PDF文件中的文本
  6. vscode svn插件使用_我最终还是选择了VS code!
  7. matlab编程求平均,matlab中的分组平均函数grpstats的用法
  8. 计算机网络 第六章 链路层与局域网
  9. (c语言)输出1到100之间的所有素数
  10. 图标选择器_【小技巧】巧用CSS属性值正则匹配选择器