本書根據(jù)作者多年教學(xué)經(jīng)驗(yàn)編寫, 條理清楚, 內(nèi)容深淺適中, 盡量讓讀者從實(shí)例出發(fā), 結(jié)合課后練習(xí), 少走彎路。本書涉及的內(nèi)容主要包括Python數(shù)據(jù)類型與運(yùn)算、流程控制及函數(shù)與類、Pandas庫的數(shù)據(jù)處理與分析等。
作者通過近三輪的教學(xué),對Python3.x的基礎(chǔ)知識進(jìn)行了篩選和總結(jié),特編寫此書,希望能夠給準(zhǔn)備使用Python的讀者提供一些方便。
本書由淺入深,比較適合那些從未接觸過計(jì)算機(jī)語言的讀者。每章配有大量的示例代碼,希望讀者在使用本書的時候,能夠盡可能自己敲代碼,少用復(fù)制粘貼的方法,這樣有利于讀者盡快進(jìn)入“角色”,畢竟“拷貝得來終覺淺”。
本書的前3章是Python的基礎(chǔ)知識;第4章是利用Pandas庫對數(shù)據(jù)進(jìn)行處理、分析以及實(shí)現(xiàn)數(shù)據(jù)可視化;在第5章還列出了Python對文件的讀取、存儲方法,對網(wǎng)絡(luò)爬蟲、矩陣運(yùn)算也做了簡單的介紹。
前言
在寫作本書的時候,國內(nèi)大多數(shù)參考書還是Python2.7版本,為了給在校大學(xué)生開設(shè)這門Python課程,我們選擇了Python3.x,畢竟Python3.x才是未來。與其讓學(xué)生們從Python2.7開始學(xué),還不如直接從Python3.x上手,以掌握更加完善的知識。
作者通過近三輪的教學(xué),對Python3.x的基礎(chǔ)知識進(jìn)行了篩選和總結(jié),特編寫此書,希望能夠給準(zhǔn)備使用Python的讀者提供一些方便。
本書由淺入深,比較適合那些從未接觸過計(jì)算機(jī)語言的讀者。每章配有大量的示例代碼,希望讀者在使用本書的時候,能夠盡可能自己敲代碼,少用復(fù)制粘貼的方法,這樣有利于讀者盡快進(jìn)入“角色”,畢竟“拷貝得來終覺淺”。
本書的前3章是Python的基礎(chǔ)知識;第4章是利用Pandas庫對數(shù)據(jù)進(jìn)行處理、分析以及實(shí)現(xiàn)數(shù)據(jù)可視化;在第5章還列出了Python對文件的讀取、存儲方法,對網(wǎng)絡(luò)爬蟲、矩陣運(yùn)算也做了簡單的介紹。
作者在編寫本書的過程中,得到了Python工程師齊偉的幫助。在開設(shè)這門課的時候,齊偉通過視頻的形式與我們一起分享了Python開發(fā)經(jīng)驗(yàn)。本書在完稿時,得到了研究生閆青、陳文華、馬秀、樊宇凱和盧超在文字校對上的幫助。
最后感謝廣大讀者選擇了本書,預(yù)祝您順利學(xué)會Python語言。
編者
目錄
第1章Python簡介1
1.1安裝Python2
1.2Python2和Python3的區(qū)別5
本章小結(jié)8
練習(xí)8
第2章Python數(shù)據(jù)類型與運(yùn)算9
2.1數(shù)據(jù)類型11
2.2運(yùn)算符與功能命令12
2.2.1算數(shù)運(yùn)算符12
2.2.2比較運(yùn)算符12
2.2.3賦值運(yùn)算符13
2.2.4常量與變量15
2.2.5字符串16
2.2.6字符串索引與切片18
2.2.7輸入和輸出20
2.2.8原始字符串21
2.2.9range22
2.2.10元組、列表、字典、集合22
2.2.11格式化輸出37
2.2.12strip、split40
2.2.13divmod()42
2.2.14join()42
本章小結(jié)43
練習(xí)47
第3章流程控制及函數(shù)與類49
3.1流程控制52
3.1.1if-else52
3.1.2for循環(huán)53
3.1.3while循環(huán)54
3.1.4continue和break54
3.2遍歷56
3.2.1range()函數(shù)56
3.2.2列表與元組的遍歷59
3.3函數(shù)61
3.3.1函數(shù)的定義61
3.3.2函數(shù)的使用62
3.3.3形參和實(shí)參63
3.3.4參數(shù)的傳遞和改變63
3.3.5變量的作用域66
3.3.6函數(shù)參數(shù)的類型68
3.3.7任意個數(shù)的參數(shù)70
3.3.8函數(shù)調(diào)用71
3.4函數(shù)式編程74
3.4.1lambda74
3.4.2reduce()75
3.4.3filter()76
3.4.4map()77
3.4.5行函數(shù)77
3.5常用的內(nèi)置函數(shù)78
3.5.1sum78
3.5.2zip79
3.5.3enumerate80
3.5.4max和min81
3.5.5eval81
3.5.6判斷函數(shù)83
3.6常見的錯誤顯示86
3.6.1常見的錯誤類型87
3.6.2初學(xué)者常犯的錯誤89
3.6.3try93
3.6.4assert95
3.6.5raise95
3.7模塊和包96
3.7.1模塊(module)96
3.7.2包(package)100
3.7.3datetime和calendar模塊101
3.7.4urllib模塊105
3.8類106
本章小結(jié)109
練習(xí)109
第4章Python數(shù)據(jù)分析實(shí)戰(zhàn)113
4.1關(guān)于Pandas114
4.1.1什么是Pandas114
4.1.2Pandas中的數(shù)據(jù)結(jié)構(gòu)114
4.1.3Pandas的安裝方法114
4.1.4在Anaconda中安裝
第三方庫118
4.2數(shù)據(jù)準(zhǔn)備119
4.2.1數(shù)據(jù)類型119
4.2.2數(shù)據(jù)結(jié)構(gòu)120
4.2.3數(shù)據(jù)導(dǎo)入128
4.2.4數(shù)據(jù)導(dǎo)出131
4.3數(shù)據(jù)處理133
4.3.1數(shù)據(jù)清洗133
4.3.2數(shù)據(jù)抽取138
4.3.3排名索引147
4.3.4數(shù)據(jù)合并151
4.3.5數(shù)據(jù)計(jì)算154
4.3.6數(shù)據(jù)分組156
4.3.7日期處理157
4.4數(shù)據(jù)分析162
4.4.1基本統(tǒng)計(jì)162
4.4.2分組分析163
4.4.3分布分析165
4.4.4交叉分析167
4.4.5結(jié)構(gòu)分析169
4.4.6相關(guān)分析170
4.5數(shù)據(jù)可視化172
4.5.1餅圖172
4.5.2散點(diǎn)圖174
4.5.3折線圖176
4.5.4柱形圖180
4.5.5直方圖183
本章小結(jié)184
練習(xí)184
第5章其他187
5.1文件讀寫操作188
5.1.1文件的讀寫方法189
5.1.2文件的其他方法190
5.1.3文件的存儲和讀取190
5.2with語句192
5.3Anaconda下安裝statsmodels包193
5.4關(guān)于Spyder界面恢復(fù)默認(rèn)狀態(tài)的
處理195
5.5關(guān)于Python計(jì)算精度的問題197
5.6矩陣運(yùn)算200
5.6.1創(chuàng)建矩陣200
5.6.2矩陣屬性200
5.6.3解線性方程組201
5.6.4線性規(guī)劃最優(yōu)解202
5.7正則表達(dá)式203
5.8使用urllib打開網(wǎng)頁209
5.9網(wǎng)頁數(shù)據(jù)抓取212
5.10讀取文檔217
本章小結(jié)222
練習(xí)222
參考文獻(xiàn)224
第2章Python數(shù)據(jù)類型與運(yùn)算
我們先了解Python的幾個語法常識。
1.代碼注釋方法
(1)在一行中,“#”后的語句不再執(zhí)行,而表示被注釋。
(2)如果要進(jìn)行大段的注釋,可以使用三個單引號(’’’)或者雙引號(”””)將注釋內(nèi)容包圍。單引號和雙引號在使用上沒有本質(zhì)的差別。
【例2-1】三個雙引號注釋段落:
#-*-coding:utf-8-*-
"""
CreatedonSunMar1321:20:062016
@author:yubg
"""
lis=[1,2,3]
foriinlis:#半角狀態(tài)冒號不能少,下一行注意縮進(jìn)
i+=1
print(i)
本例不需要上機(jī)操作,僅為展示用法。
2.用縮進(jìn)來表示分層
Python不像C語言那樣用{}來表示語句塊,而是通過讓代碼縮進(jìn)4個空格來表示分層,當(dāng)然也可以使用Tab鍵,但不要混合使用Tab鍵和空格來進(jìn)行縮進(jìn),否則會使程序在跨平臺時不能正常工作,官方推薦的做法是使用四個空格。
一般來說,行尾遇到“:”就表示下一行縮進(jìn)的開始,如例2-1中的“foriinlis”行尾有冒號,下一行的“i+=1”就需要縮進(jìn)四個空格。
3.語句斷行
一般來說,Python中的一條語句占一行,在每條語句的結(jié)尾處不需要使用分號(;)。但在Python中也可以使用分號,表示將兩條簡單語句寫在一行。但如果一條語句較長,要分幾行來寫,可以使用“\”來進(jìn)行換行。分號還有個作用,使用在一行語句的末尾,表示對本行語句的結(jié)果不打印輸出。一般地,系統(tǒng)能夠自動識別換行,如在一對括號中間或三引號之間均可換行。例如下面代碼中的第三行較長,若要對其分行,則必須在括號內(nèi)進(jìn)行(包括圓括號、方括號和花括號):
frompandasimportDataFrame#導(dǎo)入模塊中的函數(shù),后面再講
frompandasimportSeries
df=DataFrame({'age':Series([26,85,64]),'name':Series(['Ben','Joh','Jef'])})
print(df)
分行后的第二行一般空四個空格,在3.5版本中已經(jīng)優(yōu)化,可以不空四個空格,但是在較低的3.x版本中不空四個空格會報錯。
frompandasimportDataFrame
frompandasimportSeries
df=DataFrame({'age':Series([26,85,64]),#此語句分成了兩行
'name':Series(['Ben','Joh','Jef'])})
print(df)
4.print()的作用
print()會在輸出窗口中顯示一些文本或結(jié)果,便于驗(yàn)證和顯示數(shù)據(jù)。
5.使用轉(zhuǎn)義符
如果需要在一個字符串中嵌入一個引號,該如何操作?
有兩種方法:可以在引號前加反斜杠(\),或者用不同的引號包圍這個引號。
例如:
>>>s1='I\'amaboy.'#可以使用轉(zhuǎn)義符\
>>>print(s1)
I'amaboy.
>>>s2="I'amaboy."#也可以用不同的引號包圍起來,此處用雙引號是為了區(qū)分單引號
>>>print(s2)
I'amaboy.
>>>
轉(zhuǎn)義符詳見本章2.2.5小節(jié)的內(nèi)容。
2.1數(shù)據(jù)類型
Python總共有6種數(shù)據(jù)類型,分別是數(shù)字型(Numbers)、字符串型(String)、列表型(List)、元組型(Tuple)、集合型(Sets)和字典型(Dictionaries)。
數(shù)字型又可劃分為整數(shù)型(int)、浮點(diǎn)型(float)、布爾型(bool)和復(fù)數(shù)型(complex)。
在Python中有4種類型的數(shù)——整數(shù)、長整數(shù)、浮點(diǎn)數(shù)和復(fù)數(shù)。
例如,2是一個整數(shù)的例子。
長整數(shù)不過是大一些的整數(shù)。
3.23和52.3E-4是浮點(diǎn)數(shù)的例子,E標(biāo)記表示10的冪。52.3E-4表示52.3×10-4。
(-5+4j)和(2.3-4.6j)表示的是復(fù)數(shù)。
……