前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python学习笔记(3)——Python编程:从入门到实践 json练习详解~~

python学习笔记(3)——Python编程:从入门到实践 json练习详解~~

作者头像
my_sunshine
修改于 2020-09-17 07:41:46
修改于 2020-09-17 07:41:46
57400
代码可运行
举报
运行总次数:0
代码可运行

Python编程:从入门到实践 json练习详解~~

python编程从入门到实践》的第16章的16.2.6 收盘价均值有一些错误,而且不像之前一样有详细明了的讲解,根据自己的学习情况,跟大家分享一下我对这个程序的理解。 先上代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import pygal
import json
import math
from itertools import groupby


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]):
        y_list = [v for _, v in y]
        xy_map.append([x, sum(y_list)/len(y_list)])
    x_unique, y_mean = [*zip(*xy_map)]
    line_chart = pygal.Line()
    line_chart.title = title
    line_chart.x_labels = x_unique
    line_chart.add(y_legend, y_mean)
    line_chart.render_to_file(title+'.svg')
    return line_chart

filename = 'btc_close_2017_request.json'
with open(filename) as f:
    btc_data = json.load(f)

for btc_dict in btc_data:
    date = btc_dict['date']
    month = int(btc_dict['month'])
    week = int(btc_dict['week'])
    weekday = btc_dict['weekday']
    close = int(float(btc_dict['close']))
    print("{} is month {} week {},{}.The close price is {} RMB".format(date, month, week, weekday, close))


dates, months, weeks, weekdays, closes = [], [], [], [], []
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')
line_chart_month = draw_line(months[:idx_month], closes[:idx_month], '收盘价月日均值', '月日均值')


line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False)
line_chart.title = '收盘价对数变换¥'
line_chart.x_labels = dates
N = 20     # x轴每隔20天显示一次
line_chart.x_labels_major = dates[::N]
close_log = [math.log10(_) for _ in closes]
line_chart.add('log收盘价', close_log)
line_chart.render_to_file('收盘对数变换价折线图¥.svg')
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253

这是制作交易收盘价走势图:JSON格式这一节 16.2.6以前所有的代码,由于之前的代码较为简单,而且作者讲解详细,所以我这里就只跟大家说一下平均值这里的代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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]):
        y_list = [v for _, v in y]
        xy_map.append([x, sum(y_list)/len(y_list)])
    x_unique, y_mean = [*zip(*xy_map)]
    line_chart = pygal.Line()
    line_chart.title = title
    line_chart.x_labels = x_unique
    line_chart.add(y_legend, y_mean)
    line_chart.render_to_file(title+'.svg')
    return line_chart

idx_month = dates.index('2017-12-01')
line_chart_month = draw_line(months[:idx_month], closes[:idx_month], '收盘价月日均值', '月日均值')
123456789101112131415

首先让集合了所有日期的列表dates用index方法取2017-12-01这一天的索引,并将其赋给idx_month,之后months[:idx_month], closes[:idx_month]表示分别对日期列表mongths,收盘价列表closes进行切片处理,取到了索引从0到idx_months的所有值,也就是2017-12-01这一天之前的所有日期,以及对应的收盘价,并将其和另外两个实参传递到函数draw_line中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
xy_map = []
 for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):
        y_list = [v for _, v in y]
        xy_map.append([x, sum(y_list)/len(y_list)])
1234

1.调用函数后,首先定义一个空列表勇于储存,for循环条件中,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)]。第三层的groupby函数,是一个分组聚合函数,key=lambda _: _[0]是用匿名函数Lambda(Lambda表达式基于数学中的λ演算得名)表示的条件。

lambda函数: 语法为 lambda argument_list: expression 表示将传入的参数列表argument_list按照表达式expression进行运算,并将结果返回 其中,argument_list是参数列表,其形式多样,可以传递一个参数,也可以传递两个参数,还可以不传递参数;expression是一个表达式,表达式中出现的参数需要在argument_list中有定义,而且必须是单行。 因此,key=lambda _: _[0]就表示取列表中索引为[0]的值,并将返回值赋给key(下划线表示临时变量,仅用一次之后销毁,这里指代),key这个表达式表示groupby分组的依据,意味着按照元组列表的第一个元素进行分类。每循环一次,得到一组数据,x就是分类的key值。最后循环十一次,x=1~11,y则是对应的元组列表,得到: 1 [(1,5383), (1,5566) …… (1,7835)] 2 [(2,6793), (2,6811) …… (2,8206)] ……

2.y_list = [v for _, v in y] 用列表生成式的方式将元组列表中的值一一取出,形成新的列表赋给y_list,sum(y_list)/len(y_list)则计算出每个月的平均收盘价,与x一起添加到xy_map中,最后得到xy_map=[[1, 6285.870967741936], [2, 7315.714285714285], [3, 7789.032258064516], [4, 8390.466666666667], [5, 12963.935483870968], [6, 18092.166666666668], [7, 17146.16129032258], [8, 26092.645161290322], [9, 26865.633333333335], [10, 35460.67741935484], [11, 51436.166666666664]]

3.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)。

4.line_chart.render_to_file(title+’.svg’) 字符串之间连接需要用‘+’。

5.第51行代码 for _ in closes 原书写成了close(我买的盗版是这样),实际上应为closes。

到这里,这个代码就比较清晰了。最后执行的效果就是这样:

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
亲子编程玩Micro:bit-动力小车“麦昆”
少儿编程之风已经吹进各大城市,编程猫、乐博机器人、童程童美等专业培训机构逐渐进入大家的视野,年龄段已经从K12逐渐降低到幼儿园中班。其实,少儿编程的门槛并不高,它不会让孩子一上手就去接触代码,而是会通过图形、模块、游戏等形式,从声音、光、外形等多种途径,帮助孩子们走进计算机世界。本文以一个父亲的角度,讲述如何与孩子一起,用图形化的方式,构建一个好玩的动力小车。
ShiJiong
2019/09/29
2K0
亲子编程玩Micro:bit-动力小车“麦昆”
LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)
智能小车是以轮子作为移动机构,并且能够实现自主行驶的机器人,又被称为轮式机器人。由于具有智能化的特点,可以应用于不适合人类工作的环境中,例如灾难救援、户外探险等。智能小车有别于遥控小车,因为后者需要操作人员来控制其转向、启停和前进后退,以及控制其速度,常见的模型小车,都属于这类遥控车。智能小车,则可以通过计算机编程来实现其对行驶方向、启停以及速度的控制,无须人工干预,也可以通过修改智能小车的程序来改变它的行驶方式。
不脱发的程序猿
2022/06/14
1.3K0
LabVIEW Arduino无线蓝牙遥控智能车(项目篇—2)
售价近4000的STEAM机器人,除了组装还能教会孩子什么?
这次测评的产品是去年10月Makeblock推出的产品“灵跃模组机器人”。这款产品并没有B端还是C端产品的明确定位。用Makeblock创始人兼CEO王建军的话说是“可B也可C”。
芥末堆看教育
2019/04/24
9200
基于51单片机智能小车的设计与实现转弯避障_基于单片机的智能小车设计
学习智能小车系统,有助于提高搭建系统的能力和对自动控制技术的理解。智能小车是一个较为完整的智能化系统,而智能化的研究已成为我国追赶世界科技水平的重要任务。智能小车有它特有的特点:成本低,涉及的知识面广,易于拓展[1]。整个智能小车系统作为一个完整的系统,从它的原理图的实现到实物的完成的过程,不仅需要深厚的电子方面的知识,还有对电路实现的良好掌握,对于培养学生的实践能力都有重要的意义。智能小车的竞赛在我国各大高校中都受到了重视,吸引了大批的高校学生的兴趣,而且取得了很多优异的成果,为我国推进智能化的进程做出了巨大的贡献,也为智能汽车的发展提供了理论依据[2-3]。只有当把理论和模型应用到实践中,这样的创新才用意义,我们国家这几年在智能化方面的进步越来越快,也推动了我国在国际社会上在智能化方面的话语权。智能小车是智能化的一部分,它的系统里的避障、循迹、红外遥控的技术用到了智能化,将智能化应用到传统技术上是21世纪发展的趋势。我国虽然从改革开放以来大力发展科技创新,但是在智能化的创新水平与国外较发达的国家相比还有巨大的差距,智能竞赛在高校越来越流行,也证明了我国教育在这方面很快会赶上世界上的发展水平。本次设计是以单片机为CPU,通过编程和一些外围电路的设计来实现红外遥控,避障,循迹等功能。最重要的是把模型上的研究应用到实际生活中,智能车辆便做到了这一点[4-6]。在实际应用中比如在倒车的过程中实现的红外警报系统是以智能小车为模型而研发出来的。对于电子知识的热爱与钻研有利于研发更多智能车辆,使我们的生活更加便利、智能化。
全栈程序员站长
2022/11/02
2.4K0
Google 工程师:教你用树莓派 + Arduino + TensorFlow 搭建图像识别小车
从买第一个Arduino套装开始,我接触机器人有好几年了,但直到最近才开始做完整的课题。期间有两项技能为我打开了新世界的大门:Python和Linux。他们背后,是强大的开源社区。掌握了这两样工具的工具(元工具),你感觉网上遍地是趁手的兵器。 上周在公司内部编程培训时,有一句话深得我心:我们是软件工程师,不是程序员。我们的工作不是写程序,而是合理使用工具解决问题。在Google,如果你觉得自己不得不从零开始写某项功能,只是你还没有找到相应的工具罢了。在开源社区更是如此。 这是一个遥控小车,通过红外遥控或
AI研习社
2018/03/29
3.2K0
Google 工程师:教你用树莓派 + Arduino + TensorFlow 搭建图像识别小车
stm32入门教程_单片机STM32
首先你得知道学习stm32,实际就是在学ARM内核,stm32内核就是ARM的; ARM使用RISC精简指令集模式开发; ARM公司全称Acorn Risc Machine; ARM处理器本身是32位设计,但也具备16位指令集,与等价32位处理器相比代码量节省35%,还能具备32位处理器的所有优势; ARM公司是英国的; ARM公司是全球知识产权提供商,他不做生产制造; 全世界超过95%的智能手机和平板电脑都采用ARM架构; 同时日本软银收购了ARM公司,成为物联网的领军者; ARM11系列就是应用到手机上的芯片,包括ARMv6、ARM6T2、ARMv6KZ、ARMv6K; ARM12系列时候,名字就不叫ARM12了,叫成Cortex; 杨桃首页:
全栈程序员站长
2022/10/29
1.7K0
stm32入门教程_单片机STM32
【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)
在我们确定好要实现的功能后,我们要找到实现功能所对应的模块,然后将他们的功能简要列举出来
s-little-monster
2024/08/29
4710
【STM32项目】在FreeRtos背景下的实战项目的实现过程(二)
快速入门 .NET nanoFramework 开发 ESP32-Pico 应用
.NET 支持物联网(IoT) 应用的开发,其提供的.NET IoT 库可以让我们在运行 Windwos 和 Linux 系统的 IoT 设备上运行应用,并利用 GPIO、SPI、I2C、PWM 和串行端口等接口使用数百个传感器、显示器、输入设备。但是这并不适用于受约束的嵌入式设备,比如 ESP32、M5Stack、STM32 等。对于这些受约束的嵌入式设备,.NET nanoFramework 提供了一个很好的方案,适用于这些微控制器,能够为受限嵌入式设备编写托管代码。开发者可以利用熟悉的 IDE Visual Studio 和 .NET(C#) 知识快速编写应用程序,而无需担心微控制器的低层硬件复杂性。更方便的是,使用 Visual Studio 可以直接在真实硬件上编写、部署、调试代码。
桑榆肖物
2023/01/03
3.2K0
快速入门 .NET nanoFramework 开发 ESP32-Pico 应用
【STM32H7教程】第69章 STM32H7的系统bootloader之串口IAP固件升级
完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第69章       STM32H7的系统bootloader之串口I
Simon223
2020/03/06
2.3K0
当DevOps撞上物联网
迄今为止,我们讨论的物联网的基础,基本上是寻常的互联网加上我们无法想象的节点数。我们也看到,在未来的几年中,能以各种形式联网的设备数量将继续呈指数增长。这一增长将是因特网的机器对机器部分。
博文视点Broadview
2020/06/12
8490
当DevOps撞上物联网
STM32单片机介绍_单片机智能控制DIY
第一篇:STM32F103ZET6单片机双串口互发程序设计与实现 第二篇:最简单DIY基于STM32单片机的蓝牙智能小车设计方案 第三篇:最简单DIY基于STM32F407探索者开发板的MPU6050陀螺仪姿态控制舵机程序 第四篇:最简单DIY基于STM32F407探索者开发板和PCA9685舵机控制模块的红外遥控机械臂控制程序 第五篇:注释最详细、代码最简单的STM32+摄像头+显示屏的颜色跟踪电路软硬件方案 第六篇:最简单DIY基于STM32单片机的WIFI智能小车设计方案
全栈程序员站长
2022/11/19
1.1K0
STM32单片机介绍_单片机智能控制DIY
使用二手 gopro 做行车记录仪
自打开了博客以后,一直在写技术说明文,今天打算写点程序以外的东西换换味口。前段时间在某鱼上以 300 元的价格入手了一套完整的 gopro3+ 运动摄像头,带一张 32G SD 卡,两块备用电池,一个无线遥控,以及 N 多配件:
海海
2022/08/31
3.5K7
使用二手 gopro 做行车记录仪
关于华为悦盒EC6108V9的一种比较另类的救砖方法
我手上的这个电视盒子,是2016 年家里办宽带的时候电信送的,在 2020 年疫情期间被我刷机给变砖了
知识分子没文化
2023/07/01
18.3K0
关于华为悦盒EC6108V9的一种比较另类的救砖方法
基于RT-Thread操作系统的 基础四轮组智能车设计与实践
学 校: 同济大学 队伍名称: 智行·龙卷风 参赛队员: 杨怡,韦炳宇,许泽华 带队教师: 张志明,余有灵
全栈程序员站长
2022/09/15
2.8K0
基于RT-Thread操作系统的 基础四轮组智能车设计与实践
JETBOT AI构建指南
这个就是我们目前在官网看见的产品,可以看到还是很简单的。两个差速轮子。一个主板,一个电机驱动模块,一个摄像头
云深无际
2021/02/23
7340
JETBOT AI构建指南
ODrive应用 #1 ODrive入门指南[通俗易懂]
odrivetool 版本: 0.5.1.post0(pip install odrive==0.5.1.post0)
全栈程序员站长
2022/08/27
4.9K0
ODrive应用 #1 ODrive入门指南[通俗易懂]
物理世界交互:Python控制机械臂的AI Agent开发指南
嘿,小伙伴们!你是否曾幻想过自己能像科幻电影中的超级科学家一样,操控着神奇的机械臂,让它在物理世界中灵活舞动,完成各种高难度任务?今天,咱们就一起踏上这充满挑战与惊喜的旅程,探索如何用 Python 开发能控制机械臂的 AI Agent ,开启一段物理世界与代码世界完美融合的奇妙冒险!
小白的大数据之旅
2025/03/19
2270
物理世界交互:Python控制机械臂的AI Agent开发指南
基于STM32设计的避障寻迹小车
根据美国玩具协会在一项研究中,过去几年全球玩具销售增长与GDP的世界平均水平大致相同。但全球玩具市场的内部结构已经占据了巨大的位置变化:传统玩具的市场份额正在下降,高科技电子玩具正在蓬勃发展。全球玩具市场的高科技电子游戏2010年的年销售额增长了67%,但传统玩具的年销售额仅增长了1%。
DS小龙哥
2023/03/06
2.1K0
基于STM32设计的避障寻迹小车
Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
我这里演示一个串口实验,打印 hellow world字符到我们通讯串口助手。下载后解压,注意解压后的路径千万别带中文字符,解压请直接复制到一个没有中文字符的路径的文件夹下面。否则会影响到后面的编译结果!
全栈程序员站长
2022/09/02
2K0
Esp8266学习之旅① 搭建开发环境,开始一个“hellow world”串口打印。
国外DIY牛人教你做Wifi机器人(最全教程)
一、前言 Wifi机器人(Wifi Robot):其实是一辆能通过互联网,或500米以外的笔记本无线设施来远程控制的遥控汽车。由于在车上配备了一个网络摄像头,因此在视野范围之外都能够遥控该车,此外,车上还装了一个喇叭,您可以远程朝人们按喇叭。 我发现Linksys WRT54GL路由器非常的hacker-friendly(黑客友好),它运行Linux和一些已经被反向工程(reverse engineered)了的硬件。世面上有一大批针对这种路由器的固件版本(firmware version)
机器人网
2018/04/23
2.5K0
国外DIY牛人教你做Wifi机器人(最全教程)
推荐阅读
相关推荐
亲子编程玩Micro:bit-动力小车“麦昆”
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验