裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

プログラミングの歴史--2

2020年12月11日 | ブログラミング

1995 年頃の話。文書処理にも使えるし,統計解析プログラムなども AWK を使って書いていた(AWK は今でも使う)。

例えば,

http://monitoring.tokyo-eiken.go.jp/mp_shinjuku_air_week_list.html

にある,

  :
    <tr>
     <td>2013/01/06 23:01~24:00</td>
     <td>0.0498</td>
     <td>0.0420</td>
     <td>0.0457</td>
    </tr>
    <tr>
     <td>2013/01/06 22:01~23:00</td>
     <td>0.0485</td>
  :

のような HTML ファイルから,データを切り出すのに

/<td>20/ {
 sub("^.*<td>", "", $0)
 sub("</td>.*", "", $0) # 最後に ^M がついている! 
 sub("~", "-", $0)
 split($0, date0, "[ /:-]")
 getline; split($1, d, "[<>]"); d1 = d[3]
 getline; split($1, d, "[<>]"); d2 = d[3]
 getline; split($1, d, "[<>]"); d2 = d[3]
 print date0[1], date0[2], date0[3], date0[4], date0[5], date0[6], date0[7], d1, d2, d3
}

のようなスクリプトを書く。

R のパッケージには汎用の関数もあるけど,決め打ちルールでスクリプトを書くのも,あまり苦にならない程度のものである。

統計計算も BASIC でプログラムを書くよりも論理構造がはっきりするので AWK で書くほうが好きだった。

ものによっては,JAVA や C などコンパイラ言語を使うのは面倒だが,R で書くより若干処理速度が速いこともあるのでいまでも AWK でプロトタイプを書いてから R や JAVA に翻訳することもある。

 

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

ソートアルゴリズムを教えるわけではないだろうに

2020年12月11日 | ブログラミング

中央値や四分位数を計算するプログラム例で,

n = len(data)
for i in range(0, n - 1):
    k = i
    for j in range(i + 1, n):
        if (data[j] < data[k]):
            k = j
    if k > i:
        data[k], data[i] = data[i], data[k]

という部分があった。とくに説明はない。重要な部分ではないということかもしれないが(だったらなおさら)。

やってみればわかるが(読んだだけでもわかるが),data のソートを行っているのだ。

data = sorted(data)

とか

data.sort()

みたいに,一行で書けば何をやっているか一目瞭然だし,書かれているようなダサいアルゴリズムのダサい実装よりももっと高速なアルゴリズムが使われるのになぁと。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Python 嫌いだけど,こんな Python プログラムはいやだ(その2)

2020年12月11日 | Python

以下のようなデータを読むのに数十行費やしているプログラムがある。

======= begin
いろいろ注釈もあるんだろう

/   row     column
    2      3
c1  c2  c3
r1  1  5  2
r2  3  2  6
======= end

行名や列名も取り出したいということなんだけど以下の 4 行で済むし,行数列数もデータファイル中に書く必要はない(人間が数えて書くとエラーが生じる可能性すらある)。pd.read_csv にここに書いた以外にたくさんの引数があるのを把握している人も少ないかも知れない(大概のことは引数の指定でできるはずなので,help をチェックすべし)

import pandas as pd

dat = pd.read_csv("dummy.txt", delim_whitespace=True, skiprows=4)
columns = dat.columns
index = dat.index

pandas のデータフレームで不都合なら,numpy.array(dat) とすればよいだけ。

データ入力のようなよくある処理に,独自のプログラムを書くのは無駄な作業だ。

コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村