大家好!一直以来,我都希望能和各位小伙伴在Python数据处理的学习道路上并肩前行,共同进步。今天,咱们继续深入探索数据处理中的数据可视化环节,重点学习Bokeh库的使用以及时间相关数据的处理与展示。掌握这些知识,能让我们更高效地挖掘数据价值,把数据背后的故事清晰地呈现出来。话不多说,开启今天的学习之旅吧!
Bokeh是Python中一个强大的绘图库,它能帮助我们创建交互式的图表,让数据展示更加生动有趣。下面我们来详细学习如何使用Bokeh库绘制不同类型的图表,并为其添加交互元素。
在之前的学习中,我们了解到散点图可以展示数据之间的关系。使用Bokeh库绘制散点图时,我们可以通过定义函数来简化添加数据点的操作。假设我们有一组学生的考试成绩和学习时间的数据,想要绘制散点图观察两者之间的关系。
from bokeh.plotting import figure, show, output_file
# 学生学习时间(小时)
study_time = [5, 7, 4, 8, 6]
# 学生对应的考试成绩
scores = [70, 80, 65, 85, 75]
# 创建图表对象,设置标题
chart = figure(title="学生学习时间与考试成绩关系散点图")
# 定义添加数据点的函数
def scatter_point(chart, x, y):
chart.scatter(x, y, line_color="#6666ee", fill_color="#ee6666", fill_alpha=0.7, size=10)
# 为图表添加数据点
for i in range(len(study_time)):
scatter_point(chart, study_time[i], scores[i])
# 定义输出文件
output_file("study_score_scatter.html")
# 展示图表
show(chart)
在这段代码中,我们首先导入了必要的库函数。然后定义了学习时间和考试成绩的数据列表,接着创建了图表对象并设置标题。之后定义了scatter_point
函数来添加数据点,并通过循环将数据点添加到图表中。最后使用output_file
指定输出的HTML文件名称,再用show
方法在浏览器中展示图表。
基础的散点图虽然能展示数据关系,但无法直观获取每个点的具体信息。Bokeh库可以通过添加交互元素来解决这个问题,比如添加悬停提示。我们以上面的学生数据为例,修改代码为图表添加悬停提示。
from bokeh.plotting import ColumnDataSource, figure, show, output_file
from bokeh.models import HoverTool
# 学生学习时间(小时)
study_time = [5, 7, 4, 8, 6]
# 学生对应的考试成绩
scores = [70, 80, 65, 85, 75]
# 学生姓名
students = ['学生A', '学生B', '学生C', '学生D', '学生E']
# 创建数据源,将数据关联起来
source = ColumnDataSource(data=dict(
study_time=study_time,
scores=scores,
students=students
))
# 定义图表工具,包含悬停工具
TOOLS = "pan,reset,hover"
# 创建图表对象,设置标题和工具
chart = figure(title="学生学习时间与考试成绩关系散点图", tools=TOOLS)
# 定义添加数据点的函数
def scatter_point(chart, x, y, source):
chart.scatter(x, y, source=source, line_color="#6666ee", fill_color="#ee6666", fill_alpha=0.7, size=10)
# 为图表添加数据点
scatter_point(chart,'study_time','scores', source)
# 选择悬停工具
hover = chart.select(dict(type=HoverTool))
# 设置悬停提示内容
hover.tooltips = [
("学生", "@students"),
("学习时间", "$x"),
("考试成绩", "$y")
]
# 定义输出文件
output_file("interactive_study_score_scatter.html")
# 展示图表
show(chart)
在这段代码中,我们新增了学生姓名的数据,并使用ColumnDataSource
将学习时间、考试成绩和学生姓名关联起来。在创建图表时,我们定义了包含悬停工具的TOOLS
变量,并将其传递给图表对象。通过选择悬停工具并设置tooltips
属性,我们为图表添加了悬停提示,当鼠标悬停在数据点上时,就会显示学生姓名、学习时间和考试成绩的具体信息。
Bokeh拥有丰富的示例库(http://bokeh.pydata.org/en/latest/docs/gallery.html ),里面有各种类型的图表示例和代码。我们可以参考这些示例,学习不同图表的绘制方法和交互功能的实现。例如,想要绘制一个带有滑动条来动态调整数据展示范围的图表,就可以在示例库中查找相关代码进行学习和修改,以满足自己的需求。
时间相关数据在数据分析中十分常见,通过合适的方式展示这类数据,能帮助我们更好地发现趋势和规律。
时间序列数据用于展示随时间推移产生的趋势,折线图是展示时间序列数据的常用图表类型。假设我们有某城市过去一年每月的平均气温数据,想要绘制折线图展示气温变化趋势。
from bokeh.plotting import figure, show, output_file
from bokeh.models import DatetimeTickFormatter
import pandas as pd
import numpy as np
# 生成月份数据
months = pd.date_range(start='2023-01-01', end='2023-12-01', freq='M')
# 生成随机的平均气温数据(仅供示例)
temperatures = np.random.randint(0, 30, size=12)
# 创建图表对象,设置标题和坐标轴标签
chart = figure(title="某城市2023年每月平均气温变化", x_axis_label='月份', y_axis_label='平均气温(℃)',
x_axis_type='datetime')
# 绘制折线图
chart.line(months, temperatures, line_width=2)
# 设置x轴时间格式
chart.xaxis.formatter = DatetimeTickFormatter(months=["%B"])
# 定义输出文件
output_file("monthly_temperature_trend.html")
# 展示图表
show(chart)
在这段代码中,我们使用pandas
的date_range
函数生成了代表月份的时间序列数据,并用numpy
的random.randint
函数生成了随机的平均气温数据。创建图表对象时,设置了x_axis_type='datetime'
表示x轴为时间轴。绘制折线图后,通过设置xaxis.formatter
来格式化x轴的时间显示格式。最后定义输出文件并展示图表,就能看到该城市过去一年每月平均气温的变化趋势了。
时间线数据通过标记随时间推移发生的活动、事件和变化来直观地讲述数据故事。虽然Bokeh库没有专门的时间线图表类型,但我们可以通过组合其他图表元素来实现类似效果。例如,我们有一系列历史事件及其发生时间,想要创建一个简单的时间线展示这些事件。
from bokeh.plotting import figure, show, output_file
from bokeh.models import ColumnDataSource
# 历史事件名称
events = ['事件A', '事件B', '事件C', '事件D']
# 事件发生时间(假设为年份)
event_years = [2000, 2005, 2010, 2015]
# 创建数据源
source = ColumnDataSource(data=dict(
events=events,
years=event_years
))
# 创建图表对象,设置标题和坐标轴标签
chart = figure(title="历史事件时间线", x_axis_label='年份', y_axis_label='事件', y_range=events)
# 绘制垂直条表示事件发生时间
chart.vbar(x='years', top='events', width=0.5, source=source)
# 定义输出文件
output_file("historical_events_timeline.html")
# 展示图表
show(chart)
在这段代码中,我们定义了历史事件名称和发生时间的数据列表,使用ColumnDataSource
创建数据源。创建图表对象时,设置y_range
为事件列表,使y轴显示事件名称。通过绘制垂直条(vbar
)来表示每个事件的发生时间,最后定义输出文件并展示图表,这样就实现了一个简单的时间线展示。
今天我们深入学习了Bokeh库的使用,包括绘制散点图、添加交互元素以及利用示例库学习更多图表绘制技巧,同时还学习了时间相关数据的处理与展示方法。这些知识能让我们在数据可视化方面更上一层楼,更好地展示数据背后的信息。
写作这篇博客花费了不少时间和精力,如果它对大家学习Python数据处理有所帮助,希望大家能点赞、评论支持一下。也欢迎大家关注我的博客,后续我会继续分享更多数据处理相关的知识,咱们一起在学习中不断进步!