对数据分析真的超实用!分享几款Python做数据分析必须掌握的三方库!

作为一个热爱编程和数据的程序员,数据分析这块内容也经常围绕在我的工作周围。今天就为大家分享3款,Python技术下数据分析经常会使用到的三个库。(非Pandas|Numpy)

一、聊聊Parquet文件格式(pyarrow)

在此之前为大家介绍普及下,除了传统数据存储格式(媒介)外,当下被公认的数据存储格式Parquet。Parquet文件格式优势

  1. 数据压缩:通过应用各种编码和压缩算法,Parquet 文件可减少内存消耗,减少存储数据的体积。

  2. 列式存储:快速数据读取操作在数据分析工作负载中至关重要,列式存储是快速读取的关键要求。

  3. 与语言无关:开发人员可以使用不同的编程语言来操作 Parquet 文件中的数据。

  4. 开源格式:这意味着您不会被特定供应商锁定

  5. 支持复杂数据类型

这个高效的列式存储格式简直是大数据时代的宝藏。它让我们在处理海量数据时,既能节省存储空间,又能快速读取数据。

打个比喻来说,Parquet就像一个精致的收纳箱,把杂乱的数据整齐地归类好,方便我们随时取用。

还记得第一次接触Parquet的时候,那种兴奋感就像是打开了一个神秘的宝箱。每一列数据都整齐划一,读取速度更是让人惊叹。有了它,处理大规模数据再也不是难题。

如果想要通过Python保存数据为parquet格式,我们需要额外安装一个Python库:pyarrow,除此之外还要结合Pandas使用,有两种方式进行保存。

以前使用pandas的时候,只关注了csv、xls等格式,现在再回头看其实Pandas一直支持parquet格式。读取parquet文件同样使用pandas即可。

二、NetworkX:用Python探索图的奥秘

NetworkX,一个用于创建和操作图结构的强大工具。你可能会问,图结构到底有什么用?简单来说,图结构能帮助我们理解数据之间的关系。比如在社交网络中,每个用户就是一个节点,用户之间的互动就是边。有了NetworkX,我们可以轻松地构建和分析这些关系网。

说实话,刚开始用NetworkX的时候,我还是有点小忐忑的。毕竟,图结构听起来有点高深。但当我看到一行行代码变成一个个漂亮的网络图时,那种成就感简直难以言喻。

import pandas as pd
import networkx as nx
import matplotlib.pyplot as plt

# 读取Parquet文件
df = pd.read_parquet('output.parquet')

# 创建空图
G = nx.Graph()

# 添加节点和边
for index, row in df.iterrows():
    G.add_edge(row['n_legs'], row['animals'])# 添加边

nx.draw(G, with_labels=True)  # 绘制图,并显示节点标签
plt.show()  # 显示图形

看到这段代码,你会发现,用NetworkX构建图结构其实没那么难。我们把Parquet数据读入Pandas DataFrame,然后逐行添加节点和边,几行代码就搞定了一个基本的社交网络图。

三、Plotly:3D可视化的魔法师

我们做数据分析,有时候的目标可能不仅仅是2D图,而是更炫酷的3D图谱。这就需要Plotly来助阵了。Plotly是一个强大的绘图库,能创建交互式、动态的图表。结合NetworkX,我们可以将2D图轻松转化为3D图形。

import pandas as pd
import networkx as nx
import plotly.graph_objects as go

# 读取Parquet文件
df = pd.DataFrame({
    'user1': [1, 1, 2, 3, 4],
    'user2': [2, 3, 3, 4, 5]
})

# 假设我们已经将DataFrame保存为Parquet格式
# df.to_parquet('social_network.parquet')

# 从Parquet文件中读取数据
# df = pd.read_parquet('social_network.parquet')

# 创建空图
G = nx.Graph()

# 添加节点和边
for index, row in df.iterrows():
    G.add_edge(row['user1'], row['user2'])

# 获取节点和边的坐标
pos = nx.spring_layout(G, dim=3)
x_nodes = [pos[node][0] for node in G.nodes]
y_nodes = [pos[node][1] for node in G.nodes]
z_nodes = [pos[node][2] for node in G.nodes]

# 创建3D节点图
node_trace = go.Scatter3d(
    x=x_nodes, y=y_nodes, z=z_nodes,
    mode='markers',
    marker=dict(size=10, color='blue', opacity=0.8)
)

# 创建3D边图
edge_trace = []
for edge in G.edges:
    x0, y0, z0 = pos[edge[0]]
    x1, y1, z1 = pos[edge[1]]
    edge_trace.append(
        go.Scatter3d(
            x=[x0, x1], y=[y0, y1], z=[z0, z1],
            mode='lines',
            line=dict(width=2, color='grey'),
            opacity=0.8
        )
    )

# 合并图形
fig = go.Figure(data=[node_trace] + edge_trace)
fig.update_layout(scene=dict(
    xaxis_title='X Axis',
    yaxis_title='Y Axis',
    zaxis_title='Z Axis'
))
fig.show()

这段代码将我们的社交网络数据从2D平面带入了3D空间。通过旋转、缩放等操作,我们可以从不同角度观察数据之间的关系,感觉就像是戴上了VR眼镜,进入了一个数据的奇幻世界。代码运行后,Plotly会自动在本地开启一个端口为52586的网页服务,自动打开网页如下:

从Parquet数据到3D知识图谱的构建过程中,如果数据量过大时,直接加载到内存中可能会导致性能问题。这时候,我们可以考虑分批次加载数据,或者使用分布式计算框架如Dask来处理。

复杂的图结构在3D空间中会显得非常混乱,节点和边的密集程度可能会影响可视化效果。可以尝试不同的图布局算法,如层次布局、力导向布局等,以优化图的展示效果。

此外,3D可视化虽然炫酷,但用户在浏览图谱时的交互体验也是关键。通过优化Plotly的交互功能,如添加滑块、按钮等,可以提升用户体验。

作为一名程序员,我深知数据的价值不仅在于存储和处理,更在于如何有效地呈现和应用。希望这篇文章能够激发你对数据可视化的兴趣!

Python的设计哲学是“优雅”、“明确”、“简单。Python用途极广。图形处理:有PIL、Tkinter等图形支持,能方便进行图形处理。 数学处理:NumPy扩展提供大量与许多标准数学的接口。 文本处理:python提供的re模块能支持正则表达式,还提供SGML,XML分析模块,许多程序员利用python进行XML程序的开发。 数据编程:程序员可通过遵循Python DB-API(数据应用程序编程接口)规范的模块与Microsoft SQL Server,Oracle,Sybase,DB2,MySQL、SQLite等数据通信。python自带有一个Gadfly模块,提供了一个完整的SQL环境。 网络编程:提供丰富的模块支持sockets编程,能方便快速地开发分布式应用程序。很多大规模软件开发计划例如Zope,Mnet 及BitTorrent. Google都在广泛地使用它。 Web编程:应用的开发语言,支持最新的XML技术。 多媒体应用:Python的PyOpenGL模块封装了“OpenGL应用程序编程接口”,能进行二维和三维图像处理。PyGame模块可用于编写游戏软件。 pymo引擎:PYMO全称为python memories off,是一款运行于Symbian S60V3,Symbian3,S60V5, Symbian3, Android系统上的AVG游戏引擎。因其基于python2.0平台开发,并且适用于创建秋之回忆(memories off)风格的AVG游戏,故命名为PYMO。 黑客编程:python有一个hack的,内置了你熟悉的或不熟悉的函数,但是缺少成就感。 用Python写简单爬虫
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孜孜孜孜不倦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值