我的数据集包含5列,最后一列为classindex。我想要每个列与该classindex值的组合。
"sunny", "hot", "high", "false","no"
"sunny", "hot", "high", "true","no"
"overcast", "hot", "high", "false","yes"
"rainy", "mild", "high", "false","yes"
我希望阳光和阳光的组合;是= 0,晴天& no = 2,阴&是= 1,多雨&是= 2。
答案 0 :(得分:0)
您的数据集的描述对我来说似乎有点模糊,但是,您使用哪种数据结构来表示它?
想象一下,这是一个列表,您可以尝试类似:
l => (l.head, l.last)
将此应用于整个集合:
val dataset = List(
"sunny"::"hot"::"high"::"no"::Nil,
"sunny"::"hot"::"high"::"no"::Nil,
"overcast"::"hot"::"high"::"yes"::Nil,
"rainy"::"mild"::"high"::"yes"::Nil
)
val qualified = dataset.map(l => (l.head, l.last))
一旦您的元素符合“是”/“否”类,您就可以对事件进行分组并计算每组元素的数量:
val countMap = qualified.groupBy(x => x).map(kv => (kv._1, kv._2.size))
或更短的形式:
val countMap = qualified.groupBy(x => x).mapValues(_.size)
为了列出所有可能性,即使它们的计数为0,您也可以生成所有可能的组合并使用地图查找每个计数值:
(
for(
st <- dataset.map(_.head).toSet[String];
q <- dataset.map(_.last).toSet[String]
) yield (st,q)
).map(k => (k, countMap.getOrElse(k,0)))
> Set(((rainy,no),0), ((sunny,yes),0), ((sunny,no),2), ((rainy,yes),1), ((overcast,yes),1), ((overcast,no),0))
答案 1 :(得分:0)
将每一行收集到一个包含5个属性
的案例类Weather
中
case class Weather(p1: String, p2: String, p3: String, p4: String, p5: String)
等等
val xs = Array(
Weather("sunny", "hot", "high", "false","no"),
Weather("sunny", "hot", "high", "true","no"),
Weather("overcast", "hot", "high", "false","yes"),
Weather("rainy", "mild", "high", "false","yes"))
按照第一个和最后一个属性对条目进行分组,然后计算分组实例的数量,例如像这样,
xs.groupBy( w => (w.p1,w.p5) ).mapValues(_.size)
提供
Map((overcast,yes) -> 1, (sunny,no) -> 2, (rainy,yes) -> 1)
但是,此方法不考虑missing
或未声明的群组,例如"sunny"
和"yes"
。