《数据可视化》复习提纲

所用教材为王晓华《Python机器学习与可视化分析实战》

题型:填空30’,简答题36’,综合题(补全代码)34’
黄色高亮部分表示考察代码
***号前置表示重要

目录

第一章:

1.数据可视化的三个分类

科学可视化
信息可视化
可视分析

2.使用pip安装第三方类库方法

使用命令 pip install package_name 安装所需的Python包。例如,安装Matplotlib包:

pip install matplotlib

第二章

1.probplot:计算数据在正态分布下的偏离程度

probplot 是 scipy.stats 模块中的一个函数,用于生成正态概率图,以评估数据是否服从正态分
布。正态概率图是一种图形方法,通过比较数据的分位数和正态分布的分位数来判断数据的正态性。
示例代码:

import numpy as np
import matplotlib.pyplot as plt
import scipy.stats as stats

# 生成正态分布数据
# 生成一个包含1000个随机数的数组,这些随机数服从均值为0,标准差为1的正态分布
data = np.random.normal(loc=0, scale=1, size=1000)

# 生成正态概率图
stats.probplot(data, dist="norm", plot=plt)
plt.show()

2.读取csv文件,参数含义

使用 pandas 库的 read_csv 函数读取CSV文件,常用参数如下:

import pandas as pd

# 读取CSV文件
df = pd.read_csv('data.csv',
                 sep=',', # 指定分隔符,默认是逗号
                 header=0, # 指定行数作为列名,默认是第一行
				 index_col=None, # 指定哪一列作为行索引
				 usecols=None, # 指定读取的列,默认读取所有列
				 dtype=None, # 指定列的数据类型
				 na_values=None, # 指定哪些值作为缺失值
				 parse_dates=False, # 指定哪些列需要解析为日期
				 skiprows=0, # 指定跳过的行数
				 nrows=None # 指定读取的行数
			   )

3.欧几里得相似度、余弦相似度

欧几里得相似度:

欧几里得距离用于度量两个点之间的直线距离。
在这里插入图片描述

余弦相似度:

余弦相似度用于度量两个向量之间的夹角余弦值,值越接近1表示越相似。
在这里插入图片描述
在这里插入图片描述

4.数据的三个四分位数,对数据进行统计学估计describe, 箱线图含义,画法boxplot1

在这里插入图片描述
Q1 (第一四分位数):数据的第25百分位数
Q2 (第二四分位数/中位数):数据的第50百分位数
Q3 (第三四分位数):数据的第75百分位数
在这里插入图片描述
代码:
定义df变量并为其赋值

import pandas as pd

data = {'values': [1, 2, 3, 4, 5]}
df = pd.DataFrame(data)

画boxplot

import matplotlib.pyplot as plt

plt.boxplot(df['values'])
plt.title('箱线图')
plt.show()

在这里插入图片描述
P30例题代码详解:

# 从pylab导入所有内容,这是不推荐的,因为可能会覆盖现有命名空间中的内容
# pylab 是一个将 numpy 和 matplotlib.pyplot 合并在一起的模块
from pylab import *
# 导入pandas库用于数据处理
import pandas as pd
# 导入matplotlib.pyplot库用于绘图
import matplotlib.pyplot as plt

# 定义文件路径,包含数据的CSV文件
filePath = ("c://dataTest.csv")

# 读取CSV文件到一个DataFrame对象中
# 注意:header=None 和 prefix='V' 的参数应该在这里指定
# header=None 表示文件中没有标题行
# prefix='V' 表示为每一列生成一个前缀为'V'的列名,例如V0, V1, V2, ...
dataFile = pd.read_csv(filePath, header=None, prefix='V')

# 输出DataFrame的前5行数据
print(dataFile.head())
# 输出DataFrame的后5行数据
print(dataFile.tail())

# 计算DataFrame的统计摘要并打印出来
summary = dataFile.describe()
print(summary)

# 从DataFrame中提取第11列到第16列的数据,并将其转换为NumPy数组
# iloc[: ,10:16] 选择所有行和第11到第16列 (0索引基)
array = dataFile.iloc[:, 10:16].values

# 绘制箱线图
plt.boxplot(array)

# 设置X轴标签为“Attribute”
plt.xlabel("Attribute")
# 设置Y轴标签为“Score”
plt.ylabel("Score")

# 显示图形
plt.show()

5.数据的标准化

在这里插入图片描述

6.高维数据展示:平行坐标图,原理2

在这里插入图片描述

7.相关性与热力图corr,pcolor, heatmap3

***相关性矩阵 corr :

在这里插入图片描述
相关性矩阵用于计算数据集中各个特征之间的相关系数。

***热力图 heatmap :

是一种判断属性相关性的常用方法,根据不同目标行数据对应的数据相关性进行检测。热力图用于可视 化相关性矩阵。

import pandas as pd
import matplotlib.pyplot as plot

# 定义文件路径并读取数据文件
filePath = (".//dataTest.csv")
dataFile = pd.read_csv(filePath, header=None)
# 计算数据的摘要信息
summary = dataFile.describe()
# 计算相关性矩阵
corMat = pd.DataFrame(dataFile.iloc[1:20, 1:20].corr())
print(corMat)
# 使用matplotlib绘制热力图
plot.pcolor(corMat)
plot.show()

# 使用NumPy生成一个10行12列的随机数数组,这些随机数在0到1之间
data = np.random.rand(10, 12)
# 使用Pandas将NumPy数组转换为DataFrame,并为每一列指定名称为'Var1'到'Var12'
df = pd.DataFrame(data, columns=[f'Var{i}' for i in range(1, 13)])
# 计算相关性矩阵
corr_matrix = df.corr()
# 绘制热力图
# 使用Seaborn的heatmap()函数绘制相关性矩阵的热力图
# 参数annot=True表示在每个单元格上显示数值
# 参数cmap='coolwarm'表示使用'coolwarm'色彩映射
sns.heatmap(corr_matrix, annot=True, cmap='coolwarm')
plt.show()

在这里插入图片描述

第三章

1.***一元分布图(直方图)distplot4

distplot是库seaborn中的一个函数,用于绘制一元数据的分布图(直方图),同时可以叠加核密度估计图。
示例代码:

import seaborn as sns  # 导入Seaborn库用于高级数据可视化
import matplotlib.pyplot as plt  # 导入Matplotlib库用于图形操作和显示

# 使用NumPy生成1000个服从标准正态分布(均值为0,标准差为1)的随机数
data = np.random.randn(1000)

# 绘制一元分布图(直方图)
# 使用Seaborn的distplot()函数绘制数据的分布图
# 参数bins=30表示将数据分成30个柱
# 参数kde=True表示绘制核密度估计曲线
sns.distplot(data, bins=30, kde=True)

# 绘制一元分布图(直方图),显示频数
# sns.histplot(data, bins=30, kde=True, stat='count')

# 绘制一元分布图(直方图),显示频率
# sns.histplot(data, bins=30, kde=True, stat='probability')

plt.title('一元分布图(直方图)')
plt.show()

2.***二元分布图jointplot, pairplot(多组)

jointplot用于绘制两个变量的联合分布图,包括散点图和边际分布图。

# 导入所需库
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np

# 生成随机数据
data1 = np.random.randn(1000)  # 第一个变量的随机数据,服从标准正态分布
data2 = np.random.randn(1000)  # 第二个变量的随机数据,服从标准正态分布

# 绘制二元分布图
# 使用 Seaborn 的 jointplot() 函数绘制两个变量的关系图,类型为散点图
sns.jointplot(x=data1, y=data2, kind='scatter')

plt.show()

pairplot用于绘制多组变量之间的成对关系图。

# 导入所需库
import seaborn as sns
import matplotlib.pyplot as plt

# 使用 Seaborn 加载经典的鸢尾花数据集,存储在 DataFrame 中
df = sns.load_dataset('iris')

# 绘制多组变量成对关系图
# 使用 Seaborn 的 pairplot() 函数绘制多组变量的成对关系图
# 参数 hue='species' 表示按照鸢尾花的不同种类(species)进行着色区分
sns.pairplot(df, hue='species')

plt.show()

3.分组groupby用法

groupby是pandas库中用于对数据进行分组并进行聚合操作的方法。

import pandas as pd

data = {'Category': ['A', 'B', 'A', 'B', 'A', 'B'],
        'Values': [1, 2, 3, 4, 5, 6]}
df = pd.DataFrame(data)

# 分组并计算均值
grouped = df.groupby('Category').mean()

# 打印分组后的均值
print(grouped)

输出

          Values
Category        
A            3.0
B            4.0

4.高维数据展示:雷达图

5.***按标签分组画分布图,注意参数的取法hue=”label”

hue参数用于按类别分组绘制分布图

import seaborn as sns
import matplotlib.pyplot as plt

# 生成示例数据(加载鸢尾花数据集)
df = sns.load_dataset('iris')

# 按标签分组绘制分布图
# 使用 Seaborn 的 histplot() 函数绘制萼片长度(sepal_length)的分布图
# 参数 data=df 指定数据集为 df
# 参数 x='sepal_length' 指定 x 轴为 'sepal_length' 列
# 参数 hue='species' 指定按 'species' 列的不同取值进行着色
# 参数 multiple='stack' 指定堆叠显示不同物种的分布
sns.histplot(data=df, x='sepal_length', hue='species', multiple='stack')

plt.show()

在这里插入图片描述

6.画散点图、连线图,参数设置 scatter, plot, lineplot…

散点图(scatter plot):

plt.scatter(x, y,
			color='blue', # 点的颜色
			s=100, # 点的大小
			marker='o', # 点的形状
			edgecolors='w', # 点的边框颜色
			linewidths=2, # 点的边框宽度
			alpha=0.75) # 点的透明度

连线图(line plot):

plt.plot(x, y,
		 color='green', # 线的颜色
		 linestyle='--', # 线的样式 ('-' 代表实线, '--' 代表虚线, '-.' 代表点划线, ':' 代表点线)
		 marker='o', # 数据点的标记
		 markersize=10, # 标记的大小
		 linewidth=2, # 线的宽度
		 markerfacecolor='red',# 标记的填充颜色
		 markeredgewidth=2, # 标记的边框宽度
		 markeredgecolor='blue', # 标记的边框颜色
		 alpha=0.75) # 线的透明度

使用seaborn绘制连线图(lineplot):

sns.lineplot(x='x', y='y',
			 data=df,
			 color='purple', # 线的颜色
			 linestyle='-', # 线的样式
			 marker='o', # 数据点的标记
			 markersize=10, # 标记的大小
			 markerfacecolor='yellow', # 标记的填充颜色
			 linewidth=2) # 线的宽度

第四章

1.经典k-means聚类算法流程,voronoi图的含义5

经典k-means聚类算法流程

1.初始化:随机选择k个初始质心(即簇的中心)。
2.分配样本:将每个样本分配到距离最近的质心所在的簇。
3.更新质心:重新计算每个簇的质心,即所有分配到该簇的样本的平均值。
4.重复步骤2和3:直到质心不再发生变化或达到预定的迭代次数。
目的:类内的点都足够近,类间的点都足够远

Voronoi图的含义

Voronoi图将平面划分为若干个区域,每个区域由一个质心点生成,区域内的所有点距离该质心最近。它在k-means聚类算法中常用于可视化聚类结果。
在这里插入图片描述

2.缺失值查看,统计

使用pandas库可以方便地查看和统计数据中的缺失值。

import pandas as pd

# 创建示例数据
data = {'A': [1, 2, None, 4], 'B': [None, 2, 3, 4]}
df = pd.DataFrame(data)

# 查看缺失值
print(df.isnull())

# 统计缺失值
print(df.isnull().sum())

输出

       A      B
0  False   True
1  False  False
2   True  False
3  False  False
A    1
B    1

3.字符数据的独热编码类OneHotEncoder

独热编码(One-Hot Encoding)用于将分类数据转换为二进制向量

from sklearn.preprocessing import OneHotEncoder

# 创建示例数据
data = [['cat'], ['dog'], ['cat'], ['bird']]

# 初始化 OneHotEncoder,设置 sparse=False 表示不返回稀疏矩阵
encoder = OneHotEncoder(sparse=False)

# 独热编码
encoded_data = encoder.fit_transform(data)

# 打印独热编码后的数据
print(encoded_data)

4.高维数据展示:雷达图,原理

在这里插入图片描述

5.sklearn中的k-means类的导入和使用,聚类中心的计算(注:cluster_centers_)

from sklearn.cluster import KMeans
import numpy as np

# 创建示例数据
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])

# KMeans 聚类
# n_clusters=3:指定聚类的簇数为3。
# random_state=9:设置随机种子,以确保每次运行时结果一致。
# fit(data):对数据 data 进行聚类,学习聚类模型。
kmeans = KMeans(n_clusters=3, random_state=9).fit(data)

# 聚类中心
print(kmeans.cluster_centers_)

6.轮廓系数的两个因素,sklearn中轮廓系数的计算6

轮廓系数的两个因素

内聚度
分离度

***sklearn中轮廓系数的计算

from sklearn.metrics import silhouette_score
from sklearn.cluster import KMeans
import numpy as np

# 创建示例数据和聚类
data = np.array([[1, 2], [1, 4], [1, 0], [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(data)

# 获取聚类标签
labels = kmeans.labels_

# 计算轮廓系数
silhouette_avg = silhouette_score(data, labels)
print(silhouette_avg)

7.基于密度的DBSCAN算法流程,相关基本概念:直接密度可达、密度可达、密度相连…7

DBSCAN算法流程:

  1. 初始化
    随机选择一个未访问的点。
  2. 扩展簇
    如果该点的邻域内的点数大于等于MinPts,则创建新簇,并将这些点添加到簇中。 对于簇中的每个点,重复检查其邻域并继续扩展簇。
  3. 标记噪声
    如果某个点不属于任何簇且邻域内点数小于MinPts,则标记为噪声。

基本概念:

直接密度可达:点p在ε邻域内的点数大于等于MinPts,则p是核心点,且邻域内的点直接密度可 达。
密度可达:通过核心点的直接密度可达关系,点q能从点p到达。
密度相连:如果存在一个点o,使得点p和点q都能从点o密度可达,则p和q密度相连。

8.***sklearn中的DBSCAN类的导入和使用

from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import numpy as np

# 创建示例数据
np.random.seed(0)
X = np.random.randn(100, 2)

# 使用 DBSCAN 进行聚类
y_pred = DBSCAN().fit_predict(X)

# 绘制聚类结果(示例中缺少绘图代码,这里假设添加绘图代码)
plt.scatter(X[:, 0], X[:, 1], c=y_pred, cmap='viridis')
plt.title('DBSCAN Clustering')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.show()

9基于分层的Agglomerative凝聚算法流程,衡量不同簇之间距离的方法

基于分层的Agglomerative凝聚算法流程

在这里插入图片描述
在这里插入图片描述

衡量不同簇之间距离的方法

在这里插入图片描述

第五章

1.一元线性回归、一元非线性(高次)回归、多元线性回归及最小二乘法,回归系数满足的线性方程组的推导8

回归定义:数学上来说,回归就是一个或多个自变量与因变量之间的函数关系。回归分析或回归模型便是利用观测数据去建立这样的函数关系,然后利用这个函数关系进行预测

最小二乘法推导方程组

在这里插入图片描述
在这里插入图片描述

2.求多元函数极小值的随机梯度下降算法流程9

3.评价指标

均方误差(MSE)
均方根误差(RMSE)
平均绝对误差(MAE)

4.***一元非线性(高次)回归代码10

import numpy as np
from scipy.optimize import leastsq

# 定义二次函数形式的拟合函数
def Fun(p, x):
    a1, a2, a3 = p
    return a1 * x**2 + a2 * x + a3

# 定义一次函数形式的拟合函数
def Fun1(p, x):
    a0, a1 = p
    return a0 * x + a1

# 定义二次函数形式的拟合残差
def error(p, x, y):
    return Fun(p, x) - y

# 定义一次函数形式的拟合残差
def error1(p, x, y):
    return Fun1(p, x) - y

def main():
    x = np.linspace(-10, 10, 100)  # 创建时间序列,从-10到10,共100个点
    p_value = [-2, 5, 10]  # 原始数据的二次函数参数
    p_value1 = [10, 1]  # 原始数据的一次函数参数
    noise = np.random.randn(len(x))  # 创建随机噪声
    y = Fun(p_value, x) + noise * 20  # 加上噪声的二次函数序列
    y1 = Fun1(p_value1, x) + noise * 10  # 加上噪声的一次函数序列
    p0 = [0.1, -0.01, 100]  # 二次拟合的初始参数设置
    p01 = [3.1, -0.01]  # 一次拟合的初始参数设置
    
    # 使用最小二乘法进行二次函数拟合
    para = leastsq(error, p0, args=(x, y))
    # 使用最小二乘法进行一次函数拟合
    para1 = leastsq(error1, p01, args=(x, y1))
    
    # 计算拟合后的二次函数曲线
    y_fitted = Fun(para[0], x)
    # 计算拟合后的一次函数曲线
    y_fitted1 = Fun1(para1[0], x)
    
    # 返回拟合结果
    return x, y, y_fitted, y1, y_fitted1

# 调用主函数进行拟合并获取结果
x, y, y_fitted, y1, y_fitted1 = main()

第六章

1.逻辑回归的基本任务11

通过学习数据中的特征来预测目标变量属于某个类别的概率。常用于二分类问题,但也可以扩展到多分类问题。模型输出的概率通过阈值决定分类结果(通常0.5作为阈值)。

2.分割函数Sigmoid及其表达式

在这里插入图片描述

3.高维数据展示:RadViz雷达图,原理

4.高维数据展示:Andrews曲线,原理

高维数据处理12

  1. 平行坐标:用多条平行线段表示数据特征,通过线段连接的折线展示数据点在不同特征上的分布和关系。
  2. RadViz雷达图:数据特征被视为圆周上的半径,数据点则根据特征值在圆周上的位置来显示,帮助快速识别数据的模式和趋势。
  3. Andrews曲线:使用三角函数将多维数据投影到平面上,每个数据点通过一条平滑曲线表示,便于比较数据点之间的形状和相似性。

  1. 简答题,箱线图上下边缘、离群值
    补全代码+简答题 ↩︎

  2. 简答题 ↩︎

  3. 写代码、基本概念 ↩︎

  4. 给数据画一元分布
    频数/频率 ↩︎

  5. kmeans算法流程
    简答题
    voronai图
    简答题
    课件/网上搜 ↩︎

  6. 两个因素(内聚度/分离度)
    写代码 ↩︎

  7. 简答题(概念) ↩︎

  8. 线性回归问题描述
    简答题
    基本概念
    最小二乘法→推导方程组
    写成矩阵向量形式 ↩︎

  9. 停机准则(停下来的条件) ↩︎

  10. 课上提供的一元一次/二次代码 ↩︎

  11. 基本任务→分类 ↩︎

  12. 知道至少两种展示高维数据的方法+原理 ↩︎

  • 24
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值