Python数据分析与可视化入门:NumPy、Pandas与Matplotlib详解与练习

作为数据科学和分析的核心库,NumPy、Pandas与Matplotlib是Python生态中不可或缺的三大工具。本文将系统介绍这三个库的基础知识及实用技巧,并附带丰富练习,帮助你快速上手数据处理与可视化。


一、NumPy基础介绍

NumPy是Python中进行科学计算的核心库,提供了高性能多维数组对象ndarray,以及丰富的数学函数。

1.1 NumPy数组的创建

import numpy as np

# 创建一维数组
arr1 = np.array([1, 2, 3, 4, 5])

# 创建二维数组
arr2 = np.array([[1, 2, 3], [4, 5, 6]])

# 创建全零数组
zeros = np.zeros((3, 4))

# 创建全一数组
ones = np.ones((2, 5))

# 创建等差数组
range_arr = np.arange(0, 10, 2)

# 创建线性空间数组
linspace_arr = np.linspace(0, 1, 5)

1.2 数组操作示例

# 数组维度与形状
print(arr2.shape)  # (2, 3)

# 转置
print(arr2.T)

# 数组切片与索引
print(arr1[1:4])

# 基本运算(向量化)
print(arr1 * 2)
print(arr1 + arr1)

二、Pandas基础介绍与练习

Pandas是基于NumPy构建的强大数据分析库,核心数据结构是SeriesDataFrame

2.1 Pandas数据结构

import pandas as pd

# 创建Series
s = pd.Series([10, 20, 30, 40])

# 创建DataFrame
df = pd.DataFrame({
    "姓名": ["张三", "李四", "王五", "赵六"],
    "年龄": [25, 30, 22, 35],
    "成绩": [88, 92, 79, 95]
})

2.2 常用函数练习

练习1:排序、去重、分组
# 排序
df_sorted = df.sort_values(by="年龄", ascending=True)

# 去重(示例:假设有重复数据)
df_dup = pd.DataFrame({
    "姓名": ["张三", "李四", "张三", "赵六"],
    "年龄": [25, 30, 25, 35],
    "成绩": [88, 92, 88, 95]
})
df_unique = df_dup.drop_duplicates()

# 分组求均值
grouped = df.groupby("年龄")["成绩"].mean()
练习2:空值检测与处理
df_nan = pd.DataFrame({
    "姓名": ["张三", "李四", None, "赵六"],
    "年龄": [25, None, 22, 35],
    "成绩": [88, 92, 79, None]
})

# 检测空值
print(df_nan.isnull())

# 填充空值
df_filled = df_nan.fillna({"姓名": "未知", "年龄": df_nan["年龄"].mean(), "成绩": 0})

# 删除含空值的行
df_dropped = df_nan.dropna()
练习3:Excel文件读写
# 写入Excel
df.to_excel("student_scores.xlsx", index=False)

# 读取Excel
df_excel = pd.read_excel("student_scores.xlsx")
print(df_excel)

三、Matplotlib基础与实战

Matplotlib是Python最常用的绘图库,灵活支持各种图表绘制。

3.1 Matplotlib安装与导入

pip install matplotlib
import matplotlib.pyplot as plt

3.2 常见图表绘制

曲线图
x = [1, 2, 3, 4, 5]
y = [10, 15, 13, 18, 16]

plt.plot(x, y, color='blue', linewidth=2, linestyle='--', marker='o', label="成绩")
plt.title("曲线图示例")
plt.xlabel("序号")
plt.ylabel("数值")
plt.legend()
plt.grid(True)
plt.show()
柱状图
labels = ['A', 'B', 'C', 'D']
values = [23, 17, 35, 29]

plt.bar(labels, values, color='orange')
plt.title("柱状图示例")
plt.show()
饼图
sizes = [30, 25, 25, 20]
labels = ['苹果', '香蕉', '橘子', '梨']

plt.pie(sizes, labels=labels, autopct='%1.1f%%', startangle=90)
plt.title("饼图示例")
plt.show()
散点图
import numpy as np

x = np.random.rand(50)
y = np.random.rand(50)

plt.scatter(x, y, c='green', marker='x')
plt.title("散点图示例")
plt.show()

3.3 多子图绘制

fig, axs = plt.subplots(2, 2, figsize=(10, 8))

# 曲线图
axs[0, 0].plot(x, y)
axs[0, 0].set_title('曲线图')

# 柱状图
axs[0, 1].bar(labels, values)
axs[0, 1].set_title('柱状图')

# 饼图
axs[1, 0].pie(sizes, labels=labels, autopct='%1.1f%%')
axs[1, 0].set_title('饼图')

# 散点图
axs[1, 1].scatter(x, y)
axs[1, 1].set_title('散点图')

plt.tight_layout()
plt.show()

3.4 绘制参数详解

  • 颜色color='red''r'
  • 线宽linewidth=2
  • 线型linestyle='--',常用有'-','--',':'
  • 标记形状marker='o',常用有'o','x','^'
  • 网格plt.grid(True)
  • 图例plt.legend()

3.5 图片读取及矩阵初识

import cv2

# 读取图片(默认BGR)
img = cv2.imread('example.jpg')

# 转置图片
img_transposed = cv2.transpose(img)

# 分离通道
b, g, r = cv2.split(img)

# 显示单通道图片
cv2.imshow("Red Channel", r)
cv2.waitKey(0)
cv2.destroyAllWindows()

# 说明:图片本质上是一个多维数组矩阵
print(img.shape)  # (高, 宽, 通道数)

练习

  1. 使用Pandas对以下数据进行排序、去重和分组操作:
data = {
    '姓名': ['张三', '李四', '王五', '李四', '张三'],
    '科目': ['语文', '数学', '英语', '数学', '英语'],
    '成绩': [85, 90, 78, 90, 85]
}
df = pd.DataFrame(data)
  1. 对下列DataFrame完成空值检测,填充空值(平均值填充),以及删除空值行:
data = {
    '姓名': ['张三', '李四', None, '王五'],
    '年龄': [20, None, 22, 23],
    '成绩': [88, 92, None, 75]
}
df = pd.DataFrame(data)
  1. 读取并写入Excel文件,验证数据完整性。

  2. 使用Matplotlib绘制曲线图、柱状图和饼图,尝试修改颜色、线条样式、添加图例和网格。

  3. 加载一张图片,分别显示其RGB三个通道,观察图片矩阵的结构。


本文覆盖了数据分析和可视化的入门核心知识,配合实战练习,帮助你打下坚实基础。祝你学习顺利!


作者:资深Python工程师

更多推荐