python程式設計從入門到實踐中第十六章中的制作交易收盤價走勢圖的内容
為什麼在下圖中沒有
wd = [“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”]
weekdays_int = [wd.index(w) + 1 for w in weekdays[1:idx_week]]
時的兩個圖結果和有這幾段代碼時的結果差别很大,這段代碼的意思是什麼?下面的兩個資料圖分别為響應結果。
十分困惑希望能得到解答,非常感謝
這裡是源代碼:
import json
#将資料加載到一個檔案中
filename = “btc_close_2017.json”
with open(filename) as f:
btc_data = json.load(f)
dates = []
months = []
weeks = []
weekdays = []
close = []
#列印每一天的資訊
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”])
close.append(int(float(btc_dict[“close”])))
import pygal
import math
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]
line_chart.add(“收盤價”, close)
line_chart.render_to_file(“收盤價折線圖 (¥) .svg”)
#消除非線性趨勢
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 close]
line_chart.add(“log收盤價”, close_log)
line_chart.render_to_file(“收盤價對數變換折線圖 (¥) .svg”)
#收盤價均值
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
new_x_unique=[]
for x in x_unique:
new_x_unique.append(str(x))
line_chart.x_labels = new_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], close[:idx_month], "收盤價月日均值 (¥) ",
“月日均值”)
line_chart_month
#調用收盤價日期星期
idx_week = dates.index(“2017-12-11”)
line_chart_month = draw_line(weeks[1:idx_week], close[1:idx_week], "收盤價周日均值 (¥) ",
“周日均值”)
line_chart_month
#調用收盤價星期均值
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, close[1:idx_week], "收盤價星期均值 (¥) ",
“星期均值”)
line_chart_weekday.x_labels = [“周一”,“周二”,“周三”,“周四”,“周五”,“周六”,“周日”]
line_chart_weekday.render_to_file(“收盤價星期均值 1(¥) .svg”)