上章是讲得csv,这节是json
1.如何下载数据:
以下代码是利用模块urllib函数urlopen()下载数据
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
from __future__ import (absolute_import,division,print_function,unicode_literals)
try:
from urllib2 import urlopen
except ImportError:
from urllib.request import urlopen
import json
json_url='https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json'
response=urlopen(json_url)
#读取数据
req=response.read()
#将数据写入文件
with open('btc_close_2017_urllib.json','wb') as f:
f.write(req)
#加载json格式
file_urllib=json.loads(req)
print(file_urllib)
还可以使用第三模块request。
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
import requests
json_url='https://raw.githubusercontent.com/muxuezi/btc/master/btc_close_2017.json'
req=requests.get(json_url)
with open('btc_close_2017_request.json','w') as f:
f.write(req.txt)
file_requests=req.json()
提取相关的数据:
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
import json
filename='btc_close_2017.json'
with open(filename) as f:
btc_data=json.load(f)
#打印每天的消息
for btc_dict in btc_data:
date=btc_dict['date']
month=btc_dict['month']
week=btc_dict['week']
weekday=btc_dict['weekday']
close=btc_dict['close']
print("{} is month {}week{},{},the close price is {}RMB".format(date,month,week,weekday,close))
导入json模块,打开文件,把数据加载在btc_data里,遍历它
将字符型装变为数字值:
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
import json
filename='btc_close_2017.json'
with open(filename) as f:
btc_data=json.load(f)
#打印每天的消息
for btc_dict in btc_data:
date=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(date,month,week,weekday,close))
绘制折线图:
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
import json
import pygal
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:
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
closes.append(int(float(btc_dict['close'])))
#可视化处理
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('收盘价',closes)
line_chart.render_to_file("收盘价折线图.svg")
再对数据进行数学分析,找找规律
对数据进行线性分析,做对数变换
#-*-coding:GBK-*-
#-*-coding:utf-8-*-
import json
import pygal
import math
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:
dates.append(btc_dict['date'])
months.append(int(btc_dict['month']))
weeks.append(int(btc_dict['week']))
weekdays.append(btc_dict['weekday'])
closes.append(int(float(btc_dict['close'])))
#可视化处理
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]
closes_log=[math.log10(_) for _ in closes]
line_chart.add('log收盘价',closes_log)
line_chart.render_to_file("收盘价折线图.svg")