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

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

1. VisPy – 大规模数据可视化库

功能: VisPy 是一个高性能的可视化库,专为处理大规模数据集而设计。它利用 GPU 来加速绘图,支持多种图形和交互。

使用场景:

  • 科学计算和大数据可视化。
  • 实时数据可视化,如信号处理、图像处理。
  • 需要高性能图形渲染的应用。

示例:

from vispy import app, scene

# 创建一个简单的场景
canvas = scene.SceneCanvas(keys='interactive')
view = canvas.central_widget.add_view()

# 添加一个点云
scatter = scene.visuals.Markers()
scatter.set_data(np.random.rand(10000, 3), edge_color=None, face_color=(1, 1, 1, .5), size=5)
view.add(scatter)

# 运行应用
canvas.show()
app.run()

2. MayaVi – 科学数据的 3D 可视化

功能: MayaVi 是一个基于 VTK 的 3D 数据可视化工具,提供了丰富的 3D 绘图功能。

使用场景:

  • 科学数据的 3D 展示,如气象数据、地质数据等。
  • 工程中的三维模型展示和分析。
  • 医学成像和可视化。

示例:


from mayavi import mlab

# 创建一个简单的数据集
x, y, z = np.ogrid[-5:5:100j, -5:5:100j, -5:5:100j]
scalars = x * x + y * y + z * z

# 绘制等值面
mlab.contour3d(scalars, opacity=0.3)
mlab.show()

3. NetworkX – 网络图分析和可视化

功能: NetworkX 是一个用于创建、操作和研究复杂网络的库,支持网络分析和可视化。

使用场景:

  • 社会网络分析。
  • 生物网络、互联网拓扑分析。
  • 图论研究和算法实现。

示例:

import networkx as nx
import matplotlib.pyplot as plt

# 创建一个随机图
G = nx.erdos_renyi_graph(100, 0.15)

# 绘制图形
nx.draw(G, with_labels=True)
plt.show()

4. PyDeck – 地理数据可视化

功能: PyDeck 是 Uber 的 Deck.gl 的 Python 接口,用于创建交互式地理数据可视化。

使用场景:

  • 地理信息系统(GIS)数据可视化。
  • 城市规划、交通流量分析等。
  • 实时数据在地图上的展示。

示例:

import pydeck as pdk
import pandas as pd

# 加载数据
df = pd.read_csv('path_to_your_data.csv')

# 定义图层
layer = pdk.Layer(
'ScatterplotLayer',
data=df,
get_position='[longitude, latitude]',
get_radius=100,
get_fill_color='[200, 30, 0, 140]',
pickable=True,
)

# 设置视图
view_state = pdk.ViewState(
latitude=df['latitude'].mean(),
longitude=df['longitude'].mean(),
zoom=10,
pitch=50,
)

# 渲染
r = pdk.Deck(layers=[layer], initial_view_state=view_state)
r.show()

5. Dash – 数据应用和交互式仪表盘框架

功能: Dash 是一个基于 Flask、React 和 Plotly.js 的框架,用于创建交互式 Web 应用和仪表盘。

使用场景:

  • 创建数据驱动的 Web 应用。
  • 业务智能和数据分析的仪表盘。
  • 科学研究和数据展示。

示例:

import dash
import dash_core_components as dcc
import dash_html_components as html
from dash.dependencies import Input, Output
import plotly.express as px

# 初始化应用
app = dash.Dash(__name__)

# 定义布局
app.layout = html.Div([
dcc.Graph(id='graph'),
dcc.Slider(
id='year-slider',
min=df['year'].min(),
max=df['year'].max(),
value=df['year'].min(),
marks={str(year): str(year) for year in df['year'].unique()}
)
])

# 回调函数
@app.callback(
Output('graph', 'figure'),
[Input('year-slider', 'value')])
def update_figure(selected_year):
filtered_df = df[df.year == selected_year]
fig = px.scatter(filtered_df, x="gdpPercap", y="lifeExp", size="pop", color="continent", hover_name="country", log_x=True, size_max=55)
fig.update_layout(transition_duration=500)
return fig

if __name__ == '__main__':
app.run_server(debug=True)

6. Streamlit – 快速创建数据应用的框架

功能: Streamlit 是一个开源的 Python 库,允许开发者通过简单的 Python 脚本快速构建交互式 Web 应用。

使用场景:

  • 数据科学家快速展示数据和模型。
  • 快速原型开发和数据探索。
  • 内部工具和小型 Web 应用开发。

示例:

import streamlit as st
import pandas as pd
import numpy as np

# 标题
st.title('Streamlit 示例')

# 加载数据
df = pd.DataFrame({
'col1': np.random.randn(20),
'col2': np.random.randn(20),
'col3': np.random.choice(['A', 'B', 'C'], 20)
})

# 展示数据
st.write(df)

# 绘图
st.line_chart(df[['col1', 'col2']])

# 交互式元素
selected = st.selectbox('选择列', df.columns)
st.write('您选择了:', selected)

7. ggplot – ggplot2 风格的可视化库

功能: ggplot 是一个 Python 库,旨在提供 R 语言 ggplot2 风格的绘图接口。

使用场景:

  • 统计图形绘制和数据探索。
  • 学术研究和论文中的图表展示。
  • 数据分析和报告。

示例:

from ggplot import *
import pandas as pd

# 加载数据
df = pd.DataFrame({
'x': np.random.randn(100),
'y': np.random.randn(100),
'category': np.random.choice(['A', 'B', 'C'], 100)
})

# 绘制散点图
p = ggplot(aes(x='x', y='y', color='category'), data=df) + \
geom_point() + \
ggtitle('ggplot 示例') + \
xlab('X 轴') + \
ylab('Y 轴')
print(p)

8. Pydy – 动力学系统的 Python 图形界面

功能: Pydy 是一个用于动力学系统模拟和分析的 Python 库,支持图形界面。

使用场景:

  • 物理和工程中的动力学模拟。
  • 机器人学、控制系统的设计和分析。
  • 教育和教学中的动力学系统展示。

示例:

from pydy.viz import Scene, Cylinder
from pydy.viz.shapes import Cylinder
from pydy.viz.visualization_frame import VisualizationFrame

# 创建一个场景
scene = Scene()

# 添加一个圆柱体
cylinder = Cylinder(radius=0.5, length=2.0, color='red')
frame = VisualizationFrame('cylinder', reference_frame=None, point=None, geometry=cylinder)
scene.add(frame)

# 显示场景
scene.display()

9. mplfinance – 用于金融图表的 Matplotlib 扩展

功能: mplfinance 是 Matplotlib 的一个扩展库,专门用于金融图表的绘制。

使用场景:

  • 金融数据分析和交易策略的可视化。
  • 股票市场、外汇市场等金融领域的图表展示。
  • 经济学研究中的数据展示。

示例:

import mplfinance as mpf
import pandas as pd

# 加载数据
df = pd.read_csv('stock_data.csv', parse_dates=True, index_col='Date')

# 绘制K线图
mpf.plot(df, type='candle', volume=True, show_nontrading=True)

10. PyQtGraph – 交互式图形和数据可视化

功能: PyQtGraph 是一个基于 PyQt 的图形库,提供高性能的 2D 和 3D 图形,支持实时数据可视化和交互。

使用场景:

  • 科学数据的实时监控和可视化。
  • 信号处理和图像处理中的交互式可视化。
  • 数据分析中的动态图表展示。

示例:

from pyqtgraph.Qt import QtGui, QtCore
import pyqtgraph as pg
import numpy as np

# 创建一个 Qt 应用
app = QtGui.QApplication([])

# 创建一个绘图窗口
win = pg.GraphicsWindow(title="PyQtGraph 示例")
win.resize(800,600)

# 添加一个绘图窗口
p1 = win.addPlot(title="动态数据")

# 创建一个曲线
curve = p1.plot(pen='y')

# 模拟数据
data = np.random.normal(size=(100,1000))

# 函数用于更新数据
def update():
global curve, data
curve.setData(data[:,np.random.randint(1000)])

# 设置定时器
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(50)

# 启动应用
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
QtGui.QApplication.instance().exec_()
上一篇
下一篇