Skip to content

Instantly share code, notes, and snippets.

@dogrunjp
dogrunjp / Python_list_append_dict
Created March 24, 2014 20:45
Pythonのリストにdict型の変数をappendすると変数がポインタ的に振る舞うので…
リストに複数のdictをappendしようとすると下のように書いた場合、追加したすべてのdict型の変数が同じ値になる。
mylist = []
mydict = {}
for i,v in enumerate(items):
mydict['name'] = v
mydict['value'] = i
mylist.append(mydict)
この場合dict.copy()を使うと適切な結果になる。
for i, v enumerate(items):
@dogrunjp
dogrunjp / pyenv_virtualevn_mac.md
Last active June 26, 2022 07:40
pyenv-virtualenvを使って複数のバージョンのPython開発環境をMacに作るには

Macでpyenv-virtualenvを使って複数のバージョンのPython開発環境を作る

自分はPythonのバージョンの問題をずっと避けて2.7を使ってきたのですが、Web関連でシステムを構築する場合でも自然言語の処理をするにしても、日本語はどうしても扱うことになるので、仕事のキリの良いところでPython 3.xの環境に移行していくことにしました。

基本的には完全に3.xに移行したいのですが、3.xに対応する気配の全くないGoogle app engine/Pythonのユーザでもあるため、2.x環境も捨てらない、、、。あとjupyterを使いたいし、Anacondaもインストールしたいけど、開発環境とは分けておきたい、、、、。などの事情でpyenvをMacにインストールして用途ごとPythonのバージョンを切り替えて使うことにしました。

pyenvのインストール

$ sudo brew update
@dogrunjp
dogrunjp / JUMAN_at_python.md
Last active May 19, 2022 07:31
macOSで、JUMAN++をPythonのpyenv環境で使うための設定。 JUMAN++とKNPはhomebrewで入れるのが楽。PythonバインディングのPyKNPをインストールする際にpyenv環境のpythonを指定します(基本的にそれだけ)。

macで、JUMAN++をPythonのpyenv環境で使うための設定

JUMAN++をインストール

$ brew install jumanpp
$ jumanpp -v  # 確認
JUMAN++ 1.02

KNPもHomebrewでインストール。

@dogrunjp
dogrunjp / Flask_path_to_file
Created March 29, 2014 06:29
Flaskアプリからファイルを書き出すときにアプリケーションのパスを取得するには…
Flaskアプリからopen(filename, 'w')することはできない、というかこのときfilenameが書き込まれるパスはFlaskアプリのルートにではなくos.path.abspath(os.curdir)になる。たとえばFlaskのstaticディレクトリにJSONを書き出し静的なjson利用したいとしたら
BASE_DIR = os.path.dirnam(__file__)
myfile = open(os.path.join(BASE_DIR,'static/sample.json'), "w")
myfile.write(data)
のように書く
@dogrunjp
dogrunjp / How2get_stringobj_instead_unicode.md
Last active September 2, 2020 02:31
Pythonのjson.load() で文字列の値をunicodeにcastしないで扱いたいとき…

Python のjson.load()で文字列の値をunicodeにcastしないで扱いたいとき。

たとえば JSONからid だけ読み込んで 内部的に生成されたasciiなstringと差分のリストを取得したいとかを想定しているのですが、 json.load()でunicodeに変換されないようにしたい!というだけなのに意外にちょっとした手間がかかるのでメモしておきます。


with open(file_path, 'r') as f:
@dogrunjp
dogrunjp / jQuery_toggle_switch.js
Created May 4, 2014 08:39
jQueryで隣の要素をtoggleしつつトリガーのアイコンのイメージをtoggleに合わせ交互に変更する方法。 (Font Awsomeアイコンを使う場合)
$(".switch").click(function(){
$(this).next().slideToggle();
$("span",this).toggleClass("fa-mimus-square");
$("span",this).toggleClass("fa-plus-square");
})
@dogrunjp
dogrunjp / ipythonnotebook_matplotlib_ja.md
Last active May 5, 2018 05:57
ipython notebookのmatplotlibで日本語を利用するには

ipython notebookのmatplotlibで日本語を表示するには

データの計算過程と計算結果をそのまま残して保存できるipython notebookは、集計・分析のプロセスをオープンに共有したいような用途には最適なツールです。Anaconda3系でインストールしたipython notebookはPython3.xなため、コードの中で日本語も利用できます。政府の統計データなどは、カラムの値からインデックスまで日本語だらけになるので、そちらの向きのデータを集計するのならPython3系のipythonを利用しない理由はない!ということになります。

ただし、Python3自体はデフォルトでunicodeに対応していて日本語の記述が可能なのですが、matplotlibを使ってチャートをレンダリングする場合は日本語フォントを明示的に指定する必用があります。(指定しないと日本語が豆腐に置き換わります)

matplotlibの日本語対応は複雑なものではないのですが、参考となる資料があまりまだ無いようなので、自分の設定をメモしておきます。

Python3系のconfiguration

まず、前提としてconfigファイルを置く必用があるとのことで、pyenv localでanaconda3を指定したディレクトリに以下のファイルを設定します。

@dogrunjp
dogrunjp / Virtuoso_Mac_tips.md
Last active January 7, 2018 04:32
MacでVirtuosoを利用するための諸々。

MacでVirtuoso TIPS

起動

$ cd /usr/local/virtuoso-opensource/var/lib/virtuoso/db

$ sudo /usr/local/virtuoso-opensource/bin/virtuoso-t -f &

これで起動しない時は

@dogrunjp
dogrunjp / new_gist_file.py
Created February 21, 2015 15:11
csvをjsonに変換するごく簡単なPythonのスクリプト。簡単だけど変換の作業がある度に調べる気がするのでメモ。
import csv
import json
csvfile = open('sourcefile.csv', 'r')
jsonfile = open('result.json', 'w')
fieldnames = ("x","y","judge","flag")
reader = csv.DictReader(csvfile, fieldnames)
for row in reader:
json.dump(row, jsonfile)
jsonfile.write(',\n')
@dogrunjp
dogrunjp / update_hicharts
Created March 26, 2014 06:23
Highchartsのデータをアップデートする方法はdestroy()〜とredraw()の2種類ある。destroy()して再描画した方が若干速いらしい。いずれもD3.jsのアップデートよりわかりやすい。(普通にjQueryなので…) ※マルチデータなline chartの例
##destro()〜なアップデート
#chart = new Highcharts.Chart(options)がすでに描画されているケースでは
$.getJSON('hoge.json',function(data){
chart.destroy()
options.xAxis = data[1];
options.series = data[0]['datas'];
chart = new Highcharts.Chart(options);
});
##redraw()を利用したアップデート