记录工作中会常用到的一些实用例子
- 尼基系数
科学计算方面scala包的丰富性还是略差于python,出于业务需要,需要编写一个计算基尼指数的函数,
here 已经给出了计算方法和应用案例,根据计算过程稍加修改即可:
def gini( nums :ArrayBuffer[Int]): Double={
def scanLeft[a,b](xs:Iterable[a])(s:b)(f : (b,a) => b) =
xs.foldLeft(List(s))( (acc,x) => f(acc(0), x) :: acc).reverse //累加函数
val nums_1=nums.sorted
val y_cumsum=scanLeft(nums_1)(0)(_+_)
val y_sum=nums.sum
val y_per_cumsum=y_cumsum.map(x=>x.toDouble/y_sum)
val x = List.fill(nums.length)(1.0)
val x_sum=x.sumstako
val x_cumsum=scanLeft(x)(0.0)(_+_)
val x_per_cumsum=x_cumsum.map(x=>x/x_sum)
val pairs = x_per_cumsum zip y_per_cumsum
var B=0.0
val l=pairs.length
for (i <- 1 until l) {
B+=(pairs(i)._2+pairs(i-1)._2)*(pairs(i)._1-pairs(i-1)._1)*0.5
}
val A = 0.5 - B
A / (A + B)
}
- 刚开始使用scala,说实话自认写的挺烂,风格不够scala有优化空间,scanLeft我也是抄自stackoverflow,说实话没太看懂,希望之后会更进步。