import json import pygal import math from itertools import groupby # 提取json数据 filename = 'btc_close_2017.json' with open(filename) as f: btc_data = json.load(f) dates = [] months = [] weeks = [] weekdays = [] closes = [] for btc_dict in btc_data: try: date = btc_dict['date'] month = int(btc_dict['month']) week = int(btc_dict['week']) weekday = btc_dict['weekday'] close = int(float(btc_dict['close'])) # python不能把小数字符串直接转成int except ValueError as e: print(e) else: dates.append(date) months.append(month) weeks.append(week) weekdays.append(weekday) closes.append(close) # print("{} is month {} week {} , {} , the close price is {} RMB".format(date,month,week,weekday,close)) # 使用pygal画折线图 line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) # x_label_rotation让X轴上的数据顺时针旋转20°,show_minor_x_labels不用显示所有的X轴标签 line_chart.title = '收盘价' line_chart.x_labels = dates N = 20 line_chart.x_labels_major = dates[::N] # X轴坐标每隔20天显示一次 # line_chart.add('收盘价', closes) # line_chart.render_to_file('收盘价折线图.svg') # 时间序列特征(使用math函数的对数) close_log = [math.log10(x) for x in closes] line_chart.add('log收盘价', close_log) line_chart.render_to_file('收盘价对数变换折线图(¥).svg') 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') draw_line(months[:idx_month], closes[:idx_month], '收盘价月日均值(¥)', '月日均值') idx_week = dates.index('2017-12-11') draw_line(weeks[1:idx_week], closes[1:idx_week], '收盘价周日均值(¥)', '周日均值') idx_week = dates.index('2017-12-11') wd = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] weekdays_int = [wd.index(w) + 1 for w in weekdays[1:idx_week]] line_chart_weekday = draw_line(weekdays_int, closes[1:idx_week], '收盘价星期均值(¥)', '星期均值') line_chart_weekday.x_labels = ['周一', '周二', '周三', '周四', '周五', '周六', '周日'] line_chart_weekday.render_to_file('收盘价星期均值(¥).svg') with open('收盘价Dashboard.html', 'w', encoding='utf8') as html_file: html_file.write('收盘价\n') for svg in ['die_visual.svg', 'die_visuals.svg', '收盘价周日均值(¥).svg', '收盘价对数变换折线图(¥).svg', '收盘价折线图.svg', '收盘价星期均值(¥).svg', '收盘价月日均值(¥).svg']: html_file.write('\n'.format(svg)) html_file.write('')
第六课--json数据的使用和分析
关注
打赏