python从入门到实践:JSON格式
本题目来自:《python编程:从入门到实践》(偷偷告诉你:这是本好书,小白入门python推荐)
准备阶段:
数据来源:https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json
运用到的工具:python爬虫,pygal
主要的步骤是:下载数据——对数据进行分类储存——将数据在图表中体现
主要库的导入
import urllib.request
import json
import pygal
import math
下载数据:
json_url = "https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json"
req = urllib.request.urlopen(json_url)
json = req.read()#将数据写入文件
with open("E://Jupyter.json","wb") as f:
f.write(json)
将下载的数据进行分类储存:
filename = "E://Jupyter.json"
with open(filename) as f:
btc_data = json.load(f)
打印每一天的信息(获取数据过程)
for btc_dict in btc_data:
data = 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(data,month,weekday,weekday,close))#将每个数据打印出来,后续可以不要
到这里为止,如过前两步操作成功的话,我们可以将,前两步取代
绘制图像
dates = []
month = []
weeks = []
weekdays = []
close = []
#每一天信息
for btc_dict in btc_data:
dates.append(btc_dict["date"])
month.append(int(btc_dict["month"]))
weeks.append(int(btc_dict["week"]))
weekdays.append(btc_dict["weekday"])
close.append(int(float(btc_dict["close"])))
#开始绘制图形
line_chart = pygal.Line(x_label_rotation = 20,show_minor_x_labels = True)#此处是将x轴的坐标旋转20度,以及不用显示x轴的标签
line_chart.title = "收盘价"
line_chart.x_label = dates
N = 20 #x轴每隔20天显示一次
line_chart.x_labels_major = dates[::N]
close_log = [math.log10(_) for _ in close]#此处是将数据经行对数化
line_chart.add("收盘价",close_log)
line_chart.render_to_file("收盘对数变换价折现图.svg")
最终的程序:
import urllib.request
import json
import pygal
import math
filename = "E://Jupyter.json"
with open(filename) as f:
btc_data = json.load(f)
dates = []
month = []
weeks = []
weekdays = []
close = []
#每一天信息
for btc_dict in btc_data:
dates.append(btc_dict["date"])
month.append(int(btc_dict["month"]))
weeks.append(int(btc_dict["week"]))
weekdays.append(btc_dict["weekday"])
close.append(int(float(btc_dict["close"])))
#开始绘制图形
line_chart = pygal.Line(x_label_rotation = 20,show_minor_x_labels = True)
line_chart.title = "收盘价"
line_chart.x_label = dates
N = 20 #x轴每隔20天显示一次
line_chart.x_labels_major = dates[::N]
close_log = [math.log10(_) for _ in close]
line_chart.add("收盘价",close_log)
line_chart.render_to_file("收盘对数变换价折现图.svg")
附图: