数据分析的流程

  1. 需求分析
  2. 数据获取
  3. 数据预处理
  4. 分析与建模
  5. 模型评价与优化
  6. 部署

NumPy 创建数组

NumPy 提供的 array 函数可以创建一维数组和多维数组

或也可以使用 arange、linspace 等其他函数创建数组,具体请查看课本 P26 第二段文字开始

创建一维数组

python 复制代码
import numpy as np

# 创建一维数组
arr = np.array([1, 2, 3, 4, 5])
print('arr = ', arr)  # 输出查看
  • 输出结果
复制代码
arr = [ 1 2 3 4 5 ]

创建二维数组

python 复制代码
import numpy as np

# 创建二维数组
arr = np.array([
  [1, 2, 3, 4, 5],
  [1, 3, 5, 7, 9],
  [2, 4, 6, 8, 10]
])
print('arr = ', arr)  # 输出查看
  • 输出结果
复制代码
arr = [[1, 2, 3, 4, 5]
[1, 3, 5, 7, 9]
[2, 4, 6, 8, 10]]

查看数组形状

python 复制代码
import numpy as np

# 创建数组
arr = np.array([
  [1, 2, 3, 4, 5],
  [1, 3, 5, 7, 9],
  [2, 4, 6, 8, 10]
])
print('arr.shape = ', arr.shape)  # 输出查看数组形状
  • 输出结果
复制代码
arr.shape = (3, 5)

其中 3 为行数,5 为列数

变换数组的形状

python 复制代码
import numpy as np

arr = np.array([
  [1, 2, 3, 4, 5],
  [1, 3, 5, 7, 9],
  [2, 4, 6, 8, 10]
])

arr.shape = 5, 3
  • 输出结果
复制代码
arr =  [[ 1  2  3]
 [ 4  5  1]
 [ 3  5  7]
 [ 9  2  4]
 [ 6  8 10]]

NumPy 创建矩阵

NumPy 提供两种方法创建矩阵:mat、matrix 函数

mat 创建矩阵

python 复制代码
import numpy as np

# 使用 mat 创建矩阵,用 ; 隔开每一行数据
m1 = np.mat('1 2 3; 4 5 6; 7 8 9')
print('m1 = ', m1)  # 查看输出
  • 输出结果
复制代码
m1 = [[1 2 3]
[4 5 6]
[7 8 9]]

使用 matrix 创建矩阵

python 复制代码
import numpy as np

# 使用 matrix 创建矩阵
m2 = np.matrix([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])
print('m1 = ', m1)  # 输出查看

补充

如果要创建一个 3 × 3 的对角单位阵

python 复制代码
import numpy as np

m1 = np.eye(3)
print('m1 = ', m1)  # 输出查看
  • 输出结果
复制代码
m1 = [[1. 0. 0.]
[0. 1. 0.]
[0. 0. 1.]]

如果要保存/读取一个数组

python 复制代码
import numpy as np

arr = np.array([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
])
np.save('./save_arr', arr)  # 保存数组到文件中
# np.save('保存的文件名', 保存的数组)

# 如果要读取
arr = np.load('./save_arr.npy')
print('arr = ', arr)

以上代码运行后会得到一个 save_arr.npy 二进制文件

  • 输出结果
复制代码
arr =  [[1 2 3]
[4 5 6]
[7 8 9]]

数组排序

NumPy 中使用 sort 函数对数组进行排序

python 复制代码
import numpy as np

# 生成一个随机数组(随机数 1 - 10,共生成 10 个)
arr = np.random.randint(1, 10, size=10)
print('arr = ', arr)

# 直接对数组进行排序
arr.sort()  # 这里不需要重新使用变量接收,因为排序会直接影响原数组
print('arr.sort = ', arr)
  • 输出结果
复制代码
arr =  [8 3 9 9 7 4 1 8 2 3]
arr.sort =  [1 2 3 3 4 7 8 8 9 9]

多维数组排序

python 复制代码
import numpy as np

# 生成一个随机数组(随机数 1 - 10,生成 3 × 3 的数组)
arr = np.random.randint(1, 10, size=(3, 3))
print('arr = ', arr)

# 沿着横轴排序
arr.sort(axis=1)
print('arr.sort(axis=1) = ', arr)

# 沿着纵轴排序
arr.sort(axis=0)
print('arr.sort(axis=0) = ', arr)
  • 输出结果
复制代码
arr =  [[8 7 4]
[2 1 4]
[1 3 8]]

arr.sort(axis=1) =  [[4 7 8]
[1 2 4]
[1 3 8]]

arr.sort(axis=0) =  [[1 2 4]
[1 3 8]
[4 7 8]]

补充

如果要对数组进行去重,使用 unique 函数来实现,例如:

python 复制代码
import numpy as np

arr = np.array(['苹果', '香蕉', '西瓜', '苹果', '草莓'])
print('arr = ', arr)

# 对数组进行去重
print('去重后的 arr = ', np.unique(arr))
  • 输出结果
复制代码
arr =  ['苹果' '香蕉' '西瓜' '苹果' '草莓']
去重后的 arr =  ['苹果' '草莓' '西瓜' '香蕉']

NumPy 操作题(课本 P52)

  1. 创建 4 个相同的 3 × 3 对角阵,对角线元素都是 [1, 2, 3],再使用 bmat 函数合并 4 个对角矩阵为 1 个 6 × 6 的新矩阵

  2. 利用合并后的 6 × 6 矩阵进行转置

python 复制代码
import numpy as np

# 创建单个 3 x 3 对角矩阵
diag_matrix = np.diag([1, 2, 3])

# 生成 4 个相同的对角矩阵
matrices = [diag_matrix for i in range(4)]

# 使用 bmat 合并为 6 x 6 矩阵( 2 x 2 块结构)
combined_matrix = np.bmat([
  [matrices[0], matrices[1]],
  [matrices[2], matrices[3]]
])

# 获取转置矩阵
transposed_matrix = combined_matrix.T

print("合并后的6x6矩阵:")
print(combined_matrix)
print("\n转置后的矩阵:")
print(transposed_matrix)
  • 输出结果
复制代码
合并后的6x6矩阵:
[[1 0 0 1 0 0]
[0 2 0 0 2 0]
[0 0 3 0 0 3]
[1 0 0 1 0 0]
[0 2 0 0 2 0]
[0 0 3 0 0 3]]

转置后的矩阵:
[[1 0 0 1 0 0]
[0 2 0 0 2 0]
[0 0 3 0 0 3]
[1 0 0 1 0 0]
[0 2 0 0 2 0]
[0 0 3 0 0 3]]

Pandas 增删改查操作

以下所有操作基于 students.csv 文件,数据如下

stu_id name gender age class
1001 小明 18 1
1002 小晴 20 1
1003 小刚 18 3
1004 小丽 17 2
1005 小红 21 2
python 复制代码
import pandas as pd

# 读取 CSV 文件数据
df = pd.read_csv('./students.csv')

print('查看文件的前 5 行数据')
print(df.head())

print('新增一列数据:身高')
df['height'] = 175
print(df.head())

print('删除一列数据')
df.drop('height', axis=1, inplace=True)
# 'height' 要删除的字段
# axis=1 要操作的轴,1 = 列(即纵轴),0 = 行(即横轴)
# inplace 是否对元数据生效,默认值为 False
print(df.head())

print('修改数据')
df.loc[0, 'name'] = '李明'
df.loc[1, 'name'] = '王刚'
# 1 为索引,name 为列名,
# df.loc[1, 'name'] 就表示,修改 name 列 的第二个元素
print(df.head())

print('查看数据')
print('只查看 name 列数据')
print(df['name'])

print('查看多列数据')
print(df[['stu_id', 'name', 'age']])
  • 输出结果
复制代码
查看文件的前 5 行数据
   stu_id name gender  age  class
0    1001   小明      男   18      1
1    1002   小晴      女   20      1
2    1003   小刚      男   18      3
3    1004   小丽      女   17      2
4    1005   小红      女   21      2
新增一列数据:身高
   stu_id name gender  age  class  height
0    1001   小明      男   18      1     175
1    1002   小晴      女   20      1     175
2    1003   小刚      男   18      3     175
3    1004   小丽      女   17      2     175
4    1005   小红      女   21      2     175
删除一列数据
   stu_id name gender  age  class
0    1001   小明      男   18      1
1    1002   小晴      女   20      1
2    1003   小刚      男   18      3
3    1004   小丽      女   17      2
4    1005   小红      女   21      2
修改数据
   stu_id name gender  age  class
0    1001   李明      男   18      1
1    1002   王刚      女   20      1
2    1003   小刚      男   18      3
3    1004   小丽      女   17      2
4    1005   小红      女   21      2
查看数据
只查看 name 列数据
0    李明
1    王刚
2    小刚
3    小丽
4    小红
Name: name, dtype: object
查看多列数据
   stu_id name  age
0    1001   李明   18
1    1002   王刚   20
2    1003   小刚   18
3    1004   小丽   17
4    1005   小红   21

聚合方法

首先,什么是 “聚合” ?

假设你有一张班级成绩表,里面有每个学生的数学、语文分数

姓名 数学 语文
小明 85 90
小红 92 88
小刚 78 85

聚合就是把 多行数据 合并成 一行结果,比如:

  • 数学平均分 = (85 + 92 + 78) / 3 =85

  • 语文最高分 = 小明, 90

agg 函数(课本 P80)

在 Pandas 中,通常就使用 agg 函数进行聚合操作,那么 agg 是干嘛的?

agg = 指定列 + 指定计算方式 → 汇总结果

  • 例如,还是使用刚才的 students.csv
python 复制代码
import pandas as pd

# 读取 CSV 文件数据
df = pd.read_csv('./students.csv')

# 求平均年龄
print('平均年龄 = ', df['age'].agg('mean'))
# agg('') -> mean 就是求平均值

# 求最大年龄
print('最大年龄 = ', df['age'].agg('max'))

# 求最小年龄
print('最小年龄 = ', df['age'].agg('min'))

# 求平均年龄、最大年龄、最小年龄
print('平均年龄、最大年龄、最小年龄')
print(df['age'].agg(['mean', 'max', 'min']))
  • 输出结果
复制代码
平均年龄 =  18.8

最大年龄 =  21

最小年龄 =  17

平均年龄、最大年龄、最小年龄
mean    18.8
max     21.0
min     17.0
Name: age, dtype: float64

92 页操作题

  • 中国省份人口数据.csv
省份 202 年人口(万人) 2019 年人口(万人)
河北省 7461 7447
山西省 3492 3497
辽宁省 4259 4277
吉林省 2407 2448
python 复制代码
import pandas as pd

data = pd.read_csv('../data/中国城市人口数据.csv', encoding='gbk')

# 基本信息查看
print('数据维度为:', data.ndim)
print('数据大小为:', data.size)
print('数据形状为:', data.shape)

# 描述性统计
print(data['2020年人口(万人)'].describe())

# 统计城市人口增长
print('人口增长数:', data['2020年人口(万人)'].sum() - data['2019年人口(万人)'].sum())

保存可视化图

python 复制代码
import matplotlib.pyplot as plt

# 绘制示例图形
plt.plot([1,2,3], [4,5,6])

# 保存为 PNG 格式(默认格式)
plt.savefig('my_plot.png')

# 保存为 PDF 矢量图(适合学术论文)
plt.savefig('my_plot.pdf')

# 保存为 SVG 矢量图(可编辑)
plt.savefig('my_plot.svg')

Copyright © 2024 - 2025 By LanYun All Rights Reserved.

站点已运行:21年2月26天