一些关于利用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范围内的样本数量,如果小于阈值,则该点为噪声点。
-
如果大于阈值,则该点为核心点,将所有从该点密度可达的点加入当前簇中。
-
重复上述过程,直到所有样本都被处理。