让数据可视化更生动:Bokeh与Parsel的完美结合

雅竹代码课堂 2025-04-21 04:46:05

数据可视化是数据分析中不可或缺的一部分,而在Python中,Bokeh和Parsel这两个库的组合让这个过程变得更加简单有趣。Bokeh是一个用于创建交互式可视化的库,支持输出高质量的静态和动态图形。Parsel主要用于从网页抓取数据,并提供灵活的数据提取和处理功能。将这两个库结合在一起,可以让我们从网络上提取数据并以美观的图表形式展示。

通过这两个库的组合,我们可以实现多种强大的功能。首先,我们可以从网页抓取数据,并立即使用Bokeh进行可视化分析;其次,利用Bokeh的交互性特点,用户可以与可视化图表进行交互,深入探索数据;最后,我们可以创建动态更新的数据可视化,实时展示抓取下来的数据。下面,我们来详细看看这些组合功能。

我们先看一个从网页抓取数据并用Bokeh可视化的示例。假设我们想从某个新闻网站获取头条新闻,并生成词云。以下代码展示了如何实现。

import requestsfrom parsel import Selectorfrom wordcloud import WordCloudimport matplotlib.pyplot as plt# 第一步:抓取网页数据url = "https://news.ycombinator.com/"response = requests.get(url)selector = Selector(text=response.text)# 提取头条新闻的标题titles = selector.css('.storylink::text').getall()text = ' '.join(titles)# 生成词云wordcloud = WordCloud(width=800, height=400, background_color='white').generate(text)# 展示词云plt.figure(figsize=(10, 5))plt.imshow(wordcloud, interpolation='bilinear')plt.axis('off')plt.show()

在这个例子中,使用Parsel提取了网页上的头条新闻标题,然后通过WordCloud库生成词云进行可视化。你看到的结果会是一个由常见词组成的云图,给人一种视觉冲击力。

接下来,让我们看看如何结合Bokeh生成交互式条形图。假设我们想要从一个API获取一些销售数据,并用条形图展示。

import requestsimport pandas as pdfrom bokeh.plotting import figure, showfrom bokeh.io import output_notebookfrom bokeh.models import ColumnDataSource# 设置Bokeh输出output_notebook()# 第一步:抓取销售数据url = "https://api.example.com/sales_data"response = requests.get(url)data = response.json()# 将数据转换为DataFramedf = pd.DataFrame(data)# 创建Bokeh数据源source = ColumnDataSource(df)# 创建条形图p = figure(x_range=df['product'], plot_height=350, title="Sales by Product",           toolbar_location=None, tools="")p.vbar(x='product', top='sales', width=0.9, source=source)p.xgrid.grid_line_color = Nonep.y_range.start = 0p.yaxis.axis_label = "Sales"p.xaxis.axis_label = "Product"# 展示条形图show(p)

在这里,我们从API获取了销售数据并将其转换为Pandas DataFrame,随后利用Bokeh创建了一个交互式条形图。用户可以通过鼠标悬停查看每个产品的具体销售额,这样很容易对产品表现做出快速判断。

最后,可以尝试从一个新闻网站抓取并实时展示最新新闻。生成可视觉化的实时数据展示,可以通过结合Bokeh和Parsel来实现。

import requestsfrom parsel import Selectorfrom bokeh.plotting import curdoc, figurefrom bokeh.models import ColumnDataSourcefrom bokeh.io import show# 创建数据源source = ColumnDataSource(data=dict(news=[], time=[]))def update():    url = "https://news.ycombinator.com/"    response = requests.get(url)    selector = Selector(text=response.text)    titles = selector.css('.storylink::text').getall()    news_time = [str(i) for i in range(len(titles))]  # 用简单索引作为时间    # 更新数据源    source.data = dict(news=titles, time=news_time)# 每1分钟更新数据curdoc().add_periodic_callback(update, 60000)# 创建实时新闻展示图p = figure(title="Real-time News", height=350, width=800)p.line(x='time', y='news', source=source)show(p)

这个代码通过创建一个实时更新的图表,展示了从网页抓取到的最新新闻标题。每当新数据被抓取时,条形图将得到更新,这样用户可以快速了解最新动态。

虽然结合这两个库的功能显得颇具挑战,尤其是在数据抓取和可视化做切换时,有些情况可能会让人困惑。比如,使用Parsel提取的数据格式与Bokeh的输入要求不匹配,或在处理大量数据时速度变慢。可以通过确保数据类型一致,以及在Bokeh中的数据更新逻辑做出恰当的优化来解决这些问题。

在数据领域,Bokeh与Parsel的组合为我们带来了无限的可能性。通过简单的代码,你就可以实现从数据抓取到可视化的全过程,享受数据分析与展示的乐趣。倘若你在学习过程中有任何困惑,随时可以通过留言的方式联系我,我会尽力帮助你解决问题。继续加油,在数据可视化的道路上探索更多精彩吧!

0 阅读:0