日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化

發(fā)布時間:2025/3/15 javascript 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

目錄

    • 一、前提準(zhǔn)備
    • 二、將收盤價用可視化圖表示出來
      • 上代碼
      • 運(yùn)行結(jié)果
    • 三、進(jìn)行時間序列分析
      • 上代碼
      • 運(yùn)行結(jié)果
    • 四、收盤價均值
      • 月日均值
      • 周日均值
      • 星期均值
    • 五、數(shù)據(jù)儀盤表

一、前提準(zhǔn)備

btc_close_2017.json文件下載

鏈接:點(diǎn)擊此處
提取碼:zry9

二、將收盤價用可視化圖表示出來

上代碼

# coding = utf-8import json import pygal# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))""" 有了x軸與y軸的數(shù)據(jù),就可以繪制折線圖了。由于數(shù)據(jù)點(diǎn)比較多,x軸要顯示346個日期, 在有限的屏幕上會顯得十分擁擠。因此我們需要pygal的配置參數(shù),對圖形進(jìn)行適當(dāng)?shù)恼{(diào)整 """ # 創(chuàng)建Line實(shí)例時,分別設(shè)置x_label_rotation、show_minor_x_labels作為初始化參數(shù) # x_label_rotation=20讓x軸上的日期標(biāo)簽順時針旋轉(zhuǎn)20°,show_minor_x_labels=False告訴圖形不用顯示所有的x軸標(biāo)簽 line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) line_chart.title = '收盤價(¥)' line_chart.x_labels = dates # x軸坐標(biāo)每隔20天顯示一次 N = 20 line_chart.x_labels_major = dates[::N] line_chart.add('收盤價', close) line_chart.render_to_file('收盤價折線圖(¥).svg')

運(yùn)行結(jié)果


注意:上圖是以網(wǎng)頁的形式表示出來的,在文件目錄下面找到他雙擊

三、進(jìn)行時間序列分析

??進(jìn)行時間序列分析總是期望發(fā)現(xiàn)趨勢,周期性和噪聲,從而能夠描述事實(shí),預(yù)測未來,做出決策。
由上面的折線圖,在每個季度末(3、6、9月)似乎有一些相似的波動。為了驗(yàn)證周期性的假設(shè),我們用python的math模塊來解決這個問題,這里用math里面的以10為底的對數(shù)函數(shù)math.log10計(jì)算收盤價,日期仍保持不變,這種方式稱作半對數(shù)變換。

上代碼

# coding = utf-8import json import pygal import math# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))""" 有了x軸與y軸的數(shù)據(jù),就可以繪制折線圖了。由于數(shù)據(jù)點(diǎn)比較多,x軸要顯示346個日期, 在有限的屏幕上會顯得十分擁擠。因此我們需要pygal的配置參數(shù),對圖形進(jìn)行適當(dāng)?shù)恼{(diào)整 """ # 創(chuàng)建Line實(shí)例時,分別設(shè)置x_label_rotation、show_minor_x_labels作為初始化參數(shù) # x_label_rotation=20讓x軸上的日期標(biāo)簽順時針旋轉(zhuǎn)20°,show_minor_x_labels=False告訴圖形不用顯示所有的x軸標(biāo)簽 line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) line_chart.title = '收盤價對數(shù)變換(¥)' line_chart.x_labels = dates # x軸坐標(biāo)每隔20天顯示一次 N = 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('收盤價對數(shù)變換折線圖(¥).svg')

運(yùn)行結(jié)果

四、收盤價均值

由于需要將函數(shù)按月份,數(shù)據(jù),周幾分組,再計(jì)算每組的均值,因此導(dǎo)入python標(biāo)準(zhǔn)庫itertools的函數(shù)groupby

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關(guān)注!
歡迎關(guān)注微信公眾號:寶藏女孩的成長日記
如有轉(zhuǎn)載,請注明出處(如不注明,盜者必究)

月日均值

# coding = utf-8import json import pygal import math from itertools import groupby# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))def draw_line(x_data, y_data, title, y_legend):xy_map = []#將x、y軸的數(shù)據(jù)進(jìn)行合并排序再進(jìn)行分組for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):y_list = [v for _, v in y]#求出每組的均值,存儲到xy_map變量中xy_map.append([x, sum(y_list) / len(y_list)])#將xy_map中存儲的x軸y軸的數(shù)據(jù)分離x_unique, y_mean = [*zip(*xy_map)]line_chart = pygal.Line()line_chart.title = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file(title + '.svg')return line_chartidx_month = dates.index('2017-12-01') line_chart_month = draw_line(months[:idx_month], close[:idx_month], '收盤價月日均值(¥)', '月日均值') line_chart_month

運(yùn)行結(jié)果

周日均值

# coding = utf-8import json import pygal import math from itertools import groupby# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))def draw_line(x_data, y_data, title, y_legend):xy_map = []# 將x、y軸的數(shù)據(jù)進(jìn)行合并排序再進(jìn)行分組for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):y_list = [v for _, v in y]# 求出每組的均值,存儲到xy_map變量中xy_map.append([x, sum(y_list) / len(y_list)])# 將xy_map中存儲的x軸y軸的數(shù)據(jù)分離x_unique, y_mean = [*zip(*xy_map)]line_chart = pygal.Line()line_chart.title = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file(title + '.svg')return line_chart""" 2017-1-02 --- 2017-12-10 (前49周)的日均值 2017年1月1日是周日,歸屬為2016年52周,因此2017年的第一周從2017年1月2日開始,取數(shù)時需要將第一天去掉 另外,2017年第49周周日是2017年12月10日,因此我們通過dates查找2017-12-11的索引位置,確定周數(shù)和收盤價的取值范圍 """ idx_weeks = dates.index('2017-12-11') line_chart_weeks = draw_line(weeks[1:idx_weeks], close[1:idx_weeks], '收盤價周日均值(¥)', '周日均值') line_chart_weeks

運(yùn)行結(jié)果

星期均值

# coding = utf-8import json import pygal import math from itertools import groupby# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))def draw_line(x_data, y_data, title, y_legend):xy_map = []# 將x、y軸的數(shù)據(jù)進(jìn)行合并排序再進(jìn)行分組for x, y in groupby(sorted(zip(x_data, y_data)), key=lambda _: _[0]):y_list = [v for _, v in y]# 求出每組的均值,存儲到xy_map變量中xy_map.append([x, sum(y_list) / len(y_list)])# 將xy_map中存儲的x軸y軸的數(shù)據(jù)分離x_unique, y_mean = [*zip(*xy_map)]line_chart = pygal.Line()line_chart.title = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file(title + '.svg')return line_chart""" 繪制每周中各天的均值 為了使用完整的時間段,還像前面那樣取2017-01-02----2017-12-10的數(shù)據(jù),同樣通過dates來查找2017-12-11的索引位置,確定周數(shù)和收盤價的取數(shù)范圍 但是,由于這里的周幾是字符串,按周一到周日的順序排列,而不是單詞首字母的順序,繪圖x軸標(biāo)簽的順序會有問題。 原來的周幾都是英文單詞,還可以將其調(diào)整為中文 """ idx_weeks = dates.index('2017-12-11') # 列出一周7天的英語單詞,將weekdays的內(nèi)容轉(zhuǎn)換為1-7的整數(shù) wd = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] weekdays_int = [wd.index(w) + 1 for w in weekdays[1:idx_weeks]]line_chart_weekday = draw_line(weekdays_int, close[1:idx_weeks], '收盤價星期均值(¥)', '星期均值') line_chart_weekday.x_labels = ['周一', '周二', '周三', '周四', '周五', '周六', '周天'] line_chart_weekday.render_to_file('收盤價星期均值(¥).svg')

運(yùn)行結(jié)果

五、數(shù)據(jù)儀盤表

前面已經(jīng)繪制了五幅圖,分別是收盤價折線圖,收盤價對數(shù)變換折線圖,收盤價月均值,收盤價周均值,收盤價星期均值,每個svg文件打開都是獨(dú)立的頁面,如果我們能夠?qū)⑺麄冋显谝黄?#xff0c;就可以很方便進(jìn)行長期管理、檢測和分析。另外,新的圖表也可以十分方便地加入進(jìn)來,這樣就形成了一個數(shù)據(jù)儀表盤

# coding = utf-8import json import pygal import math from itertools import groupby# import requests """下載收盤數(shù)據(jù)(注明:這個url有問題,我用多臺電腦測試了都是報(bào)錯的,但是方法是沒錯的,直接從網(wǎng)上下載了json文件,見btc_close_2017.json)""" # json_url = 'https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json' # # req = requests.get(json_url) # #將數(shù)據(jù)寫入文件 # with open('btc_close_2017_request.json','w') as f: # f.write(req.text) # file_requests =req.json()"""將數(shù)據(jù)加載到一個列表當(dāng)中""" filename = 'btc_close_2017.json' with open(filename) as f:# 將數(shù)據(jù)存儲在btc_data中btc_date = json.load(f)# 創(chuàng)建5個列表,分別存儲日期和收盤價 dates = [] months = [] weeks = [] weekdays = [] close = [] # 打印每一天的信息 for btc_dict in btc_date: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'])))# 創(chuàng)建Line實(shí)例時,分別設(shè)置x_label_rotation、show_minor_x_labels作為初始化參數(shù) # x_label_rotation=20讓x軸上的日期標(biāo)簽順時針旋轉(zhuǎn)20°,show_minor_x_labels=False告訴圖形不用顯示所有的x軸標(biāo)簽 line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) line_chart.title = '收盤價(¥)' line_chart.x_labels = dates # x軸坐標(biāo)每隔20天顯示一次 N = 20 line_chart.x_labels_major = dates[::N] line_chart.add('收盤價', close) line_chart.render_to_file('收盤價折線圖(¥).svg')# 創(chuàng)建Line實(shí)例時,分別設(shè)置x_label_rotation、show_minor_x_labels作為初始化參數(shù) # x_label_rotation=20讓x軸上的日期標(biāo)簽順時針旋轉(zhuǎn)20°,show_minor_x_labels=False告訴圖形不用顯示所有的x軸標(biāo)簽 line_chart = pygal.Line(x_label_rotation=20, show_minor_x_labels=False) line_chart.title = '收盤價對數(shù)變換(¥)' line_chart.x_labels = dates # x軸坐標(biāo)每隔20天顯示一次 N = 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('收盤價對數(shù)變換折線圖(¥).svg') line_chartdef 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 = titleline_chart.x_labels = x_uniqueline_chart.add(y_legend, y_mean)line_chart.render_to_file(title + '.svg')return line_chartidx_month = dates.index('2017-12-01') line_chart_month = draw_line(months[:idx_month], close[:idx_month], '收盤價月日均值(¥)', '月日均值') line_chart_monthidx_week = dates.index('2017-12-11') line_chart_week = draw_line(weeks[1:idx_week], close[1:idx_week], '收盤價周日均值(¥)', '周日均值') line_chart_weekidx_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('收盤價星期均值(¥).svg') line_chart_weekdaywith open('收盤價Dashboard.html', 'w', encoding='utf8') as html_file:html_file.write('<html><head><title>收盤價Dashboard</title><meta charset="utf-8"></head><body>\n')for svg in ['收盤價折線圖(¥).svg', '收盤價對數(shù)變換折線圖(¥).svg', '收盤價月日均值(¥).svg','收盤價周日均值(¥).svg', '收盤價星期均值(¥).svg']:html_file.write(' <object type="image/svg+xml" data="{0}" height=500></object>\n'.format(svg))html_file.write('</body></html>')

運(yùn)行結(jié)果

注意,可放大!
學(xué)習(xí)《python編程從入門到實(shí)戰(zhàn)》16章第二節(jié)。
以上就是全部內(nèi)容啦,如果有不懂的小伙伴歡迎提出來傲!

https://blog.csdn.net/hanhanwanghaha寶藏女孩 歡迎您的關(guān)注!
歡迎關(guān)注微信公眾號:寶藏女孩的成長日記
如有轉(zhuǎn)載,請注明出處(如不注明,盜者必究)

總結(jié)

以上是生活随笔為你收集整理的数据分析JSON板块的基本使用(以分析比特币收盘价为例),附完整的Python代码及json文件详解---数据可视化的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。