# data
set.seed (123)
xvar <- c(rnorm (1000, 50, 30), rnorm (1000, 40, 10), rnorm (1000, 70, 10))
yvar <- xvar + rnorm (length (xvar), 0, 20)
myd <- data.frame (xvar, yvar)
# density plot for xvar
upperp = 80 # upper cutoff
lowerp = 30 # lower cutoff
x <- myd$xvar
plot(density(x))
dens <- density(x)
x11 <- min(which(dens$x <= lowerp))
x12 <- max(which(dens$x <= lowerp))
x21 <- min(which(dens$x > upperp))
x22 <- max(which(dens$x > upperp))
with(dens, polygon(x = c(x[c(x11, …Run Code Online (Sandbox Code Playgroud) 我有一个大的(x,y,z)蛋白质位置数据集,并希望绘制高占有率的区域作为热图.理想情况下,输出应该类似于下面的体积可视化,但我不确定如何使用matplotlib实现这一点.

我最初的想法是将我的位置显示为3D散点图,并通过KDE为其密度着色.我用测试数据将其编码如下:
import numpy as np
from scipy import stats
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
mu, sigma = 0, 0.1
x = np.random.normal(mu, sigma, 1000)
y = np.random.normal(mu, sigma, 1000)
z = np.random.normal(mu, sigma, 1000)
xyz = np.vstack([x,y,z])
density = stats.gaussian_kde(xyz)(xyz)
idx = density.argsort()
x, y, z, density = x[idx], y[idx], z[idx], density[idx]
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, c=density)
plt.show()
Run Code Online (Sandbox Code Playgroud)
这很好用!但是,我的真实数据包含数千个数据点,并且计算kde和散点图变得非常慢.
我的真实数据的一小部分:

我的研究表明,更好的选择是评估网格上的高斯kde.我只是不确定如何在3D中:
import numpy as np
from scipy import stats
import …Run Code Online (Sandbox Code Playgroud) 我需要将一个简单的单变量数据集聚集到预设数量的集群中.从技术上讲,它更接近于分类或排序数据,因为它只有1D,但我的老板称它为聚类,所以我将坚持使用该名称.我所使用的系统使用的当前方法是K-means,但这看起来有点过分.
有没有更好的方法来执行此任务?
其他一些帖子的答案提到了KDE(核密度估计),但这是一种密度估算方法,它会如何工作?
我看到KDE如何返回密度,但是如何告诉它将数据拆分成箱?
我如何拥有与数据无关的固定数量的箱(这是我的要求之一)?
更具体地说,如何使用scikit学习来解决这个问题?
我的输入文件如下:
str ID sls
1 10
2 11
3 9
4 23
5 21
6 11
7 45
8 20
9 11
10 12
Run Code Online (Sandbox Code Playgroud)
我想将sls编号分组成簇或箱,这样:
Cluster 1: [10 11 9 11 11 12]
Cluster 2: [23 21 20]
Cluster 3: [45]
Run Code Online (Sandbox Code Playgroud)
我的输出文件将如下所示:
str ID sls Cluster ID Cluster centroid
1 10 1 10.66
2 11 1 10.66
3 9 1 10.66
4 23 2 21.33
5 21 2 21.33
6 11 1 10.66
7 …Run Code Online (Sandbox Code Playgroud) cluster-analysis machine-learning data-mining kernel-density scikit-learn
我正在尝试使用seaborn 绘制直方图。obj[:, None]当我尝试设置 kde=True 时,返回此错误: ValueError:不再支持多维索引(例如)。在建立索引之前转换为 numpy 数组。
sns.histplot(data=df, x='age', kde=True);
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题?
我想将密度曲线添加到直方图和累积直方图,如下所示:

到目前为止,我可以去:
hist.cum <- function(x, plot=TRUE, ...){
h <- hist(x, plot=FALSE, ...)
h$counts <- cumsum(h$counts)
h$density <- cumsum(h$density)
h$itensities <- cumsum(h$itensities)
if(plot)
plot(h)
h
}
x <- rnorm(100, 15, 5)
hist.cum(x)
hist(x, add=TRUE, col="lightseagreen")
#
lines (density(x), add = TRUE, col="red")
Run Code Online (Sandbox Code Playgroud) 我正在尝试处理R中的过度绘图的方法,我想尝试的一件事是绘制单个点,但用它们的邻域密度来着色.为了做到这一点,我需要计算每个点的2D核密度估计.但是,似乎标准的核密度估计函数都是基于网格的.是否有在我指定的特定点计算2D内核密度估计值的函数?我想象一个函数将x和y向量作为参数并返回密度估计的向量.
这是我的代码:
import numpy as np
from scipy.stats.kde import gaussian_kde
from scipy.stats import norm
from numpy import linspace,hstack
from pylab import plot,show,hist
import re
import json
attribute_file="path"
attribute_values = [line.rstrip('\n') for line in open(attribute_file)]
obs=[]
#Assume the list obs as loaded
obs=np.asarray(osservazioni)
obs=np.sort(obs,kind='mergesort')
x_min=osservazioni[0]
x_max=osservazioni[len(obs)-1]
# obtaining the pdf (my_pdf is a function!)
my_pdf = gaussian_kde(obs)
# plotting the result
x = linspace(0,x_max,1000)
plot(x,my_pdf(x),'r') # distribution function
hist(obs,normed=1,alpha=.3) # histogram
show()
new_values = np.asarray([-1, 0, 2, 3, 4, 5, 768])[:, np.newaxis] …Run Code Online (Sandbox Code Playgroud) 目前不可能使用scipy.stats.gaussian_kde基于加权样本来估计随机变量的密度.有哪些方法可以根据加权样本估算连续随机变量的密度?
该pandas.plot.kde()函数可以方便地绘制连续随机变量的估计密度函数。它将数据x作为输入,并显示分箱输入的概率p(x)作为其输出。
如何提取它计算的概率值?我想要一个包含内部计算的概率值的数组或 pandas 系列,而不是仅仅绘制带宽样本的概率。
如果这不能用 pandas kde 完成,请告诉我 scipy 或其他中的任何等效项
我正在尝试使用SciPy的gaussian_kde函数来估计多变量数据的密度.在我的下面的代码中,我采样了一个3D多元法线并且符合内核密度,但我不确定如何评估我的拟合.
import numpy as np
from scipy import stats
mu = np.array([1, 10, 20])
sigma = np.matrix([[4, 10, 0], [10, 25, 0], [0, 0, 100]])
data = np.random.multivariate_normal(mu, sigma, 1000)
values = data.T
kernel = stats.gaussian_kde(values)
Run Code Online (Sandbox Code Playgroud)
我看到了这个,但不知道如何将它扩展到3D.
还不确定我怎么开始评估拟合密度?我如何想象这个?
kernel-density ×10
python ×5
r ×3
scipy ×3
gaussian ×2
graph ×2
base ×1
data-mining ×1
ggplot2 ×1
histogram ×1
kde ×1
matplotlib ×1
mayavi ×1
numpy ×1
pandas ×1
plot ×1
scikit-learn ×1
seaborn ×1
statistics ×1