顯示具有 python 標籤的文章。 顯示所有文章
顯示具有 python 標籤的文章。 顯示所有文章

2014/5/16

在 PTVS 底下使用 IPython

PTVS 指的就是微軟 Visual Studio 底下的Python開發環境,只是微軟喜歡再搞個簡寫,證明他們為了這個東西有弄出一個專案;

而IPython是Python底下一個很出的 IDE ,後來上網查原來 REPL 是有特殊意義在的 ,維基的說明如下

「讀取-求值-輸出」循環(英語:Read-Eval-Print Loop,簡稱REPL)是一個簡單的,互動式的編程環境。這個詞常常用於指代一個Lisp的互動式開發環境,但也能指代命令行的模式和例如 APL, BASIC, Clojure, F#, Haskell, J, Julia, Perl, PHP, Prolog, Python, R, Ruby,Scala, Smalltalk, Standard ML, Tcl, Javascript 這樣的程式語言所擁有的類似的編程環境。這也被稱做互動式頂層構件(interactive toplevel)

而在 PTVS 使用 IPython 其實也蠻簡單的,只要看底下這篇文章就可以

Using the IPython REPL with PTVS

但我還是將個人心得說明如下

在 Visual Studio 2013 中,你可以裝好幾個 Python 的編譯器,例如像我就裝了:

image

其實我不是要展現我個人任重道遠,而是常常會發生一些奇怪的狀況最終就變成了這種情形;

我來說一下我目前主要的心得,我不知道微軟用了什麼機制去區分 Python 32 bit 與 64 bit版本,因為就我個人的狀況是2套都有裝,而在套件上,有些套件是 32bit 有些又是64bit ,所以如果你是用32 bit的Python 但是配上 64 bit的套件光是在 import 階段就會出現問題….

但是好在 Visual Studio 可以隨時切換你要的編譯器,因為我把 IPython 要安裝的套件下載成 64bit 但是安裝在 32 bit 的Python 資料夾中,但是只要我選擇 64 bit 的Python 編譯器就不會出現問題….

另外在 Using the IPython REPL with PTVS 的連結中,有建議直接下載 SicPy 編譯好的 exe 套件,就直接依他的指令下載回來安裝吧;因為Python的套件,很多都有相依性,就好像你要去參加婚禮一樣,要穿的服裝都要照一件的規定來….而這種編譯好的套件,就好像直接像禮服公司拿衣服,減少了很多相依性上的麻煩

最終安裝好了,再記得到 Visual Studio 中將互動介面改為 Ipython這樣子就比原先純文字型的互動模式更加棒了

另外這個套件中,有提供在互動介面中就直接輸出圖形的能力

image

我覺得這真的是很棒的功能

可以多試試看,畢竟 Python 在科學運算上因為資料結構可以實作很多在 R 中不容易實現的功能,可以多加利用一下

另外 IPython 另一個重要的功能就是可以轉成網頁編寫 Python 的平台(即為:IPython Notebook),我只能說因為少了微軟的加持再加上還有眾多網路系統設定要調整,我決定等到以後買了 Mac 與工作中確實有此需求才會進行實作…

Python 的 BeautifulSoup4 在Visual Studio 2013異常處理方式??

先說結論:

不要理它,但是要確實的告訴 visulal studio 2013 不要理它

如下,在例外狀況將 python 的選項給取消…

image

 

 

開始說故事時間囉:

在資料蒐集階段中,我們常會借助 Python 來進行網頁資料系統性的取得

因為 Python 有提供蠻多這類相關的套件

只要在google 上面打入 “web scraping” python 等相關字樣就會出現很多的結果;BeautifulSoup 算是其中蠻出名的一套,雖然後續有後起之秀

不過這套最大的好處是容易安裝,我有測試過另外一套,因為相依的套件太多了,所以一直無法安裝成功,但這一套就簡單多了

我想為了後續 open source 體系的編程學程之路,6月後就會開始進行新一輪的mac book 物色了… 因為很多 open source 的東西都是基於 linux 系統,移植到windows的時候總是會漏東漏西的,否則就是相依性的問題一直搞不太起來

像是 BeautifulSoup 我在Visual Studio 2013的環境中執行程式碼時就會一直報錯,後來是找到這一篇

Can't import bs4

image

嗯,說穿了就是一個一直解不掉的Bug … 因為其他的套件就不會有這樣的情形….

好吧,至少這個狀況是能被處理的

在此做個紀錄

另外其實還在微軟體系下的朋友,visual studio 2013提供的程式環境是真的還不錯用…可以到 http://pytools.codeplex.com/ 下載最新版本進行安裝

它提供了不同版號的 visaul studio 的安裝檔

2014/4/27

Python對dictionary資料結構進行排序

在Python 中可以針對 dict 資料結構進行排序,最簡單的做法是使用 lambda

因為在 VBA 中沒有這種類似的用法,所以特別紀錄如下

在 sorted 函數中,key = 你要排序的欄位

如果用 t:t[0] 這樣的表示法表示是針對 dict 中的key 進行排序

如果用 t:t[1] 這樣的表示法表示是針對 dict 中的value 進行排序

這似乎是 lambda 最為常見的使用方式…

而為什麼要這樣做呢? 其實最重要的原因是偷懶…因為其實也可以另外寫成函數另外呼叫,不過如果是排序這種這樣直覺的東西都還要另外寫個函數,實在是太麻煩了…

資料來源參考:http://stackoverflow.com/questions/9001509/python-dictionary-sort-by-key

This question has already been answered, but because it's popular on Google, here's what Python's documentation uses:

>>> from collections import OrderedDict

>>> # regular unsorted dictionary
>>> d = {'
banana': 3, 'apple':4, 'pear': 1, 'orange': 2}

>>> # dictionary sorted by key -- OrderedDict(sorted(d.items()) also works
>>> OrderedDict(sorted(d.items(), key=lambda t: t[0]))
OrderedDict([('
apple', 4), ('banana', 3), ('orange', 2), ('pear', 1)])

>>> # dictionary sorted by value
>>> OrderedDict(sorted(d.items(), key=lambda t: t[1]))
OrderedDict([('
pear', 1), ('orange', 2), ('banana', 3), ('apple', 4)])

>>> # dictionary sorted by length of the key string
>>> OrderedDict(sorted(d.items(), key=lambda t: len(t[0])))
OrderedDict([('
pear', 1), ('apple', 4), ('orange', 2), ('banana', 3)])


2014/4/26

Python Dictionary 資料結構中文輸出解決方式

 

為了整理目前 python 在資料科學上學習的進度,自擬了一個輸入資料如下

以 Dict 的資料結構進行輸入

 
people_point = {"A": {"核四興建": 1 , "反服貿":9 , "破音歌神":  2  ,  "石虎保育": 10  },
         "B":  {"核四興建":2 ,  "反服貿":8   ,  "石虎保育":  10 },
         "C":  {"核四興建": 10 ,  "反服貿": 1 , "破音歌神":  9  ,  "石虎保育":1   },
         "D": {"核四興建": 9   , "破音歌神":  4  ,  "石虎保育": 2  },
         "E": {"核四興建": 5    , "破音歌神":  5  ,  "石虎保育":5   },
         "F": {"核四興建":9 ,    "破音歌神": 4   ,  "石虎保育":  1 }
             }

然後在輸出時遇上了問題:

{'A': {'\xa4\xcf\xaaA\xb6T': 9, '\xa5\xdb\xaa\xea\xabO\xa8|': 10, '\xaf}\xad\xb5\xbaq\xaf\xab': 2, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 1}, 'C': {'\xa4\xcf\xaaA\xb6T': 1, '\xa5\xdb\xaa\xea\xabO\xa8|': 1, '\xaf}\xad\xb5\xbaq\xaf\xab': 9, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 10}, 'B': {'\xa4\xcf\xaaA\xb6T': 8, '\xa5\xdb\xaa\xea\xabO\xa8|': 10, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 2}, 'E': {'\xa5\xdb\xaa\xea\xabO\xa8|': 5, '\xaf}\xad\xb5\xbaq\xaf\xab': 5, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 5}, 'D': {'\xa5\xdb\xaa\xea\xabO\xa8|': 2, '\xaf}\xad\xb5\xbaq\xaf\xab': 4, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 9}, 'F': {'\xa5\xdb\xaa\xea\xabO\xa8|': 1, '\xaf}\xad\xb5\xbaq\xaf\xab': 4, '\xae\xd6\xa5|\xbf\xb3\xab\xd8': 9}}

一開始上網查詢,確定是編碼的問題

但無論我如何將 dict 轉換成 str 格式就是無法轉成 unicode 格式

我想這可能是 dict 資料格式先天上的限制,我是使用 Python 2.7 的版本

後來查詢到解決方法如下:

在程式的最前頭加上 import json

在輸出時用這樣的語法輸出

print json.dumps(people_point["A"], encoding="utf-8", ensure_ascii=False) #指定

print json.dumps(people_point, encoding="utf-8", ensure_ascii=False) # 輸出整個 dict

則結果如下:

輸出結果1:

{"反服貿": 9, "石虎保育": 10, "破音歌神": 2, "核四興建": 1}

輸出結果2:

{"A": {"反服貿": 9, "石虎保育": 10, "破音歌神": 2, "核四興建": 1}, "C": {"反服貿": 1, "石虎保育": 1, "破音歌神": 9, "核四興建": 10}, "B": {"反服貿": 8, "石虎保育": 10, "核四興建": 2}, "E": {"石虎保育": 5, "破音歌神": 5, "核四興建": 5}, "D": {"石虎保育": 2, "破音歌神": 4, "核四興建": 9}, "F": {"石虎保育": 1, "破音歌神": 4, "核四興建": 9}}

嗯… 看得到中文,還是比較親切的 

==備註==

我在 Python IDEL 輸出是正常

image

在 Visual Studio 2013 的Console輸出視窗中,卻一樣會有亂碼

image

但是在 Visual Studio 2013 裡的 IronPython 2.7 Interactive 中執行的結果也是正常

image

嗯 … 一定是 Visual Studio 2013 那邊的設定沒有調整好… 不過我想這不是資料科學分析的重點,就不深入研究了

題外話:如果是一般字串與物件間的轉換,就不需要這樣麻煩