第二章 Python数据挖掘模块:代码整理版
一、NumPy
PPT 里 NumPy 主要讲了 6 类内容:数组创建、属性、索引切片、排序、数组运算、统计函数。
1. 数组创建
array()
把列表、元组等转为 ndarray。
python
import numpy as np
a = np.array([1, 2, 3, 4])
b = np.array([[1, 2, 3], [4, 5, 6]])
print(a)
print(b)
arange()
生成等差数组,区间是左闭右开 [start, stop)。PPT 这里写成了 arrange(),标准写法应为 arange()。
python
import numpy as np
a = np.arange(5) # 0,1,2,3,4
b = np.arange(1, 10, 2) # 1,3,5,7,9
print(a)
print(b)
linspace()
等分区间生成数组。
python
import numpy as np
a = np.linspace(0, 10, 5) # 默认包含终点
b = np.linspace(0, 10, 5, endpoint=False)
print(a)
print(b)
zeros()、ones()、zeros_like()、ones_like()
python
import numpy as np
a = np.zeros((2, 3))
b = np.ones((3, 2))
c = np.array([[1, 2], [3, 4]])
d = np.zeros_like(c)
e = np.ones_like(c)
print(a)
print(b)
print(d)
print(e)
随机数组
PPT 提到了 rand()、randn()、randint()。
python
import numpy as np
a = np.random.rand(2, 3) # [0,1) 均匀分布
b = np.random.randn(2, 3) # 标准正态分布
c = np.random.randint(1, 10, size=(2, 4))
print(a)
print(b)
print(c)
2. 数组属性
dtype
查看或转换数据类型。
python
import numpy as np
a = np.array([1, 2, 3], dtype=float)
print(a.dtype)
b = a.astype(int)
print(b)
print(b.dtype)
ndim 和 shape
查看维度和形状。
python
import numpy as np
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.ndim) # 维度
print(a.shape) # 形状
3. 索引和切片
普通索引
python
import numpy as np
a = np.array([[10, 20, 30],
[40, 50, 60]])
print(a[0][1]) # 20
print(a[1, 2]) # 60
切片
python
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(a[0:2, 1:3]) # 前两行,第2到3列
print(a[:, 1]) # 第2列
print(a[1:, :2]) # 第2行开始,前两列
4. 排序
PPT 区分了 np.sort() 和 数组.sort():前者返回新数组,后者原地排序。
python
import numpy as np
a = np.array([3, 1, 5, 2])
b = np.sort(a)
print("原数组:", a)
print("排序后新数组:", b)
a.sort()
print("原地排序后:", a)
按轴排序:
python
import numpy as np
a = np.array([[3, 2, 1],
[6, 5, 4]])
print(np.sort(a, axis=0)) # 按列排序
print(np.sort(a, axis=1)) # 按行排序
5. 数组运算
数组与数值运算
python
import numpy as np
a = np.array([1, 2, 3])
print(a + 10)
print(a - 1)
print(a * 2)
print(a / 2)
print(a % 2)
print(a ** 2)
数组与数组运算
python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
广播
python
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
b = np.array([10, 20, 30])
print(a + b)
6. 统计函数
PPT 提到 NumPy 支持一组统计函数。可重点掌握这些:sum()、mean()、max()、min()、std()。
python
import numpy as np
a = np.array([[1, 2, 3],
[4, 5, 6]])
print("总和:", np.sum(a))
print("均值:", np.mean(a))
print("最大值:", np.max(a))
print("最小值:", np.min(a))
print("标准差:", np.std(a))
print("按列求和:", np.sum(a, axis=0))
print("按行求均值:", np.mean(a, axis=1))
NumPy 练习题(5道)
-
使用
np.array()创建一个一维数组[2,4,6,8,10],并输出其数据类型和形状。 -
使用
np.arange(1, 21, 2)创建奇数数组,再使用np.linspace(0, 1, 6)创建等分数组。 -
创建一个 3×4 的全 0 数组和一个 2×2 的全 1 数组,并将其中一个转换为 float 类型。
-
给定数组
pythona = np.array([[1,2,3],[4,5,6],[7,8,9]])取出第 2 行、第 3 列,以及前两行前两列。
-
创建两个形状相同的数组,完成加减乘除运算;再计算其中一个数组的总和、均值和最大值。
二、Pandas
PPT 里 Pandas 主要讲了:Series、DataFrame、查看和获取数据、算术运算、统计汇总、读写 CSV/Excel。
1. 数据结构
Series
python
import pandas as pd
s1 = pd.Series([10, 20, 30, 40])
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s1)
print(s2)
DataFrame
python
import pandas as pd
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [20, 21, 22],
'成绩': [88, 92, 95]
})
print(df)
2. 查看和设置数据
PPT 提到的常用操作包括 shape、columns、index、rename()、info()、head()、tail()。
python
import pandas as pd
df = pd.DataFrame({
'name': ['Tom', 'Jack', 'Lucy'],
'age': [18, 19, 20],
'score': [85, 90, 95]
})
print("行数:", df.shape[0])
print("列数:", df.shape[1])
print("形状:", df.shape)
print("列名:", df.columns)
print("行索引:", df.index)
df.columns = ['姓名', '年龄', '成绩']
print(df)
df.rename(columns={'成绩': '分数'}, inplace=True)
print(df)
print(df.info())
print(df.head(2))
print(df.tail(2))
3. 数据获取
通过列索引获取
python
print(df['姓名'])
print(df[['姓名', '分数']])
通过 loc[] 获取
按标签取值。
python
print(df.loc[0]) # 第0行
print(df.loc[0, '姓名']) # 第0行"姓名"
print(df.loc[:, ['姓名', '分数']])
通过 iloc[] 获取
按位置取值。
python
print(df.iloc[0]) # 第0行
print(df.iloc[0, 1]) # 第0行第1列
print(df.iloc[0:2, 0:2]) # 前两行前两列
条件索引
python
print(df[df['分数'] > 88])
4. Pandas 算术运算
PPT 提到既可以直接用 + - * /,也可以用 add()、sub()、mul()、div()。并强调:按索引对齐。
Series 运算
python
import pandas as pd
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['a', 'b', 'c'])
print(s1 + s2)
print(s1.add(s2))
索引不一致时
python
import pandas as pd
s1 = pd.Series([1, 2, 3], index=['a', 'b', 'c'])
s2 = pd.Series([4, 5, 6], index=['b', 'c', 'd'])
print(s1 + s2)
DataFrame 运算
python
import pandas as pd
df1 = pd.DataFrame({
'A': [1, 2],
'B': [3, 4]
})
df2 = pd.DataFrame({
'A': [10, 20],
'B': [30, 40]
})
print(df1 + df2)
print(df1.mul(df2))
5. 统计汇总函数
PPT 有"统计汇总函数"一页,可重点掌握这些:sum()、mean()、max()、min()、describe()。
python
import pandas as pd
df = pd.DataFrame({
'语文': [80, 90, 85],
'数学': [88, 92, 95],
'英语': [78, 85, 89]
})
print(df.sum())
print(df.mean())
print(df.max())
print(df.min())
print(df.describe())
6. 读写文件
读 CSV
python
import pandas as pd
df = pd.read_csv('data.csv', sep=',', header=0, encoding='utf-8')
print(df.head())
写 CSV
python
df.to_csv('output.csv', sep=',', index=False, header=True, encoding='utf-8')
读 Excel
python
import pandas as pd
df = pd.read_excel('data.xlsx', sheet_name=0, header=0, index_col=None)
print(df.head())
课件里写的是
sheetname,现代 Pandas 常用参数名是sheet_name。
写 Excel
python
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False, header=True)
Pandas 练习题(5道)
- 创建一个
Series,内容为[12, 24, 36, 48],索引为a,b,c,d。 - 创建一个包含"姓名、年龄、成绩"三列的
DataFrame,并输出前 2 行与基本信息。 - 用
loc和iloc分别取出某个单元格、某一行、某两列。 - 使用条件索引筛选出成绩大于 90 的所有记录。
- 将一个
DataFrame保存为 CSV 和 Excel 文件,再分别读回来查看前 5 行。
三、Matplotlib
PPT 里 Matplotlib 主要讲:画布与绘图元素、坐标轴参数、图形参数、折线图、散点图。
1. 基本绘图
python
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [2, 4, 6, 8]
plt.plot(x, y)
plt.show()
2. 折线图 plot()
PPT 给出的主要参数有:x, y, color, linewidth, linestyle, marker, markersize。
python
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 3, 5, 4, 6]
plt.plot(
x, y,
color='blue',
linewidth=2,
linestyle='--',
marker='o',
markersize=6
)
plt.title('折线图示例')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
3. 散点图 scatter()
PPT 给出的主要参数有:x, y, s, c, marker, alpha。
python
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 1, 4, 3, 5]
plt.scatter(
x, y,
s=80,
c='red',
marker='o',
alpha=0.7
)
plt.title('散点图示例')
plt.xlabel('X')
plt.ylabel('Y')
plt.show()
4. 常见坐标轴与标题设置
python
import matplotlib.pyplot as plt
x = [1, 2, 3, 4]
y = [3, 5, 2, 6]
plt.plot(x, y, marker='o')
plt.title('销售趋势图')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.xlim(1, 4)
plt.ylim(0, 7)
plt.grid(True)
plt.show()
5. 折线图与散点图对比
python
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [5, 7, 6, 8, 9]
# 折线图
plt.plot(x, y, marker='o')
plt.title('折线图')
plt.show()
# 散点图
plt.scatter(x, y, s=100, alpha=0.8)
plt.title('散点图')
plt.show()
Matplotlib 练习题(5道)
- 使用
plot()画出 x 为[1,2,3,4,5],y 为[2,4,6,8,10]的折线图。 - 在折线图中设置线型为虚线、点型为圆点、线宽为 2。
- 使用
scatter()画出一组散点图,并设置大小和透明度。 - 给图形添加标题、横纵坐标名称,并显示网格。
- 用同一组数据分别画折线图和散点图,比较两者展示效果。
四、Scikit-learn
PPT 这一部分主要是概念介绍:
- 数据集模块
- 数据预处理模块
- 模型训练模块
- 模型评估模块
- 其他功能模块
这一部分课件没有给出具体代码,所以我按教学内容帮你补成最基础、最常见的一套入门代码。
1. 导入数据集
python
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
print(X[:5])
print(y[:5])
2. 划分训练集和测试集
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
print(X_train.shape)
print(X_test.shape)
3. 数据预处理
python
from sklearn.preprocessing import StandardScaler
from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
print(X_scaled[:5])
4. 模型训练
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(y_pred)
5. 模型评估
python
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
iris = load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
model = DecisionTreeClassifier(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))
Scikit-learn 练习题(5道)
- 使用
load_iris()加载鸢尾花数据集,并查看特征数据和标签数据的前 5 行。 - 使用
train_test_split()将数据划分为训练集和测试集,测试集占 30%。 - 使用
StandardScaler()对特征数据进行标准化处理。 - 使用一个分类模型(如决策树)训练训练集,并预测测试集结果。
- 使用
accuracy_score()计算模型准确率,并输出分类报告。
你可以直接背的"模块总结"
NumPy
重点掌握:
array / arange / linspace / zeros / ones / random / dtype / ndim / shape / 索引切片 / sort / 数组运算 / 统计函数
Pandas
重点掌握:
Series / DataFrame / shape / columns / index / rename / info / head / tail / loc / iloc / 条件索引 / 算术运算 / describe / read_csv / to_csv / read_excel / to_excel
Matplotlib
重点掌握:
plot / scatter / title / xlabel / ylabel / xlim / ylim / grid / linestyle / marker / alpha
Scikit-learn
重点掌握:
datasets / train_test_split / preprocessing / fit / predict / accuracy_score
---、
习题级答案
📘 Python数据挖掘模块练习题(含答案)
一、NumPy(5题)
题1
创建数组 [2,4,6,8,10],并输出其数据类型和形状。
✅答案
python
import numpy as np
a = np.array([2, 4, 6, 8, 10])
print(a.dtype) # 数据类型
print(a.shape) # 形状
👉 结果说明:
- dtype:一般为 int64 或 int32
- shape:(5,)
题2
使用 arange() 创建 1~20 的奇数数组,再用 linspace() 创建 0~1 的等分数组(6个数)。
✅答案
python
import numpy as np
a = np.arange(1, 21, 2)
b = np.linspace(0, 1, 6)
print(a)
print(b)
👉 关键点:
- arange 是步长生成
- linspace 是等分生成
题3
创建一个 3×4 的全 0 数组和一个 2×2 的全 1 数组,并转换为 float 类型。
✅答案
python
import numpy as np
a = np.zeros((3, 4))
b = np.ones((2, 2))
b = b.astype(float)
print(a)
print(b)
题4
给定数组:
python
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
取:
- 第2行
- 第3列
- 前两行前两列
✅答案
python
import numpy as np
a = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(a[1]) # 第2行
print(a[:, 2]) # 第3列
print(a[:2, :2]) # 左上角
题5
创建两个数组并完成加减乘除,再计算一个数组的总和、均值、最大值。
✅答案
python
import numpy as np
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])
print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(np.sum(a))
print(np.mean(a))
print(np.max(a))
二、Pandas(5题)
题1
创建一个 Series,数据为 [12,24,36,48],索引为 a,b,c,d。
✅答案
python
import pandas as pd
s = pd.Series([12, 24, 36, 48], index=['a', 'b', 'c', 'd'])
print(s)
题2
创建一个包含"姓名、年龄、成绩"的 DataFrame,并查看前2行和基本信息。
✅答案
python
import pandas as pd
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [20, 21, 22],
'成绩': [85, 90, 95]
})
print(df.head(2))
print(df.info())
题3
使用 loc 和 iloc 获取数据。
✅答案
python
# loc(按标签)
print(df.loc[0])
print(df.loc[0, '姓名'])
# iloc(按位置)
print(df.iloc[0])
print(df.iloc[0, 1])
题4
筛选成绩大于 90 的数据。
✅答案
python
print(df[df['成绩'] > 90])
题5
保存 DataFrame 为 CSV 和 Excel,再读取回来。
✅答案
python
import pandas as pd
df.to_csv('data.csv', index=False)
df.to_excel('data.xlsx', index=False)
df1 = pd.read_csv('data.csv')
df2 = pd.read_excel('data.xlsx')
print(df1.head())
print(df2.head())
三、Matplotlib(5题)
题1
画一个简单折线图。
✅答案
python
import matplotlib.pyplot as plt
x = [1,2,3,4,5]
y = [2,4,6,8,10]
plt.plot(x, y)
plt.show()
题2
设置线型为虚线、点为圆点、线宽为2。
✅答案
python
plt.plot(x, y, linestyle='--', marker='o', linewidth=2)
plt.show()
题3
画散点图并设置大小和透明度。
✅答案
python
plt.scatter(x, y, s=100, alpha=0.7)
plt.show()
题4
添加标题、坐标轴名称和网格。
✅答案
python
plt.plot(x, y)
plt.title('示例图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.grid(True)
plt.show()
题5
同一数据画折线图和散点图。
✅答案
python
# 折线图
plt.plot(x, y)
plt.show()
# 散点图
plt.scatter(x, y)
plt.show()
四、Scikit-learn(5题)
题1
加载鸢尾花数据集并查看前5行。
✅答案
python
from sklearn.datasets import load_iris
iris = load_iris()
print(iris.data[:5])
print(iris.target[:5])
题2
划分训练集和测试集(30%测试集)。
✅答案
python
from sklearn.model_selection import train_test_split
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.3, random_state=42
)
题3
对数据进行标准化。
✅答案
python
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)
题4
训练一个决策树模型并预测。
✅答案
python
from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(y_pred)
题5
计算准确率并输出分类报告。
✅答案
python
from sklearn.metrics import accuracy_score, classification_report
print("准确率:", accuracy_score(y_test, y_pred))
print(classification_report(y_test, y_pred))