データ分析エンジニアのブログ

日常のことからプログラミングや機械学習まで@六本木

Python/Numpyでベクトルのユークリッド距離を求める


PythonのNumpyを使えば、次元によらずに
ベクトル同士のユークリッド距離が簡単に求められます。

方法1

>>> import numpy as np
>>> np.linalg.norm(a-b)

方法2

>>> import numpy as np
>>> np.sqrt(numpy.power(a-b, 2).sum())

おまけでScipyを使ってコサイン類似度を求める方法

>>> # コサイン類似度
>>> import scipy.spatial.distance as dis
>>> dis.cosine(a, b)

PythonでMySQLのエスケープ


PythonMySQLを使うとき必ずと言っていいほど文字コードに悩まされます。


以前起きたUnicodeErrorはMySQLdb.connector()
メソッドでcharset='utf8'を引数に渡せば解決する類のものでした。


今回のUnicodeErrorはテキストを挿入したときに起きたもので、
シングルクォーテーションを含むテキストでエラーが起きていました。
このようなエラーを素早く発見するためには、
デバッグ用にこまめに発行したSQLなどを表示させると良いです。


さて問題がわかったところでPythonMySQLのエスケープに入ります。
やり方は簡単で、、

MySQLdb.escape_string(string)

これだけでエスケープしてくれます。


ただ注意点として、引数のstringはstr型でないといけないので、
もしunicode等を使っている場合はきちんと型を変換しなければなりません。

Google Big Queryについて調べてみた


最近話題となっている低価格で大量のデータに高速にクエリを
実行することができる、Google Big Queryについて調べてみました。
特徴、導入方法、使用方法、価格について簡単にまとめています。

特徴

特徴としては、クエリを非同期でバックグラウンドで実行できる、
インデックス無しで大量のデータに高速にクエリを実行可能などがあります。
また、高速にクエリを実行できる理由は
Googleが数千台のDBを使って並列に処理しているからだそうです。

導入方法

こちらを参考にするといいと思います。
Google Developers Consoleを使ったことがある人なら違和感なく使えます。
http://ameblo.jp/cabeat-e/entry-11414736656.html

使用方法

使用方法としては、主に以下の3種類があります。
非同期でAPIを使ってもアクセスできるので、既存のサービスでも
簡単に組み込むことができます。

価格

価格は以下の公式ドキュメントより参照できます。
現時点では以下の様な価格設定になっています。


ストレージが月に1GBあたり0.026$
クエリ処理量が月に100GBまでは無料、それ以上は1GBあたり0.005$
https://developers.google.com/bigquery/



上手くいけば研究室負担で導入してもらえるかもしれないです。
エンジニアとして新しい技術に挑戦することはワクワクしますね!
以上簡単ではありますが、BigQueryについてでした。

JK課とオープンデータで有名な福井県鯖江市まとめ


最近、地方活性化などの取り組みがニュースになることが多いようですね。
僕自身も地方出身ということで、かなり興味があったので、
JK(女子高生)課やオープンデータの取り組みが話題になっている
福井県鯖江市についてまとめてみようと思います!


鯖江市は人口約6万人の中規模な都市で、
人口増加率、人口密度が県内1位という数字を誇っています(2010年時点)。
メガネフレームの国内シェアが96%で、実はCAの藤田社長の出身地みたいです。


鯖江市の基本的な情報は以上で、
次にJK課とオープンデータという2点についてまとめていきます。


・JK課
鯖江市のホームページによると、JK課とは実在する課ではなく、
これまで市役所や公共サービスに直接関わることの少なかった女子高校生たちが、
様々な市民団体や地元企業、大学、地域メディアなどと連携し、
新しいまちづくりを模索していく実験的な市民協働推進プロジェクトと位置づけられています。


JKという話題性だけが先行していて、実際に何をやっているのかというところが
僕も気になっていましたが、実際の活動の様子が最近ホームページに掲載されました。
http://www.city.sabae.fukui.jp/pageview.html?id=14528
KJ法を用いたワークショップなどをしたようです。
図書館アプリプロジェクトというものも始動しているらしく、
手続きなどの煩わしい地方行政のIT化が進むのはいいですね。


・オープンデータ
そして鯖江市で有名なもう一つの取り組みがこのオープンデータです。
これは鯖江市が保有しているデータを企業や個人が利用できるように
XMLRDFなどの形式で公開する、という取り組みです。


注目すべきポイントは、データを公開するにあたって
同時にそのデータを使ったサービスを80近くリリースしたり、
前述のJK課との協力やアプリコンテストなどのイベントを開催している点です。


長くなりましたが、以上で終わりです。
少々言い方が悪いかもしれませんが、これといって特徴のなかった鯖江市が
これほど有名になり、面白い取り組みをしているということは
他の市からしてもとても参考になる気がします。
第2、第3の鯖江市が生まれたらなーと思ってます!!

最凶学園ナックルバウトが割と面白かった


ヤンキー系のゲームやりたいなと思って探していて
見つけたのがこのゲーム。


サイバードという会社が作っていて、
他にもコナンの推理ゲームやバーコードフットボーラーなども
出している会社でした。


初心者キャンペーン中ということでガチャが1日11回無料が3日間、
Lv50まで行動力が減らないという
(パズドラで言うとランク50までスタミナが減らないみたいな感じです)


スタミナが減らないのでLv50まではスイスイと進み、
ストーリーも一気に楽しめるのでかなり楽しめました。
ガチャも無料で引けるので、


しかしLv50を過ぎるとなかなか物語を進めることができず、だれてきます。
ガチャも課金以外で引く手段が今のところあまり見られないので、
チケットプレゼントキャンペーンとかないのかって感じです。


初心者キャンペーン等でユーザは結構集まると思うが、
パズドラのように無課金でもなんとかやっていけるような仕組みを作らないと
それから先が厳しいような気がする。。。


まあでも総じてかなり面白いゲームだと思うのでオススメです。

Pythonの実行結果をブラウザに表示する(MAMP)


今日、CGIスクリプトとして
PythonをWebサーバ上で動かすということをやってみました。


MAMPのローカル環境で作業しています。


・まずはMAMPapacheの設定

apacheの設定ファイルでCGIを有効化し、.py拡張子を追加する
/Applications/MAMP/conf/apache/httpd.conf

#AddHandler cgi-script .cgi
AddHandler cgi-script .cgi .py

その後、MAMPを再起動


・次に実際のスクリプト

注意点としては
1. 一行目にpythonインタプリタの場所を書く
2. HTMLとして最初に'Content-type: text/html\n'を出力する
3. 実行権限(chmod 775 ~ 等で修正)

#! /usr/bin/python
# coding: UTF-8
import datetime

today = str(datetime.date.today())
print 'Content-type: text/html\n'
print """
<! DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>CGIスクリプト</title>
</head>
<body>
これはサーバの実行結果として生成されたHTMLです<br>
今日は%sです
</body>
</html>
"""%today


簡単ですが、こんな感じで出来ました。
PHPみたいな埋め込みができるものと比べるとめんどくさいかなと思いましたが、
Djangoのようなフレームワークを使うともっと簡単に書けそうなので、今度試してみようと思います!

PHP SDKを使ったfacebook認証がうまくいかない時の解決法


今回はPHP SDKを利用して、facebookログインを実装しようとして、
つまずいたポイントを紹介します。
この問題を解決するために、丸1日くらいかかりました。


getLoginUrl()メソッドを用いて、facebookのDialog認証を行い、
getUser()メソッドでfacebookidを取得しようとしました。
しかし、以前は問題なく動いていたコードがうまく動かない。。。


getLoginUrl()メソッドで生成されたURLをクリックすると
?code=xxxx&state=xxxxというGETパラメータが返ってきていました。


こちらの記事を見つけ、
返ってきたGETパラメータを使って認証ができてないんじゃないかと思いました。
http://engineering.crocos.jp/post/26950144374/failed-to-get-access-token-by-using-fbsr


思えば.htaccessを使ってリダイレクトしていたので
GETパラメータが上手く取れていませんでした。
これで解決、と思いきや.htaccessでうまくパラメータを取ることができませんでした。
調べてみると、クエスチョンマーク以降の文字列は
RewriteRule のパターンが適用される対象に含まれないようでした。
http://q.hatena.ne.jp/1316575857


これで全て解決しました。
疲れた、、、、、、、、、、、、