一.学习知识准备
在数据可视化分析中,按上篇文章,我们要学习numpy科学计算库以及matplotlip可视化分析,这边我用了request库下载了上海的空气质量指数的html文本,并爬取了数据进行json封装,因此我们也要学会从文本获取json数据并解析,然后需要构建numpy数组,用折线图显示出来
- 第一个知识点:request库
Requests 是⽤Python语⾔编写,基于urllib,采⽤Apache2 Licensed开源协议的 HTTP 库。它⽐ urllib 更加⽅便,可以节约我们⼤量的⼯作,完全满⾜HTTP测试需求。
各种请求方式:
import requests
requests.post('http://httpbin.org/post')
requests.put('http://httpbin.org/put')
requests.delete('http://httpbin.org/delete')
requests.head('http://httpbin.org/get')
requests.options('http://httpbin.org/get')
- GET: 请求指定的页面信息,并返回实体主体。
- HEAD: 只请求页面的首部。
- POST: 请求服务器接受所指定的文档作为对所标识的URI的新的从属实体。
- PUT: 从客户端向服务器传送的数据取代指定的文档的内容。
- DELETE: 请求服务器删除指定的页面。
- get 和 post比较常见 GET请求将提交的数据放置在HTTP请求协议头中
- POST提交的数据则放在实体数据中
- 第二个知识点:json库
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,易于人阅读和编写。
JSON 函数
使用 JSON 函数需要导入 json 库:import json,详细请看菜鸟教程
函数 | 描述 |
json.dumps | 将 Python 对象编码成 JSON 字符串 |
json.loads | 将已编码的 JSON 字符串解码为 Python 对象 |
- 第三个知识点:numpy库
NumPy 是一个 Python 的第三方库,代表 “Numeric Python”,主要用于数学/科学计算。 它是一个由多维数组对象和用于处理数组的例程集合组成的库。
使用 Numpy 我们可以轻松进行如下等计算:
- 数组的算数和逻辑运算。
- 傅立叶变换和用于图形操作的例程。
- 与线性代数有关的操作。 NumPy 拥有线性代数和随机数生成的内置函数。
- 第四个知识点:matplotlib的折线图
不论是数据挖掘还是数据建模,都免不了数据可视化的问题。对于Python来说,Matplotlib是最著名的绘图库,它主要用于二维绘图,当然它也可以进行简单的三维绘图(基于spyder)。详细看plot教程
- plt常用参数有:
属性 | 描述 |
xlabel | 设置当前轴的x轴标签:plt.xlabel(‘X标签名’) |
ylabel | 设置当前轴的y轴标签:plt.xlabel(‘y标签名’) |
title | 设置当前轴的标题:plt.title(‘图例标题名’) |
ylim | 获取或设置当前轴的y限制,plt.ylim(0,6)Y轴范围0-6;Xlim同理懒的写了 |
legend | 在轴上放置图例:legend()无参数自动识别,也可用数字指定位置1,2,3,4试着来 |
show | 展示所画图,spyder一般直接运行不需要此步 |
grid | plt.grid()打开或关闭轴网格,网格一样能设置颜色线型 |
rcParams[‘font.sans-serif’] | 图表中文字体:plt.rcParams[‘font.sans-serif’]=[‘SimHei’]微软雅黑;或=[‘Microsoft Yahei’]黑体 |
rcParams[‘axes.unicode_minus’] | 图表轴负数符号显示问题:plt.rcParams[‘axes.unicode_minus’] = False |
二.编码实现
学了上面的四个知识点就可以进行空气质量指数可视化:
import matplotlib.pyplot as plt
import json
import numpy as np
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = False
def process_json_file(filepath):
with open(filepath,mode='r',encoding='utf-8') as f:
citylist = json.load(f)
return citylist
def draw_picture(str_title,city_list):
area_list = []
area_aqi = []
for area in city_list:
area_list.append(area['position_name'])
area_aqi.append(area['aqi'])
aqi = np.arange(10)
for i in range(len(area_aqi)):
aqi[i] = area_aqi[i]
print(aqi)
x = np.arange(10)
y = x+aqi
plt.figure(figsize=(10,5))
plt.plot(x,y)
tickpoints = np.arange(10)
plt.xticks(tickpoints,area_list)
plt.tick_params(labelsize='10')
plt.title(str_title)
plt.ylabel('空气质量指数')
plt.xlabel('上海各地区')
for a,b in zip(x,y):
plt.text(a,b,b,ha='center',va='bottom',fontsize='20')
plt.show()
def main():
city_list = process_json_file('shanghai_aqi.json')
str = city_list[0]
print(str)
str_title = str['area']+'各地区'+str['time_point']+'时间段空气质量指数图'
print(str_title)
draw_picture(str_title,city_list)
if __name__ == '__main__':
main()
三.总结
这几天一直学习这几个库,就实际利用了起来,对以后的数据挖掘分析很有帮助,可视化使枯燥的数据更加直观表达,我相信深入学习这几个库,可以计算出更有价值的数据信息,继续加油!!!