Tuesday, October 18, 2011

Testing code highlighter for blogger.

import math
printf "the square root of 2 is ", math.sqrt(2)


This is good! The code highlighter is from http://heisencoder.net/2009/01/adding-syntax-highlighting-to-blogger.html.

This is not the first time we applied this highlighter. It is used for example in our other blog , My Other Life as a Programmer.
Because Google is always trying to find ways to make blogs interesting, the CSS code should be inserted after any template css.
The code should be inserted as escaped html, and in case you need an HTML escaper, you can use the online tool at

http://www.accessify.com/tools-and-wizards/developer-tools/quick-escape/default.php

Our blog lost its latex and source code rendering abilities!

Please be patient. Google just recently introduced live view?! on our templates and it destroyed the current addins for latex and program source code rendering! I thought I can easily return it back to the previous simple design!

I will spend more time on these problems. So please be patient.

Tests : $$\cos(x) = e^x$$

It was not blogger.com fault! But the mathtex server has been down actually since June, 2011!. See the posting in
http://watchmath.com/vlog/

We have fixed the Latex problem now. Now on to the code highlighter!


Wednesday, October 12, 2011

Blogger dynamic views design: we are not ready for this!

I tried just recently dynamic views as suggested by the blogger blogging software. I found out that the syntax highlighter does NOT work and that the adsense ads disappeared. So I am restoring the simple design the site used previously.


We shall not stop trying to improve the site! So bear with us a little as we try to increase our google page rank and increase our revenues so we can buy books, gadgets to please you better with original articles as much as possible!

Sunday, October 2, 2011

Python, statistics: Ranking a single array of raw scores

There are some nonparametric statistical routines which expects rank values. If we are given raw scores
like X= [1,3,3,5,1,7], the rank values would be [1,2,2,3,1,4] if tied ranks get the same rank value.

But the ranks can be transformed to [0.5, 2.5, 2.5,3, .5, 4] if ties are replaced by the mean of tied ranks.

Here is Python code to compute ranks based on raw scores according to four strategies published in the reference.


"""
File      scores2ranks.py
Author    Ernesto Adorio, PhD.
               UPDEPP at Clarkfield, Pampanga
               ernesto.adorio@gmail.com
Desc      Conversion of raw scores to ranks using various strategies.
Version   0.0.1 October 1, 2011
License   Educational use only with proper attribution for research purposes.
Reference http://en.wikipedia.org/wiki/Ranking
"""

def scores2ranks(X, ztol = 1.0e-1, breakties = 1):
   """
    Converts raw scores to ranks, returning an array of ranks.
    Args
      X - scores to convert to ranks
      ztol - equality comparison tolerance
      breakties- strategy:
        0 - None.                               1234            ordinal ranking
        1 - replace  ties by mean of tied ranks.1 2.5, 2.5, 4 fractional ranking.
        2 - (competition rank)                  1224            standard competition ranking.
        3 - replace ties by highest tied rank.  1334            modified competition ranking. 
        4 - replace rank after ties in sequence 1223            dense ranking.
    References: For conversion of matrix scores to ranks using fractional ranking:
     http://my-other-life-as-programmer.blogspot.com/2011/02/python-converting-raw-scores-to-ranks.html         
   """
   Z = [(x, i) for i, x in enumerate(X)]
   Z.sort()
   n = len(Z)
   Rx = [0] * n 
   for j, (x,i) in enumerate(Z):
       Rx[i] = j+1
   if breakties == 0:
      return Rx
   s = 1           # sum of ties.
   start = end = 0 # starting and ending marks.
   for i in range(1, n):
       if abs(Z[i][0] -Z[i-1][0]) < ztol and i != n-1:
          pos = Z[i][1]
          s+= Rx[pos]
          end = i 
       else: #end of similar x values.
          if breakties == 1:
             tiedRank = float(s)/(end-start+1)
             for j in range(start, end+1):
                Rx[Z[j][1]] = tiedRank
          if breakties == 2 or  breakties == 4:
             tiedRank = Rx[Z[start][1]]      
             for j in range(start, end+1):
                Rx[Z[j][1]] = tiedRank
          if breakties == 3:
             tiedRank = Rx[Z[end][1]]      
          for j in range(start, end+1):
              Rx[Z[j][1]] = tiedRank
          start = end = i
          s = Rx[Z[i][1]]  
   
 
   if breakties == 4:
         #ensure that  the ranks are in sequence!
         for i, x in enumerate(sorted(list(set(Rx[:])))):
             for j, y in enumerate(Rx):
                 if y == x:
                    Rx[j] = i+1  
   return Rx
 

if __name__ == "__main__":
    X= [1,3,3,5,  1,  7]
    print "X = ", X
    print scores2ranks(X,  breakties = 4)
When the above code is run, it outputs
$ python scores2ranks.py 
X =  [1, 3, 3, 5, 1, 7]
strategy 0 : [1, 3, 4, 5, 2, 6]
strategy 1 : [1.5, 3.5, 3.5, 5.0, 1.5, 6]
strategy 2 : [1, 3, 3, 5, 1, 6]
strategy 3 : [2, 4, 4, 5, 2, 6]
strategy 4 : [1, 2, 2, 3, 1, 4]



I will be grateful if readers will discover any mistake.