Pythonがサクサク書ける!emacsにjediをインストールする。

今日は、素晴らしい完成度のemacs24にjediをインストール方法を紹介したいと思います。
emacsでここまでpythonがサクサク書けるようになるとは思わなかった。

参考にさせてもらったのは下記サイト
emacs-jediのinstall - Qiita

下準備

  • virtualenvをインストールしておきます。

$ pip install virtualenv

package.elからjediをインストール

まずは、package.elにmelpaを追加してjediをインストールできるようにします。

;===============
; package.elの設定
;===============
(require 'package)
(add-to-list 'package-archives '("melpa" . "http://melpa.milkbox.net/packages/") t)
(package-initialize)

あとは、「M-x list-packages」からjediをインストールします。

jediの初期設定

virtualenv上にepcとjediパッケージをインストールします。
まずは.emacs.dの下にダウンロードされたjediのディレクトリに移動し、virtualenvを作成します。
自分がインストールしたのは「jedi-20130714.1228」

$ cd .emacs.d/elpa/jedi-20130714.1228
$ virtualenv env
...

つぎに、virtualenvの環境にjediとepcパッケージをインストールします。
virtualenv上にインストールすると env/lib/python2.7/site-packages にインストールされるのでシステムに影響しません。

$ source env/bin/activate
$ pip install jedi epc

jediをinit.elに設定

~/.emacs.d/init.elに以下のように書きましょう。

;===============
; jedi (package.elの設定より下に書く)
;===============
(require 'epc)
(require 'auto-complete-config)
(require 'python)

;;;;; PYTHONPATH上のソースコードがauto-completeの補完対象になる ;;;;;
(setenv "PYTHONPATH" "/usr/local/lib/python2.7/site-packages")
(require 'jedi)
(add-hook 'python-mode-hook 'jedi:setup)
(setq jedi:complete-on-dot t)

以上で設定完了です。
とにかく補完の早さが素晴らしい。iPython感覚でサクサク補完、サクサクコーディング出来ます。

それでは、素晴らしいjedi lifeを!

初めてのPython 第3版

初めてのPython 第3版

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

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

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック

Dartの環境をそろえよう

覚書。すこしずつ勉強しましょう。

エディタ

  • Dart公式 (DartEditor)

https://www.dartlang.org/
https://www.dartlang.org/

https://www.dartlang.org/tools/eclipse-plugin/
https://www.dartlang.org/tools/eclipse-plugin/

https://github.com/nex3/dart-mode
https://github.com/nex3/dart-mode

入門サイト

  • Dart公式 Turtorial

https://www.dartlang.org/docs/tutorials/
https://www.dartlang.org/

http://www.atmarkit.co.jp/ait/articles/1208/29/news120.html
http://www.atmarkit.co.jp/ait/articles/1208/29/news120.html

  • Dart: Up and Running

Dart: Up and Running: A New, Tool-Friendly Language for Structured Web Apps

Dart: Up and Running: A New, Tool-Friendly Language for Structured Web Apps

これはキレイ!Pythonでインデント付き出力

きっとPythonならあるだろう!
そう思ってjsonやらxmlをインデント付きで出力する方法をしらべました。

8.18. pprint — Data pretty printer
8.18. pprint — Data pretty printer — Python 2.7.16 documentation

import pprint

xml = "..."

pp=pprint.PrettyPrinter(indent=4)
pp.pprint(xml)

無骨なJavaとは違いますね。
幸せな気分になれます。

Pythonのリストとスライス覚書

久々ですね。。。
いつもJavaばかりなので
スライスをすぐに忘れてしまいます。
というわけで覚書

list =["0","1","2","3","4"]

list[0] #'0'
list[4] #'4'
list[1:2] #['1']
list[1:-1] #['1', '2', '3']
list[1:] #['1', '2', '3', '4']
list[:2] #['0', '1']
list[:] #['0', '1', '2', '3', '4']

入門ソーシャルデータはじめました 1章イントロダクション

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック

入門 ソーシャルデータ ―データマイニング、分析、可視化のテクニック

まだ1章なので、突っ込んだ内容はありません。
Twitter APIの使い方とか、データの扱い方
データを加工するPythonモジュールの使い方を紹介がメインです。
とりあえず、本に書いてあるとおり、ソースコードを書いているんですが
困ったことに動かないソースがおおい。。

下準備は以下のとおり。
Ubuntuだと楽ちんですね。)

sudo apt-get install python-networkx python-nltk python-numpy

○例1-3
こんな序盤で動かなくなるとは。。
TwitterのトレンドAPIの呼び出し方が変わったらしい
http://holidayworking.org/memo/2011/11/21/2/に正解が書いてありました

import twitter
twitter_api = twitter.Twitter(domain='api.twitter.com', api_version=1)
trends = twitter_api.trends._woeid(_woeid=1)
[ trend['name'] for trend in trends[0]['trends'] ]

○例1-11
こちらは、typoとnx.DiGraphの仕様変更?

import networkx as ns
import re

g = nx.DiGraph()
all_tweets = [ tweet for page in search_results for tweet in page["results"]]

def get_rt_sources(tweet):
    rt_patterns = re.compile(r"(RT|via)((?:\b\W*@\w+)+)", re.IGNORECASE)
    return [source.strip()
            for tuple in rt_patterns.findall(tweet)
            for source in tuple
            if source not in ("RT","via")]

for tweet in all_tweets:
    rt_sources = get_rt_sources(tweet["text"])
    if not rt_sources: continue
    for rt_source in rt_sources:
        g.add_edge(rt_source, tweet["from_user"], {"tweet_id" : tweet["id"]}) #)}ではなく})

g.number_of_nodes()
g.number_of_edges()
g.edges(data=True)[0]
len(nx.connected_components(g.to_undirected()))
sorted(nx.degree(g).values()) #values()をつけないと本のような出力にならない