Altair,声明式可视化的优雅之选!

文摘   2024-12-15 00:03   贵州  

点击“蓝字”  关注我们


大家好,我是安夏学姐。今天要和大家分享Python数据可视化库中的一颗明珠 - Altair。作为一个基于Vega和Vega-Lite的声明式可视化库,Altair让我们能够用简洁优雅的方式创建各种漂亮的数据图表。让我们一起来探索这个强大的工具吧!

## 什么是Altair?

Altair是一个声明式的数据可视化库。所谓“声明式”,就像是我们在餐厅点菜 - 你只需要告诉服务员你要什么菜(声明你的需求),而不用关心厨师具体怎么做(实现细节)。使用Altair,我们只需要描述想要的图表类型和数据映射方式,剩下的它都会帮我们搞定。

首先让我们安装并导入必要的库:

```python

# 安装命令:pip install altair vega_datasets

import altair as alt

import pandas as pd

from vega_datasets import data

基础图表制作

让我们从一个简单的散点图开始:


# 加载示例数据

cars = data.cars()

# 创建散点图

chart = alt.Chart(cars).mark_circle().encode(

x='Horsepower',

y='Miles_per_Gallon',

color='Origin'

)

小贴士:Altair的语法非常直观,.mark_circle()指定图形为圆点,.encode()设置数据到视觉属性的映射。


添加交互性

Altair的一大特色是能轻松添加交互性:


brush = alt.selection_interval()

chart = alt.Chart(cars).mark_circle().encode(

x='Horsepower',

y='Miles_per_Gallon',

color=alt.condition(brush, 'Origin', alt.value('lightgray'))

).add_selection(brush)

这段代码创建了一个可以用鼠标框选的交互式散点图,被选中的点会显示颜色,未选中的点变成浅灰色。


组合图表

Altair强大的地方在于可以轻松组合多个图表:


base = alt.Chart(cars).encode(

x='Horsepower:Q'

)

# 创建散点图

points = base.mark_circle().encode(

y='Miles_per_Gallon:Q'

)

# 创建回归线

line = base.transform_regression(

'Horsepower', 'Miles_per_Gallon'

).mark_line()

# 组合图表

chart = points + line

注意事项:在组合图表时,确保基础编码(如x轴)保持一致,这样图表叠加才能正确对齐。


高级功能:分面图

当我们想要按照某个分类变量拆分展示数据时,分面图特别有用:


chart = alt.Chart(cars).mark_circle().encode(

x='Horsepower',

y='Miles_per_Gallon',

color='Origin'

).facet(

column='Origin'

)

保存和分享

Altair创建的图表可以保存为多种格式:


# 保存为HTML

chart.save('my_chart.html')

# 保存为PNG(需要安装selenium和chrome/firefox webdriver)

chart.save('my_chart.png')

实用小技巧

  1. 主题设置
     :

# 使用深色主题

alt.themes.enable('dark')

  1. 图表大小调整
     :

chart = alt.Chart(cars).mark_circle().encode(

x='Horsepower',

y='Miles_per_Gallon'

).properties(

width=500,

height=300

)

  1. 添加标题和描述
     :

chart = alt.Chart(cars).mark_circle().encode(

x='Horsepower',

y='Miles_per_Gallon'

).properties(

title='汽车马力与油耗关系图'

)

练习小任务

  1. 尝试创建一个展示不同原产地汽车重量分布的箱线图
  2. 给散点图添加悬停提示(tooltip)功能
  3. 实现一个带有缩放功能的时间序列图表

小伙伴们,今天的Python数据可视化学习就到这里啦!Altair不仅能帮我们创建漂亮的图表,更重要的是它的声明式语法让代码更易读、易维护。记得动手实践哦,有问题随时在评论区问安夏学姐我。祝大家学习愉快,Python可视化之路越走越宽!


大家好,我是安夏学姐。看到很多小伙伴在调试代码时手足无措,今天我就来和大家深入聊聊Python的调试神器 - pdb。掌握了调试技巧,写代码时就不用担心bug找不到啦!

## pdb是什么?

pdb是Python内置的调试器(debugger),就像是我们的私人侦探,可以帮我们一步步跟踪代码的执行过程,找出问题所在。最棒的是它完全免费,因为是Python标准库的一部分,无需额外安装!

## 基础调试命令

让我们先来看一个简单的例子:

```python

def calculate_sum(n):

total = 0

for i in range(n):

import pdb; pdb.set_trace() # 设置断点

total += i

return total

result = calculate_sum(5)

print(result)

当代码运行到断点处,我们可以使用这些基本命令:


  • n
    (next):执行下一行代码
  • s
    (step):步入函数内部
  • c
    (continue):继续执行直到下一个断点
  • p 变量名
    :打印变量的值
  • l
    (list):显示当前位置的代码
  • q
    (quit):退出调试器


小贴士:我喜欢把这些命令记成:“Never Stop Coding, Print List Quit” 😊


高级调试技巧

1. 条件断点

有时我们只想在特定条件下暂停代码:


def process_list(items):

for i, item in enumerate(items):

import pdb; pdb.set_trace(condition=item > 100) # 只有当item大于100时才会暂停

print(f“Processing item: {item}”)

process_list([50, 150, 75, 200])

2. 后置调试器

遇到异常时自动启动调试器:


import sys

def enable_post_mortem():

import pdb

def exception_hook(exctype, value, traceback):

print('异常发生了!启动调试器...')

pdb.post_mortem(traceback)

sys.excepthook = exception_hook

enable_post_mortem()

def divide_numbers(a, b):

return a / b

result = divide_numbers(10, 0) # 会触发调试器

注意事项:在生产环境中要谨慎使用后置调试器,因为它可能暴露敏感信息。


3. 使用breakpoint()函数

Python 3.7+提供了一个更优雅的方式设置断点:


def complex_calculation(x, y):

result = x * 2

breakpoint() # Python 3.7+的新方式,等同于import pdb; pdb.set_trace()

result = result + y

return result

complex_calculation(5, 3)

实战案例:调试递归函数

让我们通过调试一个递归函数来实践这些技巧:


def fibonacci(n):

breakpoint()

if n <= 1:

return n

return fibonacci(n-1) + fibonacci(n-2)

result = fibonacci(4)

调试步骤:


  1. 使用s命令步入递归调用
  2. 使用p n查看当前n的值
  3. 使用w命令查看调用栈
  4. 使用ud在调用栈中上下移动

进阶调试技巧

1. 使用pdb.run()

import pdb

code = '''

for i in range(5):

print(i)

if i == 3:

print(“找到3了!”)

'''

pdb.run(code)

2. 设置临时变量

在调试模式下,我们可以设置临时变量来辅助调试:


def complex_function():

x = 100

breakpoint()

# 在调试模式下输入:

# temp = x * 2

# p temp

y = x * 2

return y

常见调试陷阱与解决方案

  1. 循环中的断点 :在循环中设置断点时,使用until命令可以执行到下一次循环。


  2. 变量作用域 :在调试模式下,可以使用globals()locals()查看所有可用变量。


  3. 多线程调试 :使用threading.current_thread().name确认当前线程。


练习题

  1. 编写一个冒泡排序函数,并在关键位置设置断点观察排序过程
  2. 使用条件断点调试一个列表处理函数,只在特定元素出现时暂停
  3. 尝试调试一个简单的递归函数,观察调用栈的变化

小伙伴们,今天的Python调试之旅就到这里啦!记住,调试不是可怕的事情,它是帮助我们理解代码运行过程的好帮手。好的调试能力需要多练习,有问题随时在评论区问安夏学姐我哦。祝大家学习愉快,Python调试技能节节高!


·end·

—如果喜欢,快分享给你的朋友们吧—

我们一起愉快的玩耍吧




EV电车视点
优质原创公众号
 最新文章