<p>实现这一点的自然方法是将数据分成5个数量,然后根据这些数量将数据分成多个容器。幸运的是,熊猫可以让你轻松做到这一点:</p>
<pre><code>df["category"] = pd.cut(df.Activity, 5, labels= ["a","b", "c", "d", "e"])
</code></pre>
<p>输出类似于:</p>
<pre><code> Activity Category
34 115 b
15 43 a
57 192 d
78 271 e
26 88 b
6 25 a
55 186 d
63 220 d
1 15 a
76 268 e
</code></pre>
<h2>另一种视图-聚类</h2>
<p>在上面的方法中,我们将数据拆分为5个存储单元,其中不同存储单元的大小相等。另一种更复杂的方法是将数据分成5个簇,并使每个簇中的数据点尽可能相似。在机器学习中,这被称为聚类/分类问题</p>
<p>一个经典的聚类算法是<a href="https://en.wikipedia.org/wiki/K-means_clustering" rel="nofollow noreferrer">k-means</a>。它通常用于具有多个维度的数据(例如,每月活动、年龄、性别等)。因此,这是一种非常简单的聚类情况</p>
<p>在这种情况下,k-means聚类可以通过以下方式完成:</p>
<pre><code>import scipy
from scipy.cluster.vq import vq, kmeans, whiten
df = pd.DataFrame({"Activity": l})
features = np.array([[x] for x in df.Activity])
whitened = whiten(features)
codebook, distortion = kmeans(whitened, 5)
code, dist = vq(whitened, codebook)
df["Category"] = code
</code></pre>
<p>输出如下所示:</p>
<pre><code> Activity Category
40 138 1
79 272 0
72 255 0
13 38 3
41 139 1
65 231 0
26 88 2
59 197 4
76 268 0
45 145 1
</code></pre>
<p>几点注意:</p>
<ul>
<li>类别的标签是随机的。在这种情况下,标签“2”指的是比紫菜“1”更高的活性</李>
<li>我没有将标签从0-4迁移到A-E。这可以使用pandas <code>map</code>轻松完成</李>
</ul>