1. 程式人生 > 實用技巧 >《利用Python進行資料分析》 —— (1)

《利用Python進行資料分析》 —— (1)

《利用Python進行資料分析》 —— (1)

Python的學習需要自主探索各種型別,函式和方法的文件。

2.1 Python直譯器

在IPython(Jupyter Qtconsole)上,可以通過%run命令執行檔案中的程式碼

In [16]: %run hellow.py 1,2,3 10
1,2,3
10

2.2 IPython 基礎

2.2.3 Tab補全

  1. 在搜尋互動名稱空間和補全物件或模組屬性時有用
  2. 當輸入任意路徑時,按下Tab可以補全你的計算機檔案系統中匹配你輸入內容的值。(與%run命令搭配可以大大提升效率
  3. tab補全的另一個應用場景是在函式的關鍵詞引數(包含=)

2.2.4 內省

在變數前後使用問號?,可以顯示物件的資訊:

In [17]: b = [1, 2, 3]

In [18]: b?
Type:        list
String form: [1, 2, 3]
Length:      3
Docstring:  
Built-in mutable sequence.

If no argument is given, the constructor creates a new empty list.
The argument must be an iterable if specified.

如果物件是一個函式或例項方法且文件字串已經寫好,則文件字串會顯示出來。

In [19]: def f(x):
    """
    this is a function
    """
    return x + 1

In [20]: f?
Signature: f(x)
Docstring: this is a function
File:      d:\python_data\<ipython-input-19-c86e88907f7c>
Type:      function

??可以顯示原始碼

In [23]: f??
Signature: f(x)
Source:   
def f(x):
    """
    this is a function
    """
    return x + 1
File:      d:\python_data\<ipython-input-19-c86e88907f7c>
Type:      function

?還有一個用途,就是像Unix或Windows命令列一樣搜尋IPython的名稱空間。字元與萬用字元結合可以匹配所有的名字。

In [22]: np.fi*?
np.fill_diagonal
np.find_common_type
np.finfo
np.fix

2.2.5 %run命令

檔案中所有定義的變數(import、函式和全 局變數,除非丟擲異常)在執行後,都可以在IPython shell中隨後訪問:

假如Python指令碼需要命令列提供引數(通過sys.argv獲取),則需要在命令的檔案路徑後面加上引數進行傳遞。

import sys
fi = sys.argv[1]
se = sys.argv[2]

print(fi)
print(se)
"""
%run file.py [a1, a2, .., an] [b1, b2, .., bn]
"""

如果要在 Jupyter 中你想要將指令碼匯入一個程式碼單元,可以使用%load魔術函式。

通過Ctrl + C結束執行。

2.27 終端快捷鍵

  • Ctrl-P 或上箭頭鍵 後向搜尋命令歷史中以當前輸入的文字開頭的命令
  • Ctrl-N 或下箭頭鍵 前向搜尋命令歷史中以當前輸入的文字開頭的命令
  • Ctrl-R 按行讀取的反向歷史搜尋(部分匹配)
  • Ctrl-Shift-v 從剪貼簿貼上文字
  • Ctrl-C 中止當前正在執行的程式碼
  • Ctrl-A 將游標移動到行首
  • Ctrl-E 將游標移動到行尾
  • Ctrl-K 刪除從游標開始至行尾的文字
  • Ctrl-U 清除當前行的所有文字譯註12
  • Ctrl-F 將游標向前移動一個字元
  • Ctrl-b 將游標向後移動一個字元
  • Ctrl-L 清屏

2.2.8 魔術命令

%magic展示

2.2.9 matplotlib整合

  • 在IPython 中,%matplotlib
  • 在Jupyter notebook 中, %matplotlib inline

2.3 Python語言基礎

2.3.1.8 鴨子型別

有時候你不關心某個物件是什麼型別,你只關心它是否擁有某個特殊的方法或行為

例如你想驗證一個物件是否實現了迭代器協議,那麼它必須可以迭代。

def isiterable(obj):
	try:
		iter(obj)
		return True
	except TypeError: # 不可遍歷
		return False

通常在編寫接受多種型別輸入的函式時,可以使用這些功能。

eg:要接受任意序列型別(列表,元組,n維陣列),你可以先判斷是否為一個列表(或者為Numpy陣列)否則將其轉化為列表:

if not isinstance(x, list) and isiterable(x):
	x = list(x)

2.3.1.10二元操作符

In [9]: a = [1, 2, 3]

In [10]: b = a

In [11]: c = list(a)

In [12]: a is b
Out[12]: True

In [13]: a is not c
Out[13]: True

值得注意的是list函式總是建立一個新的Python列表(即一份拷貝)。

is==是不同的,c is a為False,c == a為True。

還值得注意的是//整除符號。如果需要風格的整除除法(去除非整數部分的小數部分),則可以用整除操作符

2.3.2.2 字串

字串是不可以修改的!!

在遇到有大量反斜槓字串時可以通過新增r"XXX"表明該字串為原生字元。

字串格式化,字串擁有一個format方法。

例如:In [64]: template = '{0 : .2f} {1 : s}, are worth US${2 : d}'。在這字串中

  • {0 : .2f} 表示格式化第一個引數為帶有兩位小數的浮點數。

  • {1 : s} 表示格式化第二個引數為字串。

  • {2 : d} 表示格式化第三個引數為一個整數。

2.3.2.7 日期與時間

熟練掌握兩個方法:

  • 第一個strftime將datatime型別轉為字串:

  • In [102]: from datetime import datetime, date, time
    In [103]: dt = datetime(2011, 10, 29, 20, 30, 21)
        ...
    In [108]: dt.strftime('%m/%d/%Y %H:%M')
    Out[108]: '10/29/2011 20:30'
    
  • strptime 可以將字串轉換成 datetime 物件:

  • In [109]: datetime.strptime('20091031', '%Y%m%d')
    Out[109]: datetime.datetime(2009, 10, 31, 0, 0)
    

2.3.3.6 三元表示式

語法如下:

value = 'true-expr' if condition else 'false-expr'