python数据挖掘基础

第二章 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)
ndimshape

查看维度和形状。

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道)

  1. 使用 np.array() 创建一个一维数组 [2,4,6,8,10],并输出其数据类型和形状。

  2. 使用 np.arange(1, 21, 2) 创建奇数数组,再使用 np.linspace(0, 1, 6) 创建等分数组。

  3. 创建一个 3×4 的全 0 数组和一个 2×2 的全 1 数组,并将其中一个转换为 float 类型。

  4. 给定数组

    python 复制代码
    a = np.array([[1,2,3],[4,5,6],[7,8,9]])

    取出第 2 行、第 3 列,以及前两行前两列。

  5. 创建两个形状相同的数组,完成加减乘除运算;再计算其中一个数组的总和、均值和最大值。


二、Pandas

PPT 里 Pandas 主要讲了:SeriesDataFrame、查看和获取数据、算术运算、统计汇总、读写 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 提到的常用操作包括 shapecolumnsindexrename()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道)

  1. 创建一个 Series,内容为 [12, 24, 36, 48],索引为 a,b,c,d
  2. 创建一个包含"姓名、年龄、成绩"三列的 DataFrame,并输出前 2 行与基本信息。
  3. lociloc 分别取出某个单元格、某一行、某两列。
  4. 使用条件索引筛选出成绩大于 90 的所有记录。
  5. 将一个 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道)

  1. 使用 plot() 画出 x 为 [1,2,3,4,5],y 为 [2,4,6,8,10] 的折线图。
  2. 在折线图中设置线型为虚线、点型为圆点、线宽为 2。
  3. 使用 scatter() 画出一组散点图,并设置大小和透明度。
  4. 给图形添加标题、横纵坐标名称,并显示网格。
  5. 用同一组数据分别画折线图和散点图,比较两者展示效果。

四、Scikit-learn

PPT 这一部分主要是概念介绍:

  1. 数据集模块
  2. 数据预处理模块
  3. 模型训练模块
  4. 模型评估模块
  5. 其他功能模块

这一部分课件没有给出具体代码,所以我按教学内容帮你补成最基础、最常见的一套入门代码。

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道)

  1. 使用 load_iris() 加载鸢尾花数据集,并查看特征数据和标签数据的前 5 行。
  2. 使用 train_test_split() 将数据划分为训练集和测试集,测试集占 30%。
  3. 使用 StandardScaler() 对特征数据进行标准化处理。
  4. 使用一个分类模型(如决策树)训练训练集,并预测测试集结果。
  5. 使用 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))

相关推荐
echome8882 小时前
Python 异步编程实战:asyncio 核心概念与最佳实践
开发语言·网络·python
yunyun321232 小时前
自动化与脚本
jvm·数据库·python
暮冬-  Gentle°2 小时前
使用PyTorch构建你的第一个神经网络
jvm·数据库·python
setmoon2142 小时前
构建一个基于命令行的待办事项应用
jvm·数据库·python
研究点啥好呢2 小时前
3月22日GitHub热门项目推荐|网页浏览,何须手动
人工智能·python·开源·github
三块可乐两块冰2 小时前
【机器学习笔记三十二】机器学习三十二
python
love530love2 小时前
ComfyUI-3D-Pack:Windows 下手动编译 mesh_inpaint_processor C++ 加速模块
c++·人工智能·windows·python·3d·hunyuan3d·comfyui-3d-pack
vx_biyesheji00012 小时前
计算机毕业设计:Python多源新闻数据智能舆情挖掘平台 Flask框架 爬虫 SnowNLP ARIMA 可视化 数据分析 大数据(建议收藏)✅
爬虫·python·机器学习·数据分析·django·flask·课程设计
m0_587958952 小时前
机器学习与人工智能
jvm·数据库·python