本書主要面向企業資料分析需求,全面且系統地介紹了如何通過 Python 來分析 Excel 資料。本書主要分為 3 部分:第 1 部分是 Python 3.9 語言基礎,主要介紹 Python 的基礎知識,為之後的學習奠定基礎;第 2 部分是 Excel 資料分析,主要介紹 NumPy、Pandas、Matplotlib、Seaborn、openpyxl 和 xlwings 等內容,使讀者可以通過 Python 讀取和統計分析 Excel 資料;第 3 部分是 Excel 資料分析實踐,使讀者回歸到實際應用中,並回顧之前學習的知識。本書既適合有一定 Excel 基礎,想進一步提高工作效率的辦公人員閱讀,也適合那些需要在日常工作中處理大量和複雜資料的辦公人員閱讀,更適合 Python 初學者、程序設計零基礎想通過程序設計實現辦公自動化的人士閱讀。
技術暢銷書作家,精通Java互聯網技術開發和實踐,擁有十餘年一線開發經驗,著有業內暢銷書《深入淺出MyBatis技術原理與實戰》《深入淺出Spring?Boot?2.x》和《Spring?Cloud微服務和分散式系統實踐》等。寫作特點是技術點詳盡準確、文字淺顯易懂,立志於用圖書普及基本技術。
本書由專業開發人員基於多年資料分析工作實踐撰寫而成的。
追求一本通的形式來帶領讀者深入Python+Excel資料分析的學習
本書從零基礎開始,先講述Python 3.9語言基礎
再講述如何通過Python來對Excel進行資料分析
最後再付諸於實踐,強化動手能力。
為什麼需要使用Python分析Excel資料
在使用傳統辦公軟件進行資料分析的過程中,使用最多的莫過於Excel。但是隨著移動互聯網時代的到來,資料也越來越多,因此,在很多場景中使用Excel進行資料分析就越來越難,主要的難點集中在以下3個方面。
lExcel只能處理少量的資料,經常使用Excel的用戶應該都發現過這個問題,當Excel的資料量過大時,其查詢和計算速度會明顯下降,甚至無法正常運行,這對於實際工作來說是不可接受的。
lExcel的功能是有限的,而通過程序設計可以獲得更多的功能。
lExcel需要手動反復操作,需要的時間長,並且容易出錯,而編寫的程式通過反復驗證之後,效率可以大幅度提高,並且不易出錯。
在移動互聯網時代,資料量日益增加,加之業務趨向於複雜化,越來越多的業務人員已經無法只通過Excel來做業務分析,他們需要更快速且複雜的解決方案,此時Python就出現在他們面前。
與傳統語言不同,Python更容易學習和使用,門檻較低,很快就成為時代的寵兒,只用簡單的十幾行代碼,甚至幾行代碼就能夠完成所需要的資料分析,使得業務人員通過自己編寫代碼完成資料分析成為可能。因此,那些需要做大量資料和複雜業務分析的辦公自動化崗位從業人員都開始要求學習Python+Excel,這就是我編寫本書的原因。
我和資料分析的緣分
我是一個擁有十餘年計算機軟件程序設計經驗的工作者。畢業之後,我在一家從事銀行金融軟件的公司工作,主要為銀行出具各類統計分析報表,經常和各類資料分析打交道。我當時主要使用Java和資料庫編寫程式,為銀行出具各種報表。這一工作給我帶來的最大體會是,只有對銀行的各類業務進行深入且專業的學習,才能編寫程式完成工作。每次完成工作時,我都感到心滿意足,但是銀行對報表不斷有調整,加上銀行內部業務需求的變更,直接導致我需要重新熟悉新的需求之後才能進行開發。因此,只要業務發生變化,就會引發資料分析新的需求,由此可見,資料分析工作會一直繼續下去。
雖然我已經畢業十多年了,但是這些經歷讓我對資料分析有了深刻的認識。我始終都堅持一個觀念——資料分析最好由業務人員負責,否則成本會很高。這是因為協力廠商程式開發人員及其開發的業務系統存在以下幾方面缺點。
l程式開發人員不懂業務,需要深入學習業務知識之後才能進行開發,涉及專業問題時再與業務人員進行溝通,效率一般不會太高,因為需要解釋很多專業知識。
l請協力廠商開發系統成本高,畢竟軟件發展是比較深奧的工作,並且開發成本較高,週期也較長,很多時候並不能及時處理業務。
l系統開發完成後就會進入維護期,這段時間系統的功能相對固定,很難滿足臨時提出來的新需求,即便再找程式開發人員來增加功能,也很難保證時效。
因此,對於一些不是特別複雜的資料分析,我建議由業務人員來做。當需要大規模開發時,則由專業的軟件公司來做。這樣既有助於降低成本、提高靈活性,又能保證資料分析的時效性。
本書的安排
本書按照一本通的要求來編寫,儘量使讀者可以通過這一本書就能學習和掌握Python+Excel辦公自動化的應用,所以本書的內容分為3部分。
lPython 3.9語言基礎:第1~10章,主要介紹Python的安裝、資料結構、語法和一些常見的原理和應用,為後續的學習奠定基礎。
lExcel資料分析:第11~16章,主要介紹Excel的處理(xlwings)、資料分析庫(NumPy和Pandas)和繪圖庫(Matplotlib和Seaborn)。
lExcel資料分析實踐:第17和18章,通過電商銷售資料和個人貸款的項目,讀者不僅可以回顧前面的知識,還可以通過實踐提高資料分析和繪製圖表的能力。
本書使用的各個庫的版本如下:Python 3.9.0、xlwings 0.23.2、NumPy 1.20.3、Pandas 1.2.4、Matplotlib 3.3.3、Seaborn 0.11.1。
本書的讀者
本書是使用Python實現辦公自動化的書籍,既適合有一定Excel基礎,想進一步提高工作效率的辦公人員閱讀,也適合需要在日常工作中處理大量和複雜資料的辦公人員閱讀。本書從Python基礎展開介紹,並且涉及應用與實踐方面的內容,因此也適合Python初學者閱讀。
如何閱讀本書
我其實也是Python+Excel的新手,我十多年的工作經驗主要是Java和資料庫開發。由於我是計算機從業人員,程序設計經驗豐富,而計算機語言是相通的,所以相對來說,我學習Python就比較容易。其實,Python資料分析庫在很大程度上和資料庫的思想是接近的,因此我可以快速掌握資料分析知識。在編寫本書時,我也是一邊學習,一邊實踐,小心求證,並結合了我在工作時遇到的場景和問題。
學習程序設計不是一兩天的事情,也沒有捷徑,對於初學者來說,我建議先學好Python基礎和資料分析庫基礎,然後進行實踐。我之前接觸的學習程序設計的初學者大部分存在4個比較嚴重的問題。
l第一,眼高手低。有些初學者說他很快就看完書了,我直接回復他,這樣就等於沒有看過,因為學習程序設計是實踐問題,而不是看的問題,只是看過而沒有實踐過一律可被歸結為零,因為看的過程不會瞭解其中很多的細節和精妙之處。
l第二,不能正確地對待錯誤,在遇到錯誤或異常時,很多初學者過於沮喪,會選擇放棄或依靠他人。在我接觸的初學者中,經常有人想都不想就提問,其實這是錯誤的方式,在發生錯誤或異常時,首先要做的是查看程式的異常,從而定位問題,其次進行調試,通過監控變數來定位是哪一步走不通,而不是直接向他人請教,學會定位錯誤比採用正確的方法更重要,因為正確的方法是“魚”,而定位錯誤的過程是“漁”,“授人以魚不如授人以漁”。而事實上,每個人都會犯錯誤,更何況是初學者。我現在寫代碼犯錯少了,那是因為以前我犯的錯誤很多,有經驗了而已。所以,面對錯誤是每個程序設計初學者的必經之路,沒有什麼值得恐懼的。
l第三,思而不學。有些初學者沒有認真學習書中的內容就根據自己的想法來編寫代碼,而自己的想法卻是錯誤的。如果你是初學者,那麼我建議先學習其他人成功的案例,而非自己的想像,做好了別人的成功案例,就可以建立信心,學習效率也會提高,然後弄明白原理,才能發散自己的思維,畢竟“思而不學則殆”。
l第四,看不懂而不做。本書中的案例大部分都是可以運行的,在看不懂時,讀者可以先“抄襲”,然後自己運行,或者直接調試源碼也可以運行。運行起來以後你就會有信心,然後探索原因,而不是什麼都不做,傻傻地看不懂,這樣是不會進步的。
在學習本書時,只要解決這4個問題,相信你就會事半功倍。古人雲:“拳不離手,曲不離口。”學習程序設計更是如此,要想提高自己的程序設計能力,肯定需要不斷學習和實踐。
由於作者的能力和時間有限,書中難免存在不足之處,如果您發現了,請與出版社聯繫,以方便本書後續的修訂。
楊開振
目錄
第1部分 Python 3.9語言基礎
第1章 計算機語言和Python簡介 2
1.1 計算機語言的分類 2
1.1.1 機器語言 2
1.1.2 組合語言 2
1.1.3 高階語言 3
1.1.4 高階語言的發展趨勢 3
1.2 高階語言的分類 5
1.2.1 編譯型語言 5
1.2.2 解釋型語言 6
1.2.3 混合型語言 6
1.3 使用Python 7
1.3.1 為何要學習Python 7
1.3.2 在Windows作業系統中安裝
Python 8
1.3.3 在Ubuntu(UNIX)作業系統中
安裝Python 10
1.3.4 使用整合式開發環境開發
Python 11
1.4 使用Python分析Excel資料 12
1.4.1 可複用 12
1.4.2 大量資料的需求 12
1.4.3 Python易用易學 12
第2章 變數和單一資料型別 13
2.1 變數 13
2.1.1 變數的使用 13
2.1.2 變數的命名 14
2.1.3 變數的存儲 15
2.2 Python中的資料類型 18
2.3 數字 19
2.3.1 算數運算 19
2.3.2 比較運算 21
2.3.3 賦值運算 22
2.3.4 位運算 24
2.3.5 運算子的優先順序 27
2.3.6 數字計算中常見的函數 28
2.4 字串 34
2.4.1 截取子串 35
2.4.2 字串的運算 37
2.4.3 字串的格式化 38
2.4.4 Python轉義字元 40
2.4.5 字串常用的函數 42
2.5 字串和數字相互轉換 43
2.6 代碼中的注釋 44
第3章 控制語句 46
3.1 條件陳述式 46
3.1.1 簡單if語句 46
3.1.2 else分支的使用 47
3.1.3 elif分支的使用 48
3.1.4 條件陳述式的嵌套 49
3.2 邏輯運算 50
3.2.1 邏輯運算子 51
3.2.2 邏輯運算子的優先順序 53
3.2.3 改寫閏年判斷邏輯 54
3.3 迴圈語句 54
3.3.1 while語句 54
3.3.2 使用迴圈的注意事項 56
3.3.3 for語句 57
3.3.4 range函數 58
3.3.5 跳轉關鍵字break、continue和
pass 59
3.3.6 迴圈的嵌套 61
第4章 列表 64
4.1 列表的基礎概念 64
4.1.1 創建列表 64
4.1.2 列表的遍歷和下標 64
4.2 訪問和操作列表 66
4.2.1 元素的增、刪、查、改 66
4.2.2 截取子列表 67
4.2.3 列表的嵌套 68
4.2.4 列表的其他操作 70
4.3 清單函數 71
4.3.1 常見函數 71
4.3.2 排序函數 72
第5章 元組和集合 76
5.1 元組 76
5.1.1 創建元組 76
5.1.2 遍歷元組 77
5.1.3 修改和刪除元組 78
5.1.4 截取元組 79
5.1.5 其他常見的操作 79
5.1.6 關於元組的函數 80
5.2 集合 80
5.2.1 創建集合 80
5.2.2 新增元素 81
5.2.3 刪除元素 82
5.2.4 判斷元素是否在集合中 84
5.2.5 遍歷集合 84
5.2.6 關於集合的函數 85
第6章 字典 89
6.1 創建字典 89
6.1.1 創建最基本的字典 89
6.1.2 創建空字典 90
6.1.3 使用內置函數dict創建字典 90
6.2 訪問字典 91
6.2.1 訪問字典的值 91
6.2.2 新增/修改字典的值 92
6.2.3 刪除 93
6.3 遍歷字典 94
6.3.1 對鍵的遍歷 94
6.3.2 對值的遍歷 94
6.3.3 對鍵值的遍歷 95
6.4 字典的鍵值資料類型 95
6.4.1 字典對鍵值的要求 95
6.4.2 在鍵值中使用各種資料類型 96
6.4.3 多種資料類型在字典中的
應用 97
6.5 與字典相關的函數 99
第7章 函數 101
7.1 函數的定義 101
7.1.1 定義帶有返回值的函數 103
7.1.2 形參和實參 104
7.2 傳遞參數 104
7.2.1 位置實參 105
7.2.2 關鍵字實參 105
7.2.3 為參數設置預設值 106
7.3 特殊的參數 107
7.3.1 傳遞列表 107
7.3.2 傳遞元組、集合和字典 109
7.3.3 可變參數 110
7.3.4 強制參數字置和關鍵字 113
7.4 函數返回值 113
7.4.1 返回單一資料型別 114
7.4.2 返回複雜資料類型 114
7.4.3 在迴圈中返回 115
7.5 函數中的參數 116
7.5.1 傳遞可更改物件與不可更改
物件 116
7.5.2 函數內外變數的可見性 117
7.6 Lambda運算式 118
7.7 把函數放在不同的模組中 119
7.7.1 將整個模組導入主程序中 119
7.7.2 導入指定的函數 120
7.8 遞迴函數 121
第8章 類 124
8.1 類的概念 124
8.1.1 定義類和創建物件 124
8.1.2 類的屬性的訪問 126
8.1.3 封裝 129
8.2 繼承 131
8.2.1 抽象 131
8.2.2 繼承中的方法 133
8.2.3 受保護的屬性和方法 135
8.2.4 多重繼承 136
8.2.5 多態 139
8.3 拾遺 140
8.3.1 物件導向程序設計的內置函數 140
8.3.2 類的內部方法 142
8.3.3 類方法和靜態方法 143
8.4 導入模組中的類 145
第9章 檔操作和標準庫 148
9.1 檔操作 148
9.1.1 文件的讀取 148
9.1.2 檔的寫入 151
9.1.3 將資料保存為JSON格式 152
9.2 日期時間 156
9.2.1 日期――date類 156
9.2.2 日期時間――datetime類 158
9.2.3 時間差――timedelta類 160
9.3 貨幣格式化 162
第10章 異常 164
10.1 異常的基礎知識 164
10.1.1 Python異常機制 165
10.1.2 except語句 166
10.1.3 else語句和finally語句 167
10.1.4 常見的異常 170
10.2 深入使用異常 172
10.2.1 主動觸發異常 172
10.2.2 自訂異常 173
10.2.3 except語句中的異常排序 174
第2部分 Excel資料分析
第11章 使用xlwings處理Excel文檔 178
11.1 xlwings的簡介和安裝 178
11.1.1 xlwings簡介 178
11.1.2 安裝xlwings 180
11.2 讀/寫Excel文檔 182
11.2.1 讀取Excel儲存格數據 182
11.2.2 讀取多行資料 183
11.2.3 將資料寫入Excel 185
11.3 設置儲存格 187
11.3.1 字體和格式化 187
11.3.2 邊框 188
11.3.3 合併儲存格和拆分儲存格 190
11.3.4 調整儲存格的寬度和高度 192
11.4 處理一些常見的Excel場景 192
11.4.1 新建和讀/寫多個Excel
文檔 192
11.4.2 在同一個Excel文檔中寫入多個工作表 194
11.4.3 複製資料 194
第12章 資料分析的基礎庫――NumPy 196
12.1 安裝NumPy 197
12.1.1 在Windows下的安裝 197
12.1.2 在PyCharm中使用
NumPy 197
12.1.3 在Linux(Ubuntu)下安裝
NumPy 197
12.2 創建ndarray物件 198
12.2.1 創建ndarray陣列 198
12.2.2 創建特殊的ndarray陣列 200
12.3 NumPy陣列的屬性和資料
類型 204
12.3.1 NumPy陣列的屬性 204
12.3.2 NumPy陣列的資料類型 205
12.4 NumPy切片和索引 206
12.4.1 一維陣列的切片和索引 206
12.4.2 二維陣列的切片和索引 207
12.4.3 高級切片和索引 208
12.5 陣列的常見處理 210
12.5.1 資料預處理 210
12.5.2 陣列重塑 212
12.5.3 陣列合併 214
12.6 NumPy陣列的運算 215
12.6.1 對元素的運算 215
12.6.2 統計分析 217
12.6.3 篩選元素 218
12.6.4 集合運算 220
12.6.5 排序 221
第13章 Pandas基礎 227
13.1 創建對應的資料結構 227
13.1.1 Series 227
13.1.2 DataFrame 229
13.2 讀/寫Excel數據 233
13.2.1 讀取Excel數據 233
13.2.2 指定讀取Excel的資料
類型 238
13.2.3 寫入Excel 239
13.2.4 xlwings與Pandas的結合 241
13.3 定位資料 243
13.3.1 Series的索引和分片 243
13.3.2 DataFrame的索引和分片 244
13.3.3 loc方法和iloc方法 245
13.4 資料預處理 247
13.4.1 處理預設值 247
13.4.2 去除重復資料 250
13.4.3 資料類型轉換 253
13.5 增、刪、查、改和替換 253
13.5.1 修改元素 253
13.5.2 替換元素 254
13.5.3 刪除 255
13.5.4 新增 257
13.5.5 查找 259
13.6 讓資料運算起來 261
13.6.1 簡易算數運算 261
13.6.2 比較運算 262
13.6.3 匯總運算 263
第14章 Pandas高級應用 269
14.1 修改索引(標籤) 269
14.1.1 重設索引(標籤) 270
14.1.2 將某列設置為索引
(標籤) 270
14.1.3 重命名索引(標籤) 271
14.1.4 樹形索引 272
14.2 為資料排序 273
14.2.1 沒有預設值的排序 273
14.2.2 有預設值的排序 275
14.2.3 數值排名 276
14.3 獲取唯一值 279
14.4 轉換陣列 280
14.4.1 轉置 280
14.4.2 轉換視角查看資料――
長表轉寬表 280
14.4.3 寬表轉長表 281
14.5 最重要的資料分析功能――
分組統計 282
14.5.1 分組求筆數與求和――
count方法和sum方法 283
14.5.2 對資料進行聚合運算――
aggregate方法 284
14.6 通過資料透視轉換視角 287
14.6.1 pivot_table方法概述 287
14.6.2 4個常用的參數 288
14.6.3 合計行列 291
14.7 把資料連接在一起 292
14.7.1 3種關聯關係 293
14.7.2 指定關聯欄位 295
14.7.3 連接方式 297
14.7.4 處理重複列 299
14.8 把資料合併在一起 300
第15章 資料可視化庫――Matplotlib 302
15.1 給圖表添加坐標系 302
15.1.1 使用面板的add_subplot方法
建立坐標系 304
15.1.2 使用subplot函數建立
坐標系 307
15.1.3 使用subplot2grid函數添加
坐標系 309
15.1.4 使用subplots函數建立
坐標系 310
15.2 設置坐標系和圖表 312
15.2.1 設置坐標軸 312
15.2.2 設置坐標軸的刻度 315
15.2.3 設置網格 318
15.2.4 圖例 320
15.2.5 設置圖表的標題 324
15.2.6 添加資料標籤 327
15.2.7 添加圖表注釋 330
15.2.8 資料表 332
15.3 製作常見的圖表 335
15.3.1 折線圖 335
15.3.2 柱狀圖 338
15.3.3 橫條圖 343
15.3.4 散點圖和氣泡圖 345
15.3.5 面積圖 347
15.3.6 雷達圖 349
15.3.7 圓形圖 352
15.4 其他常用的圖表技術 356
15.4.1 雙軸圖表 356
15.4.2 圖表的樣式 358
15.4.3 圖表的保存 359
15.5 將圖片保存到Excel中 360
第16章 資料可視化庫――Seaborn 363
16.1 安裝和初識Seaborn 363
16.2 使用Seaborn繪製常見的圖表 364
16.2.1 折線圖和點線圖 364
16.2.2 柱狀圖和橫條圖 368
16.2.3 散點圖 371
第3部分 Excel資料分析實踐
第17章 電商銷售資料分析 374
17.1 準備材料和分析業務 374
17.1.1 銷售明細分析 374
17.1.2 經銷員信息分析 375
17.1.3 產品信息分析 375
17.1.4 資料的關聯關係 375
17.2 資料分析流程 376
17.2.1 讀取Excel資料和資料
預處理 376
17.2.2 資料分析 377
17.2.3 繪製圖表 384
17.2.4 將資料分析的結果保存到
Excel中 392
第18章 個人貸款資料分析 397
18.1 業務分析 397
18.2 讀取Excel數據 399
18.3 查找資料 400
18.3.1 查找某一業務品種和不良
貸款資料 400
18.3.2 根據客戶名稱進行模糊
查找 401
18.3.3 查找當月發生的和當季到期的貸款 402
18.3.4 找到現存貸款餘額最大的10筆貸款 403
18.4 分組統計 403
18.4.1 按照業務品種進行分組
統計 403
18.4.2 按照業務品種和其細分進行
分組統計 404
18.4.3 按照客戶經理進行分組
統計 405
18.5 繪製圖表 406
18.5.1 繪製客戶經理業務狀況
圖表 406
18.5.2 根據業務品種繪製業務發生筆數的圓形圖 407
18.5.3 測試圖表 408
附錄A 查看環境變數 410
附錄B Python關鍵字和內置函數
大陸出版品因裝訂品質及貨運條件與台灣出版品落差甚大,除封面破損、內頁脫落等較嚴重的狀態,其餘商品將正常出貨。
特別提醒:部分書籍附贈之內容(如音頻mp3或影片dvd等)已無實體光碟提供,需以QR CODE 連結至當地網站註冊“並通過驗證程序”,方可下載使用。
無現貨庫存之簡體書,將向海外調貨:
海外有庫存之書籍,等候約45個工作天;
海外無庫存之書籍,平均作業時間約60個工作天,然不保證確定可調到貨,尚請見諒。
為了保護您的權益,「三民網路書店」提供會員七日商品鑑賞期(收到商品為起始日)。
若要辦理退貨,請在商品鑑賞期內寄回,且商品必須是全新狀態與完整包裝(商品、附件、發票、隨貨贈品等)否則恕不接受退貨。