Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python学习笔记(4)——groupby
自学《python编程从入门到实践》的第16章的16.2.6 收盘价均值,讲解得不够详细,幸而在论坛看到了相关文章 ”Python编程:从入门到实践 json练习详解~~“,解决了大部分困惑。非常感谢!
my_sunshine
2020/09/15
8430
是涨是跌?我用Python预测股票价格趋势
要预测股票趋势,通常需要历史的各类交易价格数据来进行模型的搭建。“历史惊人的相似”是股票趋势判断问题的重要假设。通常我们的思维是,股票某一天的交易价格受到该交易日前面的许多交易日的影响,而股价的确定则是由买卖市场双方共同决定的。当我们收盘股票数据集时,应该将多个开盘日归入参考范畴。本文将前 N 个交易日作为一个时间窗口,并设为训练集,将第 N+1 个交易日作为测试集,预测测第 N+2 个交易日的股票趋势情况。通过滑动窗口的方法,设每次滑动窗口移动的距离为 1(即 1 天),则在初始 T 个交易日上能够构造多个训练集和测试集,且训练样本的数据始终等于 N。
数据STUDIO
2021/06/24
6.4K0
Python分析【公众号】历史评论,看看大家的留言情况!
辰哥玩公众号有一段时间了,这期文章分析一波读者的留言情况,不仅可以对公众号的各位铁粉一目了然,还可以通过分析的结果对公众号的经营进行更好的规划。如读者留言的内容通常是内容是什么?关注的点是什么等等这些。
Python研究者
2021/07/20
4570
NumPy Beginner's Guide 2e 带注释源码 九、使用 Matplotlib 绘图
# 来源:NumPy Biginner's Guide 2e ch9 绘制多项式函数 import numpy as np import matplotlib.pyplot as plt # 创建函数 func = x ** 3 + 2 * x ** 2 + 3 * x + 4 # poly1d 根据系数数组创建函数,高项系数在前 func = np.poly1d(np.array([1, 2, 3, 4]).astype(float)) # x 值是 -10 ~ 10 取 30 个点 x = n
ApacheCN_飞龙
2019/02/15
7500
NumPy Beginner's Guide 2e 带注释源码 九、使用 Matplotlib 绘图
【可视化大屏】用Python开发「淄博烧烤」微博热评舆情分析大屏
自从2023.3月以来,"淄博烧烤"现象持续占领热搜流量,体现了后疫情时代众多网友对人间烟火气的美好向往,本现象级事件存在一定的数据分析实践意义。
无双0516
2025/03/19
1830
【可视化大屏】用Python开发「淄博烧烤」微博热评舆情分析大屏
Python进阶笔记
列表生成式即List Comprehensions,是Python内置的非常简单却强大的可以用来创建list的生成式。一般是利用原有的数据结构来生成新的列表。
py3study
2020/01/03
1.1K0
NumPy 初学者指南中文第三版:6~10
NumPy 具有许多从其前身 Numeric 继承的模块。 其中一些包具有 SciPy 对应版本,可能具有更完整的功能。 我们将在下一章中讨论 SciPy。
ApacheCN_飞龙
2023/04/17
2.6K0
NumPy 初学者指南中文第三版:6~10
质量看板开发实践(三):bug柱状图
el-date-picker组件也对应的有4种形式,当切换不同日期维度时,显示对应的日期组件
冰霜
2022/04/07
3.3K0
可视化神器Plotly玩转股票图
本文是可视化神器Plotly绘图的第7篇,讲解的是如何通过Plotly来绘制与股市相关的图形,比如基础K线图、OHLC图等。
皮大大
2021/04/28
6.8K0
可视化神器Plotly玩转股票图
Talib学习笔记(四)- 波动率指标学习
在前三篇文档中我们大概学习了成交量指标、价格指标和重叠研究指标(均线相关),其中成交量就是多空双方的力量对比指标,经过作图发现能量潮和ADOSC指标比较好,其均通过成交量的统计得出。如果其趋势向上表示上涨力量较大,反正空方占优。但是再具体实践中还需要对风格切换的关键点进行仔细翔实。除此之外就是价格指标,价格指标只是单纯的试图通过数学计算得出能够代替所有交易价格的这样一个价格,通过仔细思考,我们发现典型价格比较好,因为每日的交易的最终图像是五边形,使用收盘价做处理其实是合理的,我记得有一篇论文他们就是采用的收盘价做五边形的定点。当然加权收盘价也是比较重要的,加权收盘价通过给收盘价更好的次数,使得加权收盘价总是大于或小于真实的收盘价。为什么这么计算的原因在于一个基础性的假设,这个假设就是收盘价在某种程度上代表未来,加权收盘价就是放大这种效果,通过与趋势线的对比可能会好于真正的收盘价的比较。在最后的一篇文档中,我们学习了重叠性研究指标,发现重叠性就是均线指标。首先就是布林带,通过对收盘价的统计,画出价格的的波动范围,主要用上轨、下轨和中轨,中轨采用的是均线。这其中有几种形态分别为喇叭口和收紧。这种形态的产生也和布林线的统计有关,一般来说横盘是收紧,上升和下降均为喇叭口。这块和kdj结合比较好,因为kdj就是用来识别底部的指标,而布林线能够提供上升的参考。在均线指标中还有更加平滑的T3和对当日给予更大权重的移动加权平均法(原理和典型价格一样)。都有不错的表现,在实际使用中我们可以采用T3才替代趋势线(均线)。
写一点笔记
2020/11/02
4.5K0
Talib学习笔记(四)- 波动率指标学习
python基础——json数据及pyecharts入门使用【用pyecharts生成折线图,地图,和动态柱状图】
📝前言: 这篇文章主要记录一下使用pyecharts生成GDP折线图的步骤和过程
用户11029137
2024/04/15
4200
python基础——json数据及pyecharts入门使用【用pyecharts生成折线图,地图,和动态柱状图】
盘一盘 Python 系列 7 - PyEcharts
Echarts 是一个由百度开源的数据可视化工具,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可,而 Python 就不用多说了。
用户5753894
2019/07/05
2.7K0
盘一盘 Python 系列 7 - PyEcharts
基于LSTM的比特币价格预测模型(系列1)
设计并训练由输入/训练数据(比特币价格时间序列/60min)驱动的LSTM,预测一小时内的比特币价格,从而在整个测试数据样本中实现真实价格和预测价格之间的最小均方根误差(RMSE)。
量化投资与机器学习微信公众号
2020/04/13
4.1K0
技巧|Python 制作动态图表的正确方式
关于动态图表,相信大家都或多或少的接触过一些,如果是代码水平比较不错的,可以选择 Matplotlib,当然也可以使用 pyecharts 的相关功能,不过这些工具都专注于图表的制作,也就是对于图表的数据,你是需要自行转换的。而今天介绍的这个可视化图库,完美的结合了 Pandas 数据格式,又辅以 Matplotlib 的强大功能,使得我们制作动图变得容易的多了。
码农向前冲
2021/12/22
1.5K2
技巧|Python 制作动态图表的正确方式
CCF推荐系统项目代码解读!
本文以CCF大数据与计算智能大赛(CCF BDCI)图书推荐系统竞赛为实践背景,使用Paddle构建用户与图书的打分模型,借助Embedding层来完成具体的匹配过程。后台回复 211208 可获取完整代码。
Datawhale
2021/12/13
8000
CCF推荐系统项目代码解读!
又再肝3天,整理了65个Matplotlib案例,这能不收藏?
Matplotlib 作为 Python 家族当中最为著名的画图工具,基本的操作还是要掌握的,今天就来分享一波
周萝卜
2021/11/08
2.6K0
如何用Jupyter Notebook制作新冠病毒疫情追踪器?
新冠肺炎已在全球范围内爆发。为了解全球疫情分布情况,有技术人员使用Jupyter Notebook绘制了两种疫情的等值线地图(choropleth chart)和散点图。
AI科技大本营
2020/03/18
8130
看完这篇文章,我彻底爱上了Python动态图表!
关于动态条形图,小F以前推荐过「Bar Chart Race」这个库。三行代码就能实现动态条形图的绘制。
小F
2020/12/16
8230
看完这篇文章,我彻底爱上了Python动态图表!
盘一盘 Python 系列 7 - PyEcharts (v1.0)
有读者说〖PyEcharts〗一贴里的图美如画,但是版本是 pyecharts v0.5,用现在 v1.0 来运行会出错,建议我再写篇 pyecharts v1.0 的。我最不喜欢让读者失望,这不我就来了。
用户5753894
2019/12/17
1.4K0
盘一盘 Python 系列 7 - PyEcharts (v1.0)
盘一盘 Python 系列 4 - Pandas (上)
Pandas 是 Python 为解决数据分析而创建的,详情看官网 (https://pandas.pydata.org/)。 在使用 pandas 之前,需要引进它,语法如下:
用户5753894
2019/07/05
6.4K0
盘一盘 Python 系列 4 - Pandas (上)
相关推荐
python学习笔记(4)——groupby
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验