忍者ブログ
Yaleで、遊んで学ぶ日々。

Yaleで、遊んで学ぶ日々。

囲碁、ときどきプログラミング、ところにより経済。
[1]  [2]  [3]  [4
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

import os
import time
import urlparse
import datetime
import csv
import urllib2
import urllib
import BeautifulSoup
import re


# 0 ベクトル, リストの繰り返し #
[0] * 10
['a', 'b', 'c'] * 3



# ディレクトリの中身一覧 #
os.listdir("Desktop") 


# パスから拡張子を分割(返り値は長さ2のリスト)#
os.path.splitext("Desktop/folder/subfolder/file.txt")


# パスからファイル名だけを抜き出し #
os.path.basename("Desktop/folder/subfolder/file.txt")


# パスの結合 #
os.path.join("Desktop", "folder/file.pdf")


# URLの結合 #
urlparse.urljoin("http://jiy.blog.shinobi.jp/", "Entry/274/")


# しばらく止める(単位は秒)#
time.sleep(5)



# 文字列の頭とお尻のスペースを消す #
'  abc def g '.strip()
'  abc def g '.lstrip()
'  abc def g '.rstrip()



# 現在の時間 #
# そのまま文字列として使おうとするとエラーが起こることがあるので、strtime関数で文字列にする。
import datetime
tm = datetime.datetime.today()
tm
tm.strftime('%Y-%m-%d_%H-%M-%S') 



# リスト内で、特定の値に等しい要素番号の最小値 #
['A', 'B', 'B', 'C'].index('B')


# 辞書(dictionary)のkeyの一覧 #
d = { "name":"tarou" , "address":"tokyo", "age":30, "hobby":["igo", "chess", "shogi"] }
d.keys()



# 集合演算 #
# list() でリストに変換できる。
set(range(5)) & set(range(3))
set(['a', 'b']) | set(['a', 'c', 'd'])
set(range(4)) - set([2])


# リスト内の重複を取り除く #
# 一度集合にしてからリストにすれば良い。ただし順番は狂う。
x = ['a', 'b', 'c', 'b', 'c']
list(set(x))


# リストをCSVに保存 #
x = [ ["x", "y", "z"], [10, 5, 3], [1, "XYZ", 3], ["5", 1, "ABC"] ]
with open("test.csv", 'wb') as f:
    ff = csv.writer(f)
    
    for row in x:
        ff.writerow(row)


# 辞書をCSVに保存 #
# データは辞書のリスト
data = [ {"name":"ichiro", "age":20} , {"name":"tarou", "age":15} ,{"name":"takuro", "age":30} ]
head = ("name", "age")
with open("test.csv", 'wb') as f:
    ff = csv.DictWriter(f, head)
    
    for row in data:
        ff.writerow(row)

# ヘッダー行を入れるためのテクニック
data = [ {"name":"ichiro", "age":20} , {"name":"tarou", "age":15} ,{"name":"takuro", "age":30} ]
head = ("name", "age")
with open("test.csv", 'wb') as f:
    ff = csv.DictWriter(f, head)
    
    # ここ
    row = dict( (n, n) for n in head )
    ff.writerow(row)
 
    for row in data:
        ff.writerow(row)


# web pageのソースを取得 #
urllib2.urlopen("http://jiy.blog.shinobi.jp/Entry/274/").read()



# ファイルをダウンロード
urllib.urlretrieve(""http://bfile.shinobi.jp/admin/img/blogheader_logo.png"", "file.png")



# HTML ソースの処理(web scraping) #
src = urllib2.urlopen("http://jiy.blog.shinobi.jp/").read()
soup = BeautifulSoup.BeautifulSoup(src)

# タグとそのオプションを指定して検索
divs = soup("div", {"class":"EntryTitle"})
divs[0]

# タグを除去
ttl = str(divs[2])
re.sub("<[^<>]*>", "", ttl)

# タグのオプションの値を検索
imgs = soup("img")
imgs[2].get("src")



PR
Rのtable() 関数のようなこと、つまりベクトルの値の頻度分布を計算する、というのをPythonでやるには、nltkパッケージを使えばよい。標準パッケージに入っていないと思うので、python-nltkをインストールする(UbuntuならSynaptic Package Managerから可能)。

簡単な使い方

import nltk
x = ['a', 'b', 'b', 'c']
a = nltk.FreqDist(x)
dict(a)
a.max()


ちなみに、FreqDist は関数ではなくてクラスなので、a = nltk.FreqDist(x) という部分はインスタンスを生成している・・・のかな。


Rでベクトルの一部を取り出したい時には、要素番号を整数か論理値のベクトルで与える。

x <- c("A", "B", "C", "D", "E", "F")
x[ c(1, 5) ]
x[ c(F, F, T, F, T, T) ]

[1] "A" "E"
[1] "C" "E" "F"


 
だから、例えば2つおきとか3つおきとかで要素を取得したい場合は、そういうインデックスを作って代入すれば良い。例えば、第2要素から始まって3つおきに要素を抜き出すには、[2, 5] というベクトルを作って代入するか、[F, T, F, F, T, F] というベクトルを作って代入する。

x <- c("A", "B", "C", "D", "E", "F")
x[ seq(2, length(x), by=3) ]
x[ (1:length(x) %% 3) == 2 ]
 
[1] "B" "E"
[1] "B" "E"
 


pythonで同じ事をやろうとするとエラーが出る。リストはインデックスとして受け付けられない。

x = ["A", "B", "C", "D", "E", "F"]
x[ [2, 5] ]
x[ [False, False, True, False, True, True] ] 

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: list indices must be integers, not list




ただし、先ほどののように固定要素ごとに抜き出したいのなら、サブスクリプティングという方法でできる。x[i::k] という形で、iがスタート地点、kが間隔。

x = ["A", "B", "C", "D", "E", "F"]
x[1::3]
x[0::2]

['B', 'E']
['A', 'C', 'E']
 

pythonで画像ファイルを処理する方法。PyPNGというモジュールが良さそう。ダウンロードはこちらから。情報はここへ。


ファイル(最新バージョンでいいと思う)をダウンロードしたら、解凍して、端末上でそのディレクトリへいき、

python setup.py install

でインストール完了。管理者権限云々でエラーが出たら、sudoをつける。インストールはあれってくらいすぐ終わる。詳しくはREADMEファイルを参照。



** ファイルの読みこみ方 **
pythonを起動して、

import png
x = png.Reader("file.png").read()

で画像を読み込める。色の情報はxの3つめの要素に入っている。たとえば、

y = list(x[2])

とすると、各ピクセルのRGB情報の記載された配列がyに格納される。



pythonで、

unichr(): unicode番号を文字に変換する
ord()    :  文字列をunicode番号に変換する

ただし、ordに全角文字を当てる時には、u'あ' というようにunicodeにすることが肝要。

>>> ord(u'あ')
12354
>>> unichr(12354)
u'\u3042'
>>> print unichr(12354)



最後のprintでascii云々のエラーが出る場合は、こちらを参照。

 
Calender
03 2024/04 05
S M T W T F S
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Search in This Blog
Latest Comments
[03/30 川内のばば山田]
[03/30 川内のばば山田]
[08/06 Aterarie]
[07/05 Agazoger]
[07/01 Thomaskina]
Oldest Posts
Latest Trackbacks
フリーエリア

Barcode
Access Analysis
Powerd by NINJAブログ / Designed by SUSH
Copyright © Yaleで、遊んで学ぶ日々。 All Rights Reserved.
忍者ブログ [PR]