R的转换示例';通过散列基数进行二进制编码';修改Python代码

R的转换示例';通过散列基数进行二进制编码';修改Python代码,python,r,encoding,binary,data-science,Python,R,Encoding,Binary,Data Science,我发现了这篇关于分类、数字、一个热门和二进制编码的伟大博客文章@ 然而,我想尝试的最有趣的部分是用R编写的: my_data <- c("Louise", "Gabriel", "Emma", "Adam", "Alice", "Raphael", "Chloe", "Louis", "Jeanne", "Arthur") mat

我发现了这篇关于分类、数字、一个热门和二进制编码的伟大博客文章@

然而,我想尝试的最有趣的部分是用R编写的:

my_data <- c("Louise",
         "Gabriel",
         "Emma",
         "Adam",
         "Alice",
         "Raphael",
         "Chloe",
         "Louis",
         "Jeanne",
         "Arthur")
matrix(
  as.integer(intToBits(as.integer(as.factor(my_data)))),
  ncol = 32,
  nrow = length(my_data),
  byrow = TRUE
)[, 1:ceiling(log(length(unique(my_data)) + 1)/log(2))]

my_data分类是一种数据类型,与统计中的分类变量相对应:一种变量,只能接受有限且通常固定数量的可能值(类别;R中的级别),您可以使用,文档中的一个小示例:

In [1]: s = pd.Series(["a","b","c","a"], dtype="category")

In [2]: s
Out[2]: 
0    a
1    b
2    c
3    a
dtype: category
Categories (3, object): [a, b, c]
或者按照您在DataFrame中的要求:

In [3]: df = pd.DataFrame({"A":["a","b","c","a"]})

In [4]: df["B"] = df["A"].astype('category')

In [5]: df
Out[5]: 
   A  B
0  a  a
1  b  b
2  c  c
3  a  a
与R系数的差异:

可以观察到R因子函数的以下差异:

R的级别是命名的类别

R的级别总是字符串类型,而pandas中的类别可以是任何数据类型

无法在创建时指定标签。之后使用s.cat重命名_类别(新的_标签)

与R的因子函数不同,使用分类数据作为唯一输入来创建新的分类序列不会删除未使用的类别,而是创建一个新的分类序列,该分类序列等于传入的分类序列

R允许在其级别(熊猫类别)中包含缺失值。Pandas不允许NaN类别,但缺少的值仍可能存在于值中