记录工作中会常用到的一些实用例子

  1. 尼基系数
    科学计算方面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,说实话没太看懂,希望之后会更进步。