読者です 読者をやめる 読者になる 読者になる

When it’s ready.

出来るまで出来ない

非同期運動場(Google AJAX APIs Playground)で遊んでみる。

小安軽なノートPCが連発で発売になるなかで、US配列のモデルが意外と少なく買うには至ってないです。実際JISキーとUSキーで記号の配列が結構違うのでイラッと来る事が多々あって、未だJISキーになれない男です。どの記号がどれくらい普段書いているコードに含まれて居るのかを、最近出てきたAJAX APIs Playgroundを使って半端に視覚化するコードを作成してみました。

出現頻度を調べたいソースコードを引数として渡してあげれば、HTMLが出てくるのでそれを適当に>したり、してブラウザで開くとグラフが見れます。

#!/usr/bin/env python
# coding:utf-8
import sys

symbolDict = ['`','~','!','@','#','$','%','^','&','*','(', 
              ')','-','_','=','+','[','{',']','},',
              '|',';',':','"',',','<','.','>','/','?']

sourceHTML1 = '''
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8"/>
    <title>記号出現頻度グラフ</title>
    <script type="text/javascript" src="http://www.google.com/jsapi"></script>
    <script type="text/javascript">
      google.load('visualization', '1', {packages: ['areachart']});
    </script>
    <script type="text/javascript">
      function drawVisualization() {
        // Create and populate the data table.
        var data = new google.visualization.DataTable();
        data.addColumn('string', 'Symbol');
        data.addColumn('number', 'Count');
'''
sourceHTML2 = '''
        // Create and draw the visualization.
        new google.visualization.AreaChart(document.getElementById('visualization')).
            draw(data, null);
      }
      google.setOnLoadCallback(drawVisualization);
    </script>
  </head>
  <body style="font-family: Arial;border: 0 none;">
    <div id="visualization" style="width: 600px; height: 300px;"></div>
  </body>
</html>
'''

def mkSrcText():
  srcText = ''
  with open(sys.argv[0]) as f:
    for line in f:
      srcText +=  line
  return srcText

def countText(srcText):
  cntDict = {}
  for i in symbolDict:
    cntDict[i] = srcText.count(i)
  return cntDict

def makeJS(cntDict):
  retLabel, retData, cnt = '', '', 0
  retRows = 'data.addRows(%s);\n'%(len(cntDict))
  for i in cntDict:
    retLabel += "data.setCell(%s, 0, '%s');\n"%(cnt, i)
    retData += 'data.setCell(%s, 1, %s);\n'%(cnt, cntDict[i])
    cnt += 1
  return retRows + retLabel + retData

tmp = makeJS(countText(mkSrcText()))
print sourceHTML1 + tmp + sourceHTML2

このコード自体を食わせてみると

“、(コンマ)”を一番使ってると分かります。次点がスラッシュ(htmlがまるまる入っている)で普段はもっと少ないと思います。3位近辺が団子状態になっていてココにJIS配列とUS配列で場所異なるキーがあるので、この量だといらっと来るなぁと言うのが冷静に見て取れる結果となりました。