每日python库:数据分析处理与科学计算(15)

Python库的多样性使得它们可以在不同的应用场景中发挥作用,不同场景下同一个库可能拥有不同的功能,本系列未来会有不同的分类,可能会出现相同的库。数量很多,慢慢整理。文中的示例都是最基础的用法,有些就顺手写了,有些就丢给Ai,看个乐就行。

1. Optuna – 超参数优化

功能: Optuna 是一个自动超参数优化框架,支持各种优化算法。

使用场景:

  • 机器学习模型的超参数调优。
  • 优化深度学习网络结构。
  • 实验设计和策略优化。

示例:

import optuna

def objective(trial):
x = trial.suggest_float('x', -10, 10)
return (x - 2) ** 2

# 创建一个研究对象
study = optuna.create_study(direction='minimize')
study.optimize(objective, n_trials=100)

# 打印最优值和参数
print(f"最优值: {study.best_value}")
print(f"最优参数: {study.best_params}")

2. PyFVCOM – 用于海洋模拟的有限体积法

功能: PyFVCOM 是 FVCOM (Finite Volume Coastal Ocean Model) 的 Python 接口,用于海洋模拟。

使用场景:

  • 海洋流动和水质模拟。
  • 海岸工程和环境研究。
  • 海洋物理过程的模拟。

示例:

from pyfvcom import read_file

# 读取 FVCOM 输出文件
data = read_file('fvcom_output.nc')

# 打印一些基本信息
print(f"Time steps: {data.time.shape[0]}")
print(f"Number of nodes: {data.node.shape[0]}")
print(f"Number of elements: {data.elem.shape[0]}")

# 访问某个变量,比如温度
print(f"Temperature at first time step: {data.temperature[:, 0]}")

3. pythermalcomfort – 热舒适性计算

功能: pythermalcomfort 是一个用于计算热舒适指标的库。

使用场景:

  • 建筑环境中的热舒适分析。
  • 人体热舒适度评估。
  • 环境控制系统设计。

示例:

from pythermalcomfort.models import pmv_ppd

# 计算 PMV (预测平均投票) 和 PPD (预测百分比不满意)
pmv, ppd = pmv_ppd(
ta=25, # 室温
tr=25, # 辐射温度
vel=0.1, # 空气流速
rh=50, # 相对湿度
met=1.2, # 代谢率
clo=0.5 # 衣着绝缘性
)

print(f"PMV: {pmv}, PPD: {ppd}")

4. SpiceyPy – NASA SPICE 库的 Python 绑定

功能: SpiceyPy 是 NASA SPICE 工具集的 Python 接口,用于天体力学和空间任务计算。

使用场景:

  • 轨道计算和天体位置确定。
  • 空间任务规划和分析。
  • 天文数据处理和可视化。

示例:

from spiceypy import spice

# 加载 SPICE 内核
spice.furnsh('de430.bsp')
spice.furnsh('naif0012.tls')

# 获取地球和月球的位置
et = spice.str2et('2023-10-10')
earth_pos, lt = spice.spkpos('Earth', et, 'J2000', 'NONE', 'SUN')
moon_pos, lt = spice.spkpos('Moon', et, 'J2000', 'NONE', 'SUN')

print(f"Earth position: {earth_pos}")
print(f"Moon position: {moon_pos}")

5. mordred – 分子描述符生成库

功能: Mordred 是一个用于生成分子描述符的库,适用于化学信息学。

使用场景:

  • 分子性质预测和分析。
  • 药物设计和虚拟筛选。
  • 化学信息学研究。

示例:

from mordred import Calculator, descriptors

# 创建计算器
calc = Calculator(descriptors, ignore_3D=True)

# 假设有一个分子对象 mol
# mol = ...

# 计算描述符
result = calc(mol)

# 打印描述符
for desc in result:
print(f"{desc.__class__.__name__}: {desc.value}")

6. pyswmm – 下水道模型的 Python 接口

功能: pyswmm 是 SWMM (Storm Water Management Model) 的 Python 接口,用于城市排水系统模拟。

使用场景:

  • 城市排水系统设计和分析。
  • 降雨径流模拟。
  • 污水处理系统优化。

示例:

from pyswmm import Simulation

# 启动模拟
with Simulation('example.inp') as sim:
# 模拟运行
for step in sim:
# 在每一步可以进行操作或获取数据
pass

# 获取模拟结果
print(f"Total rainfall: {sim['Total Rainfall']} mm")

7. SDSS – 星系数据库分析工具

功能: SDSS (Sloan Digital Sky Survey) 提供了 Python 工具来分析其星系数据库。

使用场景:

  • 天文学数据分析。
  • 星系分类和研究。
  • 宇宙学研究。

示例:

from sdss import SDSS

# 初始化 SDSS 连接
sdss = SDSS()

# 查询一些星系数据
query = "SELECT objid, ra, dec, u, g, r, i, z FROM PhotoObj WHERE type = 3"
results = sdss.query(query)

# 打印前几个结果
for row in results[:5]:
print(row)

8. mne-tools/mne-python – EEG、MEG 数据分析

功能: MNE-Python 是用于分析脑电图(EEG)和磁脑图(MEG)数据的工具包。

使用场景:

  • 脑电信号处理和分析。
  • 神经科学研究。
  • 脑机接口开发。

示例:

import mne

# 读取 EEG 数据
raw = mne.io.read_raw_fif('sample_audvis_filt-0-40_raw.fif')

# 应用滤波器
raw.filter(1., 40., fir_design='firwin')

# 绘制数据
raw.plot()

# 进行事件标记
events = mne.find_events(raw)

# 定义事件 ID
event_id = {'auditory/left': 1, 'auditory/right': 2}

# 提取事件
epochs = mne.Epochs(raw, events, event_id, tmin=-0.2, tmax=0.5, preload=True)

# 绘制事件平均波形
epochs['auditory'].average().plot()

9. pyphs – 物理建模和符号计算

功能: pyphs 是一个用于物理系统建模和符号计算的 Python 库。

使用场景:

  • 物理系统的动态建模。
  • 符号计算和系统分析。
  • 控制系统设计。

示例:

from pyphs import PortHamiltonianSystem

# 定义一个简单的物理系统
system = PortHamiltonianSystem(
H = "0.5 * x**2 + 0.5 * y**2", # 哈密顿量
z = ["x", "y"], # 状态变量
u = ["u"], # 输入
y = ["y"] # 输出
)

# 生成系统方程
system.generate()

# 打印系统矩阵
print(system.M)
print(system.J)
print(system.R)

10. GridPy – 电力网模拟

功能: GridPy 是一个用于电力系统模拟和分析的 Python 库。

使用场景:

  • 电力系统的动态模拟。
  • 电力市场分析。
  • 电网规划和优化。

示例:

from gridpy import Grid

# 创建一个简单电网模型
grid = Grid()

# 添加节点和线路
grid.add_bus('Bus1')
grid.add_bus('Bus2')
grid.add_line('Bus1', 'Bus2', r=0.01, x=0.1)

# 设置负载
grid.add_load('Bus2', p=100, q=50)

# 运行负荷流计算
grid.run_power_flow()

# 打印结果
print(f"Voltage at Bus1: {grid.get_bus_voltage('Bus1')}")
print(f"Voltage at Bus2: {grid.get_bus_voltage('Bus2')}")
上一篇
下一篇