使用基于列而非行的 PCA 进行降维

Dimension reduction using PCA based on columns not rows

我正在尝试减少 Covid 病例的时间序列数据的维度。我有一个数据框形式的 Covid 病例,每个日期都有一行,每个地区都有一列。我现在想减少维度以消除数据的时间扭曲。 我的数据框如下所示:

1001 1002
01.01.2020 35 57
02.01.2020 29 46
03.01.2020 46 61

数据帧上的代码 I 运行:

# df = above mentioned dataframe

pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df)


我想收到的(我认为)是按列减少维数,从而生成一个数组,每列都有一个数组,其中包含维数减少的结果。因此,len(transformed_df) 应该等于我拥有的列数(在上面的示例中为 2. 我收到的是一个数组,我认为数据帧的每一行都有一个数组(因为 len(transformed_df) 等于我的行数,在上面的例子中它是 3)。 所以我的问题是,如何按列而不是按行执行降维。

(补充:我的数据是归一化的,上面的数字是我随机选择的)

好吧,事实证明只需使用 df.transpose 就足够了:

# df = above mentioned dataframe

pca = PCA (n_components=2)
transformed_df = pca.fit_transform(df.transpose())