天天看點

python程式設計從入門到實踐第十六章制作交易收盤價走勢圖

python程式設計從入門到實踐中第十六章中的制作交易收盤價走勢圖的内容

為什麼在下圖中沒有

wd = [“Monday”, “Tuesday”, “Wednesday”, “Thursday”, “Friday”, “Saturday”, “Sunday”]

weekdays_int = [wd.index(w) + 1 for w in weekdays[1:idx_week]]

時的兩個圖結果和有這幾段代碼時的結果差别很大,這段代碼的意思是什麼?下面的兩個資料圖分别為響應結果。

十分困惑希望能得到解答,非常感謝

python程式設計從入門到實踐第十六章制作交易收盤價走勢圖
python程式設計從入門到實踐第十六章制作交易收盤價走勢圖
python程式設計從入門到實踐第十六章制作交易收盤價走勢圖
python程式設計從入門到實踐第十六章制作交易收盤價走勢圖

這裡是源代碼:

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”)