Skip to main content

        基本数据特征分析方法 - Featured image

基本数据特征分析方法

一些关于利用pandas分析数据的方法

一、分布分析

1、定量数据分布分析(分析是否对称,用直方图频率对观察)

作直方图:plt.hist()

判断是否符合正态分布:  scipy.states.normaltest()   —如果pvalue值大于0.05,就可以说基本满足

2、定性数据分布分析(分析类别分布情况)

常用series 和 dataframe 的value_counts()获得结果,或者通过饼图

二、统计量分析

1、集中趋势分析(均值,中位数)

2、离中趋势分析(标准差,四分位距)

  • 标准差:std()

  • 四分位距(1):quantile([0.75]).loc[0.75]-quantile([0.25]).loc[0.25]

注:quantile默认是0.5, 是中位数

  • 四分位距(2):describe().loc[“75%”]-describe.loc[“25”]

三、相关分析(变量线性关系)

利用散点图(scatter())作图进行分析

以下相关性方法可以帮助我们揭示变量之间的线性关系、非线性关系或单调关系:

皮尔逊相关系数:衡量变量之间的线性关系,适用于数值型变量。

Pearson 即皮尔逊相关系数,用于衡量了两个变量之间的线性关系强度和方向,它的取值范围在 -1 到 1 之间,其中 -1 表示完全负相关,1 表示完全正相关,0 表示无线性相关。

df.corr(method=“pearson”)

斯皮尔曼等级相关系数:衡量变量之间的单调关系,适用于数值型和顺序型变量。

Spearman Correlation 斯皮尔曼相关系数用于衡量两个变量的单调关系(无论是线性还是非线性),它是基于变量的排名计算的。斯皮尔曼相关系数的取值范围与皮尔逊相关系数相同:-1 到 1。

df.corr(method=“spearman”)

肯德尔秩相关系数:衡量变量之间的秩次关系,适用于小样本数据。

KendallCorrelation肯德尔秩相关系数也用于衡量变量之间的单调关系,它是通过计算两个变量排名之间的一致性来得出的。肯德尔相关系数的计算较为复杂,适用于较小的数据集

df.corr(method=“kendall”)

相关性矩阵:用来查看各个变量之间的相关性。

相关性矩阵是一个对称矩阵,矩阵中的每个值表示两个变量之间的相关系数。

直接用df.corr()

热图:一种有效的可视化方式,可以帮助我们直观地查看变量之间的相关性。

CorrelationHeatmap 为了更直观地呈现相关性矩阵,可以使用热图(Heatmap)来可视化各个变量之间的相关性

使用seaborn库绘制

seaborn.heatmap(df.corr(),annot=True,cmap=“coolwarm”,fmt=“.2f”,vmin=-1,vmax=1)

注: 说明: sns.heatmap()绘制相关性热图,annot=True 表示在热图上显示数值,cmap=‘coolwarm’ 设置颜色范围,vmin=-1, vmax=1 限制颜色范围为 -1 到 1。

四、聚类分析

K-Means算法是一种基于距离的非层次聚类算法。其基本思想是将数据划分为预定的类数K,并采用距离作为相似性的评价指标。算法步骤如下:

从N个样本数据中随机选取K个对象作为初始的聚类中心。

计算每个样本到各个聚类中心的距离,将对象分配到距离最近的聚类中。

所有对象分配完成后,重新计算K个聚类的中心。

比较新旧聚类中心,如果发生变化,重复步骤2,否则停止并输出结果。

1、利用Scipy库

form
scipy.cluster.vq import vq,kmeans,whiten
obs = whiten(data)#
算出各列元素的标准差
centroids,
distortion = kmeans(obs, k_or_guess[,iter, thresh, check_finite])

*参数

  • obs: 观测数据,通常是二维的数组,每行代表一个数据点。

  • k_or_guess: 指定要计算的聚类中心数量(整数)或初始聚类中心猜测值(二维数组)。

  • iter: 迭代次数,默认为20次。

  • thresh: 停止迭代的阈值,默认为1e-5。

  • check_finite: 是否检查输入数据是否包含无穷大或NaN值,默认为True。

返回值:

  • centroids: 计算得到的聚类中心。

  • distortion: 最终的失真度,即所有数据点到其最近的簇中心的距离平方和。

code, dist = vq(obs,
codebook[, check_finite])  #vq
函数用于矢量化量化,即将观测数据向量分配到最近的均值向量
  • 参数:

  • obs: 观测数据,通常是二维数组。

  • codebook: 均值向量的集合(聚类中心),通常也是二维数组。

  • check_finite: 是否检查输入数据是否包含无穷大或NaN值。

返回值:

  • code: 包含每个观测数据点对应的簇中心索引的数组。

  • dist: 包含每个观测数据点到其对应簇中心的距离的数组。

注:kmeans()用于聚类分类,vq用于归类

2、利用sklearn库

form sklearn.cluster import KMeans
kmeans = KMeans(n_clusters = k_or_guess).fit(obs)
pied = kmeans.predict(obs)

3、利用DBSCAN算法

DBSCAN算法是一种基于密度的聚类算法。其核心思想是通过密度可达性来定义簇。算法步骤如下:

  • 从数据中抽取一个未处理的样本。

  • 统计该样本周围半径E范围内的样本数量,如果小于阈值,则该点为噪声点。

  • 如果大于阈值,则该点为核心点,将所有从该点密度可达的点加入当前簇中。

  • 重复上述过程,直到所有样本都被处理。