在学习《Python编程从入门到实践》16.2.6收盘价均值这块时,代码不是很清晰,里面有lambda法则等,可能作者不想涉及太多高级内容所以没有详细写,自己把自己的理解过程记录如下。

本文主要参考(19条消息) Python编程:从入门到实践 json练习详解~~_pythonxiaohei的博客-CSDN博客

from itertools import groupby
import pygal
import jsondef draw_mean(month_data, price_data, title, y_legend):xy_map = []zip_data = zip(month_data, price_data)zip_data = sorted(zip_data)for x, y in groupby(zip_data, key=lambda value: value[0]):y_list = [value for index, value in y]y_mean = sum(y_list) / len(y_list)xy_map.append([x, y_mean])x_unique, y_mean = [*zip(*xy_map)]line_chart = pygal.Line()line_chart.title = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file(title+'.svg')return line_chartfile_name = 'btc_close_2017.json'
dates, months, weeks, weekdays, closes = [], [], [], [], []with open(file_name) as f:btc_data = json.load(f)
for btc_dict in btc_data:dates.append(btc_dict['date'])months.append(int(btc_dict['month']))weeks.append(int(btc_dict['week']))weekdays.append(btc_dict['weekday'])closes.append(int(float(btc_dict['close'])))idx_month = dates.index('2017-12-01')
idx_week = dates.index('2017-12-11')
line_chart_month_mean = draw_mean(months[:idx_month], closes[:idx_month], '收盘价月平均值', '月平均值')
line_chart_week_mean = draw_mean(weeks[1:idx_month], closes[1:idx_month], '收盘价周平均值', '周平均值')
wd = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# 这搞错了 wd_label = [wd.index(x)+1 for x in wd]
wd_label = [wd.index(x)+1 for x in weekdays[1:idx_week]]
line_chart_weekday_mean = draw_mean(wd_label, closes[1:idx_week], '收盘价星期平均值', '星期平均值')
line_chart_weekday_mean.x_labels = ['周一', '周二', '周三', '周四', '周五', '周六', '周天']
line_chart_weekday_mean.render_to_file('收盘价星期平均值.svg')

此处主要有三个点:zip()函数的运用,groupby()的运用以及lambda法则

1. zip为将后续参数打包成元组的列表,即例如(1,1000),(2,2000).....  如此的话,就将每个月的日期与价格打包起来了。注意month_data和price_data是按顺序依次打包的,如果有一个短,那就按照这个短的截断。  因而这个就形成了(month,price)的一个列表。

后续的sorted即将该列表按照month的顺序进行了排序。

此时的数据结构为[(1,1000),(1,1500).....(2,2000),(2,25000)......(12,1000)]

2.groupby函数为将数据进行组的形式输出   上文中zip_data已按月份排起来了,如果此时将月份作文一个flag,相同flag的都进行输出,则就是该函数的作用。

其次其参数key即我们应该用何种方式打包,因为我们想用这个flag为标志进行输出,所以后面的lambda法则就是取出标志flag,具体用法下面写

这样我们可以理解成 a,b = groupby(data, key = flag),即其输出两个值:flag与flag有关的所有data,如此a即接受了flag,b接收了flag相关的所有数据形成的list

因而后续代码就对其进行了相关平均值计算

3. lambda法则   其表达式为   lambda argumen_list:expression

即将argument_list进行expression的处理从而输出与argument_list相同数据结构的output

书上是  key=lambda _:_[0] 即输入名为'_'的列表,取该列表的第一个元素、

顺便写一下自己遇到的小BUG:

1.在绘制周平均值时,对数据处理应为

line_chart_week_mean = draw_mean(weeks[1:idx_month], closes[1:idx_month], '收盘价周平均值', '周平均值')

因为看原数据,第一组为第52周,而我们截止到11月底只有48周,所以我们从1开始取,而不是0

2.在绘制日平均值,对数据处理为

wd = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
# 这搞错了 wd_label = [wd.index(x)+1 for x in wd]
wd_label = [wd.index(x)+1 for x in weekdays[1:idx_week]]

因为后面这个wd_label即weekday_label是输入到line中作为x数据的,其与后面的price是数量上对应的,而我自己code时以为其至少将文字序列转化为数字序列,所以写成了一个如上的错误,最后跑完发现不对,检查后发现这个地方列表解析应该是对weekdays列表,其数量与price对应,进行一个for的解析转化

自己的第一篇文章,纪念纪念哈!

《Python编程从入门到实践》16.2.6收盘价均值,代码理解相关推荐

  1. python编程:从入门到实践 外星人入侵项目:武装飞船 代码运行不显示飞船

    我的飞船去哪了???!!! 照着书上的项目完整的代码运行一下,结果屏幕上没出现飞船,代码都是对的呀,这是咋回事? 屏幕高度问题 class Settings():"""A ...

  2. 《Python编程从入门到实践》习题答案及重点

    发现自己对于python的基础掌握的并不是很牢实,利用几天时间把重点写下来,并打算把(<Python编程从入门到实践>试一试)的代码全部敲一遍,如果有不对的地方,请不吝赐教. 目录 第1章 ...

  3. python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章

    文章目录 下载数据 制作全球地震散点图:JSON格式 end 几个实验结果: 每日最高气温: 地震图绘制: 下载数据 CSV文件格式 在文本文件中存储数据,一个简单方式是将数据作为一系列以逗号分隔的值 ...

  4. python基础学习[python编程从入门到实践读书笔记(连载三)]:django学习笔记web项目

    文章目录 Django项目:学习笔记web网页 项目部署 参考 自己部署的网站,还是小有成就感的,毕竟踩过很多坑,实战技能也有些许进步. 网站链接:http://lishizheng.herokuap ...

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

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

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

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

  7. python编程从入门到实践 第18章Django入门 2022年最新

    说明:这篇文章只是记录自己自学本书的一个痕迹,日后来看作为一个念想.至于做为公开,是希望对一些同样跟我一样的朋友有一点点帮助,当然我本人就是小白,帮助可能也不大哈哈. 这篇文章记录了<pytho ...

  8. Python编程从入门到实践(第三、四章的列表和元祖)

    1.Python中列表用[]来表示,并用逗号分隔其中元素 2.访问列表元素,给出元素的索引值即可(索引从0开始) 3.修改,添加和删除元素 3.1修改时给出列表名和修改元素的索引,然后赋新值 3.2在 ...

  9. 《Python编程从入门到实践》袁国忠 译 P1~P200学习笔记

    <Python编程从入门到实践>袁国忠 译 P1~P200 学习笔记 <Python编程从入门到实践>袁国忠 译 P1~P200之前两天在学习时做的笔记总结,在这里也记录一下, ...

最新文章

  1. 【模板】RMQ问题—st表实现
  2. postDelayed总结
  3. J2ME手机游戏引擎程序结构简述
  4. Android之修改app名字客户需要升级需要注意的问题
  5. 智能车的转弯部分_江西智能搬运平板车铁路轨道运输车-厂家直销
  6. 实战:阿里巴巴 DevOps 转型后的运维平台建设
  7. 最近30分钟合约市场爆仓702万美元 BTC爆仓281万美元
  8. Mac node js环境的安装与测试
  9. Canvas鼠标手写签名-vue
  10. 数据网格组件 Handsontable 不再开源,采用自拟的非商业许可证
  11. mysql中乘积函数_Mysql中的函数
  12. 数字单片机的技术发展
  13. 类似QQ截图工具的snipaste
  14. 集训模拟赛改题及总结(7月part)
  15. Oracle JDK 与 OpenJDK
  16. 谷歌浏览器无法连接到网络的解决办法
  17. 阿里云服务器价格表:第7代云服务器ECS收费价格表
  18. 使用EXCEL计算并绘制RSI指标
  19. 逆波兰式-C++实现方法
  20. 微信小程序应用安全分析及设计

热门文章

  1. Ubuntu18.04搭建Android源码编译环境
  2. CityEngine制作玻璃材质反光效果
  3. javax.net.ssl.SSLPeerUnverifiedException: Hostname xxx not verified
  4. PHP7.0微信公众平台开发4: 实例一:接收普通消息和接收事件推送
  5. initiator、target、lun之间的映射
  6. 巴比特 | 元宇宙每日必读:HTC 宣布推出首款元宇宙手机,售价约2700元人民币,都有哪些新玩法?...
  7. soundwire修改服务器,SoundWire Server,电脑声音实时同步到移动手机
  8. 使用开源软件Prometheus监控企业内部应用
  9. android epub 开源,EPUB SDK
  10. 【luogu P3426】SZA-Template(字符串)(KMP)