カテゴリー: プログラミング関係

ハッカソンの上にも4年

こんにちは。エンジニア的な仕事をしているハッカソン好きです。

先日、Yahoo! JAPAN Hack Day 2019というハッカソンに大学の時から一緒に出ているメンバーと4回目くらいの出場をしました。
流石に4年以上やっていると色々と洗練されてくるなと感じまして、ハッカソンで成果を出すポイントについてのまとめと、振り返りなどを通してよりハッカソンスキルを向上させていこうかなと思い記事を書いています。

Continue reading

技術書典3に行ってきました

こんにちは。 本日、技術書典3に行って参りました。

技術書典とは

コミケの技術書バージョンだと思います。
個人や団体が、技術に関する本を作って売ってます。 参加者は出展者と会話を楽しみつつ本を買うことが出来ます。

買った本とその感想など

CLEAN CODE FOR RAILS

Rails好きとして買わざるを得ない本でした。
リーダブルコード』のRails版のような印象を受けました。
Rails中級者の人はどこかで聞いたことのあるような話が多く、これから実際にアプリを書くといった状況の人は目を通すことが推奨される内容です。

SERVERLESSを支える技術

神本。
「サーバーレスとはなんぞや」状態の人にもおすすめ出来ますし、「サーバーレスのサービス色々あるけどどれを(会社とかで)導入しようかなぁ」状態の人にもおすすめ出来ます。
個人的には各社の状況が良くまとめられており、とても実用的だなぁと思いました。
ただ一点注意があり、本の中でPython3系へ対応するサービスがないという記述がありますが、AWSのLambdaでは現在Python3系(3.6)が使えます
このように、一部サービスではサーバーレス環境での3系への対応が進んでいます。 なので、「Python3系使えないのか残念。サーバレスやめた。」とならないようにしてほしいです。

Pragmatic Opal

販売していて方がとても印象的で 「RubyでJavascript生成出来ますよ〜」 「Javascript書きたくないニャン」 などと言っており、ピクっと反応して買ってしまいました。
内容としてはOpalの解説+実践と言った内容でRubyできる人向けの内容でした。 とてもわかりやすく、Opalに興味が出ました。
後日またじっくり読みたい本です。

Crystalの本 その3

Ruby風味の言語として有名なCrystalですが、ずっと気になりつつも「いつか、学ぼう」と積ん読気味の言語でした。 そんな自分にこの本はなかなか刺さるものでして、導入から実践的なWebアプリの作成まで、そして日本語の扱いに関する注意点などCrystalに関する情報がかなりぎっしり詰まっています。   まずはこの本を読んでCrystalに馴染んで行こうかなと思います。

感想など

様々なジャンルの技術書が売られていて楽しかったです。 さらに「こんなに技術でワクワクしている人たちがいるんだ!」という嬉しさ的なものでテンション上がりました。 会場はエンジニアっぽい人がいっぱいいて、圧が強めでした。   売られている書籍(同人誌?)についてはハード系からソフト系まで幅広くカバーされており、自分が興味のあるRuby、Python、データ、プロマネなんかに関する本も何冊か発見しました。 きっと自分の興味ある本が見つかると思います。   次があればぜひ参加したいなと思います。 できればなんか本出したいっすね。

『続・わかりやすい パターン認識』2章のベイズ更新をRubyで書いた

こんにちは。
夏なのでRubyを書きたくなりました。

今回はこの本の第2章ベイズ更新について書いてみました。
詳細は本文に当たっていただけると良いかと思います。

コードは以下のリポジトリで公開しています。
Jupyter NotebookでRubyを使ってみました。

https://github.com/rilmayer/zoku_wakapata/blob/master/2/2.3%E3%81%AE%E3%83%99%E3%82%A4%E3%82%BA%E6%9B%B4%E6%96%B0%E3%81%AE%E5%AE%9F%E9%A8%93%E3%82%92Ruby%E3%81%A7%E8%A1%8C%E3%81%86.ipynb

『データ分析とデータサイエンス』を読む 1.1と1.2

『データ分析とデータサイエンス』(著:柴田里程)をふと手にとって読んでいます。

さらっと目を通したところ

  • データ分析の基本的な内容をきちんと押さえている
  • データ分析の基礎用語の解説が丁寧
  • 実際の実務につながるように工夫が凝らされている

と言うことがわかりました。

ということで、勉強になると思ったので、最初から読んでいって、その勉強の内容をブログにのっけていこうと思います。

気になった人は是非買って読んでみてください。

この本の目次は以下のようになっています。

第I部 データ分析
第1章 データ
第2章 データ分布
第3章 データ分布の代表値
第4章 箱ひげ図
第5章 2変量データ

第II部 データサイエンス
第6章 データサイエンス入門
第7章 個体の雲の探索
第8章 変量間の関係
第9章 変量間の相関
第10章 確率モデル

順番に読んでいこうと思います。
第I部では、データを扱う上で心得ておくべき基本的な事柄が紹介されています。

個人的には、ここでの用語の扱い等が、最も低レイヤーにおけるデータサイエンティストたちにとっての共通言語的なものになるのではないかなと考えています。
もちろん大きな意味での共通言語は統計や数学であることには変わらないと思いますが。

「第1章 データ」の構成は以下のようになっています。

1.1 変数と変量とデータ
1.2 関係形式
1.3 データの代表値
1.4 偏差値

ということで、今回の記事は1.1と1.2の内容について紹介していきたいと思います。

以下は私の解釈も幾分かふくまれているので、正しい情報は原著を読むようお願いします。

1.1 変数と変量とデータ

→「データ」とはなんぞや

ここでは「データ」という用語を定義するために、変量や変数といった用語を明確にしています。

変量(variate):
「分析対象のデータ構成を明確にするために、ある対象について記録された一つ一つの要素」

例)
ある対象:車検証
変量:登録番号、登録年月日、種別、自家用・事業用の別など

ここで、変量の考えを使って、データを定義します。

データ(data):
「分析の対象となる変量の値の並び、あるいは、複数の変量の値の組」

一方で、変数は変量と対比させるとわかりやすくなります。

変数(variable)
「分析の対象が何らかの(数式等により)モデルで表された時に、そのモデルを構成する変化させることのできる要素。」

変量は具体的な対象について表しており、記録のたびにその値は変化します。
それに対し、変数は値を変化させてどのような影響が生まれるかを調べるための道具です。

ということで、変数と変量とデータの関係が明らかになりました。

1.2 関係形式

ここでは上記のようなデータが集まったもの(関係形式データベース)を数学的に扱う方法が紹介されています。

テーブルとレコード

ここで以下のような表を考えてみましょう(コップのデータ)。

コップ1 コップ2 コップ3 コップ4 コップ5
高さh(cm) 15 13 14 10 7
重さw(g) 300 500 200 400 600

ここで、上記のような表をテーブル(table)と呼びます。

そしてこのテーブルと、以下の集合

R = {(h1, w1), (h2, w2), (h3, w3), (h4, w4), (h5, w5)}

と同一視します。集合Rの各要素 (h1, w1) などは記録(record)と呼びます。

テーブルとRDBMS

これらのテーブルを操作するためにRDBMS(MySQLやPostgreSQLなど)が用いられる。
RDMSでは変量のことを属性(attribute)、属性の値の並びをカラム(column)と呼びます。

関係を数学的に表記

集合AとBの間の二項関係は直積集合A×B={(a, b) | a ∈ A, b ∈ B}の部分集合Rとして定義されます。
(a, b) ∈ R のとき、a ∈ A と b ∈ B はR-関係を持つといい、a~bと表します。

これを複数の集合に一般化して考えます。
集合D1, D2, ・・・, Dn の要素間のn項関係は、直積集合D1×D2×・・・×Dnの部分集合Rで定義されます。
このような集合Rを、関係グラフ(relation graph)と呼びます。

ここで、テーブルで示される関係は、本来の関係全てではなく、記録された範囲に限った話であることに注意が必要です。

関係形式データベースでは、集合D1, D2, ・・・, Dnはドメイン(domain)と呼ばれ、変量の値域や名前、単位などの情報を与えます。ドメインは順序には意味がなく、順序を変えても同等なテーブルとなります。

ドメインの属性

このようなドメインは、いくつかの属性を持つ場合があります。
例えば、「名前属性(”高さ”や”重さ”など)」、「単位属性(”kg”や”cm”など)」、「型属性」などがあります。
これらの属性によって、そのドメインの意味がより明瞭になります。
以下では特に「型属性」について説明します。

型属性には大きく分けて、実数のようにどんな値でも取りうる型である連続型(continuous)と、特定の値しかとらない離散型(discrete)の2つがあります。離散型でも、値そのものより「その値であること」に意味がある場合は、特にカテゴリ型(category)と呼びます。

 

CentOS7にPythonをインストール(pyenv利用)

事前に
Rubyインストール
の記事をしておくといいかと思います。

以下をコピペ&実行。

[shell]
# pyenvをクローンしてくる
sudo git clone git://github.com/yyuu/pyenv.git /usr/local/pyenv
sudo git clone git://github.com/yyuu/pyenv-virtualenv.git /usr/local/pyenv/plugins/pyenv-virtualenv

# 読み込み用のスクリプト用意
sudo touch /etc/profile.d/pyenv.sh
sudo echo ‘export PYENV_ROOT="/usr/local/pyenv"’ >> /etc/profile.d/pyenv.sh
sudo echo ‘export PATH="${PYENV_ROOT}/bin:${PATH}"’ >> /etc/profile.d/pyenv.sh
sudo echo ‘eval "$(pyenv init -)"’ >> /etc/profile.d/pyenv.sh

# 確認
cat /etc/profile.d/pyenv.sh
# スクリプトの読み込み
sudo source /etc/profile.d/pyenv.sh

# インストール(python 3.5.1)
sudo -i pyenv install anaconda3-4.0.0

# 確認
pyenv versions

# 全体に設定
pyenv global anaconda3-4.0.0
pyenv rehash
[/shell]

これでいけるはず。

CentOS7にRubyインストール(rbenv利用)

以下をコピペして実行してください。

[shell]
# 必要なものをyumる
sudo yum install -y git gcc libffi-devel zlib-devel gdbm-devel ncurses-devel openssl-devel readline-devel

# rbenvをクローンしてくる
sudo git clone https://github.com/sstephenson/rbenv.git /usr/local/src/rbenv
sudo git clone https://github.com/sstephenson/ruby-build.git /usr/local/src/rbenv/plugins/ruby-build

# 読み込み用のスクリプト用意
touch /etc/profile.d/rbenv.sh
echo ‘export RBENV_ROOT="/usr/local/src/rbenv/"’ /etc/profile.d/rbenv.sh
echo ‘export PATH="${RBENV_ROOT}/bin:${PATH}"’ /etc/profile.d/rbenv.sh
echo ‘eval "$(rbenv init -)"’ /etc/profile.d/rbenv.sh

# 確認
cat ~/etc/profile.d/rbenv.sh

# スクリプトの読み込み
source ~/etc/profile.d/rbenv.sh

# 確認
rbenv –version

# Rubyのインストール
# インストール可能なバージョン確認
rbenv install -l

# インストールしたいバージョンをインストールして設定
rbenv install 2.2.4
rbenv global 2.2.4

# 確認
ruby -v

# gem類
gem update –system
gem install bundler
gem install rake

[/shell]

とりあえず、これでRubyが使えるようになるはずです。

mecab-pythonが無理だった人向けのモジュール[Windows編]

Pythonでmecabを使いたかったのですが、面倒なことが多すぎてインストールに挫折しました。

ということで、私みたいな「mecab-pythonのインストールに挫折した人向け」のクラスを書きましたので、使いたい人は使ってみてください。
最低限の機能しかないですが、一応やりたいことはできるのではないでしょうか。

Continue reading