《Numpy 简易速速上手小册》第7章:Numpy 文件输入输出(2024 最新版)

《Numpy 简易速速上手小册》第7章:Numpy 文件输入输出(2024 最新版)_第1张图片

文章目录

  • 7.1 读取和写入文本文件
    • 7.1.1 基础知识
    • 7.1.2 完整案例:读取股市数据
    • 7.1.3 拓展案例 1:处理缺失数据
    • 7.1.4 拓展案例 2:写入数据到文本文件
  • 7.2 二进制文件操作
    • 7.2.1 基础知识
    • 7.2.2 完整案例:保存和加载大型数组
    • 7.2.3 拓展案例 1:保存和加载多个数组
    • 7.2.4 拓展案例 2:压缩保存多个数组
  • 7.3 使用 HDF5 和其他格式
    • 7.3.1 基础知识
    • 7.3.2 完整案例:使用 HDF5 保存和读取数据
    • 7.3.3 拓展案例 1:使用 PyTables 处理大型数据集
    • 7.3.4 拓展案例 2:使用 HDF5 存储复杂数据结构

7.1 读取和写入文本文件

7.1.1 基础知识

在数据分析的世界里,能够高效地读取和写入文本文件是一项基本技能。Numpy 提供了一些简单易用的工具来处理文本数据。

  • 读取文本文件np.loadtxt()np.genfromtxt() 是 Numpy 中用于从文本文件读取数据的主要函数。loadtxt() 适用于没有缺失数据的情况,而 genfromtxt() 则可以处理缺失数据。
  • 写入文本文件np.savetxt() 函数可以将数组写入文本文件。你可以指定分隔符、头信息、格式等。

7.1.2 完整案例:读取股市数据

假设你有一个股市价格的 CSV 文件,你需要读取这些数据进行分析。

import numpy as np

# 假设 'stock_prices.csv' 是一个包含日期和收盘价的文件
# 日期,收盘价
# 2021-01-01,100
# 2021-01-02,101
# ...

# 使用 np.loadtxt 读取数据
data = np.loadtxt('stock_prices.csv', delimiter=',', skiprows=1, usecols=1)

print("Stock Prices:", data)

在这个案例中,我们使用 np.loadtxt() 从 CSV 文件中读取了股市收盘价,跳过了第一行的标题,并只选取了第二列的数据。

7.1.3 拓展案例 1:处理缺失数据

在现实世界的数据集中,经常会遇到缺失值的情况。我们可以用 np.genfromtxt() 来处理这些数据。

# 假设 'weather_data.csv' 文件中包含了缺失的温度数据
# 日期,温度
# 2021-01-01,23
# 2021-01-02,NaN
# ...

# 使用 np.genfromtxt 读取数据,并处理缺失值
weather_data = np.genfromtxt('weather_data.csv', delimiter=',', skip_header=1, filling_values=-999)

print("Weather Data:", weather_data)

在这个案例中,我们使用 filling_values 参数来处理文件中的 NaN 值,将它们替换为 -999

7.1.4 拓展案例 2:写入数据到文本文件

最后,让我们学习如何将数据写回到一个文本文件。

# 假设我们有一些计算结果需要保存
calculated_data = np.array([1.2, 2.3, 3.4, 4.5])

# 使用 np.savetxt 将数据写入文件
np.savetxt('output_data.csv', calculated_data, delimiter=',', header='Calculated Data', comments='')

print("Data successfully saved to 'output_data.csv'")

在这个案例中,我们使用 np.savetxt() 将计算后的数据保存到了 CSV 文件中,包括了一个简单的头信息。

掌握如何读取和写入文本文件,你就可以轻松地处理来自各种来源的数据了。无论是分析股市走势还是记录天气变化,Numpy 都将是你在数据旅程中的忠实伙伴。

《Numpy 简易速速上手小册》第7章:Numpy 文件输入输出(2024 最新版)_第2张图片


7.2 二进制文件操作

7.2.1 基础知识

处理二进制文件是数据分析中的一个重要环节。二进制文件格式通常比文本文件更紧凑,读写速度更快,特别适用于大型数据集。Numpy 提供了简单的方法来保存和加载二进制文件。

  • 保存二进制文件np.save() 可以将 Numpy 数组保存为 .npy 格式的二进制文件。
  • 读取二进制文件np.load() 用于加载 .npy 格式的文件。
  • 保存多个数组到一个文件np.savez()np.savez_compressed() 可以将多个数组保存到一个文件中,后者提供了压缩功能。

7.2.2 完整案例:保存和加载大型数组

假设你正在处理一个非常大的数据集,并希望以二进制格式保存以便快速加载。

import numpy as np

# 创建一个大型数组
large_array = np.random.rand(1000, 1000)

# 将数组保存为二进制文件
np.save('large_array.npy', large_array)

# 加载保存的数组
loaded_array = np.load('large_array.npy')

print("Array Loaded Successfully!")

在这个案例中,我们首先创建了一个大型数组,然后使用 np.save() 保存成二进制文件,并通过 np.load() 重新加载。

7.2.3 拓展案例 1:保存和加载多个数组

当你有多个相关数组时,可以将它们保存在一个单独的文件中。

# 创建几个数组
array1 = np.array([1, 2, 3])
array2 = np.array([4, 5, 6])
array3 = np.array([7, 8, 9])

# 保存多个数组到一个文件
np.savez('arrays.npz', array1=array1, array2=array2, array3=array3)

# 加载多个数组
loaded_arrays = np.load('arrays.npz')

print("Array 1 Loaded:", loaded_arrays['array1'])
print("Array 2 Loaded:", loaded_arrays['array2'])
print("Array 3 Loaded:", loaded_arrays['array3'])

在这个案例中,我们使用 np.savez() 将三个数组保存在一个 .npz 文件中,并使用 np.load() 加载它们。

7.2.4 拓展案例 2:压缩保存多个数组

对于更大的数据集,使用压缩可以节约存储空间。

# 假设这是两个大型数组
large_array1 = np.random.rand(1000, 1000)
large_array2 = np.random.rand(1000, 1000)

# 使用压缩功能保存数组
np.savez_compressed('compressed_arrays.npz', large_array1=large_array1, large_array2=large_array2)

print("Arrays Compressed and Saved Successfully!")

在这个案例中,我们使用 np.savez_compressed() 将两个大型数组以压缩格式保存,以减少文件大小。

通过使用 Numpy 的二进制文件操作,你可以更有效地处理大型数据集。它们不仅读写速度更快,而且能节省存储空间,是处理大型数据的理想选择。

《Numpy 简易速速上手小册》第7章:Numpy 文件输入输出(2024 最新版)_第3张图片


7.3 使用 HDF5 和其他格式

7.3.1 基础知识

当数据集变得极大或需要高级数据管理时,标准的 Numpy 二进制格式可能不再适用。这时,HDF5(Hierarchical Data Format version 5)等高级格式派上用场。HDF5 是一种多用途的文件格式和复杂数据组织系统,它支持大数据量存储和复杂的数据组织结构。

  • HDF5 特点:能够存储和组织大型复杂的数据集合;支持多种数据类型;具备数据压缩、元数据支持等特性;支持部分读写操作,不需要加载整个数据集。
  • 访问 HDF5 文件:需要使用专门的库,如 h5pyPyTables

7.3.2 完整案例:使用 HDF5 保存和读取数据

我们将展示如何使用 HDF5 库来保存和读取 HDF5 格式的数据。

import numpy as np
import h5py

# 创建一些数据
data1 = np.random.rand(1000, 1000)
data2 = np.random.rand(1000, 1000)

# 创建 HDF5 文件并保存数据
with h5py.File('data.h5', 'w') as f:
    f.create_dataset('dataset1', data=data1)
    f.create_dataset('dataset2', data=data2)

# 读取 HDF5 文件
with h5py.File('data.h5', 'r') as f:
    dataset1 = f['dataset1'][:]
    dataset2 = f['dataset2'][:]

print("Data from HDF5 file read successfully!")

在这个案例中,我们首先使用 h5py.File() 创建了一个 HDF5 文件,并创建了两个数据集。然后,我们打开文件并读取这些数据。

7.3.3 拓展案例 1:使用 PyTables 处理大型数据集

PyTables 是另一个处理 HDF5 文件的强大工具,特别适合于大型数据集和高性能操作。

import tables

# 使用 PyTables 创建一个 HDF5 文件
with tables.open_file('large_data.h5', mode='w') as f:
    # 创建一个大型数组并保存
    array_size = (10000, 10000)
    filters = tables.Filters(complevel=5, complib='blosc')
    data = f.create_carray(f.root, 'data', tables.Float64Atom(), shape=array_size, filters=filters)
    data[:] = np.random.rand(*array_size)

print("Large dataset saved with PyTables!")

这里我们创建了一个非常大的数组并使用 PyTables 保存在 HDF5 文件中,利用了数据压缩功能。

7.3.4 拓展案例 2:使用 HDF5 存储复杂数据结构

HDF5 格式特别适合于存储具有复杂结构的数据,如嵌套的组和表格。

# 创建复杂的数据结构并保存为 HDF5
with h5py.File('complex_data.h5', 'w') as f:
    group = f.create_group('experiment1')
    group.create_dataset('data1', data=np.random.rand(100))
    group.create_dataset('data2', data=np.random.rand(100))

    subgroup = group.create_group('subgroup')
    subgroup.create_dataset('data3', data=np.random.rand(100))

print("Complex data structure saved in HDF5 file!")

在这个案例中,我们创建了一个包含组和子组的 HDF5 文件,并在其中存储了不同的数据集。

使用 HDF5 和其他高级格式可以大幅提高处理大型和复杂数据集的效率。这些工具使得数据的存储、访问和管理变得更加灵活和高效,是处理现代大数据挑战的关键。

你可能感兴趣的:(《Numpy,简易速速上手小册》,numpy)