Python 数据分析入门:NumPy+Pandas+Matplotlib 学习笔记

作为 Python 数据分析入门的核心三剑客,NumPy、Pandas、Matplotlib是数据处理、分析与可视化的必备工具。本篇笔记整理了基础核心用法,从数组操作、数据处理到图表绘制,全是干货,适合新手快速上手!

一、NumPy 基础操作(数值计算核心库)

NumPy 是 Python 用于数值计算的基础库,核心是ndarray 数组,支持多维数组操作、数学运算、数据拼接 / 切割、随机数生成等,是数据分析的基石。

1. 基础数学函数与数组创建

import numpy as np
# 基础数学函数:正弦、绝对值
print(np.sin(1))   # 正弦值
print(np.abs(-1))  # 绝对值

# 列表转数组 + 维度变换
list1 = [1,2,3,4,5,6,7,8]
v = np.array(list1)
v = v.reshape(2,2,2)  # 转为3维数组
print(v)
print("数组维度:", v.ndim)

2. 数组降维(核心:ravel () vs flatten ())

# 三维降二维
r1 = v.reshape(1,8)
print(r1, r1.ndim)

# 高维转一维(重点区分)
r2 = v.ravel()    # 返回原数组视图,修改会影响原数组
r3 = v.flatten()  # 返回原数组副本,修改不影响原数组(推荐使用)
print(r2, r3)

# shape属性直接修改维度
v.shape = (2,4)
print(v)

3. 特殊数组创建

# 全0数组
a = np.zeros(5)       # 一维
b = np.zeros((2,2))   # 二维
c = np.zeros((3,2,2)) # 三维

# 全1数组
d = np.ones((2,2))

# 全指定值数组
g = np.full((2,2,2), 5)  # 填充5

# 单位矩阵
h = np.eye(5,7)  # 5行7列对角线为1

4. 数组索引与修改

array1 = np.arange(48).reshape(2,4,6)
# 选取元素
a = array1[1,0,0]      # 三维索引
b = array1[0,1,:]      # 取某一行
c = array1[0,1:3,:]    # 取多行
e = array1[1,:,1]      # 取某一列
# 直接修改元素
array1[1,0,0] = 100

5. 数组拼接与切割

array1 = np.arange(9).reshape(3,3)
array2 = 2*array1

# 水平拼接
a3 = np.hstack((array1,array2))
a6 = np.concatenate((array1,array2),axis=1)

# 垂直拼接
a7 = np.vstack((array2,array1))
a8 = np.concatenate((array1,array2),axis=0)

# 数组切割
arr = np.arange(16).reshape(4,4)
a = np.hsplit(arr,2)  # 水平二等分
c = np.vsplit(arr,2)  # 垂直二等分
# 不等分切割
e = np.array_split(arr,3,axis=1)

6. 数组赋值与拷贝(深浅拷贝)

array1 = np.array([1,2,3])
# 直接赋值:指向同一内存,修改互相影响
array2 = array1
array2[0] = 100

# 浅拷贝:copy(),独立内存,修改不影响原数组
array3 = array1.copy()
array3[0] = 10

7. 随机数生成

# 固定随机种子(结果可复现)
np.random.seed(1000)

# 整数随机数
r1 = np.random.randint(0,10,size=100)

# 0~1浮点数
r4 = np.random.rand(5,5)

# 正态分布随机数
r5 = np.random.normal(loc=5, scale=10, size=(5,5))

8. 数组统计函数

array1 = np.random.normal(size=(3,3))
print("方差:", array1.var())
print("标准差:", array1.std())
print("均值:", array1.mean())
print("中位数:", np.median(array1))
# 按行/列求和
print("行和:", array1.sum(axis=1))
print("列和:", array1.sum(axis=0))

9. 矩阵运算

a = np.arange(4).reshape(2,2)
# 矩阵点乘
a1 = a.dot(a)
# 矩阵求逆
a3 = np.linalg.inv(a)

10. 文件读写

# 读取文本文件
data = np.loadtxt('datingTestSet2.txt', delimiter='\t')
# 保存数组到txt
array = np.array([[1,2,3],[4,5,6]])
np.savetxt('array.txt', array)

二、Pandas 基础操作(数据处理核心库)

Pandas 基于 NumPy,提供DataFrame(表格型数据结构),专门用于数据清洗、筛选、合并、去重等操作,是处理表格数据的神器。

1. 数据合并(concat)

import pandas as pd
import numpy as np

df_1 = pd.DataFrame(np.arange(12).reshape(3,4))
df_2 = 2*df_1

# 竖向合并(默认)
new_df1 = pd.concat([df_2, df_1])
# 横向合并(axis=1)
new_df2 = pd.concat([df_1, df_2], axis=1)
# 内连接/外连接
new_df3 = pd.concat([df_1, df_3], axis=1, join='inner')  # 交集
new_df4 = pd.concat([df_1, df_3], axis=1, join='outer')  # 并集

2. 重复值处理

df = pd.read_csv(r"data1.csv",encoding='gbk')

# 判断重复行
result1 = df.duplicated()  # 全列判断
result2 = df.duplicated('gender')  # 单列判断
result3 = df.duplicated(['gender','name'])  # 多列判断

# 提取重复行
repeat_df = df[df.duplicated()]

# 删除重复行
new_df1 = df.drop_duplicates()  # 全列去重
new_df2 = df.drop_duplicates(['name','gender'])  # 按列去重

3. 数据筛选(条件查询)

# 数值条件筛选
df1 = df[df['好评数'] > 17000]  # 大于
df2 = df[df['好评数'].between(15000,17000)]  # 区间

# 字符串匹配
df3 = df[df['品牌'].str.contains('苹果',na=False)]  # 包含指定字符

# 多条件逻辑运算
df5 = df[(df['价格']<7000) & (df['好评数']>16000)]  # 且
df6 = df[(df['价格']<6000) | (df['好评数']>18000)]  # 或

三、Matplotlib 基础操作(数据可视化核心库)

Matplotlib 是 Python 最经典的绘图库,支持折线图、直方图、子图等,用于数据直观展示。

1. 基础折线图

import matplotlib.pyplot as plt
import numpy as np

x = np.array([1,2,3,4,5])
y = np.array([10,20,25,30,40])

# 绘图:颜色、标记点
plt.plot(x,y,color='r',marker="*")
# 标题+坐标轴
plt.title('Scatter Plot Example')
plt.xlabel('X Axis')
plt.ylabel('Y Axis')
plt.show()

2. 多子图绘制

x = np.linspace(0,10,10000)
y1 = np.sin(x)
y2 = np.cos(x)
y3 = np.tan(x)
y4 = np.sin(x**2)

# 创建2行2列子图
fig, axs = plt.subplots(2,2,figsize=(10,8))

# 分别绘图
axs[0,0].plot(x,y1,'r')
axs[0,0].set_title('sin(x)')

axs[0,1].plot(x,y2,'g')
axs[0,1].set_title('cos(x)')

axs[1,0].plot(x,y3,'b')
axs[1,0].set_title('tan(x)')

axs[1,1].plot(x,y4,'m')
axs[1,1].set_title('sin(x^2)')

plt.show()

3. 直方图绘制

# 随机数直方图
a = [np.random.randint(0,10) for i in range(100)]
plt.hist(a,color='r')
plt.show()

四、核心知识点总结

  1. NumPy:核心是 ndarray 数组,掌握维度变换、拼接 / 切割、拷贝、统计函数、矩阵运算,是数值计算基础;
  2. Pandas:核心是 DataFrame,重点掌握数据合并、去重、条件筛选,高效处理表格数据;
  3. Matplotlib:基础绘图 + 子图布局,快速实现数据可视化,直观展示分析结果。

这三个库是 Python 数据分析的入门必备,熟练掌握基础用法后,就能处理大部分简单数据分析任务啦!后续会继续更新进阶用法,欢迎关注~

更多推荐