一,Python 語言特點(diǎn)
Python 語言最大的優(yōu)點(diǎn)是簡潔,它雖然是 C 語言寫的,但是摒棄了 C 語言的指針,這就讓代碼非常簡潔明了。
當(dāng)然除了 Python 自身的特點(diǎn),Python 還有強(qiáng)大的開發(fā)者工具。在數(shù)據(jù)科學(xué)領(lǐng)域,Python 有許多非常著名的工具庫:比如科學(xué)計算工具 NumPy 和 Pandas 庫,深度學(xué)習(xí)工具 Keras 和 TensorFlow,以及機(jī)器學(xué)習(xí)工具 Scikit-learn,使用率都非常高。
二, Python 基礎(chǔ)語法
環(huán)境配置好后,我們就來快速學(xué)習(xí)幾個 Python 必會的基礎(chǔ)語法。我假設(shè)你是 Python 零基礎(chǔ),但已經(jīng)有一些其他編程語言的基礎(chǔ)。下面我們一一來看。
輸入與輸出
1
name = raw_input("What's your name?")
2
sum = 100+100
3
print ('hello,%s' %name)
4
print ('sum = %d' %sum)
復(fù)制代碼
raw_input 是 Python2.7 的輸入函數(shù),在 python3.x 里可以直接使用 input,賦值給變量 name,print 是輸出函數(shù),%name 代表變量的數(shù)值,因?yàn)槭亲址愋?,所以在前面用?%s 作為代替。
這是運(yùn)行結(jié)果:
1
What's your name?cy
2
hello,cy
3
sum = 200
復(fù)制代碼
判斷語句:if … else …
1
if score>= 90:
2
? ? ? print 'Excellent'
3
else:
4
? ? ? if score < 60:
5
? ? ? ? ? print 'Fail'
6
? ? ? else:
7
? ? ? ? ? print 'Good Job'
復(fù)制代碼
if … else … 是經(jīng)典的判斷語句,需要注意的是在 if expression 后面有個冒號,同樣在 else 后面也存在冒號。
另外需要注意的是,Python 不像其他語言一樣使用{}或者 begin…end 來分隔代碼塊,而是采用代碼縮進(jìn)和冒號的方式來區(qū)分代碼之間的層次關(guān)系。所以代碼縮進(jìn)在 Python 中是一種語法,如果代碼縮進(jìn)不統(tǒng)一,比如有的是 tab 有的是空格,會怎樣呢?會產(chǎn)生錯誤或者異常。相同層次的代碼一定要采用相同層次的縮進(jìn)。
循環(huán)語句:for … in
1
sum = 0
2
for number in range(11):
3
? ? sum = sum + number
4
print sum
復(fù)制代碼
運(yùn)行結(jié)果:
1
55
復(fù)制代碼
for 循環(huán)是一種迭代循環(huán)機(jī)制,迭代即重復(fù)相同的邏輯操作。如果規(guī)定循環(huán)的次數(shù),我們可以使用 range 函數(shù),它在 for 循環(huán)中比較常用。range(11) 代表從 0 到 10,不包括 11,也相當(dāng)于 range(0,11),range 里面還可以增加步長,比如 range(1,11,2) 代表的是 [1,3,5,7,9]。
循環(huán)語句: while
1
sum = 0
2
number = 1
3
while number < 11:
4
? ? ? sum = sum + number
5
? ? ? number = number + 1
6
print sum
復(fù)制代碼
運(yùn)行結(jié)果:
1
55
復(fù)制代碼
1 到 10 的求和也可以用 while 循環(huán)來寫,這里 while 控制了循環(huán)的次數(shù)。while 循環(huán)是條件循環(huán),在 while 循環(huán)中對于變量的計算方式更加靈活。因此 while 循環(huán)適合循環(huán)次數(shù)不確定的循環(huán),而 for 循環(huán)的條件相對確定,適合固定次數(shù)的循環(huán)。
數(shù)據(jù)類型:列表、元組、字典、集合
列表:[]
1
lists = ['a','b','c']
2
lists.append('d')
3
print lists
4
print len(lists)
5
lists.insert(0,'mm')
6
lists.pop()
7
print lists
復(fù)制代碼
運(yùn)行結(jié)果:
1
['a', 'b', 'c', 'd']
2
4
3
['mm', 'a', 'b', 'c']
復(fù)制代碼
列表是 Python 中常用的數(shù)據(jù)結(jié)構(gòu),相當(dāng)于數(shù)組,具有增刪改查的功能,我們可以使用 len() 函數(shù)獲得 lists 中元素的個數(shù);使用 append() 在尾部添加元素,使用 insert() 在列表中插入元素,使用 pop() 刪除尾部的元素。
元組 (tuple)
1
tuples = ('tupleA','tupleB')
2
print tuples[0]
復(fù)制代碼
運(yùn)行結(jié)果:
1
tupleA
復(fù)制代碼
元組 tuple 和 list 非常類似,但是 tuple 一旦初始化就不能修改。因?yàn)椴荒苄薷乃詻]有 append(), insert() 這樣的方法,可以像訪問數(shù)組一樣進(jìn)行訪問,比如 tuples[0],但不能賦值。
字典 {dictionary}
1
# -*- coding: utf-8 -*
2
# 定義一個 dictionary
3
score = {'guanyu':95,'zhangfei':96}
4
# 添加一個元素
5
score['zhaoyun'] = 98
6
print score
7
# 刪除一個元素
8
score.pop('zhangfei')
9
# 查看 key 是否存在
10
print 'guanyu' in score
11
# 查看一個 key 對應(yīng)的值
12
print score.get('guanyu')
13
print score.get('yase',99)
復(fù)制代碼
運(yùn)行結(jié)果:
1
{'guanyu': 95, 'zhaoyun': 98, 'zhangfei': 96}
2
True
3
95
4
99
復(fù)制代碼
字典其實(shí)就是{key, value},多次對同一個 key 放入 value,后面的值會把前面的值沖掉,同樣字典也有增刪改查。增加字典的元素相當(dāng)于賦值,比如 score[‘zhaoyun’] = 98,刪除一個元素使用 pop,查詢使用 get,如果查詢的值不存在,我們也可以給一個默認(rèn)值,比如 score.get(‘yase’,99)。
集合:set
1
s = set(['a', 'b', 'c'])
2
s.add('d')
3
s.remove('b')
4
print s
5
print 'c' in s
復(fù)制代碼
運(yùn)行結(jié)果:
1
set(['a', 'c', 'd'])
2
True
復(fù)制代碼
集合 set 和字典 dictory 類似,不過它只是 key 的集合,不存儲 value。同樣可以增刪查,增加使用 add,刪除使用 remove,查詢看某個元素是否在這個集合里,使用 in。
注釋:#
注釋在 python 中使用 #,如果注釋中有中文,一般會在代碼前添加 # -- coding: utf-8 -。
如果是多行注釋,使用三個單引號,或者三個雙引號,比如:
1
# -*- coding: utf-8 -*
2
'''
3
這是多行注釋,用三個單引號
4
這是多行注釋,用三個單引號
5
這是多行注釋,用三個單引號
6
'''
復(fù)制代碼
引用模塊 / 包:import
1
# 導(dǎo)入一個模塊
2
import model_name
3
# 導(dǎo)入多個模塊
4
import module_name1,module_name2
5
# 導(dǎo)入包中指定模塊
6
from package_name import moudule_name
7
# 導(dǎo)入包中所有模塊
8
from package_name import *
復(fù)制代碼
Python 語言中 import 的使用很簡單,直接使用 import module_name 語句導(dǎo)入即可。這里 import 的本質(zhì)是什么呢?import 的本質(zhì)是路徑搜索。import 引用可以是模塊 module,或者包 package。
針對 module,實(shí)際上是引用一個.py 文件。而針對 package,可以采用 from … import …的方式,這里實(shí)際上是從一個目錄中引用模塊,這時目錄結(jié)構(gòu)中必須帶有一個 __init__.py 文件。
函數(shù):def
1
def addone(score):
2
? return score + 1
3
print addone(99)
復(fù)制代碼
運(yùn)行結(jié)果:
1
100
復(fù)制代碼
函數(shù)代碼塊以 def 關(guān)鍵詞開頭,后接函數(shù)標(biāo)識符名稱和圓括號,在圓括號里是傳進(jìn)來的參數(shù),然后通過 return 進(jìn)行函數(shù)結(jié)果得反饋。
A+B Problem
上面的講的這些基礎(chǔ)語法,我們可以用 sumlime text 編輯器運(yùn)行 Python 代碼。另外,告訴你一個相當(dāng)高效的方法,你可以充分利用一個刷題進(jìn)階的網(wǎng)址: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1 ,這是浙江大學(xué) ACM 的 OnlineJudge。
什么是 OnlineJudge 呢?它實(shí)際上是一個在線答題系統(tǒng),做題后你可以在后臺提交代碼,然后 OnlineJudge 會告訴你運(yùn)行的結(jié)果,如果結(jié)果正確就反饋:Accepted,如果錯誤就反饋:Wrong Answer。
不要小看這樣的題目,也會存在編譯錯誤、內(nèi)存溢出、運(yùn)行超時等等情況。所以題目對編碼的質(zhì)量要求還是挺高的。下面我就給你講講這道 A+B 的題目,你可以自己做練習(xí),然后在后臺提交答案。
題目:A+B
輸入格式:有一系列的整數(shù)對 A 和 B,以空格分開。
輸出格式:對于每個整數(shù)對 A 和 B,需要給出 A 和 B 的和。
輸入輸出樣例:
1
INPUT
2
1 5
3
OUTPUT
4
6
復(fù)制代碼
針對這道題,我給出了下面的答案:
1
while True:
2
? ? ? try:
3
? ? ? ? ? ? ? line = raw_input()
4
? ? ? ? ? ? ? a = line.split()
5
? ? ? ? ? ? ? print int(a[0]) + int(a[1])
6
? ? ? except:
7
? ? ? ? ? ? ? break
復(fù)制代碼
當(dāng)然每個人可以有不同的解法,官方也有 Python 的答案,這里給你介紹這個 OnlineJudge 是因?yàn)椋?/p>
1. 可以在線得到反饋,提交代碼后,系統(tǒng)會告訴你對錯。而且你能看到每道題的正確率,和大家提交后反饋的狀態(tài);
2. 有社區(qū)論壇可以進(jìn)行交流學(xué)習(xí);
3. 對算法和數(shù)據(jù)結(jié)構(gòu)的提升大有好處,當(dāng)然對數(shù)據(jù)挖掘算法的靈活運(yùn)用和整個編程基礎(chǔ)的提升都會有很大的幫助。
三,總結(jié)
在日常工作中,我們解決的問題都不屬于高難度的問題,大部分人做的都是開發(fā)工作而非科研項(xiàng)目。所以我們要提升的主要是熟練度,而通往熟練度的唯一路徑就是練習(xí)、練習(xí)、再練習(xí)!
我在文章中多次強(qiáng)調(diào)練習(xí)的作用,這樣可以增加你對數(shù)據(jù)分析相關(guān)內(nèi)容的熟練度。所以我給你出了兩道練習(xí)題,你可以思考下如何來做,歡迎把答案放到評論下面,我也會和你一起在評論區(qū)進(jìn)行討論。
1. 如果我想在 Python 中引用 scikit-learn 庫該如何引用?
2. 求 1+3+5+7+…+99 的求和,用 Python 該如何寫?