作者:駱昊
說明:從專案上線到取得8w+星標以來,一直收到回饋說基礎部分(前15天的內容)對新手來說是比較困難的,建議有配套影片進行講解。最近把基礎部分的內容重新製作了一個名為“Python-Core-50-Courses”的項目,用更為簡單通俗的方式重寫了這部分內容並附帶了視頻講解,初學者可以看看這個新的倉庫。國內用戶如果訪問GitHub比較慢的話,可以關注我的知乎號Python-Jack ,上面的“從零開始學Python”專欄比較適合初學者,其他的專欄如“數據思維和統計思維”、“基於Python的數據分析」等也持續創作更新中,歡迎大家追蹤、按讚和留言。
想取得學習影片的小夥伴,大家可以掃描下面的二維碼進入微信小程序,看看有沒有適合自己的內容。大家心心念念的機器學習的內容在小程式中都可以找到,由我和我的同事為大家錄製的。
大家在學習過程中如果遇到一些棘手的問題或需要相關的學習資源,可以加入下面的QQ交流群,三個群是一樣的加入一個即可,請不要重複加群,也不要在群裡發布廣告和其他色情、低俗或敏感內容。如果缺乏自律性,有付費學習的需求,可以添加我的微信(jackfrued)私聊,備註好自己的稱呼和需求,我會給大家提供一些學習方案和職業規劃方面的指導。
配套的影片在抖音和B站持續更新中,有興趣的小夥伴可以追蹤我的抖音或B站帳號,最近剛起號,還希望大家多多支持,非常感謝您!
大家一直催更的《機器學習與深度學習》因個人和公司的原因,一直處於停滯狀態,近期會開始更新相關內容,感謝大家一如既往的支持與理解。
簡單的說,Python是一個「優雅」、「明確」、「簡單」的程式語言。
學習曲線低,非專業人士也能上手
開源系統,擁有強大的生態圈
解釋型語言,完美的平台可攜性
動態類型語言,支援物件導向和函數式程式設計
程式碼規範程度高,可讀性強
Python在以下領域都有用武之地。
後端開發- Python / Java / Go / PHP
DevOps - Python / Shell / Ruby
資料擷取- Python / C++ / Java
量化交易- Python / C++ / R
資料科學- Python / R / Julia / Matlab
機器學習- Python / R / C++ / Julia
自動化測試- Python / Shell
身為Python開發者,根據個人的喜好和職業規劃,可以選擇的就業領域也非常多。
Python後端開發工程師(伺服器、雲端平台、資料介面)
Python維運工程師(自動化維運、SRE、DevOps)
Python資料分析師(資料分析、商業智慧、數位營運)
Python資料探勘工程師(機器學習、深度學習、演算法專家)
Python爬蟲工程師
Python測試工程師(自動化測試、測試開發)
說明:目前,數據分析和數據挖掘是非常熱門的方向,因為不管是互聯網行業還是傳統行業都已經積累了大量的數據,各行各業都需要數據分析師從已有的數據中發現更多的商業價值,從而為企業的決策提供數據的支撐,這就是所謂的數據驅動決策。
給初學者的幾個建議:
Make English as your working language. (讓英文成為你的工作語言)
Practice makes perfect. (熟能生巧)
All experience comes from mistakes. (所有的經驗都源自於你曾經犯過的錯)
Don't be one of the leeches. (不要當伸手黨)
Either outstanding or out. (要么出眾,要么出局)
Python簡介- Python的歷史/ Python的優缺點/ Python的應用領域
建置程式設計環境- Windows環境/ Linux環境/ MacOS環境
從終端機執行Python程式- Hello, world / print
函數/ 執行程式
使用IDLE - 互動式環境(REPL) / 編寫多行程式碼/ 執行程式/ 退出IDLE
註釋- 註釋的作用/ 單行註解/ 多行註釋
程序和進制- 指令和程序/ 馮諾依曼機/ 二進制和十進制/ 八進制和十六進制
變數與類型- 變數的命名/ 變數的使用/ input
函數/ 檢查變數類型/ 類型轉換
數字和字串- 整數/ 浮點數/ 複數/ 字串/ 字串基本運算/ 字元編碼
運算子- 數學運算子/ 賦值運算子/ 比較運算子/ 邏輯運算子/ 身分運算子/ 運算子的優先權
應用案例- 華氏溫度轉換成攝氏溫度/ 輸入圓的半徑計算週長和麵積/ 輸入年份判斷是否為閏年
分支結構的應用場景- 條件/ 縮排/ 程式碼區塊/ 流程圖
if語句- 簡單的if
/ if
- else
結構/ if
- elif
- else
結構/ 嵌套的if
應用案例- 使用者驗證/ 英制單位與公制單位互換/ 擲骰子決定做什麼/ 百分製成績轉等級制/ 分段函數求值/ 輸入三邊的長度如果能構成三角形就計算週長和麵積
循環結構的應用場景- 條件/ 縮排/ 程式碼區塊/ 流程圖
while迴圈- 基本結構/ break
語句/ continue
語句
for循環- 基本結構/ range
類型/ 循環中的分支結構/ 嵌套的循環/ 提前結束程序
應用案例- 1~100求和/ 判斷質數/ 猜數字遊戲/ 列印九九表/ 列印三角形圖案/ 猴子吃桃/ 百錢百雞
經典案例:水仙花數/ 百錢百雞/ Craps賭博遊戲
練習題目:斐波那契數列/ 完美數/ 質數
函數的作用- 程式碼的壞味道/ 用函數封裝功能模組
定義函數- def
關鍵字/ 函數名稱/ 參數清單/ return
語句/ 呼叫自訂函數
呼叫函數- Python內建函數/ 導入模組和函數
函數的參數- 預設參數/ 可變參數/ 關鍵字參數/ 命名關鍵字參數
函數的傳回值- 沒有回傳值 / 傳回單一值/ 傳回多個值
作用域問題- 局部作用域/ 嵌套作用域/ 全域作用域/ 內建作用域/ 和作用域相關的關鍵字
用模組管理函數- 模組的概念/ 用自訂模組管理函數/ 命名衝突的時候會怎樣(同一個模組和不同的模組)
字串的使用- 計算長度/ 下標運算/ 切片/ 常用方法
清單基本用法- 定義清單/ 用下表存取元素/ 下標越界/ 新增元素/ 刪除元素/ 修改元素/ 切片/ 循環遍歷
列表常用操作- 連接/ 複製(複製元素和複製數組) / 長度/ 排序/ 倒轉/ 查找
產生列表- 使用range
建立數字列表/ 產生表達式/ 產生器
元組的使用- 定義元組/ 使用元組中的值/ 修改元組變數/ 元組和列表轉換
集合基本用法- 集合和清單的差異/ 建立集合/ 新增元素/ 刪除元素/ 清空
集合常用操作- 交集/ 並集/ 差集/ 對稱差/ 子集/ 超集
字典的基本用法- 字典的特性/ 建立字典/ 新增元素/ 刪除元素/ 取值/ 清空
字典常用操作- keys
方法/ values
方法/ items
方法/ setdefault
方法
基礎練習- 跑馬燈效果/ 列表找最大元素/ 統計考試成績的平均分數/ Fibonacci數列/ 楊輝三角
綜合案例- 雙色球選號/ 井字棋
類別與物件- 什麼是類別/ 什麼是物件/ 物件導向其他相關概念
定義類別- 基本結構/ 屬性與方法/ 建構器/ 析構器/ __str__
方法
使用物件- 建立物件/ 給物件訊息
物件導向的四大支柱- 抽象/ 封裝/ 繼承/ 多態
基礎練習- 定義學生類別/ 定義時鐘類別/ 定義圖形類別/ 定義汽車類
屬性- 類別屬性/ 實例屬性/ 屬性存取器/ 屬性修改器/ 屬性刪除器/ 使用__slots__
類別中的方法- 實例方法/ 類別方法/ 靜態方法
運算__len__
重載- __add__
/ __sub__
/ __or__
/ __getitem__
/ __setitem__
/ __repr__
/ __gt__
/ __lt__
/ __le__
/ __ge__
/ __eq__
/ __ne__
/ __contains__
類別(的物件)之間的關係- 關聯/ 繼承/ 依賴
繼承與多型- 什麼是繼承/ 繼承的語法/ 呼叫父類別方法/ 方法重寫/ 類型判定/ 多重繼承/ 菱形繼承(鑽石繼承)和C3演算法
綜合案例- 薪資結算系統/ 圖書自動折扣系統/ 自訂分數類
使用tkinter
開發GUI程序
使用pygame
三方庫開發遊戲應用
「大球吃小球」遊戲
讀取檔案- 讀取整個檔案/ 逐行讀取/ 檔案路徑
寫入檔案- 覆蓋寫入/ 追加寫入/ 文字檔案/ 二進位文件
異常處理- 異常機制的重要性/ try
- except
程式碼區塊/ else
程式碼區塊/ finally
程式碼區塊/ 內建異常類型/ 異常堆疊/ raise
語句
資料持久化- CSV檔案概述/ csv
模組的應用/ JSON資料格式/ json
模組的應用
字串進階操作- 轉義字元/ 原始字串/ 多行字串/ in
和not in
運算子/ is_xxx
方法/ join
和split
方法/ strip
相關方法/ pyperclip
模組/ 不變字串和可變字串/ StringIO
的使用
正規表示式入門- 正規表示式的作用/ 元字元/ 轉義/ 量詞/ 分組/ 零寬斷言/貪婪匹配與惰性匹配懶惰/ 使用re
模組實現正規表示式運算(匹配、搜尋、替換、捕獲)
使用正規表示式- re
模組/ compile
函數/ group
和groups
方法/ match
方法/ search
方法/ findall
和finditer
方法/ sub
和subn
方法/ split
方法
應用案例- 使用正規表示式驗證輸入的字串
行程和執行緒的概念- 什麼是行程/ 什麼是執行緒/ 多執行緒的應用場景
使用進程- fork
函數/ multiprocessing
模組/ 進程池/ 進程間通訊
使用執行緒- threading
模組/ Thread
類別/ RLock
類別/ Condition
類別/ 執行緒池
電腦網路基礎- 電腦網路發展史/ “TCP-IP”模型/ IP位址/ 連接埠/ 協定/ 其他相關概念
網路應用模式- “客戶端-伺服器”模式/ “瀏覽器-伺服器”模式
基於HTTP協定存取網路資源- 網路API概述/ 存取URL / requests
三方庫/ 解析JSON格式數據
Python網路程式設計- 套接字的概念/ socket
模組/ socket
函數/ 建立TCP伺服器/ 建立TCP客戶端/ 建立UDP伺服器/ 建立UDP客戶端
電子郵件- SMTP協定/ POP3協定/ IMAP協定/ smtplib
模組/ poplib
模組/ imaplib
模組
簡訊服務- 呼叫簡訊服務網關
用Pillow處理圖片- 圖片讀寫/ 圖片合成/ 幾何變換/ 色彩轉換/ 濾鏡效果
讀寫Word文件- 文字內容的處理/ 段落/ 頁首和頁尾/ 樣式的處理
讀寫Excel檔- xlrd
/ xlwt
/ openpyxl
常用資料結構
函數的高階用法- “一等公民” / 高階函數/ Lambda函數/ 作用域與閉包/ 裝飾器
物件導向高階知識- “三大支柱” / 類別與類別之間的關係/ 垃圾回收/ 魔術屬性與方法/ 混入/ 元類別/ 物件導向設計原則/ GoF設計模式
迭代器和生成器- 相關魔術方法/ 創建生成器的兩種方式/
並發和非同步程式設計- 多執行緒/ 多進程/ 非同步IO / async
和awai
t
用HTML標籤承載頁面內容
用CSS渲染頁面
用JavaScript處理互動式行為
jQuery入門與提高
Vue.js入門
Element的使用
Bootstrap的使用
作業系統發展史與Linux概述
Linux基礎指令
Linux中的實用程式
Linux的檔案系統
Vim編輯器的應用
環境變數和Shell編程
軟體的安裝和服務的配置
網路存取與管理
其他相關內容
關係型資料庫概述
MySQL簡介
安裝MySQL
MySQL基本指令
建庫建表
刪除表和修改表
insert操作
delete操作
update操作
投影和別名
篩選數據
空值處理
去重
排序
聚合函數
嵌套查詢
分組
表連接
笛卡兒積
內連接
自然連接
外連接
視窗函數
定義視窗
排名函數
取數函數
創建用戶
授予權限
召回權限
JSON類型
視窗函數
公共表表達式
視圖
使用場景
建立視圖
使用限制
函數
內建函數
使用者自訂函數(UDF)
過程
創建過程
呼叫過程
執行計劃
索引的原理
建立索引
普通索引
唯一索引
前綴索引
複合索引
注意事項
安裝三方庫
建立連接
取得遊標
執行SQL語句
透過遊標抓取數據
事務提交和回滾
釋放連接
編寫ETL腳本
Hadoop生態圈
Hive概述
準備工作
資料類型
DDL操作
DML操作
資料查詢
Web應用工作機制
HTTP請求和回應
Django框架概述
5分鐘快速上手
關係型資料庫配置
使用ORM完成對模型的CRUD操作
管理後台的使用
Django模型最佳實踐
模型定義參考
載入靜態資源
Ajax概述
用Ajax實現投票功能
實現用戶追蹤
cookie和session的關係
Django框架對session的支持
視圖函數中的cookie讀寫操作
透過HttpResponse
修改響應頭
使用StreamingHttpResponse
處理大文件
使用xlwt
產生Excel報表
使用reportlab
產生PDF報表
使用ECharts產生前端圖表
配置日誌
配置Django-Debug-Toolbar
優化ORM程式碼
什麼是中介軟體
Django框架內建的中介軟體
自訂中間件及其應用場景
傳回JSON格式的數據
用Vue.js渲染頁面
REST概述
DRF庫使用入門
前後端分離開發
JWT的應用
使用CBV
數據分頁
資料篩選
網站優化第一定律
在Django專案中使用Redis提供快取服務
在視圖函數中讀寫快取
使用裝飾器實現頁面緩存
為資料介面提供快取服務
文件上傳表單控制項和圖片檔案預覽
伺服器端如何處理上傳的文件
網站優化第二定律
配置訊息隊列服務
在專案中使用Celery實現任務非同步化
在專案中使用Celery實現定時任務
Python中的單元測試
Django框架對單元測試的支持
使用版本控制系統
配置和使用uWSGI
動靜分離和Nginx配置
配置HTTPS
配置網域解析
網路爬蟲的概念及其應用領域
網路爬蟲的合法性探討
開發網路爬蟲的相關工具
一個爬蟲程序的構成
使用requests
三方庫實現資料抓取
頁面解析的三種方式
正規表示式解析
XPath解析
CSS選擇器解析
多執行緒
多行程
異步I/O
安裝Selenium
載入頁面
尋找元素和模擬使用者行為
隱式等待和顯示等待
執行JavaScript程式碼
Selenium反爬破解
設定無頭瀏覽器
Scrapy核心元件
Scrapy工作流程
安裝Scrapy和創建項目
編寫蜘蛛程式
編寫中間件和管道程序
Scrapy設定檔
資料分析師的職責
資料分析師的技能堆疊
數據分析相關庫
安裝和使用anaconda
conda相關指令
安裝和使用jupyter-lab
安裝和啟動
使用小技巧
建立數組對象
數組物件的屬性
數組物件的索引運算
普通索引
花式索引
布林索引
切片索引
案例:使用數組處理圖像
數組物件的相關方法
獲取描述性統計信息
其他相關方法
數組的運算
數組跟標量的運算
數組跟數組的運算
通用一元函數
通用二元函數
廣播機制
Numpy常用函數
向量
行列式
矩陣
多項式
建立Series
對象
Series
物件的運算
Series
物件的屬性和方法
建立DataFrame
對象
DataFrame
物件的屬性與方法
讀寫DataFrame
中的數據
數據重塑
資料拼接
數據合併
資料清洗
缺失值
重複值
異常值
預處理
數據透視
獲取描述性統計信息
排序和頭部值
分組聚合
透視表和交叉表
數據呈現
計算同比環比
視窗計算
相關性判定
索引的使用
範圍索引
分類索引
多級索引
間隔索引
日期時間索引
安裝和導入matplotlib
創建畫布
創建坐標系
繪製圖表
折線圖
散點圖
長條圖
圓餅圖
直方圖
箱線圖
顯示和儲存圖表
高階圖表
氣泡圖
面積圖
雷達圖
玫瑰圖
3D圖表
Seaborn
Pyecharts
軟體過程模型
產品的Backlog(使用者故事、產品原型)。
計劃會議(評估和預算)。
日常開發(站立會議、番茄工作法、結對程式設計、測試先行、程式碼重構…)。
修復bug(問題描述、重現步驟、測試人員、被指派人)。
發布版本。
評審會議(Showcase,用戶需要參與)。
回顧會議(對當前迭代周期做一個總結)。
個體與互動高於流程與工具
工作的軟體高於詳盡的文檔
客戶合作高於合約談判
響應變化高於遵循計劃
可行性分析(研究做或不做),輸出《可行性分析報告》。
需求分析(研究做什麼),輸出《需求規格說明書》和產品介面原型圖。
摘要設計與詳細設計,輸出概念模型圖(ER圖)、實體模型圖、類別圖、時序圖等。
編碼/ 測試。
上線/ 維護。
經典過程模型(瀑布模型)
瀑布模型最大的缺點是無法擁抱需求變化,整套流程結束後才能看到產品,團隊士氣低落。
敏捷開發(Scrum)- 產品所有者、Scrum Master、研發人員- Sprint
補充:敏捷軟體開發宣言
角色:產品所有者(決定做什麼,能對需求拍板的人)、團隊負責人(解決各種問題,專注如何更好的工作,屏蔽外部對開發團隊的影響)、開發團隊(專案執行人員,具體指開發人員和測試人員)。
準備工作:商業案例和資金、合約、憧憬、初始產品需求、初始發布計畫、入股、組成團隊。
敏捷團隊通常人數為8-10人。
工作量估算:將開發任務量化,包括原型、Logo設計、UI設計、前端開發等,盡量把每個工作分解到最小任務量,最小任務量標準為工作時間不能超過兩天,然後估算整體專案時間。把每個任務都貼在看板上,看板上分成三部分:to do(待完成)、in progress(進行中)和done(已完成)。
專案團隊組建
程式碼註釋太少或沒有註釋
程式碼破壞了語言的最佳實踐
反模式程式設計(義大利麵程式碼、複製-貼上程式設計、自負程式設計、…)
團隊的組成和角色
說明:感謝付祥英女士幫我繪製了下面這張精美的公司組織架構圖。
程式設計規格和程式碼審查( flake8
、 pylint
)
Python中的一些「慣例」(請參考《Python慣例-如何寫Pythonic的程式碼》)
影響程式碼可讀性的原因:
團隊開發工具介紹
請參考《團隊專案開發的問題與解決方案》。
版本控制:Git、Mercury
缺陷管理:Gitlab、Redmine
敏捷閉環工具:禪道、JIRA
持續整合:Jenkins、Travis-CI
選題範圍設定
CMS(用戶端):新聞聚合網站、問答/分享社群、影評/書評網站等。
MIS(用戶端+管理端):KMS、KPI考核系統、HRS、CRM系統、供應鏈系統、倉儲管理系統等。
App後台(管理端+資料介面):二手交易類、報紙雜誌類、小眾電商類、新聞資訊類、旅遊類、社交類、閱讀類等。
其他類型:自身產業背景和工作經驗、業務容易理解和控制。
需求理解、模組劃分與任務分配
需求理解:腦力激盪和競品分析。
模組劃分:畫心智圖(XMind),每個模組是一個枝節點,每個特定的功能是一個葉節點(用動詞表達),需要確保每個葉節點無法再生新節點,確定每個葉子節點的重要性、優先權和工作量。
任務分配:由專案負責人根據上面的指標為每個團隊成員分配任務。
制定專案進度表(每日更新)
模組 | 功能 | 人員 | 狀態 | 完成 | 工時 | 計劃開始 | 實際開始 | 計劃結束 | 實際結束 | 備註 |
---|---|---|---|---|---|---|---|---|---|---|
評論 | 新增評論 | 王大槌 | 正在進行 | 50% | 4 | 2018/8/7 | 2018/8/7 | |||
刪除評論 | 王大鐵鎚 | 等待 | 0% | 2 | 2018/8/7 | 2018/8/7 | ||||
查看評論 | 白元芳 | 正在進行 | 20% | 4 | 2018/8/7 | 2018/8/7 | 需要進行程式碼審查 | |||
評論投票 | 白元芳 | 等待 | 0% | 4 | 2018/8/8 | 2018/8/8 |
OOAD和資料庫設計
UML(統一建模語言)的類別圖
透過模型建立表格(正向工程),例如在Django專案中可以透過下面的命令建立二維表。
python manage.py makemigrations app python manage.py migrate
使用PowerDesigner繪製實體模型圖。
透過資料表建立模型(反向工程),例如在Django專案中可以透過下面的命令產生模型。
python manage.py inspectdb > app/models.py
Docker簡介
安裝Docker
使用Docker建立容器(Nginx、MySQL、Redis、Gitlab、Jenkins)
建構Docker映像(Dockerfile的編寫和相關指令)
容器編排(Docker-compose)
叢集管理(Kubernetes)
基本原則
InnoDB引擎
索引的使用和注意事項
資料分割區
SQL優化
配置最佳化
架構最佳化
設計原則
關鍵問題
其他問題
文件撰寫
資料庫的配置(多資料庫、主從複製、資料庫路由)
快取的配置(分區快取、鍵設定、逾時設定、主從複製、故障復原(哨兵))
日誌的配置
分析與調試(Django-Debug-ToolBar)
好用的Python模組(日期計算、影像處理、資料加密、三方API)
RESTful架構
理解RESTful架構
RESTful API設計指南
RESTful API最佳實踐
API介面文件的撰寫
RAP2
YAPI
django-REST-framework的應用
使用快取緩解資料庫壓力- Redis
使用訊息佇列做解耦合和削峰- Celery + RabbitMQ
測試的種類
寫單元測試( unittest
、 pytest
、 nose2
、 tox
、 ddt
、…)
測試coverage
( coverage )
部署前的準備工作
關鍵設定(SECRET_KEY / DEBUG / ALLOWED_HOSTS / 快取/ 資料庫)
HTTPS / CSRF_COOKIE_SECUR / SESSION_COOKIE_SECURE
日誌相關配置
Linux常用指令回顧
Linux常用服務的安裝與配置
uWSGI/Gunicorn和Nginx的使用
對於不需要大量客製化的簡單應用程序,Gunicorn是一個不錯的選擇,uWSGI的學習曲線比Gunicorn要陡峭得多,Gunicorn的預設參數就已經能夠適應大多數應用程式。
uWSGI支援異質部署。
由於Nginx本身支援uWSGI,在線上一般都將Nginx和uWSGI捆綁在一起部署,而且uWSGI屬於功能齊全且高度客製化的WSGI中間件。
在性能上,Gunicorn和uWSGI其實表現相當。
Gunicorn和uWSGI的比較
使用虛擬化技術(Docker)部署測試環境和生產環境
AB的使用
SQLslap的使用
sysbench的使用
使用Shell和Python進行自動化測試
使用Selenium實現自動化測試
Selenium IDE
Selenium WebDriver
Selenium Remote Control
測試工具Robot Framework介紹
商業模式和需求要點
實體模型設計
第三方登入
快取預熱和查詢緩存
購物車的實現
支付功能集成
秒殺和超賣問題
靜態資源管理
全文檢索方案
MySQL資料庫調優
Web伺服器效能最佳化
Nginx負載平衡配置
Keepalived實現高可用
程式碼效能調優
多執行緒
非同步化
靜態資源存取最佳化
雲端儲存
CDN
電腦基礎
Python是基礎
Web框架相關
爬蟲相關問題
數據分析
項目相關