>>> s1 = pd.Series(data=[10,20,30]) >>> s1 0 10 1 20 2 30 dtype: int64 >>> s2 = pd.Series(data=[100,200,300]) >>> s2 0 100 1 200 2 300 dtype: int64
こちらをご覧ください。踏み絵ではありません。R上で地理空間データを扱うPythonモジュール、geopandasによる作図を行なっている画面です。 え、RでPythonを!?と驚かれる方もいるかもしれませんが、reticulateというRパッケージを使うことで、ほぼストレスフリーでPythonのモジュールや関数がR上で利用可能になります。先の図は次のコードによって実行されました。 library(reticulate) # モジュールの呼び出し gpd <- import("geopandas") plt <- import("matplotlib.pyplot") # サンプルデータの読み込み world <- gpd$read_file(gpd$datasets$get_path("naturalearth_lowres")) # データセットの確認 head(world) # ではな
import pandas as pd import numpy as np import matplotlib.pyplot as plt %matplotlib inline
scikitlearnはnumpyしか受け付けないので、pandasでデータ加工した後numpy配列に変換する必要があるし、標準python、numpy、pandasは機能が重複していて混乱するので、まずは基礎の基礎をまとめる。 #!/usr/bin/env python # -*- coding: utf-8 -*- # インポート import numpy as np import scipy as py import pandas as pd import itertools as it ''' 作成 ''' # リスト作成 list_value = [10,11,12] list_value Out[374]: [10, 11, 12] # タプル作成 tuple_value = (10,11,12) tuple_value Out[375]: (10, 11, 12) # ディク
以下は私の .zshrc から z.sh の動作に必要な部分を抜粋したものです。古いバージョンの zsh でも動作させるため、直接スクリプトの動作に関わりの無い部分も記載しています。 スクリプトは $ZDOTDIR/z/z.sh に配置 z だとタイプしづらいので j に変更 記録ファイルは $ZDOTDIR/.z に変更 :a や :A などの変数展開制御編集子が使用できないバージョンでは独自にフック関数を定義 autoload -Uz is-at-least # Treat hook functions as array typeset -ga chpwd_functions typeset -ga precmd_functions typeset -ga preexec_functions # Simulate hook functions for older versions if
【追記】 学生のときに血迷ってこのようなメモを書きましたが、冷静にnp.concatenateを使って下さい: https://docs.scipy.org/doc/numpy/reference/generated/numpy.concatenate.html どっちがどっちかよく忘れるのでメモ. >>> import numpy as np >>> a = np.array([[1,2,3], [4,5,6]]) >>> b = np.array([[7, 8, 9], [10, 11, 12]]) >>> c = np.array((1, 2, 3)) >>> d = np.array((4, 5, 6)) >>> a array([[1, 2, 3], [4, 5, 6]]) >>> b array([[ 7, 8, 9], [10, 11, 12]]) >>> c array([
Python2 / numpy > ファイルの特定の列だけを別のファイルの列データで置き換える > numpy.c_を教えていただきましたPythonnumpydifficultToSearchlistOperation#migrated GeForce GTX 1070 (8GB) ASRock Z170M Pro4S [Intel Z170chipset] Ubuntu 14.04 LTS desktop amd64 TensorFlow v0.11 cuDNN v5.1 for Linux CUDA v8.0 Python 2.7.6 IPython 5.1.0 -- An enhanced Interactive Python. gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4 GNU bash, version 4.3.8(1)-release
Pythonを使ってこの方さまざまな点につまずいたが、ここではそんなトラップを回避して快適なPython Lifeを送っていただくべく、書き始める前に知っておけばよかったというTipsをまとめておく。 Python2系と3系について Pythonには2系と3系があり、3系では後方互換性に影響のある変更が入れられている。つまり、Python3のコードはPython2では動かないことがある(逆もしかり)。 Python3ではPython2における様々な点が改善されており、今から使うなら最新版のPython3で行うのが基本だ(下記でも、Python3で改善されるものは明記するようにした)。何より、Python2は2020年1月1日をもってサポートが終了した。よって今からPython2を使う理由はない。未だにPython2を使う者は、小学生にもディスられる。 しかし、世の中にはまだPython3に
背景 pythonには標準モジュールの中にunittestが含まれるのですが、使い方がすぐに分からなかったため、他のプロジェクトでもコピペできるようにテンプレートを備忘録として残しておきます。 *注意事項 python2.7以上からunittestではsetUpClass, tearDownClassというテストクラスの初期化時に実行されるメソッドを用いることができるようになりました。 python2.6以下の場合は、unittest2というモジュールをインポートすることでこれらのメソッドを使うことができます。 コードのテンプレート ポイント * unittest.main()では、setUpClass → (setUp → tearDown) *ループ → tearDownClass が実行されます。 * test用のメソッドは名前の先頭を test から始めなければなりません。e.g.
import unittest import sample class TestSample(unittest.TestCase): def test_add(self): self.assertEqual(sample.add(1, 2), 3) if __name__ == "__main__": unittest.main() テストの実行方法 python -m unittest tests.test_sample とunittestのスクリプトで実行する 学んだこと 上記の方法で上手くテストが実行できるのですが、以下の点を学びました。 __init__.py って何?と思いましたが、このファイルがあるディレクトリはpythonのパッケージとして扱われるようです。そのためsample.pyがあるディレクトリから実行コマンドで、「tests.test_sample」の「tests.」
Python におけるタイムゾーンの取り扱いについて、正確に書こうとするとなかなか難しいので、今回やったことだけシンプルに書きたいと思います。 Python でタイムゾーンを扱うのは難しい。標準ライブラリには tzinfo というタイムゾーンを表すための抽象クラスが用意されているだけなので、それを継承して自前でタイムゾーン用のクラスを定義する必要がある。例えばこんな感じだ。 from datetime import timedelta, tzinfo class JST(tzinfo): def utcoffset(self, dt): return timedelta(hours=9) def dst(self, dt): return timedelta(0) def tzname(self, dt): return 'JST' 現在の日時を日本標準時(JST)で取得したい場合は、これ
Python の datetime オブジェクトと Unix 時間 (Unix time / Epoch time) を相互変換する方法についてまとめます. Python の datetime オブジェクトにはタイムゾーン情報が付いているもの (aware) と付いていないもの (naive) があるので注意が必要です. Unix 時間 (Unix time) は UTC での 1970/1/1 00:00:00 からの経過秒数で表されます. 多くのシステムでは閏秒の存在を考慮しない実装となっているようで, この場合 Unix time と UTC, JST の対応は以下のようになります. Unix time UTC JST (UTC+9) “naive” と “aware” Python の datetime オブジェクトには “naive” と “aware” の2種類のオブジェクトが
datetime モジュールは Python の標準ライブラリの中でも、使用頻度が高い割に罠が多かったり使い方が難しかったりする、あまりイケてないモジュールだと個人的に思っています。 そんな datetime モジュールですが、 Python 2 のプロジェクトを Python 3 に移行した時に大分コードを整理できてちょっと感動したので紹介しておきます。 unixtime との相互変換 unixtime から datetime.datetime への変換は、 ローカルタイムなら.fromtimestamp() で、 UTC なら .utcfromtimestamp() 関数で行います。 >>> import time >>> from datetime import datetime >>> now = time.time() >>> now 1415542873.099776 >>>
Pythonのasyncio、またasync/awaitについてはあまり実践的な例が出回っていなかったため、収集した情報をもとに用例ベースの逆引きリファレンスを作ってみました。 ただ、この辺はほんとに情報がなくて何が真実なのか謎に包まれている点があるので、情報をお持ちの方はぜひご連絡をいただければと思います。 今回紹介する例は、以下のgistにまとめてあります。実装時の参考にしていただければと思います。 icoxfog417/asyncio_examples.py はじめに Pythonにはthreading、multiprocessing、asyncioとどれも並列処理に使えそうなパッケージが3つあります。これらの違いをまず押さえておきます。 これらのパッケージの違いは、そのまま「マルチスレッド」、「マルチプロセス」、「ノンブロッキング」の違いに相当します。まず、マルチスレッドとマルチプ
動機 いわずもがなですが、機械学習の勉強にはとても時間が掛かります。 でも、同じ勉強時間を費やしたとしても、教材の良し悪しで捗り方が大きく変わってくることは、誰もが実感していることだと思います。 そこで、本記事ではテーマごとに私が考える最強の教科書をリストしていこうと思います。 ディープラーニング(アルゴリズムの理解) 「Deep Learning」An MIT Press book, 2016/12 発行 http://www.deeplearningbook.org/ 印刷本も売られてますが、上のWebページでいつでもタダで読めます。(版権上の問題でPDFの形では配布できない&してないそうです) この本は、ここ数年のディープラーニングの進歩のうち研究者の間ではメジャーとなっているであろうテーマはすべて書いてある、ともいえる内容の広さがありつつ、それぞれのテーマについて理論的背景と具体的
はじめに 追記2020/09/25: Kaoriya版Vimは現在32bit/64bitともにpython2サポートがないためslimvが動作しません、 そのうちきちんと検証をするつもりですが、 Windows環境下でvimでlispやる環境が欲しいだけなら下記のneovim+vlimeのほうがpythonに依存しないので良いと思います この記事はVimmerな人たちでかつCommonLisp始めてみたいという方向けです。 Lisp開発用のVimプラグインであるslimvを使った環境構築をしていきます。 Emacsな人たちはLispBoxで調べると幸せになれるかもしれません。 以前書いたslimv導入という記事の内容の焼き直し版です。 Linuxな人たちだけでなくWindowsな人たちの環境構築についても書いていこうかとおもいます。 ※Windows版書きました : Windowsの環境構
Want to create a Gist from your editor, the command line, or the Services menu? 懶人包一覽表 Editor Support Sublime Text 2/3 TextMate Emacs Vim Coda Command Line gist (official) gist.sh (shell) pygist (python) gistp (perl) OS X Gist as a Service Drift Snippets Plugin Blog Gist => Tumblr WordPress Plugin More Gist Search on GitHub Register as a new user and use Qiita more conveniently You get articles th
はじめに Emacsのヘビーユーザーですがなんとなく気分を変えたくてAtomを触ってみたのでその時の設定備忘録です. 筆者はAtom超初心者ですので間違い等ございましたらご指摘ください. キーバインド関連 atomic-emacs emacs-plus これだけでほぼAtomがEmacs化します.ただし,C-kがAtomではプレフィックスに設定されてしまっているのでこれを無効化します. disable-keybindings 設定画面でExcept Community Packagesにemacs-plus, atomic-emacsを追加,Prefix Keysにctrl-kを追加します. これ以降,あらゆるパッケージのキーバインドが無効になるのでパッケージを追加するたびに~/.atom/keymap.csonに設定を追加します. dired, neotree tree-view aut
背景 Emacsは独自バッファでヤンク(コピー)・ペーストを行っています。 これ自体は便利なのですが、Emacsの環境外とのやり取りについて考慮する必要があります。 Emacsでは強引にドラッグしてクリップボードにコピーするなどしていました(恥ずかしい)。 そして最近Spacemacsに移行したのですが、なんとそれが出来なくなっていました。 うまくドラッグできないし、何よりOSのコピーコマンドが無効になっています。 応急処置的にorg-modeからhtmlを出力・ブラウザに吐き出してコピペしていたのですが、 文字コードや改行コードの都合で求めるビューが出なかったりするので、 いよいよ重い腰を上げてクリップボード操作をEmacsから出来るようにしようと思い立ちました。 解決法 Spacemacsのissueで上がってました。 https://github.com/syl20bnr/space
ELispをほとんど書いていないので、正しいやり方なのか全然わからないが、とりあえずできた。 ただxselの動作があまり安定しない。短いテキストなら問題ないが・・・ ;; Region to X clipboard (defun paste-to-tmp-file(data) (with-temp-buffer (insert data) (write-file "/tmp/clipboard"))) (defun xclip-add-region() (interactive) (if (region-active-p) (progn (paste-to-tmp-file (buffer-substring-no-properties (region-beginning) (region-end))) (shell-command "xsel -ib < /tmp/clipboard")
goexcel https://github.com/mikeshimura/goexcel 下記のサンプルの様なレポートが、作成可能です。 生成した Excel サンプル excel プログラムですべてコントロール出来るので、色々な要件に対応出来ます。 色は事前定義済み。 色濃度にも対応。 スタイルは、基本スタイルを継承出来るので、管理が容易。 サンプル program サンプルのソース package example import ( "fmt" ge "github.com/mikeshimura/goexcel" "io/ioutil" "strconv" "strings" "time" ) func Simple1() { list := ReadTextFile("simple1.txt", 8) excel := ge.CreateGoexcel() excel.AddSh
どうも、Androidアプリの開発をやっています、エンジニアの岩木(@YusukeIwaki)です。 社内ではRubyistたちに囲まれながら、孤独にJavaを書いています(誇張w) クラウドワークスでは、施策の事前調査や効果検証などのデータ測定を、エンジニアが率先しておこなう開発プロセスをとっています。 データ収集ではSQLを使う機会が多いのですが、「会員登録した人の、1週間単位での発注率の推移」のような複雑なデータを取ろうとした時に、わりとつらい思いをすることが多かったため、SQL運用のつらみを解決すべくPandasとJupyterの布教活動をおこなった!という話を共有します。 そもそも解決したかった"SQLのつらみ" 「データ収集をいろんなエンジニアがやる」というシーンにおいて クエリの結果の再利用性が低い 「よく使うベースクエリは関数化して、みんなで使い回す」ということができない。
参考資料 mysqlやsqliteについてはstackoverflowの下記記事参照 http://stackoverflow.com/questions/10065051/python-pandas-and-databases-like-mysql 尚、上記で使っているframe_queryはdeprecatedになっていて、現在ではread_queryを使うらしい。 postgresqlとの接続 psycopg2を使う pip install psycopg2 SELECTする際の適当なサンプルコード import psycopg2 as pg with pg.connect(database='db_name', user='user_name', host='host_name', port=5432) as conn, conn.cursor() as cur: cur.exec
"""Get data from MySQL with pandas library.""" import MySQLdb import pandas.io.sql as psql con = MySQLdb.connect(db='work', user='root', passwd='') # DB接続 sql = """SELECT product_id, product_nm, product_features FROM electronics""" df = psql.read_sql(sql, con) # pandasのDataFrameの形でデータを取り出す con.close() データからベクトルを作る1 大規模データを使ってクラスタリングなどのためのベクトルを作る際、メモリ消費を抑えるためにデータを削除しながら繰り返し処理を行う。 """Delete rows whi
追記20180611 このページはあくまでWindowsでスタンドアローンを前提にした説明ですが、さくらのVPSを使ったセットアップの最新版を書きました。ゆっくり見ていってね! LAMP+WP+Pyのセットアップメモ2018 追記20180816 Windowsでスタンドアローン環境構築の2018最新版(by VisualStudio)できました!ゆっくり見ていってね! Pythonの環境構築とDBへのSQL実行例のメモ2018 追記20190201 なんか閲覧数が多いので内容全見直します。さすがに3年も経つとずいぶん日本語ページも増えたね 参考ページ ・Python3のインストール Python3のインストール ダウンロード(64bit版) https://www.python.org/downloads/windows/ 環境変数にPathを追加してからインストール "Add Pyth
pandas.DataFrameの行名(index, インデックス)・列名(columns)を変更するには、rename()メソッドやset_axis()メソッドなどを使う。 既存の列をインデックスに設定するset_index()というメソッドもある。 関連記事: pandas.DataFrameの列をインデックス(行名)に割り当てるset_index 本記事のサンプルコードのpandasのバージョンは以下の通り。バージョンによって仕様が異なる可能性があるので注意。以下のpandas.DataFrameを例として使う。 import pandas as pd print(pd.__version__) # 2.0.3 df = pd.DataFrame({'A': [11, 21, 31], 'B': [12, 22, 32], 'C': [13, 23, 33]}, index=['ON
excl ライブラリ なぜそんなもの書いたのか Go言語にはExcel作成用のライブラリ xlsx がすでに存在します。 xlsxライブラリは強力で、普通に使用する場合このライブラリが一番だと思います。 ただ、xlsxライブラリを調査していると今回作成するものの仕様に耐えられない部分がありました。 xlsxライブラリの利点欠点 xlsxライブラリにできること ・Excelファイルの書き込み・読み込み・新規作成 ・セルの書式設定 ・Excelファイルを解凍せずに扱える ・OpenXMLの仕様に基づいた開発 xlsxライブラリの問題 ・既存のExcelファイルを使用するといろいろなものが消える ・チャートが消える ・画像が消える ・図形が消える ・マクロの存在するファイルの場合はマクロも消える ・メモリ使用量が異常に高くなる ・数十メガバイトのデータでも使用メモリがギガを超える exclライブ
はじめに 本記事は、スクレイピングを推奨するものではありません。 HTMLのParseがRustでも簡単にできる ということを重点において解説したいと思います。 RustでHTMLのParseを行う Rustは、Servoの開発に使用されている言語で、Servoの開発によってRust言語も進化してきています。Servoは、Mozillaによって開発されているブラウザのレイアウトエンジンのことで、ServoのHTMLパーサも、Rustで書かれています。 このHTMLパーサが、html5everです。本記事では、html5everを使った HTMLパーサについて簡単なコードの紹介を行いたいと思います。 必要なもの extern crate tendril; extern crate html5ever; use std::io::{self, Write}; use std::default:
はじめに stackoverflowが毎年行っている開発者向けアンケートの2015年の結果で好きな言語(ここ1年使ってきて、今後も使い続けたい言語)で3位になったRustについて名前くらいしか知らなかったので入門してみました。 追記 最初はbeta時点の情報でしたが、Stable版リリースに伴って記事更新しました。 といっても動作確認し直したくらいです。 あと、最初に書いてたstackoverflowのアンケート結果紹介はやっぱり邪魔だったので消しましたw 私のどうでもよい コメントは更新履歴から参照してもらえればと思います。 Rustとは とりあえず箇条書きで。 (なおrustは始めたばかりなので自分の理解がおかしい点もあるかもしれません。おかしな点に気づいた方は マサカリ ご指摘頂けたらと思います。) 背景とマイルストーン 2009年にGraydon Hoareによって開発されたもので
やりたいこと Bootstrap Tree View を使って、見栄えよくあるディレクトリ以下のファイル一覧を表示させたい。 誰か作っているだろうと思ったのですが、探しても見つからなかったので書きました。 #!/usr/bin/env python import os import json def json_tree(path): target_json = [] for item in os.listdir(path): new_hash = {} new_hash['text'] = item full_path = os.path.join(path,item) if os.path.isdir(full_path): child_dir = json_tree(full_path) new_hash['nodes'] = append(child_dir) else: new_h
行rowを追加する。行の追加。 こういうデータフレームDataFrameがあった時、 In [71]: df Out[71]: id name birthday is_relative 0 1 Hage 1960-01-01 1 1 2 Hige 1960-01-02 1 1行追加したい時は、シリーズSeriesでデータ作って、.append()すればいいっぽい。 やってみた。 In [74]: se = pd.Series([3, 'Hoge', date(1960,1,3), 1], index=df.columns) In [75]: se Out[75]: id 3 name Hoge birthday 1960-01-03 is_relative 1 dtype: object In [76]: df.append(se, ignore_index=True) Out[76]:
なんかぼやぼやしているうちにひさびさの pandas エントリになってしまった。基本的な使い方については網羅したい気持ちはあるので、、、。 今回は データの連結 / 結合まわり。この部分 公式ドキュメント がちょっとわかりにくいので改訂したいなと思っていて、自分の整理もかねて書きたい。 公式の方はもう少し細かい使い方も載っているのだが、特に重要だろうというところだけをまとめる。 連結 / 結合という用語は以下の意味で使っている。まず憶えておいたほうがよい関数、メソッドは以下の 4 つだけ。 連結: データの中身をある方向にそのままつなげる。pd.concat, DataFrame.append 結合: データの中身を何かのキーの値で紐付けてつなげる。pd.merge, DataFrame.join 連結 (concatenate) 柔軟な連結 pd.concat ふたつの DataFram
import numpy as np import pandas as pd df = pd.DataFrame(np.random.randn(4, 4)) df.index = ['idx1', 'idx2', 'idx3', 'idx4'] df.columns = ['col1', 'col2', 'col3', 'col4'] df col1 col2 col3 col4 idx1 0.660757 0.122939 0.450455 0.000483 idx2 1.948787 2.327604 0.626010 -0.092082 idx3 0.311708 0.926246 -0.083588 0.487964 idx4 0.284561 -0.076556 1.183666 -0.142197
次のようにシリアル番号ごとに時系列データを持つような場合に,シリアル番号ごとに処理をしたいときのループの書き方。 import pandas as pd df = pd.read_csv('sample.csv') df Date Serial_No Var1 Var2 Var3 0 2016-04-01 1 0.708636 0.014882 0.765210 1 2016-04-02 1 0.211528 0.012070 0.071375 2 2016-04-03 1 0.745620 0.211446 0.593242 3 2016-04-04 1 0.378551 0.249341 0.899383 4 2016-04-05 1 0.692113 0.800209 0.573121 5 2016-04-01 2 0.942247 0.047866 0.476508 6 2016-
お仕事中の開発が全てLinuxで、iTermのウィンドウ切り替えに慣れてた身としては至極苦痛だったのでtmuxを本格的に使い始めた。 それと合わせて今まで曖昧にしてたdotfilesを整理する際、tmuxを起動した状態でのvimがおかしかったので直した。 直す前 こんな感じ。 本当はこうなるはず 解決策 tmuxが256色表示ができてないのが原因。 なので~/.tmux.confに以下の2行を追記する。 set-option -g default-terminal screen-256color set -g terminal-overrides 'xterm:colors=256' 上の1行はggると結構登場するのだが、今回は下の1行を足さないことでつまづいていた。 ちなみにtmuxを起動する際、-2オプションをつけることでも256色表示が実現でき、きちんとvimでも表示することができる
たまにインターネットと疎通がないマシンをデプロイしなきゃいけないこともあると思う。 今回は、そんな時にどうやって Python のパッケージを対象ホストにインストールすればいいかについて書く。 要約を先に書いておくと、まず OS のパッケージシステムを使って Python のパッケージマネージャ pip をインストールした上で、Wheel という Python のパッケージング形式でビルドしたものを使ってインストールすればいい。 検証の環境には CentOS7 を使った。 $ cat /etc/redhat-release CentOS Linux release 7.1.1503 (Core) $ uname -r 3.10.0-229.11.1.el7.x86_64 Python のパッケージマネージャ pip をインストールする まずは Wheel 形式の Python パッケージを
前回 はスレッドで並列HTTP Request を実装しましたが、 hyper が v0.11.0 で非同期IOに対応したので、非同期IO版も書いてみました。 extern crate futures; extern crate hyper; extern crate tokio_core; use std::io::{ self, Write }; use std::time::{ Duration, SystemTime }; use futures::{ Future }; use futures::future::{ join_all }; use hyper::Client; use hyper::client::{ HttpConnector }; use tokio_core::reactor::Core; trait DurationExtended { fn to_sec
Rust の練習に、昔 Haskell や Clojure で書いた、並列にHTTP Request を送るプログラムを書いてみました。 但し、 HTTP ライブラリの hyper の非同期処理は絶賛開発中?のようだったので、今回は非同期IOによる並列処理ではなくて、スレッドによるものです。 extern crate hyper; use std::io::prelude::*; use std::io::stderr; use std::sync::Arc; use std::thread; use std::time::{ Duration, SystemTime }; use hyper::Client; fn to_seconds(duration: &Duration) -> f64 { let nanos = duration.subsec_nanos() as u64; le
概要 ※この記事はRuboCop v0.28.0が対象です。 https://github.com/bbatsov/rubocop/tree/v0.28.0 Assignment Branch Condition size for method_name is too high. [15.33/15] RuboCopを使っていて、こんな警告が出て困ったので調べた結果をまとめました。 これはABC Sizeというチェック項目で、かいつまむと Assignment : 変数への代入 Branch : メソッド呼び出し Condition : 条件文 上記3項目の合計ポイントをRuboCop君が計算して、基準値を超えると警告が出る、という仕組み。 RuboCopやRuby特有のチェックではなく、Abc Metricといって昔からあるものらしい。 ちなみに、それぞれの頭文字をとってABCとのこと。
package main import ( "fmt" ole "github.com/go-ole/go-ole" "github.com/tanaton/go-ole-msoffice/excel" "path/filepath" "strings" ) type ExcelGraph struct { app *excel.Application } type GraphItem struct { x int count int rg *excel.Range leg []string } func main() { // COMの初期化 ole.CoInitializeEx(0, ole.COINIT_APARTMENTTHREADED|ole.COINIT_DISABLE_OLE1DDE) // 確実に行う必要があるため defer ole.CoUninitialize() //
2015-02-22 なぜ ウェブアプリ開発をしているとInternet Explorerでの動作確認のためmodern.IEが欠かせません。が、インストール直後は英語環境になっているので、日本語環境での動作確認のためにはセットアップが必要です。 セットアップ手順は以下のQiitaの記事に書いたのですが、手数が多くて面倒でした。 VirtualBox - modern.IEのWindows 7で日本語の表示と入力をできるようにする - Qiita Windows8.xのmodern.IEで日本語を入力、表示できるようにする。 - Qiita それを自動化するコマンドラインツールmoderniejapanizerを作りました。実は2年ぐらい前にAutoItを使って作り始めたのですが自動制御がうまくいかないときがあって挫折していました。昨年暮れぐらいから再挑戦して、今回は勉強を兼ねてGoで実装
template_methodパターンです http://www.techscore.com/tech/DesignPattern/TemplateMethod.html#dp3-3 アルゴリズム部分を個別の部品として抽象化して 部品の組み立てだけをスーパークラスとして実装する。 なんか結構使える場面がありそうですね。 class Wood attr_accessor(:draw_param, :cut_param) end class WoodCutPrint def draw(hanzai); end def cut(hanzai); end def print(hanzai); end def create_wood_cut_print hanzai = Wood.new draw(hanzai) cut(hanzai) print(hanzai) end end class Tan
この記事はRuby Advent Calendar 2014の13日目の記事です。 初めに Rubyを教育・研究に使おうという試みはRubyの黎明期からありました。 この時期の有名なパッケージとしてはバイオインフォマティクスのBioRubyや地球科学の電脳Rubyプロジェクトが有名です。 先述のBioRubyやGPhys(電脳Rubyの成果物)は現在も更新が続けられており、多数の利用者を抱えています。 しかし全体として見た場合、科学の分野で使われるLL言語としてRubyはPythonやRの後塵を拝している印象があります。 科学計算における均質化、あるいはなぜPythonが着実に他言語のシェアを奪っているか 記事のようにこの分野ではPythonコミュニティが非常に活発で、機械学習など新しい技術は真っ先にPythonで実装されるようになっています。 しかし最近Rubyでも少しずつですが環境が充
データ解析といえばPythonやRを使うことが多いが、Rubyでも簡単なデータ解析は行うことができる。 Rubyでデータフレーム(Excelのスプレッドシートのようなデータ構造)を扱うには、Daru というライブラリが利用できる。作者の@v0droさんはRubykaigi 2016でも登壇してDaruについて発表していて、公演の様子はこちらで見ることができる。 この記事では、Daruの基本的な使い方を紹介する。 必要な機能を全部書くと量が多くなるので、最小限の利用例のみ書いていく。 環境 Ruby2.3.1 daru 0.1.4.1 Gemfileに gem "daru" と書いてbundleすればOK。 以後、require "daru" を行ってから実行する データ構造 dataframeは2次元配列のような構造で、Daru::DataFrame という名前のクラスになる。 dataf
背景 先日、RubyKaigi 2015 に参加してきました 終了後、↓のような感想エントリを読んで、そうだよなーと思いました RubyKaigi 2015(3日目) ただのにっき ところで今回のRubyKaigiで「あ、これはまずいな」と思ったことに「機械学習系の発表がひとつもなかった」点がある。昨日のパーティでも話題にあげてみたところ、危機感を抱いている人は少なからずいた印象だけど、根っこをたどると数値演算ライブラリの整備をずーっと放置してきたことがあるだろう。気がつくと数値演算方面ではPythonに大きく水をあけられていて、いまやその応用である機械学習では(LLの中では)Pythonの独壇場だ。Webアプリケーションの分野で一世を風靡した気になってる間に、いま一番ホットな領域がまったく話題にならない言語になってしまった。 というわけで、Ruby でデータセットを弄る Gem ってのが
RubyKaigiに参加するとコード書きたいという気持ちが高まって良いのですが、今回はPDFの表を読み込んで pandas の DataFrame に変換できる tabula-pyを作りました。 これをもってRubyKaigiの参加報告とさせていただければと思います。 tabula-pyとは tabula というJavaで書かれたPDFから表を抽出するライブラリをPythonでうすーくラップしたものです。実装を見てもらえばわかると思いますが、本当にsubprocessでJavaのプログラムを叩いて標準出力で受け取るというだけしかやっていません。 もともとは、Rのtabula実装がかなり色々できるのを知ってPythonがないらしいというので作りました。Rの実装はマジでJavaをごりごり書いていて尊敬の念を抱いています。 tabulizerパッケージによるPDF表データからのデータ取得 git
データを扱う仕事をしていると、何らかの形でデータをある順序に沿って処理する Workflow = データパイプラインを構築する必要になる場面に出くわすことが多いと思います。 こうした処理に適用できるソフトウェアは既にいくつか存在するのですが、自分が仕事で使う上でマッチするものがなかったので、tumugi を Ruby のライブラリを作成し、 gem として公開しました。ロゴはこんな感じ。 Workflow Engine をつくろう! シリーズ連載は、元々このライブラリの設計を整理するために書いていた記事でした。まだ、未完ですが興味のある方はそちらもお読みください。 注釈 この記事は tumugi が Python で書かれたワークフローエンジンである Luigi に強く影響されて書いたことから、対比として分かりやすいため Building Data Pilelines with Pytho
tumugi で BigQuery のクエリ結果を Google Sheets に保存し、URL を Slack に通知する方法RubyGoogleDriveBigQuerytumugi 仕事で BigQuery のクエリの結果を共有用のフォルダに Google Sheets 形式で保存して、Slack で URL を共有する、ということを頻繁にやっているのですが、 WebUI だと、クエリ結果を Google Sheets 形式で保存できるけど、ファイル名とフォルダが指定できないので、いちいち名前を変えて、フォルダを移動しないといけない。Slack 通知はできない。 Google Apps Scirpt (GAS) だと、全部実現できるけど、コードの管理を GitHub でやるのが面倒 と定形処理なのに、イマイチ効率の良い方法がなかったのを、tumugi で Ruby スクリプト化しまし
はじめに この記事は Windows で Rust を使ってプログラミングをしたい Rust のデバッグ実行が出来る開発環境を整えたい という人を対象にした、忘却録的な記事です(・∀・)。 開発環境には Visual Studio Code を使用します(・∀・)。 Rust 自体が割りとマニアックなプログラミング言語なうえ、Windows 向けの情報がネット上に少ないようなので書いておけば誰かの役に立つかもしれないと思って書いておきます(・∀・)。 開発環境構築に必要なもの Windows 10 Pro x64 rustup-init(これ) GDB 7.9.1 x64(これ) Visual Studio Code(ここ) たぶん Windows 7 以降なら問題ないと思いますが、検証していません(・∀・)。 また、32ビット版は検証していません(・∀・)。 手順 全体の手順 rustu
なにしてんねん 社会人生活4年目で、Windows に染まりきってしまいました・・・ ShellScript で GCC ビルドをしていたあの頃にはもう・・・ さて Rust をこのごろ触ってます。 で、Windows でも API がちょろっとあったので、試しにやってみました。 ROki1988/active_window_logger で、僕的に おー と思ったのが、この部分。 let mut title = vec![ 0u16; (length + 1) as usize ]; unsafe { user32::GetWindowTextW(whdl, title.as_mut_ptr(), length + 1); } unsafe 何ていうから malloc/free なのかなーなんて思ってたんですが、するっと確保出来ました。 言われてみれば、たしかになー。頭固かった。 mut
AccessKey, SecretKey, AssociateTag を適当なものに変更して実行すると xmls ディレクトリに 145個のファイルが保存されます。1つのファイルには10冊までの情報が含まれ、合計1442冊の情報になります。 Python で実行 parse_amazon_xml.py # -*- coding:utf-8 -*- import time from lxml import objectify class ImageInfo: def __init__(self): self.url = '' self.width = '' self.height = '' class BookInfo: def __init__(self): self.asin = '' self.title = '' self.binding = '' self.author = ''
$ mypy test.py test.py: note: In function "func": test.py:2: error: Incompatible return value type (got "str", expected "int") アノテーションを元に型をチェックして、戻り値の型がintなのにstrを返しているのでエラーになります。 やっていく気持ち "mypyやっていく"というのは、PEP 484に対応した型アノテーションを付け、mypyを実行し静的チェックをパスすることを指します。なぜやっていく気持ちになったかというと、Static types in Python, oh my(py)! この記事を読んだことが大きいです。やっていけそうな気がしました。担当している案件が規模が大きく既存機能の変更頻度も高いものだったので、信頼できる型アノテーションが有ると、修正する
本稿は 2016年10月13日 (木) に Tim Abbott 氏によって書かれた記事の翻訳です。 Static types in Python, oh my(py)! https://news.ycombinator.com/item?id=12703008 免責事項/Disclaimer 本稿は 非公式 の翻訳記事です (著者の Tim Abbott 氏に翻訳を公開することの確認は取っています) 。本稿の内容に関して Tim Abbott 氏と Dropbox 社は一切の責任を負いません。 誤訳などありましたら私宛に編集リクエストを送って頂けると助かります。 謝辞 @takada-at に誤訳の指摘をコメントで頂きました @shimizukawa から誤訳修正の編集リクエストを頂きました @cocoatomo は全体を通して誤訳修正、より分りやすい日本語の表現にしてくれました 私の拙
アノテーションを実際に行っているのは以下の部分になります。 name: str: 引数nameが、str型であることをアノテート -> str: 関数greetingの返り値の型がstrであることをアノテート また、Type Hintsでは変数宣言における型コメントについても言及されています。 こちらは構文ではなく本当にコメントの拡張になりますが、現在既にこうした型に関するコメントを付けているのであれば、上記の記法に乗っ取っておけば将来的に何かしらのツールで型チェックを行えるようになる可能性があります。 これがPythonに導入された、型のある世界・・・になります。 なお、付与されたアノテーションは、実行時にはチェックされません。端的に言えばコメントの延長となります。 そのため強制力はありませんが、実行時に何もしないためパフォーマンスに影響を与えることもありません。 よって原則的には静的解
本稿は Python に型アノテーションを追加するという提案が行われたときに起こった Python コミュニティの議論の後、2014年8月24日 (日) に Armin Ronacher (@mitsuhiko) 氏によって書かれた記事の翻訳です。 Revenge of the Types Revenge of the Types by Armin Ronacher : Python (REDDIT) Revenge of the Types | Hacker News Python 3.5 で導入を検討している型アノテーションについて興味がある方は以下を参考にしてください。 mypy で静的型付け Python プログラミング 私自身、型システムや他言語に明るくないため、一部未訳の部分があったり、勘違いや誤訳もあると思います。そういった誤りを見つけたら編集リクエストを送ってもらえると助か
Python3.6.0 が2016年12月23日にリリースされ、新たにアップデートされた項目がいくつかあります。 What’s New In Python 3.6 やはりPythonを使ってプログラミングをする人にとっては、新たに追加された文法機能などが特に気になるのではないでしょうか? そこで今回は3.6.0で追加された文法機能である、 PEP 498: 書式化済み文字列リテラル PEP 515: 数値リテラル内のアンダースコア PEP 526: 変数アノテーションのシンタックス PEP 525: 非同期ジェネレータ PEP 530: 非同期内包表記 について紹介します。 書式化済み文字列リテラル(f-strings) Pythonには、文字列(string)クラスにformat()メソッドが用意されており、str.format()を用いて変数置換や値のフォーマットを行うことができます。
本稿は Python に型アノテーションを追加するという PEP 483 - The Theory of Type Hinting の提案で参照されている Jeremy Siek (@jeremysiek) 氏と Walid Taha 氏が開発した漸進的型付けについての入門記事の翻訳です。 What is Gradual Typing Python 3.5 で導入された型アノテーションについて興味がある方は以下を参考にしてください。 Python と型ヒント (Type Hints) と #pyconjp [翻訳] PEP 0484 -- 型ヒント (Type Hints) Revenge of the Types: 型の復讐 私自身、型システムに明るくないため、一部未訳の部分があったり、勘違いや誤訳もあると思います。そういった誤りを見つけたら編集リクエストを送ってもらえると助かります。
Clojureプログラムを高速化するためのテクニック集です。 本稿に書いてある手法が全てではありません。個々の手法について細かく書いてはいないため、詳しい情報は他の文献を参照してください。また、Clojureプログラムの外側(JVMなど)については記述していません。 Premature optimization is the root of all evil. -- Donald Knuth 過度なチューニングは保守性や可読性を犠牲にする場合があるので、注意が必要です。 Measure. Don't tune for speed until you've measured, and even then don't unless one part of the code overwhelms the rest. -- Rob Pike ボトルネックをきちんと調査した上で、適切なパフォーマンス
プログラミング Clojure の第2版が出版されました。 amazon で一時的に在庫切れになってたりと思っていたより人気がある(でてきた?) Clojure。 そんな Clojure をこれから使い始める人のため、自分が使っているライブラリをリストアップしておきます。 Web アプリケーション/フレームワーク Ring WSGI(Python)、Rack(Ruby) の Clojure 版。 Compojure Ring をベースにした軽量 Web フレームワーク。 Sinatra(Ruby) の Clojure 版。 Ring と作者が同じ。 lib-noir Ring ベースのアプリケーションで使えるユーティリティライブラリ。 Noir っていう Compojure を内部的に利用していたフレームワーク(開発終了)から便利な機能(セッション、バリデーション等)を切り出したライブラリ
Clojure 楽しいですね。今年の 8 月くらいから勉強していて、いい機会なのでアドベントカレンダーに参加してみようと思いました。 私はあまりまだ Clojure に慣れてないので clojure.core のネームスペースからあまり目立たないけど意外に便利な関数を紹介してみたいと思います。 alter-meta! 他のネームスペースから Var を持ってきて別名をつけようとしたりするときに、落ちてしまうメタ情報を付与したいときに使えます。 example.core> (def my-inc #'clojure.core/inc) #'example.core/my-inc example.core> (clojure.repl/doc my-inc) ------------------------- example.core/my-inc nil nil example.core>
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く