Hope is a Dream. Dream is a Hope.

非公開ブログは再開しました。

アルゴリズムを売り買いするサービスAlgorithmiaについて

Algorithmiaについて

アルゴリズムを公開して、APIの利用頻度でポイントを交換するサービスをみつけた。

Algorithima

Algorithmia : https://algorithmia.com/

Algorithmia紹介記事

このサイトにアルゴリズムを登録した発明者は、そのアルゴリズムの利用者から料金を受取ることができる。Algorithmiaではアルゴリズムの募集にあたって懸賞金システムを用意している。ソフトウェアのデベロッパーが特定の機能を果たすアルゴリズムを募集すると、その分野に詳しい研究者が、料金を取り決めた上で、スクラッチで開発を始めるという仕組みだ(Algorithmia―研究者とスタートアップをつなぐユニークなアルゴリズムのマーケットプレイス)

 現在公開されているアルゴリズム

現時点(2015.03.14)で公開されているアルゴリズムは500ほど。

Algorithmia

機械学習やScrayping技術、WebAPI等が見受けられる。

カテゴリ

[caption id="attachment_380" align="alignnone" width="163"]Algorithmia 公開されているアルゴリズムのカテゴリ[/caption]

 

カテゴリは以上のようになっていて、最近主流のデータマイニング関連の技術が多いように感じる。

公開アルゴリズムを使ってみる

このAlgorithmiaの特徴として、公開されているアルゴリズムはWeb上のAlgorithmia専用コンソールにて実際に利用して試すことができる。

Algorithmia

公開されているアルゴリズムの紹介欄

今回は試しにGetLinksというアルゴリズムを使ってみる。名前からおそらく、インプットしたURL上にあるリンクを一覧表示してくれるのだろう。そして、このAlgorithmiaのとても親切な点として、サンプルコードを動かす際にひつようなインプットは各アルゴリズムごとに必ず例として表示されており、返される結果も隣に表示されている!!

[caption id="attachment_382" align="alignnone" width="300"]Algorithmia インプットとアウトプットのサンプル画面[/caption]

 

従来、このような独自のアルゴリズムや便利ツールのAPIだと、実際に動かす際にインプットをどうしたらよいやら、どうゆう挙動なのかで、迷ってしまい、時間がかかりそうだと見過ごしてしまうことがよくある。しかしAlgorithmiaでは、すべての公開ページにインプットとアウトプットのサンプルが同じフォーマットで表示されており、とても理解が容易につくられている。(これなら英語が苦手な方でも、プログラムさえできればとても強い味方になるだろう)

Algorithmia専用コンソール画面

こちらがAlgorithmia専用コンソールである。こちらに、サンプルにあったようにURLを入力してみる。

[caption id="attachment_383" align="alignnone" width="300"]Algorithmia Algorithmia専用APIコンソール[/caption]

ここで注意しないといけないのは、URL を""で閉じなければエラーになる。きちんとは読んでいないが、Algorithmiaは入出力がJSONとされているようだ。(もし間違いであればご指摘して頂きたい)。通常であれば、アルゴリズムは分野や使い方により、入出力が様々であり、他人が作ったものを利用するには、関数間の入出力の修正が面倒であったが、その点はフォーマットを統一することで、軽減されそうだ。

試しにfififactory.comのリンクを収集してみよう。先ほどのコンソールに"http://fififacotory.com/"と入力する。

[caption id="attachment_384" align="alignnone" width="300"]Algorithmia APIの使用例[/caption]

すると、このようなリンクの一覧が返ってくる。


 

[ "http://cnt.affiliate.fc2.com/cgi-bin/click.cgi?aff_userid=290526&aff_siteid=280992&aff_shopid=1", "http://fififactory.com/?cat=3", "http://fififactory.com/?cat=2", "http://fififactory.com/?page_id=243", "http://hikaru-sakihama.fififactory.com/hikaru-wp/wp/wp-login.php", "https://github.com/", "http://cnt.affiliate.fc2.com/cgi-bin/click.cgi?aff_userid=290526&aff_siteid=280992&aff_shopid=156", "https://www.tumblr.com/blog/fifi-peacebeat", "http://fififactory.com/?cat=5", "http://shinsekai.fififactory.com/", "http://fififactory.com/?cat=10", "http://fififactory.com/", "http://weddingmovie2013.web.fc2.com/", "http://fififactory.com/?cat=16", "http://最強じゃんけん.com", "http://hope-is-dream.hatenablog.com/", "http://kairaweb.com/", "http://orangehouse098.com/blog/wp-login.php" ]


 

このHPのトップに張られているリンクが表示されているのがわかる。これだけ。。なんて簡単なんだ。。

コードを確認してみる

Algorithmiaでは、ユーザが公開しているAPIに関してはコードが見れる。一度見ておこう。

Algorithmia

 

ページ左下にあるViewSourceで確認できる。

[caption id="attachment_388" align="alignnone" width="300"]Algrithmia Algrithmia: ソースコード確認画面[/caption]

このAPIJAVAで書かれているのがわかります。(僕はJavaはわからないので内容については割愛します)

実際にアルゴリズムを登録してみる

Algorithmiaにサービス登録すると、アルゴリズムを作って登録できます。こういうのはやってみないとわからない。とりあえずアルゴリズムを登録してみます。

[caption id="attachment_389" align="alignnone" width="300"]Algorithmia アルゴリズム登録アイコン[/caption]

上部ツールバーにある+Add Algorithmから登録できます。こちらを押すと、登録するアルゴリズムの設定を決めるモーダルができてきます。

[caption id="attachment_390" align="alignnone" width="300"]Algorithmia アルゴリズムの登録画面[/caption]

アルゴリズムの名前と、Algorithmia内で登録したAPIを呼び出すためのURIを決めます。

[caption id="attachment_391" align="alignnone" width="300"]Algorithmia アルゴリズムの名前とURIの登録[/caption]

記述する言語の選択。

Algorithmia

 

C_NoName_no-10

C_NoName_no-11

 

今のところ、javapython, scalaの3種類だけしか利用できないみたいです。ここらへんが参入障壁なのでしょうか。

[caption id="attachment_395" align="alignnone" width="300"]Algorithmia ライセンスの設定[/caption]

最後にライセンスを設定して終了になります。

アルゴリズムの実装用エディタ

Algorithmiaにはブラウザエディタがついております。これもAlgorithmiaの魅力の一つともいえます。

[caption id="attachment_396" align="alignnone" width="300"]Algorithmia Algorithmiaエディタ[/caption]

立ち上げた初めはAlgorithmiaのHelloコードが書かれています。

Algorithmia

これはコンソールに入力された文字列にHelloを加えて出力するだけのコードです。

Algorithmia

成功すると、"Hello <入力文字列>"が返ってきます。ここで注意しておく点は二つあります。

1. コンパイルすること

[caption id="attachment_399" align="alignnone" width="300"]Algorithmia ツールバーのコンパルボタン[/caption]

このサンプルコードも、もしなにも変更していない状態であっても、ひとまずコンパイルを押してないと動かないので注意。(ここであきらめないで)

2.  入力を""で囲むこと。

すぐにエラーメッセージが消えてなくなるのですが、""で囲まないと「JSONがなんとか。。。」とエラーがでるので、落ち着いて。

公開する

とりあえず最後まで使ってみたいので、適当にコードを変更して公開までしたいと思います。

[caption id="attachment_400" align="alignnone" width="278"]Algorithmia 初めてのアルゴリズム[/caption]

HelloコードをFiFiに変更しました。(つまらなくて申し訳がないですが、これで許してください)

[caption id="attachment_401" align="alignnone" width="300"]Algorithmia ツールバー公開ボタン[/caption]

ツールバーからPublishを選択します。(事前に保存と、コンパイルは済ましておいてください)

[caption id="attachment_402" align="alignnone" width="257"]Algorithmia 公開設定[/caption]

すると、公開範囲を選択でき。下では、アルゴリズムの利用料金を設定できます。

こちらを読んでみると、設定したロイヤリティの70%が、作成者にもらえるようです。

まとめ

Algorithmiaを一通り使ってみました。アルゴリズムの登録と利用が、このような整備された環境でできるのはとてもありがたいことです。また、研究等で、個人的に作って利用しているアルゴリズムは研究者の数の何倍もマシンの中に眠っていると思うので、そのようなコードを一般公開して、知識とお金を交換するというのは面白いかもしれませんし、一種のモチベーションにもなるかもしれません。今後の発展に期待です。

 

Gitリポジトリを自動同期するDropboxクローン·Ohajiki MOONGIFT

[BeautifulSoup] Pythonでスクレイピングする | youtube動画のヒット数を調べる

[Anaconda] Pythonで数値解析環境構築 | Anacondaでvirtualenv(仮想環境)を使う方法

[Python] テキストデータをPython標準ライブラリでパースする方法

 

 

 

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

画像を自動ダウンロードするコード | urllib2

画像を自動ダウンロードするコード | urllib2

Webページから画像をたくさん保存する必要があるので、勉強がてらPythonを使って自動ダウンロードしてみる。

コード

# -*- coding: utf-8 -*-
from bs4 import BeautifulSoup
import sys
import urllib2
import os.path

# url先の画像を保存する関数
def download(url):
    img = urllib2.urlopen(url)
    localfile = open(os.path.basename(url), 'wb')
    localfile.write(img.read())
    img.close()
    localfile.close()


# shutterstockの画像検索結果を保存
# アクセス先
par_url = 'http://www.shutterstock.com/s/repeating/search.html?page=1&inline=155372933'

# urlアクセス
res = urllib2.urlopen(par_url)
# beautifulsoupでパース
soup = BeautifulSoup(res.read())

# ページに存在するimgタグを検索
for link in soup.find_all('img'):
    # 画像URLを取得
    img_url = link.get('src')
    print img_url

    # ローカルに画像をダウンロード
    download(img_url)

 使い方

画像が一覧されているWebページを表示し、そのページ内の画像をすべてローカルに保存する。

参考

python 画像 取得 ダウンロード

hope-is-dream.hatenablog.com

hope-is-dream.hatenablog.com

hope-is-dream.hatenablog.com

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

Flaskを使ってMatplotlibグラフを表示する

[Flask + Matplolib] Flaskを使ってMatplotlibグラフを表示する

Flask(python)側で計算させた結果を、Matplotlibを使ってグラフにし、それを上手いことHTMLで表示したいと思ってるので調査してみる。

先行事例

  1. ローカルに画像を保存する方法
  2. キャッシュに保存する方法
  3. Content-Type:image/pngで送る方法

なんとなくしらべると上記の流れがありそう。

調査

matplotlib を Flask から使う方法

引用

 

import matplotlib
matplotlib.use('Agg')
 
from matplotlib import pyplot
import numpy
 
from flask import Flask, send_file
from cStringIO import StringIO
 
app = Flask(__name__)
 
 
def plot(image):
    x = numpy.linspace(0, 10)
    y = numpy.sin(x)
    pyplot.plot(x, y)
    pyplot.savefig(image, format='png')
 
 
@app.route('/image.png')
def image_png():
    image = StringIO()
    plot(image)
    image.seek(0)
    return send_file(image,
                     attachment_filename="image.png",
                     as_attachment=True)
 
 
@app.route('/')
def index():
    return '<img src="image.png">'
 
 
app.run(debug=True)

HTMLでは、ファイル(image.png)を直接リクエスト?アクセスしている。

そうすることで、Flaskにてファイル生成の処理が実行され、

最終的にsend_file()で画像ファイルが返される仕組み。

しかし、これだと、HTMLロード時にしか画像が更新されないので注意。

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)

俺の彼女と幼なじみが修羅場すぎる12 (GA文庫)