跟我一起学Python数据处理(六十九):用Bokeh实现数据可视化及时间序列数据处理

跟我一起学Python数据处理(六十九):用Bokeh实现数据可视化及时间序列数据处理

大家好!一直以来,我都希望能和各位小伙伴在Python数据处理的学习道路上并肩前行,共同进步。今天,咱们继续深入探索数据处理中的数据可视化环节,重点学习Bokeh库的使用以及时间相关数据的处理与展示。掌握这些知识,能让我们更高效地挖掘数据价值,把数据背后的故事清晰地呈现出来。话不多说,开启今天的学习之旅吧!

一、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示例库的学习与应用

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)

在这段代码中,我们使用pandasdate_range函数生成了代表月份的时间序列数据,并用numpyrandom.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数据处理有所帮助,希望大家能点赞、评论支持一下。也欢迎大家关注我的博客,后续我会继续分享更多数据处理相关的知识,咱们一起在学习中不断进步!

你可能感兴趣的:(信息可视化,python,开发语言,pandas)