大数据可视化技术
实验九:数据可视化中的交互
一、实验名称
数据可视化中的交互
二、实验目的
通过该实验的实践,要求学生可以理解可视化交互的概念,掌握Matplotlib和pyecharts的使用过程,能够熟练绘制图表中的可视化交互元素。
三、实验原理
可视化中的交互,可以缓解有限的可视化空间与数据量过载之间的矛盾
可视化中优秀的交互设计,可以让用户更好的理解和分析数据
掌握常见的可视化交互方式,如选择、过滤、溯源等
四、实验步骤
1 2018年北京AQI全年走势图
输入以下代码:
import pandas as pd
from pyecharts import Line
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
attr = df['Date']#取Date的值
v1 = df['AQI']#取AQI的值
line = Line("2018年北京AQI全年走势图", title_pos='center', title_top='18', width=800, height=400)#设置宽高、标题的位置,字体
#添加AQI线,设置点线的形状和颜色
line.add("AQI值:", attr, v1, mark_line=['average'], is_fill=True, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.render("./2018年北京AQI全年走势图.html")#生成html,在该python文件同级目录下
输出结果:
2 2018年北京PM2.5全年走势图
输入以下代码:
import pandas as pd
from pyecharts import Line
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
attr = df['Date']#取Date的值
v1 = df['PM']#取Pm的值
line = Line("2018年北京PM2.5全年走势图", title_pos='center', title_top='18', width=800, height=400)#设置宽高、标题的位置,字体
#添加PM2.5值线,设置点线的形状和颜色
line.add("PM2.5值:", attr, v1, mark_line=['average'], is_fill=True, area_color="#000", area_opacity=0.3, mark_point=["max", "min"], mark_point_symbol="circle", mark_point_symbolsize=25)
line.render("./2018年北京PM2.5全年走势图.html")#生成html,在该python文件同级目录下
输出结果:
3 2018年北京月均AQI走势图
输入以下代码:
import numpy as np
import pandas as pd
from pyecharts import Line
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
dom = df[['Date', 'AQI']]#取Date和AQI的值
list1 = []
#取出月份
for j in dom['Date']:
time = j.split('/')[1]
list1.append(time)
df['month'] = list1
month_message = df.groupby(['month'])#根据月份分组
month_com = month_message['AQI'].agg(['mean'])#求AQi的平均值
month_com.reset_index(inplace=True)#重设索引
month_com_last = month_com.sort_index()#索引排序
attr = ["{}".format(str(i) + '月') for i in range(1, 13)]#月份数据
v1 = np.array(month_com_last['mean'])#取每月的均值
v1 = ["{}".format(int(i)) for i in v1]
line = Line("2018年北京月均AQI走势图", title_pos='center', title_top='18', width=800, height=400)
#添加AQI月均值线,设置点线的形状和颜色
line.add("AQI月均值", attr, v1, mark_point=["max", "min"])
line.render("./2018年北京月均AQI走势图.html")#生成html,在该python文件同级目录下
输出结果:
4 2018年北京月均PM2.5走势图
输入以下代码:
import numpy as np
import pandas as pd
from pyecharts import Line
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
dom = df[['Date', 'PM']]#取Date和PM的值
list1 = []
#取出月份
for j in dom['Date']:
time = j.split('/')[1]
list1.append(time)
df['month'] = list1
month_message = df.groupby(['month'])#根据月份分组
month_com = month_message['PM'].agg(['mean'])#求PM的平均值
month_com.reset_index(inplace=True)#重设索引
month_com_last = month_com.sort_index()#索引排序
attr = ["{}".format(str(i) + '月') for i in range(1, 13)]
v1 = np.array(month_com_last['mean'])
v1 = ["{}".format(int(i)) for i in v1]
line = Line("2018年北京月均PM2.5走势图", title_pos='center', title_top='18', width=800, height=400)
#添加PM2.5,设置点线的形状和颜色
line.add("", attr, v1, mark_point=["max", "min"])
line.render("./2018年北京月均PM2.5走势图.html")#生成html,在该python文件同级目录下
输出结果:
5 2018年北京季度AQI箱形图
输入以下代码:
import pandas as pd
from pyecharts import Boxplot
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
#取Date和AQI的值
dom = df[['Date', 'AQI']]
data = [[], [], [], []]
dom1, dom2, dom3, dom4 = data
#取'第一季度', '第二季度', '第三季度', '第四季度'的AQI
for i, j in zip(dom['Date'], dom['AQI']):
time = i.split('/')[1]
if time in ['1', '2', '3']:
dom1.append(j)
elif time in ['4', '5', '6']:
dom2.append(j)
elif time in ['7', '8', '9']:
dom3.append(j)
else:
dom4.append(j)
boxplot = Boxplot("2018年北京季度AQI箱形图", title_pos='center', title_top='18', width=800, height=400)#设置宽高、标题的位置,字体
x_axis = ['第一季度', '第二季度', '第三季度', '第四季度']#设置x轴的值
y_axis = [dom1, dom2, dom3, dom4]#第一个y轴的值
_yaxis = boxplot.prepare_data(y_axis)#第二个y轴的值
boxplot.add("", x_axis, _yaxis)
boxplot.render("./2018年北京季度AQI箱形图.html")#生成html,在该python文件同级目录下
输出结果:
6 2018年北京季度PM2.5箱形图
输入以下代码:
import pandas as pd
from pyecharts import Boxplot
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
#取Date和PM的值
dom = df[['Date', 'PM']]
data = [[], [], [], []]
#取'第一季度', '第二季度', '第三季度', '第四季度'的PM
dom1, dom2, dom3, dom4 = data
for i, j in zip(dom['Date'], dom['PM']):
time = i.split('/')[1]
if time in ['1', '2', '3']:
dom1.append(j)
elif time in ['4', '5', '6']:
dom2.append(j)
elif time in ['7', '8', '9']:
dom3.append(j)
else:
dom4.append(j)
boxplot = Boxplot("2018年北京季度PM2.5箱形图", title_pos='center', title_top='18', width=800, height=400)#设置宽高、标题的位置,字体
x_axis = ['第一季度', '第二季度', '第三季度', '第四季度']#设置x轴的值
y_axis = [dom1, dom2, dom3, dom4]#第一个y轴的值
_yaxis = boxplot.prepare_data(y_axis)#第二个y轴的值
boxplot.add("", x_axis, _yaxis)
boxplot.render("./2018年北京季度PM2.5箱形图.html")#生成html,在该python文件同级目录下
输出结果:
7 2018年北京全年空气质量情况
输入以下代码:
import pandas as pd
from pyecharts import Pie
#读取数据
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
#根据Quality_grade分组
rank_message = df.groupby(['Quality_grade'])
#同级Quality_grade分组的频数
rank_com = rank_message['Quality_grade'].agg(['count'])
rank_com.reset_index(inplace=True)#重置索引
rank_com_last = rank_com.sort_values('count', ascending=False) #从大到小排序
attr = rank_com_last['Quality_grade'] #取Quality_grade从大到小排序的值
v1 = rank_com_last['count']
pie = Pie("2018年北京全年空气质量情况", title_pos='center', title_top=0) #设置标题的位置
pie.add("", attr, v1, radius=[40, 75], label_text_color=None, is_label_show=True, legend_orient="vertical", legend_pos="left", legend_top="%10")
pie.render('./2018年北京全年空气质量情况.html') #生成html,在该python文件同级目录下
输出结果:
8 2018年北京PM2.5指数日历图
输入以下代码:
import datetime
import random
import numpy as np
import pandas as pd
from pyecharts import HeatMap
#读取数据beijing_AQI_2018.csv
df = pd.read_csv('/home/ubuntu/beijing_AQI_2018.csv')
#v1 = ["{}".format(int(i)) for i in np.array(df['PM'])]#将PM值转成整数
#begin = datetime.date(2018, 1, 1)
#end = datetime.date(2018, 12, 31)
#data = [[str(begin + datetime.timedelta(days=i)), v1[i]] for i in range((end - begin).days + 1)]
#random.randint(1000, 25000)
#data = [[str(begin + datetime.timedelta(days=i)), random.randint(0, 400)] for i in range((end - begin).days + 1)]
dom = df[['Date', 'PM']]#取日期和PM
list1 = []
#将日期和PM压缩后字典后遍历
for i, j in zip(dom['Date'], dom['PM']):
time_list = i.split('/')
#将Date转换成datatime类型
time = datetime.date(int(time_list[0]),int(time_list[1]),int(time_list[2]))
PM = int(j)#PM值取整
list1.append([str(time),str(PM)])
#创建热力图,设置宽高、标题的位置
heatmap = HeatMap("2018年北京PM2.5指数日历图", title_pos='40%', title_top='10', width=800, height=400)
heatmap.add(
"",
list1,
is_calendar_heatmap=True,#是日历天
visual_text_color="#000",
visual_range_text=["", ""],
visual_range=[0, 300],#可视范围
calendar_cell_size=["auto", 30],#日期格子的大小
is_visualmap=True,#采用visualmap透视
calendar_date_range="2018",#日期范围是2018年内
visual_orient="horizontal",#水平
visual_pos="26%",#位置
visual_top="70%",#顶部位置
is_piecewise=True,#显示精确度
visual_split_number=6#对于连续型数据,自动平均切分成几段
)
heatmap.render('./2018年北京PM2.5指数日历图.html')#生成html,在该python文件同级目录下
输出结果:
9 2018年北上广深AQI全年走势图
输入以下代码:
import numpy as np
import pandas as pd
from pyecharts import Line
citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
cityes_AQI = []
for i in range(4):
filename = '/home/ubuntu/'+ citys[i] + '_AQI' + '_2018.csv' # 文件内容:"日期","质量等级","AQI指数","当天AQI排名","PM2.5"
aqi_data = pd.read_csv(filename)
get_data = aqi_data[['Date', 'AQI']] # 提取 "日期","AQI指数"两列内容进行分析
month_for_data = []
for j in get_data['Date']:
time = j.split('/')[1]
month_for_data.append(time)
aqi_data['Month'] = month_for_data # 获取每行数据的月份
# 求每个月AQI平均值
month_data = aqi_data.groupby(['Month'])
month_AQI = month_data['AQI'].agg(['mean'])
month_AQI.reset_index(inplace=True)
month_AQI_average = month_AQI.sort_index()
# 获取每个城市月均AQI的数据,转化为int数据类型
month_AQI_data = np.array(month_AQI_average['mean'])
month_AQI_data_int = ["{}".format(int(i)) for i in month_AQI_data]
cityes_AQI.append(month_AQI_data_int)
months = ["{}".format(str(i) + '月') for i in range(1, 13)]
line = Line("2018年北上广深AQI全年走势图", title_pos='center', title_top='0', width=800, height=400)
line.add("北京", months, cityes_AQI[0], line_color='red', legend_top='8%')
line.add("上海", months, cityes_AQI[1], line_color='purple', legend_top='8%')
line.add("广州", months, cityes_AQI[2], line_color='blue', legend_top='8%')
line.add("深圳", months, cityes_AQI[3], line_color='orange', legend_top='8%')
line.render('./2018年北上广深AQI全年走势图.html')#生成html,在该python文件同级目录下
输出结果:
10 2018年北上广深PM2.5全年走势图
输入以下代码:
import numpy as np
import pandas as pd
from pyecharts import Line
citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
cityes_PM = []
for i in range(4):
filename ='/home/ubuntu/'+ citys[i] + '_AQI' + '_2018.csv' # 文件内容:"日期","质量等级","AQI指数","当天AQI排名","PM2.5"
aqi_data = pd.read_csv(filename)
get_data = aqi_data[['Date', 'PM']] # 提取 "日期","PM2.5"两列内容进行分析
month_for_data = []
for j in get_data['Date']:
time = j.split('/')[1]
month_for_data.append(time)
aqi_data['Month'] = month_for_data # 获取每行数据的月份
# 求每个月PM2.5平均值
month_data = aqi_data.groupby(['Month'])
month_PM = month_data['PM'].agg(['mean'])
month_PM.reset_index(inplace=True)
month_PM_average = month_PM.sort_index()
# 获取每个城市每个月AQI的数据,转化为int数据类型
month_PM_data = np.array(month_PM_average['mean'])
month_PM_data_int = ["{}".format(int(i)) for i in month_PM_data]
cityes_PM.append(month_PM_data_int)
months = ["{}".format(str(i) + '月') for i in range(1, 13)]
line = Line("2018年北上广深PM2.5全年走势图", title_pos='center', title_top='0', width=800, height=400)
line.add("北京", months, cityes_PM[0], line_color='red', legend_top='8%')
line.add("上海", months, cityes_PM[1], line_color='purple', legend_top='8%')
line.add("广州", months, cityes_PM[2], line_color='blue', legend_top='8%')
line.add("深圳", months, cityes_PM[3], line_color='orange', legend_top='8%')
line.render('./2018年北上广深PM2.5全年走势图.html')#生成html,在该python文件同级目录下
输出结果:
11 2018年北上广深全年空气质量情况
输入以下代码:
import numpy as np
import pandas as pd
from pyecharts import Pie, Grid
citys = ['beijing', 'shanghai', 'guangzhou', 'shenzhen']
v = []
attrs = []
for i in range(4):
filename = '/home/ubuntu/'+ citys[i] + '_AQI' + '_2018.csv'# 文件内容:"日期","质量等级","AQI指数","当天AQI排名","PM2.5"
df = pd.read_csv(filename) #pd.read_csv(filename, header=None, names=["Date", "Quality_grade", "AQI", "AQI_rank", "PM"])
#根据Quality_grade分组
Quality_grade_message = df.groupby(['Quality_grade'])
#每组的频数
Quality_grade_com = Quality_grade_message['Quality_grade'].agg(['count'])
Quality_grade_com.reset_index(inplace=True)#重置索引
Quality_grade_com_last = Quality_grade_com.sort_values('count', ascending=False)#从大到小排序
#取Quality_grade的值
Quality_grade_array = Quality_grade_com_last['Quality_grade']
Quality_grade_array = np.array(Quality_grade_com_last['Quality_grade'])
attrs.append(Quality_grade_array)
Quality_grade_count = Quality_grade_com_last['count']
Quality_grade_count = np.array(Quality_grade_com_last['count'])
v.append(Quality_grade_count)
pie1 = Pie("北京", title_pos="28%", title_top="24%")#创建饼图,设置位置
pie1.add("", attrs[0], v[0], radius=[20, 40], center=[30, 27], legend_pos="63%", legend_top="40%", legend_orient="vertical",is_label_show=True)#添加数据,设置图例的属性,显示标签
pie2 = Pie("上海", title_pos="52%", title_top="24%")#创建饼图,设置位置
pie2.add("", attrs[1], v[1], radius=[20, 40], center=[54, 27], is_label_show=False, is_legend_show=False)
#添加数据,设置图例的属性,显示标签
pie3 = Pie("广州", title_pos='28%', title_top='77%')#创建饼图,设置位置
pie3.add("", attrs[2], v[2], radius=[20, 40], center=[30, 80], is_label_show=False, is_legend_show=False)
#添加数据,设置图例的属性,显示标签
pie4 = Pie("深圳", title_pos='52%', title_top='77%')#创建饼图,设置位置
pie4.add("", attrs[3], v[3], radius=[20, 40], center=[54, 80], is_label_show=False, is_legend_show=False)
#添加数据,设置图例的属性,显示标签
grid = Grid("2018年北上广深全年空气质量情况", width=1200)
grid.add(pie1)
grid.add(pie2)
grid.add(pie3)
grid.add(pie4)
grid.render('./2018年北上广深全年空气质量情况.html')#生成html,在该python文件同级目录下
输出结果:
五、实验总结
在实验中,通过实践练习,提高学生使用Matplotlib和pyecharts进行数据可视化交互的熟练程度,总结常见的交互方式,让用户更好的理解和分析数据。
本文章为转载内容,我们尊重原作者对文章享有的著作权。如有内容错误或侵权问题,欢迎原作者联系我们进行内容更正或删除文章。