何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

『実践 時系列解析』の技術査読を担当しました

空飛ぶ羊

2021年9月18日にオライリージャパンから『Practical Time Series Analysis』の邦訳である 『実践 時系列解析』が発売される。

www.oreilly.co.jp

この度、邦訳の査読者として少しお手伝いさせていただいた。

時系列データの解析に関する情報が1冊にまとまった本である。 時系列データになじみがない人も「1章 時系列の概論と簡単な歴史」を読むと身近にあるものであるとわかると思う。 時系列データの取り扱い方、時系列データに関するモデル、モデリング後に注意することからなる実践的な章と、応用例や今後の展望に関する章からなる。

プログラミング言語としてはR言語Pythonを採用している。 各言語の文法はもちろんよく使われるライブラリ(R言語ならdata.table、PythonはNumPy、pandas、scikit-learn)はある程度扱えることを前提にしている。 また、統計学機械学習ニューラルネットワークの基礎を知っている、または自分で文献をあたって調べる能力は必要である。 つまり、初心者向けではなく、時系列ではないデータ解析を行ったことがある人が時系列に挑む際に読む本である。 とはいえ、時系列解析に興味がある人はとりあえず手に取って積んでおき、必要になったら手を伸ばせばよいと思う。

原題は『Practical Time Series Analysis』であるが、Analysisをどのように訳出するかでちょっと議論があった。 分析とするか、解析とするか、データという言葉を補うか、等々。 既に発売されている時系列データに関する書籍のタイトルを調べるなどして、『実践 時系列解析』となった。

Pythonと羊と言えばモンティ・パイソンである。第1シリーズ第2話「セックスとバイオレンス」に木に登る羊、羊のコンコルド、やたら哲学的な羊飼い、空飛ぶ羊など、羊に関するスケッチが多く登場する。 本を読みながら、息抜きにスケッチを見てほしい。

Python Charity Talks in Japan 2021.09で発表しました

色鮮やかなコミュニティ活動

去る2021年9月11日、オンライン上でPython Charity Talks in Japan 2021.09が行われた。

pyconjp.blogspot.com

会の主旨としては、PSFに寄付するためのお金を集めるのと、参加者に有益な何かを提供するのが目的である。 今回、Lightning Talkを発表した。

過去のイベントでは企業の求人がメインであったが、今回は全国各地にあるPythonコミュニティが主体のイベントであった。 PyCon JPのような大きなイベントだと、いわゆるIT企業がPythonやら機械学習やらをフル活用して成果を発表、というケースが多い気がするが、 地域PyConはIT企業に限らない企業がPythonの力を駆使して日々の業務を改善するという本当に面白い話題が多い。 今回のPython Charity Talks in Japanは地域PyConで聞けるような話が盛りだくさんであった。

自分の発表:『日常生活で使うPython

speakerdeck.com

youtu.be

本当に気楽なテーマで気楽に発表するのが目的であった。 プログラミングスクールに通って年収アップだとか、スキルアップだとか、そういう堅苦しいことを考えず、気軽にPythonを使っていいんだよ、というのが裏にあるメッセージである。 しかし、日常生活でPythonを本格的に活用している例(家庭菜園とか)がバンバン登場したので、はっきり言って魅力がない発表になってしまった可能性もある。 secretsモジュールの活用例としてスニペットをコピペしていただければ十分である。

『入門 Goプログラミング』読書メモ

以前にGolangに入門したはずでは?

Get Programming with Go』の翻訳『入門 Goプログラミング』を買った。 時間がちょっとあるのでGolangでも勉強しておくか、と思ったのと、原著がManningだからまあ大丈夫だろう、という甘い考えに基づいて勉強を始めた。

勉強もとい写経した記録はGitHubにまとめている。

github.com

ひとまず、Go言語で気になった点を雑にまとめておく。 僕はPythonの経験が長いのでPythonとの比較が多いが、それ以上の意味はないので、どちらの言語が優れているのかという話をしたいわけではない。

fmt がモジュールとして切り出されているのはなぜか

実装するプログラムの都合上、毎回fmtモジュールをインポートしている。 I/Oはよく使うが特殊なもの(OSが絡む)ので、別枠にしているのはわかるのであるが、面倒である。

math/rand の乱数シード

Pythonrandomはインポートすると乱数シードもよしなに設定されるが、Goのmath/randは設定されない(ビルド時にキャッシュされる?)。 Pythonrandom含め認識が間違っている可能性が大いにあるが、気を付けないといけないなと感じた。

string型をイテレートすると何が起きるか

次のコードはLesson 11のヴィジュネル暗号の実装である。

package main

import (
    "fmt"
    "strings"
)

func charToDiff2(c byte) int {
    return int(c - 'A')
}

func shiftToRight(c byte, d int) byte {
    if c >= 'A' && c <= 'Z' {
        c += byte(d)
        if c > 'Z' {
            c -= 26
        }
    }
    return c
}

func main() {
    plainText := "your message goes here"
    keyword := "GOLANG"

    plainText = strings.Replace(plainText, " ", "", -1)
    plainText = strings.ToUpper(plainText)

    for i := 0; i < len(plainText); i++ {
        j := i % len(keyword)

        fmt.Printf("%c", shiftToRight(plainText[i], charToDiff2(keyword[j])))
    }
    fmt.Println("")
}

string型をインデックスで取得するとstringではなくbyte型となる。 以前にRustをかじった際にも感じたが、型がしっかりしている言語は文字列の扱いが難しい。

関数とメソッド

型にメソッドを紐づける仕組みは面白いなと思ったが、型とメソッドの実装が一見して結びつかないのでIDEの助けがないと面倒くさそうだなと思った。 別にクラスとメソッドでもIDEの助けがないとわからないが、Pythonだとインデントの関係で視覚的にもわかりやすい、かもしれない。