牌語備忘録 -pygo

あくまでもメモです。なるべくオフィシャルの情報を参照してください。

牌語備忘録 -pygo

プログラミング言語の(常時使用する or 好きな or 勘弁してほしい)ランキングをPtyhonでやってみた。

2ちゃんねるLinux板の『Linuxerが好きなプログラミング言語教えれゴルァ』スレで行われてたアンケートをPythonで集計してみた(あくまでもこれくらい?な感じで)

スクリプト&集計結果を修正

質問は3つ。
  • 1. 常時使用する言語
  • 2. 1とは別に好きな言語、本当は仕事で使いたい言語
  • 3. 正直、勘弁して欲しい言語(1を含めても可)


[投票数] [言語名]
LispCommon Lispemacs Lisp含めた。面倒&少数なのは一部省いた)

「1. 常時使用する言語」
66	c
43	c++
33	perl
26	java
23	sh
14	ruby
13	python
8	awk
7	lisp
6	php
5	bash
5	asm
4	pascal
4	fortran
4	delphi
3	vc++
3	vb
2	zsh
2	xml
2	tk
2	tex
2	sed
2	objective-c
2	matlab
1	z80
1	x86
1	vhdl
1	verilog
1	tcl
1	smalltalk
1	sgml
1	scheme
1	lex
1	latex
1	jython
1	javascript
1	html
1	haskell
1	gtk
1	csh
1	caml
1	c#
1	batchscript
1	basic
1	b-shell
1	68000
「2. 1とは別に好きな言語、本当は仕事で使いたい言語」
26	java
24	ruby
19	c++
19	c
18	python
17	scheme
15	lisp
13	sh
11	perl
6	haskell
5	smalltalk
5	pascal
4	php
4	caml
4	bash
3	tcl
3	objective-c
3	awk
2	zsh
2	xml
2	vc++
2	vb
2	tk
2	sed
2	javascript
2	fortran
2	asm
1	z80
1	x86
1	tex
1	hsp
1	gtk
1	delphi
1	c#
1	basic
1	68000
「3. 正直、勘弁して欲しい言語(1を含めても可)」
51	c++
32	perl
29	java
25	c
16	vb
15	ruby
15	lisp
12	fortran
9	sh
7	python
4	php
4	c#
3	vc++
3	csh
3	basic
3	asm
2	html
2	bash
2	awk
1	xml
1	visualbasic
1	tk
1	tcl
1	scheme
1	pascal
1	javascript

全結果を見ると思っていた以上にCが上位にきてる感じ。
やっぱり仕事でよく使われてるのはC/C++Javaなのかな。
Linuxerの解答だからC#とかVBとかは少ないみたい。
C++はかなり勘弁して〜な感じらしい。なぜだろね?
Perlはコアなユーザ多そう、なんとなく。
RubyRoRの普及の影響が勘弁して〜にでてるのかな?(人気あるからこそみたいな)
PythonC/C++,Java,Perl,Rubyなどと比較して、書籍が少ないわりになかなか検討してるっぽい(・∀・)
知らない言語もけっこうあるなぁ。言語でない?のもあるし。


次に勉強するのは矢張りC言語かな。書籍選びから始めよう。
(昨日SICPの1章を読み終えたばかり...。面白い本だけど5章まで読破できるかなー(´・ω・`))
2008.1 -> Python(Django) -> Scheme(今ここ)-> 次はC?


以上つぶやき終わり。

Pythonスクリプト
#!/usr/bin/env python
# *-# -*- coding: utf-8 -*-

#Linuxerが好きなプログラミング言語教えれゴルァ
#http://pc11.2ch.net/test/read.cgi/linux/1004771095/
#2008/04/05までのレスを使用。
#
# 1. 常時使用する言語
# 2. 1とは別に好きな言語、本当は仕事で使いたい言語
# 3. 正直、勘弁して欲しい言語(1を含めても可)
#
#レスにでてきた言語をしぼってリスト作る(手動)
#
import re
import urllib

language = ["68000", "asm", "awk", "b-shell", "bash", "(?<!visual)basic", "batchscript", "(?<!-|\w)c(?!\+|\w)", "c#", "c\+\+", "caml", "csh", "delphi", "fortran", "gtk", "guiはruby", "haskell", "hsp","html", "java", "javascript", "jython", "latex", "lex", "lisp", "matlab", "objective-c", "pascal", "perl", "php", "python", "ruby", "scheme", "sed", "sgml", "sh", "smalltalk", "tcl", "tex", "tk", "visualbasic","vb", "vc\+\+", "verilog", "vhdl", "x86", "xml", "z80", "zsh", "アセンブラ", "プログレスII"]


def geturldata():
    url = "http://pc11.2ch.net/test/read.cgi/linux/1004771095/"
    htmldata = urllib.urlopen(url).read()
    data = []
    for s in htmldata:
        try:
            data.append(unicode(s, "sjis").encode("utf8"))
        except:
            pass
    data_str = "".join(data)
    rep_li = [["1","1"],["2","2"],["3","3"],
              [".","."],[",","."],["C","c"],["+","+"]]
    for s in rep_li:
        data_str = data_str.replace(s[0], s[1])
    return data_str

def each_ask(data_str):
    li = [[] for l in range(3)]
    for i in range(len(li)):
        r = re.compile("(%s\. .*?)<" % str(i+1), re.S)
        li[i] = re.findall(r, data_str)
    return li

def favorite_lang(ask_num):
    lang_count_list = []
    data_str = geturldata()
    each_li = each_ask(data_str)
    for lan in language:
        lang_str = re.compile(lan, re.I)
        count_lang_str = lang_str.findall("\n".join(each_li[ask_num - 1]))
        if lan.find("\\"):
            lan = lan.replace("\\","")
        if lan.find("\("):
            lan = re.sub(re.compile("\(.*?\)"), "",lan)
        len_lang_count_li = len(count_lang_str)
        if len_lang_count_li:
            lang_count_list.append([len_lang_count_li,lan])
            lang_count_list.sort()
            lang_count_list.reverse()
    return "\n".join(["%s\t%s" % (n,s) for n, s in lang_count_list])

if __name__ == "__main__":
   
    print "「1. 常時使用する言語」\n", favorite_lang(1)
    print
    print "「2. 1とは別に好きな言語、本当は仕事で使いたい言語」\n", favorite_lang(2)
    print
    print "「3. 正直、勘弁して欲しい言語(1を含めても可)」\n", favorite_lang(3)

とりあえず簡単に集計してみるという目的を果たしたが...我ながらひどいコードだ(||゚Д゚)
時間できたら書き直すかも。