計算機發展歷史上最重要的預測法則 摩爾定律:單位面積集成電路上可容納晶體管數量約2年翻倍 cpu/gpu、內存、硬盤、電子產品價格等都遵循此定律前端
50年來計算機是惟一一個指數發展的領域python
源代碼、目標代碼(機器代碼)linux
編譯、解釋正則表達式
靜態語言、腳本語言算法
靜態語言編譯器一次性生成目標代碼,優化更衝份,程序運行速度更快shell
腳本語言 執行程序時須要源代碼,維護更靈活數據庫
程序的基本設計方法IPO編程
I:input 文件輸入、網絡輸入、控制檯輸入、交互界面輸入、內部參數輸入後端
P:process 處理設計模式
O:output 控制檯輸出、圖形輸出、文件輸出、網絡輸出、操做系統內部輸出
6個步驟:
-分析問題:分析問題的計算部分,想清楚
-劃分邊界:劃分問題的功能邊界,規劃IPO
-設計算法:設計問題的求解算法,關注算法
-編程
-調試測試
-升級維護
3個精簡步驟:肯定IPO、編程、調試運行
計算思惟(編程體現了一種抽象交互關係、自動化執行的思惟模式)、邏輯思惟、實證思惟
python 蟒蛇
psf 擁有者,開放、開源精神
Guido van Rossum創立
2002年 2.x
2008年 3.x
python3不兼容python2
交互式、文件式
linux自帶python2和python3,無需安裝,不過沒有pip,要安裝apt install python3-pip
實例1:溫度轉換
需求:攝氏度與華氏度相互轉換
#TempConvert.py TempStr = input("請輸入帶有符號的溫度值: ") if TempStr[-1] in ['F', 'f']: C = (eval(TempStr[0:-1]) - 32)/1.8 print("轉換後的溫度是{:.2f}C".format(C)) elif TempStr[-1] in ['C', 'c']: F = 1.8*eval(TempStr[0:-1]) + 32 print("轉換後的溫度是{:.2f}F".format(F)) else: print("輸入格式錯誤")
程序的格式框架:
代碼高亮 是輔助
縮進是語法要求 通常4個空格或者1個tab 表達代碼間包含和層次關係的惟一手段
註釋:單行註釋 # 多行註釋 」’ 」’
命名:給變量關聯標識符的過程
命名大小寫敏感、首字符不能是數字、不與保留字相同
保留字:被編程語言內部定義並保留使用的標識符 也大小寫敏感 33個
數據類型
字符串
用‘’或「」
正向遞增序號、反向遞減序號 正向0開始編號
索引: 可使用[M]索引其中單個字符
切片:可使用[M:N]返回其中一段子串,從第M到第N-1個字符
數字類型:整數、浮點數
列表:表示0到多個數據組成的有序序列,採用,分隔各元素,使用in判斷一個元素是否在列表中
= 賦值主語句
分支語句if elif else構成
eval 評估函數 去除參數最外側引號並執行餘下語句的函數
垂直輸出hello world
for i in 「Hello World」:
print(i)
輸出
x = input()
print(eval(x)**0,eval(x)**1,eval(x)**2,eval(x)**3,eval(x)**4,eval(x)**5)
計算機演進過程:
1946-1981 計算機系統結構時代 計算能力問題 1981年我的pc誕生
1981-2008 網絡和視窗時代 交互問題 2008 Android誕生 標誌pc轉向移動
2008-2016 複雜信息系統時代 數據問題 2016年alpha go戰勝人類
2017- 人工智能時代 人類的問題
新計算時代 過分到人工智能時代的中間時代
編程語言的初心
不徹底統計600多中語言 經常使用的也就那麼20來種
python已經在tiobe排行超過C++躍居第三
Python語言是通用語言、腳本語言、開源語言、跨平臺語言、多模型語言
–強制可讀性
–較少的底層語法元素
–多種編程方式
–支持中文字符
–C代碼量的10% 語法簡潔 *10
–13萬第三方庫 生態高產 *10
–快速增加的計算生態 每一年2萬
–避免重複造輪子
–開放共享
–跨操做系統平臺
人生苦短 我學Python
–C/C++:C歸C Python歸Python
–Java:針對特定開發和崗位需求
–HTML/CSS/JS:不可替代的前端技術,全棧能力
-R/GO/Matlab等:特定領域
Python是最高產的程序設計語言
–掌握抽象並求解計算問題綜合能力的語言
-瞭解產業界解決複雜計算問題方法的語言
-享受利用編程將創新變爲實現樂趣的語言
工具決定思惟:關注工具變革的力量!
python具備最龐大的生態庫,是惟一的超級語言,前進步伐不可阻擋
turtle庫基本介紹
import 保留字 引入turtle繪圖庫 海龜繪圖體系
turtle庫是turtle繪圖體系的Python實現 1969年誕生,主要用於程序設計入門 Python的標準庫之一 入門級的圖形繪製函數庫
Python計算生態=標準庫+第三方庫
庫library,包package,模塊module ,統稱模塊
有一隻海龜,其實在窗體正中心,在畫布上游走,走過的軌跡繪製的圖形,海龜由程序控制,能夠變換顏色寬度
turtle繪圖窗體佈局
turtle的一個畫布空間 最小單位是像素
屏幕座標系:屏幕左上角爲0 0
turtle.setup(width,height,startx,starty)後兩個可選 默認屏幕中央 並非必須的 用來設置窗體大小和窗體左上角與屏幕左上角的相對位置
turtle空間座標系:
絕對座標 海龜在屏幕中央 記爲(0,0)座標原點 turtle.goto(x,y)
海龜座標 以海歸的視角turtle.fd(d),turtle.bk(d),turtle.circle(r,angle) 左側r爲止爲中心行走angle角度的弧線
turtle角度座標體系
絕對角度 改變海龜前進方向 turtle.seth(angle)海龜角度 turtle.left(angle),turtle.right(angle)
RGB色彩體系 0-255整數或 0-1 的小數
默認採用小數制,可切換爲整數制 turtle.colormode(mode) mode爲1.0或255
庫引用
擴充Python程序功能的方式 使用import保留字完成,採用<a>.<b>()的編碼風格
from turtle import* 缺點 函數重名 適用於短的程序
from turtle import函數名
能夠as保留字起別名 import turtle as t –推薦使用
畫筆控制函數
畫筆操做後一直有效,通常成對出現
-turtle.penup() 別名turtle.pu() 擡起畫筆,海龜在飛行
-turtle.pendown() 別名turtle.pd() 落下畫筆,海龜在爬行
畫筆設置後一直有效,直到下次設置
-turtle.pensize(width) 別名turtle.width(width) 畫筆寬度,海龜腰圍
-turtle.pencolor(color) color爲顏色字符串或rgb值 畫筆顏色,海龜在塗裝
-顏色字符串 turtle.pencolor(「purple」)
-rgb小數 turtle.pencolor(0.63,0.13,0.94)
-rgb元組值 turtle.pencolor((0.63,0.13,0.94))
運動控制函數
控制海龜行進:走直線&走曲線
-turtle.forward(d) 別名 turtle.fd(d) 向前行進,海龜走直線 d能夠爲負數
-turtle.circle(r,extent=none) 根據半徑r繪製extent角度的弧線 r默認圓心在海龜左側r距離的位置 -extent繪製角度,默認是360度
方向控制函數
turtle.setheading() 別名turtle.seth() 控制海龜面對方向:絕對角度 海龜角度
turtle.left() turtle.right()
循環語句
for in 保留字
range() 產生循環計算序列 range(N) range(M:N) 0到N-1 M到N-1
turtle.done() 運行結束 不退出 須要手工退出 去掉就自動退出了
整數類型:可正可負 取值無限 pow(x,y) x的y次方
4種進製表示:10進制、二進制0b或0B開頭 0b0十、8進制0o或0O、16進制0x或0X
浮點型 10的308次方 精度達到:10的-16次方小數 即53位二進制 與數學中實數一致
不肯定尾數 (浮點數運算)不是bug 53位二進制表示浮點數的小數部分 約10的-16次方 計算機中的二進制和十進制不徹底對等
二進制表示小數,能夠無限接近,但不徹底相同
0.1+0.2 結果接近0.3
0.1+0.2 == 0.3 false 用round(x,d)處理不肯定尾數 不肯定位數通常發生在10的-16次方左右
科學計數法 e或E做爲冪的符號,10爲基數 <a>e<b> 4.3e-3
複數類型 z.real z.imag 得到實部和虛部
數值運算操做符
x+y x-y x*y x/y x//y +x -y x%y x**y ps:x/y 是浮點數 別的語言中不是這樣
二元操做符有對應的加強賦值操做符
x op =y x+=y x-=y x*=y x/=y x//=y x%=y x**=y
類型間能夠混合運算 結果生成爲「最寬」的類型 隱式轉換 整數->浮點數->複數 如123+4.0=127.0
數值運算函數
abs(x) 絕對值
divmod(x,y) 商餘 divmod(10,3) 結果是二元數(3,1)
pow(x,y[,z]) 冪餘
round(x[,d]) 四捨五入
max(x1,x2,..)
min(x1,x2,..)
int(x) 顯示類型轉換, 變爲整數,捨棄小數
float(x) 轉浮點數
complex(x) 轉複數
問題分析:持續的價值 一年365天天天進步1%,累計進步多少?相反,天天退步1%,累計剩下多少?若是三天打漁二天曬網呢?
天天進步或退步0.1%
若是是0.5% 1%呢
若是是工做日的力量?工做日進步1%,休息日退步1%工做日的努力要達到多少才能和天天努力1%同樣?
四種字符串表示方法:
由一對單引號或雙引號表示單行字符串
由一對三引號或三雙引號表示多行字符串
三單引號表示字符串,程序啥都不執行,至關於註釋,python實際沒有真正提供多行註釋
[M:N:K]根據步長對字符串切片 M和N都可以缺失,表示至開頭或至結尾
[::-1]倒序轉義符\ \b 回退 \n 換行 \r 回車光標移動到行首
字符串操做符
x+y 鏈接兩個字符串
n*x或x*n 複製n次字符串x
x in s
字符串處理函數
len(x) 字符串長度 中英文長度都是1
str(x) 強制類型轉換爲字符串 和eval相反操做
hex(x) 整數x轉變爲8進制形式
oct(x) 整數x轉變爲16進制形式
chr(x) 將unicode編碼返回其字符形式
ord(x) 上面的反操做
unicode編碼 統一字符編碼 從0到1114111(0x10FFFF) Python字符串每一個字符都是unicode編碼
字符串處理方法
<a>.<b> 形式 面向對象的術語 表示對象的動做
8個字符串處理方法
.lower() .upper() 大小寫轉換
.split(sep=None) 字符串分割,返回一個列表 例:」a,b,c」.split(‘,’)結果是[‘a’, ‘b’, ‘c’]
.count(sub) 字符串sub在其中出現次數
.replace(old,new) 字符串替換
.center(width[,fillchar]) 字符串格式處理,字符串居中 例: ‘python’.center(30,’=’) 結果’============python============’
.strip(chars) 去除字符換兩邊字符 如:’= python= ‘.strip(‘ =np’)結果’ytho’
.join(iter) 填充字符 如:’,’.join(‘12345′)結果’1,2,3,4,5’
字符串類型的格式化
格式化是對字符串進行格式化表達的方式
.format方法 用法:<模板字符串>.format(<逗號分隔的參數>)
槽 至關於佔位信息符,只在字符串中有用
分爲2組
前三個參數是一組 默認填充空格左對齊
如: 「{:=^20}」.format(「python」) 結果: ‘=======python=======’
如: 「{0:,.2f}」.format(12345.6789) 結果 ‘12,345.68’
如:」{0:b} {0:c} {0:d} {0:o} {0:x} {0:X}」.format(425) 結果’110101001 Ʃ 425 651 1a9 1A9′
如: 「{0:e} {0:E}{0:f} {0:%}」.format(3.14) 結果 ‘3.140000e+00 3.140000E+003.140000 314.000000%’
time庫是Python中處理時間的標準庫
時間獲取
time() 獲取當前時間戳,即計算機系統內部時間值,浮點數 1970年1月1日0點0分開始到當前系統以秒爲單位的浮點數 如:1537763974.4934046
ctime() 獲取當前時間,返回字符串,人類易讀 如:’Mon Sep 24 12:41:59 2018′
gmtime() 獲取當前時間,struct_time格式,計算機易處理的格式
如:time.struct_time(tm_year=2018, tm_mon=9, tm_mday=24, tm_hour=4, tm_min=42, tm_sec=52, tm_wday=0, tm_yday=267, tm_isdst=0)
時間格式化
strftime()格式化字符串
striptime()
程序計時
perf_counter()sleep()
問題分析:採用字符串方式打印能夠動態變化的文本進度條 能在一行中逐漸變化
刷新的本質:用後打印的字符覆蓋以前的字符
print() 默認加換行 print( ,end=」」)不換行 \r退格到行首
idle不是主要的運行環境 因此\r功能在idle屏蔽了 用shell執
文本進度條 簡單的開始
文本進度條 單行動態刷新文本進度條 實例完整效果
單分支結構
if <條件>:
<程序1>
二分支結構
if <條件1>:
<程序1>
else:
<程序2>
緊湊形式:適用於簡單表達式的二分支結構
<表達式1> if <條件> else <表達式2>
如:
guess = eval(input())
print(「猜{}了」.format(「對」if guess == 99 else 」錯」))
多分支結構
if <條件1>:
<程序2>
elif <條件2>:
<程序3
…
else:
<程序n>
條件判斷> >= < <= == !=
條件組合x and y x or y not x
異常處理
try:
程序1
except [NameError]:
程序2
try:
程序1
except:
程序2
else:
程序3
finally:
程序4
問題分析:BMI是身體肥胖程度的刻畫(BODY MASS INDEX) BMI=體重(kg)/身高的平方(m),接收用戶信息判斷身體肥胖程度
for 遍歷循環
for <循環變量> in <遍歷結構>:
<語句塊>
記數循環
for I in range(5):
print(i)
for I in range(m:n:k):
print(i)
字符串遍歷循環
for c in s:
<語句塊>
for c in 「Python123」:
print(c)
列表遍歷循環ls是列表
for item in ls:
<語句塊>
for item in [123,」py」,456]:
print(item,end=’,’)
文件遍歷循環 fi是文件標識符
for line in fi:
<語句塊>
while 無限循環
while <條件>:
<語句>
循環控制保留字break continue
循環擴展:兩種循環後面均可以加else分支 else爲沒有被break退出是執行的,做爲正常運行的獎勵
random庫是使用隨機數的python標準庫
計算機無法產生真正的隨機數,可是可使用梅森旋轉算法產生僞隨機數
使用 import random
random庫包括2類函數,經常使用共8個
基本隨機數函數:seed(),random()
括展隨機數函數:randint(),getrandbits(),uniform(),randrange(),choice(),shuffle()
隨機數種子
seed(a=None) 初始化給定的隨機數種子,默認爲系統當前時間,例:random.seed(10) #產生種子10對應的序列 0.5714025946899135 0.4288890546751146 ..
random() 生成一個[0.0,1.0)之間的隨機小數,例:random.random()
爲何要使用隨機數種子呢,由於可使用相同的隨機數種子復現程序的執行狀況
randint(a,b) 生成一個[a,b]之間的整數,例:random.randint(10,100)
randrange(m,n[,k]) 生成一個[m,n)之間以k爲步長的隨機整數,例:random.random(10,100,10)
getrandbits(k) 生成一個k比特長的隨機整數
uniform(a,b) 生成一個[a,b]之間的隨機小數
choice(seq) 從序列中隨機選擇一個元素,例:random.choice([1,2,3,4,5,6])
shuffle(seq) 將序列中元素隨機排序,返回打亂後的序列,例:s=[1,2,3,4];random.shuffle(s);print(s)
蒙特卡羅方法 工程方法
數學思惟
計算思惟
time庫perf_counter來關注程序性能
據統計,程序80%的時間消耗在不到10%的代碼上 有點兒相似28法則
關注循環
函數定義
函數是一段具備特定功能可複用的語句
df <函數名>(參數):
<函數體>
return <返回值>
其中參數能夠是0個到多個,是佔位符
函數不通過調用是不會執行的
函數就是IPO的實現
函數也是一段完整代碼的封裝
函數的參數傳遞
可選參數傳遞:能夠爲參數指定默認值,變爲可選參數,可選參數要放在非可選參數以後可變參數傳遞:不肯定參數有多少個
參數傳遞的兩個方式
默認是按照位置,能夠按照名稱方式傳遞
函數的返回值
return能夠返回0個或多個結果
函數能夠有返回值也能夠沒有
能夠有return 也能夠沒有
返回多個值的時候是返回元組類型 用() 元素用逗號分隔
局部變量與全局變量
函數外邊的是全局變量,裏面是局部變量
局部變量是函數內部的佔位符,可能與全局變量重名單不相同
函數運行結束後局部變量被釋放
規則1:局部變量與全局變量是不一樣變量
可使用global保留字在函數內部使用全局變量
規則2:局部變量若是是組合數據類型且未被建立,等同於全局變量 組合數據類型實際是指針的緣由
lambda函數
lambda函數返回函數名做爲結果
lambda函數是一種匿名函數,沒有名字的函數
lambda函數用於定義一種簡單的可以在一行內表示的函數
是一種函數的緊湊表達形式
<函數名> = lambda <參數>:<表達式>
f = lambda x,y : x + y
f(10,15)
謹慎使用lambda函數
用於特定的方法的參數
通常就算是1行代碼,也建議用def方式定義
問題分析:用turtle繪製數碼管樣式的時間
代碼複用
代碼抽象化:使用函數等方法對代碼賦予更高級別的定義
函數和對象是代碼複用的2中主要形式
函數是在代碼層面創建了初步抽象
對象有屬性和方法,是更高級別的抽象
封裝
模塊化設計
分而治之:
經過函數或對象封裝將程序劃分爲模塊與模塊間的表達
主程序、子程序與子程序之間的關係
通常將子程序看做模塊,主程序看做模塊與模塊間的關係
是一種分而治之、分層抽象、體系化的設計思想
緊耦合:兩個部分之間交流不少,沒法獨立存在
鬆耦合:兩個部分之間交流不多,能夠獨立存在,有各自清晰簡單的接口
模塊化設計基本思路和原則:模塊內部緊耦合,模塊之間鬆耦合
函數遞歸:函數定義中調用自身的方式
兩個關鍵特徵
鏈條:計算過程存在遞歸鏈條
基例:存在一個或者多個不須要再次遞歸的基例 遞歸的最末段
相似數學概括法,先證實第一個取值命題成立,而後第n個取值命題成立,第n+1取值命題也成立,那麼命題成立
遞歸能夠理解爲數學概括法思惟在編程中的體現
函數遞歸的調用
函數+分支語句 :基例和鏈條分別編寫代碼
3個小栗子
是第三方庫 須要安裝
pip工具
shell中使用使用 pyinstaller –F <文件名.py>
分形幾何
集合是多個元素的無序組合,每一個元素惟一,不存在相同元素
集合元素不可更改,不能是可變數據類型,好比列表類型就不能做爲元素,整數浮點數複數字符串元組類型等都是不可變數據類型
用{}表示,元素間用逗號分隔
創建集合用{}或者set()
例如:B = set(「pypy123」) 結果{‘1’,’2’,’3’,’p’,’y’}
創建空集合必須用set()
6個集合操做符
S | T 並
S – T 差
S & T 交
S ^ T 補
S <= T、S < T 包含與子集關係
S >= T、S > T
加強操做符
S |= T
S –= T
S &= T
S ^= T
10個集合處理方法
S.add(x) 若是x不在S中,將x元素加入S集合
S.discard(x) 移除S中元素x,若是x不在集合S中,不報錯
S.remove(x) 移除S中元素x,若是x不在S中,產生KeyError異常
S.clear() 移除S中全部元素
S.pop() 隨機返回S的一個元素,更新S,若S爲空產生KeyError異常
S.copy() 返回集合S的一個副本
len(S) 返回個數
x in S 判斷S中是否有元素x
x not in S 同上相反
set(x) 將其餘類型變量x轉變爲集合類型
集合類型應用場景
包含關係的比較
數據去重
序列是有前後順序的一組元素
序列是一維元素向量,元素類型能夠不一樣,相似C語言中的一維數組
元素間由序號引導,經過下標訪問序列的特定元素
序列是一個基類類型
通常不直接用序列類型而是使用其衍生類型,好比字符串、元組、列表序列處理函數與方法
元組類型
元組是一種序列類型,一旦建立就不能被修改
使用()或者tuple()建立,元素間用逗號分隔
可使用或不適用小括號,好比函數返回多個返回值就是使用沒有括號的元組類型,python內部認爲是一個值,是一個元組
元組類型繼承了序列的全部通用操做
元組類型由於一旦定義不能修改,因此沒有特殊操做
列表類型及操做
列表是序列類型的擴展,十分經常使用
列表是一種序列類型,建立後能夠隨意修改,長度無限制,元素類型可不一樣列表本質是指針,若是經過賦值語句給另一個變量,那麼實際並無建立一個新列表,能夠相似linux的硬連接,[]或者函數list()纔是真正建立一個列表,賦值僅僅傳遞引用
一些例子
一些例子
序列類型應用場景
包含元組列表
元組用於元素不改變的場景,更多用於固定場景 好比函數返回值
列表則更加靈活,是經常使用的序列類型
最主要做用:表示一組有序數據並進而操做它們
元素遍歷 for item in lt
數據保護 利用元組不可修改的特性
問題分析:給出一組數據,給出概要理解,好比 求和、平均值、方差、中位數…
總個數:len()
求和:for … in
平均值:上2個除
方差:各數據與平均值的平方的和的平均數
中位數:排序,取中間的或者中間2個數平均數
字典類型的定義
映射 是一種鍵(索引)和值(數據)的對應
用{}或者dict()建立字典,鍵值對用:表示 {key:value,key2:value2…}
type()能夠檢測變量的類型
{}能夠用來聲明空字典,這就是集合類型中定義空集合不能用{}的緣由一些例子
優秀的中文分詞第三方庫
因爲中文是連續書寫的 須要經過特定手段得到單個詞語
jieba庫提供3種分詞模式,最簡單隻須要掌握一個函數
經過中文詞庫方式識別肯定漢字之間關聯機率 機率大的組成詞組,造成分詞效果
除了分詞,用戶也能夠添加自定義的詞組
三種模式
精確模式:把文本精確的切分開,不存在冗餘單詞 最經常使用的分詞模式
全模式:把文本中全部可能的詞語都掃描出來,存在冗餘
搜索引擎模式:更加智能,在精確模式的基礎上,對長詞再次切分,存在冗餘,在某些特定場景下使用
問題分析:一篇文章,出現了哪些詞?哪些詞最多?
中英文各一個程序:分別是哈姆雷特和三國演義
文件的類型
文本文件、二進制文件 只是展現方式,本質上都是二進制數據
文本文件:由單一特定編碼組成的文件,如utf-8編碼 因爲存在編碼,文本文件也被看爲一個長字符串
二級制文件:數據間沒有統一字符編碼,01組成,好比png avi等文件
文件的打開和關閉
打開->操做->關閉 文件存儲狀態和佔用狀態轉換
文件的打開
<變量名> = open(<文件名>,<打開模式>)
文件句柄
文件路徑和名稱,使用相對路徑或者絕對路徑,同一個路徑的話就直接文件名,斜槓\是轉移字符使用反斜槓/替換,或者\\
打開模式
<變量名>.close 關閉文件
當程序退出的時候,python也會自動關閉文件
文件內容的讀取
<f>.read(size=-1) 讀入所有內容,若是給出參數,讀入前size長度
<f>.readline(size=-1) 讀入一行,若是給了size,讀入該行前size長度
<f>.readlines(hint=-1) 讀入文件全部行,以每行爲元素造成列表,hint參數可選,讀入前hint行
遍歷全文本文件的逐行處理
文件寫入
<f>.write(s) 向文件寫入一個字符串或字節流 如:f.write(「abc」)
<f>.writelines(lines) 將一個元素全爲字符串的列表寫入文件 如:ls=[‘a’,’b’,’c’],f.writelines(ls)
<f>.seek(offset) 改變當前文件操做指針的位置,offset含義以下:0文件開頭,1-當前位置,2-文件結尾
例子:
問題分析:根據腳原本繪製圖形 不是寫代碼而是寫數據繪製軌跡
自動化思惟
將數據和功能分離開來
數據驅動
接口化設計
能夠擴展
擴展接口設計,增長更多控制接口
擴展功能設計,增長弧形等更多功能
擴展應用需求,發展自動軌跡繪製到動畫繪製
一維數據:由對等關係的有序或無序數據構成,採用線性方式組織,對應列表、集合、數組等概念
二維數據:由多個一維數據組成,是一維數據的組合形式
多維數據:是一維或二維數據在新惟獨上擴展造成,好比中國大學排行榜加入時間維度
高維數據:僅利用最基本的二元關係展現數據間的複雜結構,好比字典類型中的key-value形式
操做週期
一維數據的表示
若是數據間有序,使用列表類型
若是數據間無序,使用集合類型
一維數據的存儲一維數據的處理
相似於一個驅動
二維列表
兩層for循環遍歷二維列表
csv:comma-separated values 逗號分隔 國際通用 通常.csv爲擴展名
每行一個一維數據,無空行
通常的軟件都能生成csv格式文件
若是每一個元素缺失,逗號要保留
表頭能夠做爲數據存儲,也能夠令行存儲
若是數據中包含逗號,不一樣的軟件有不一樣的約定,好比轉義符或者其餘方式
按行存或者按列存都行,通常索引習慣 ls[row][col] 先行後列,按行存
二維數據的處理
讀入處理
詞雲展現的第三方庫
wordcloud庫把詞雲看成一個WordCloud對象
wordcloud.WordCloud()表明一個文本對應的詞雲
能夠根據文本中詞語出現的頻率等參數繪製詞雲
繪製詞雲的形狀、尺寸、顏色均可以設定
w = wordcloud.WordCloud()
以WordCloud對象爲基礎
配置參數、加載文本、輸出文件
常規方法
w.generate(txt) 向WordCloud對象w中加載文本txt 如:w.generate(「Python and WordCloud」)
w.to_file(filename) 將詞雲輸出爲圖像文件,.png或.jpg格式 如:w.to_file(「output.png」)
繪製詞雲的步驟:
setp1:配置對象參數
setp2:加載詞雲文本
step3:輸出詞雲文件
生成默認400*200的圖片
wordcloud幹啥了:
a.分隔:以空格爲分隔單詞
b.統計:單詞出現次數並過濾
c.字體:根據統計配置字號
d.佈局:顏色環境尺寸
對象參數
width 默認400
height 默認200
min_font_size 最小字號 默認4號
max_font_size 最大字號 根據高度自動調節
font_step 默認1,字體步進間隔
font_path 字體路徑,默認None,如:w=wordcloud.WordCloud(font_path=」msyh.ttc」)
max_words 指定詞雲顯示的最大單詞數量,默認200 好比詞雲顯示的不那麼有力,能夠修改這個
stop_words 指定排除單詞 如:w=wordcloud.WordCloud(stop_words={「Python」})
background_color 指定背景色 默認黑色
默認顯示的矩形效果,使用mask參數能夠改變
中文的話須要先用jieba庫分詞,中文不是空格分隔的
常規矩形詞雲不規則詞雲
自頂向下(設計) 分而治之
將一個總問題表達爲若干個小問題組成的形式
使用相同的方法進一步分解小問題
解決複雜問題的有效設計方法
自底向上(執行) 模塊化集成
逐步組建複雜系統的有效測試方法
分單元測試,逐步組裝
計算思惟與程序設計
第三種人類思惟特徵
邏輯思惟:以推理和演繹爲特徵,以數學爲表明,A->B,B->C,A->C
實證思惟:以實驗和驗證爲特徵,以物理爲表明,引力波<-實驗
計算思惟:以設計和構造爲特徵,計算機爲表明,漢諾塔遞歸
有很是明顯的特徵:抽象和自動化,抽象問題的計算過程並利用計算自動化求解(並非抽象因果關係僅僅是抽象過程)
1+2+..+100 高斯 vs 累計
圓周率 高數求和 vs 蒙特卡洛方法
漢諾塔問題 邏輯推理的2的n次方-1 vs 遞歸
計算思惟基於計算機強大的算力和海量的數據
抽象計算過程,關注設計和構造,而非因果
以計算機程序設計爲主要實現手段
編程是將計算思惟變爲現實的手段
計算生態與Python語言
從開源運動提及…
-1983年,Richard Stallman啓動GNU項目
-1989年,GNU通用許可協議誕生,自由軟件時代到來 大教堂模式
-1991年,Linus Torvalds發佈了Linux內核 集市模式(成爲主流)
-1998年,網景瀏覽器開源,產生了Mozilla,開源生態逐步創建
計算生態以開源項目爲組織形式,充分利用「共識原則」和「社會他人」組織人員,在競爭發展、相互依存和迅速更迭中完成信息技術的更新換代,造成了技術的自我演進路徑。
開源思想深刻演化和發展,造成了計算生態
計算生態是沒有頂層設計、以功能爲單位、具有三個特色:競爭發展、相互依存和迅速更迭
python
-以開源項目爲表明的大量第三方庫 Python語言提供 > 13萬個第三方庫 並以兩萬+每一年的速度發展
-庫的建設通過野蠻生長和天然選擇 同一個功能,Python語言提供2個以上第三方庫
-庫之間相互關聯使用,依存發展 Python庫間普遍聯繫,逐級封裝
-社區龐大,新技術更迭迅速 Alpha Go深度學習算法採用Python語言開源
API != 生態
創新:跟隨創新、集成創新、原始創新
-計算生態加速科技類應用創新的重要支撐
-發展科技產品商業價值的重要模式
-國家科技體系安全和穩固的基礎
刀耕火種 –> 站在巨人的肩膀上
-編程的起點不是算法而是系統
-變成如同搭積木,利用計算生態爲主要模式
-編程的目標是快速解決問題
優質的計算生態 python123 由老師、產業人員共同篩選的優質生態https://python123.io/index/monthly_packages/201808
用戶體驗與軟件產品
實現功能 –> 關注體驗
用戶體驗指用戶對產品創建的主管感覺和認識
關心功能實現,更要關心用戶體驗,才能作出好產品
編程只是手段,不是目的,程序最終爲人類服務
提升用戶體驗的方法
方法1:進度展現
-若是程序須要計算時間,可能產生等待,請增長進度展現
-若是程序須要若干步驟,須要提示用戶,請增長進度展現
-若是程序可能存在大量次數的循環,請增長進度展現
方法2:異常處理
-當得到用戶輸入時候,對合規性須要檢查,須要異常處理
-當讀寫文件時,對結果進行判斷,須要異常處理
-當進行輸入輸出時,對運算結果進行判斷,須要異常處理
其餘方法:
-打印輸出:特定位置,輸出程序運行的過程信息verbose
-日誌文件:對程序異常以及用戶的使用進行按期記錄
-幫助信息:給用戶多種方式提供幫助
軟件程序 到 軟件產品,其核心關鍵就是用戶體驗
基本的程序設計模式
IPO
模塊化設計
自頂向下設計
配置化設計 (自動軌跡繪製實例)
-引擎+配置:程序執行和配置分離,將可選參數配置化
-將程序開放變爲配置文件編寫,擴展功能而不修改程序
-關鍵在於接口設計,清晰明瞭,靈活擴展,這是一種更高級別的設計思路
應用開發的四個步驟:
1.產品定義 對應用需求充分理解和明肯定義
-產品定義,而不只是功能定義,要考慮商業模式
2.系統架構 以系統方式思考產品的技術實現
-系統架構,關注數據流、模塊化、體系架構
3.設計與實現 結合架構完成關鍵設計及系統實現
-結合可擴展性、靈活性、是否適應將來需求變化等進行設計優化
4.用戶體驗 從用戶角度思考應用效果
-用戶至上,體驗優先,以用戶爲中心構造軟件產品
看見更大的Python世界
13萬個第三方庫 全區社區 https://pypi.org
PYPI
-Python Package Index
-PSF維護的展現全球Python計算生態的主站
-學會檢索並利用PyPI,找到合適的第三方開發程序
3種安裝方法:
-方法1(主要方法):使用pip命令
-方法2:集成安裝方法
-方法3:文件安裝方法
pip安裝方法(最主要的方法)
pip -h 能夠查看幫助
pip install <第三方庫名> 安裝
pip install –U <第三方庫名> 升級
pip uninstall <第三方庫名> 卸載
pip download <第三方庫名> 下載單並不安裝
pip show <第三方庫名> 列出某個第三方庫的詳細信息
pip search 關鍵詞 搜索第三方庫
pip list 列出已安裝的第三方庫
集成安裝方法
結合安裝工具,批量安裝,不過這樣的安裝工具很少,推薦一個叫anaconda
文件安裝方法
爲何有些第三方庫用pip能夠下載,單沒法安裝?
-某些第三方庫下載後,須要編譯再安裝
-若是操做系統沒有編譯環境,則能下載單不能安裝
-能夠找編譯後的版原本安裝嗎 http://www.lfd.uci.edu/~gohlke/pythonlibs UCI頁面 加州大學教授維護的 win系統的直接編譯後的版本
pip install 文件
os庫提供通用的、基本的操做系統交互功能
是python標準庫,由幾百個函數,包括經常使用路徑操做、進程管理、環境參數等幾類
-路徑操做:os.path子庫,處理文件路徑及信息
-進程管理:啓動系統中其餘程序
-環境參數:得到系統軟硬件信息等參數
路徑操做
os.path子庫以path爲入口,用於操做和處理文件路徑
import os.path
import os.path as op
os庫進程管理
os.system(command) 調用其餘程序
os庫之環境參數
獲取或改變系統環境信息
第三方庫自動安裝腳本
從數據處理到人工智能的完整鏈條:數據表示->數據清洗->數據統計->數據可視化->數據挖掘->人工智能
Python庫之數據分析
Numpy:表達N維數組的最基礎庫
-Python接口使用,C語言實現,計算速度優異
-Python數據分析及科學計算的基礎庫,支撐Pandas等
-提供直接的矩陣運算、廣播函數、線性代數等功能
Pandas:Python數據分析高層次應用庫
-提供了簡單易用的數據結構和數據分析工具
-理解數據類型與索引的關係,操做索引即操做數據
-Python庫最主要的數據分析功能庫,基於Numpy開發
提供兩個數據結構:
Series = 索引 + 一維數據
DataFrame = 行列索引 + 二維數據
Scipy:數學、科學和工程計算功能庫
-提供了一批數學算法及工程數據運算功能
-相似Matlab,可用於傅里葉變換、信號處理等應用
–Python最主要的科學計算功能庫,基於Numpy開發
Python庫之數據可視化
Matplotlib:高質量的二維數據可視化功能庫,有大量子庫
-提供了超過100種數據可視化展現效果
-經過matplotlib.pyplot子庫調用各可視化效果
-Python最主要的數據可視化功能庫,基於Numpy開發
Seaborn:統計類數據可視化功能庫
-提供了一批高層次的統計類數據可視化展現效果
-主要展現數據間分佈、分類和線性關係等內容
-基於Matplotlib開發,支持Numpy和Pandas
Mayavi:三維科學計算可視化功能庫
-提供了一批簡單易用的3D科學計算數據可視化展現效果
-目前是Mayavi2,三維可視化最主要的第三方庫
-支持Numpy、TVTK、Traits、Envisage等第三方庫
Python庫之文本處理
PyPDF2:用來處理pdf文件的工具集
-提供了一批處理PDF文件的計算功能
-支持獲取信息、分隔/整合文件、加密解密等
-徹底Python語言實現,不須要額外依賴,功能穩定
NLTK:天然語言文本處理第三方庫
–提供了一批簡單易用的天然語言文本處理功能
-支持語言文本分類、標記、語法句法、語義分析等
-最優秀的Python天然語言處理庫
Python-docx:建立或更新word文檔的第三方庫
-提供建立或更新.doc .docx等文件的計算功能
-增長並配置段落、圖片、表格、文字等,功能全面
Python庫之機器學習
Scikit-learn:機器學習方法工具集
-提供一批統一化的機器學習方法功能接口
-提供聚類、分類、迴歸、強化學習等計算功能
-機器學習最基本且最優秀的Python第三方庫
TensorFlow:AlphaGo背後的機器學習計算框架
-谷歌公司推進的開源機器學習框架
-將數據流圖做爲基礎,圖節點表明運算,邊表明張量
-應用機器學習方法的一種方式,支撐谷歌人工智能應用
MXNet:基於神經網絡的深度學習計算框架
-提供可擴展的神經網絡及深度學習計算功能
-可用於自動駕駛、機器翻譯、語音識別等衆多領域
-Python最重要的深度學習計算框架
問題分析:
啥是雷達圖
霍蘭德認爲:人格興趣和職業之間有內在的對應關係
人格分類:研究型、藝術型、社會型、企業型、傳統型、現實型
職業:工程師、實驗員、藝術家、推銷員、記事員、社會工做者
需求:雷達圖方式驗證霍蘭德人格分析
輸入:各職業人羣結合興趣的調研數據
輸出:雷達圖
展現多維數據以及繪製雷達圖的能力目標+沉浸+熟練
-編程的目標感:尋找感興趣的目標,尋(wa)覓(jue)之
-編程的沉浸感:尋找可實現的方法,思(zuo)考(mo)之
-編程的熟練度:練習、練習、再練習,熟練之
編程不是最主要的,編程的感受纔是最重要的
Python庫之網絡爬蟲
Requests:最友好的網絡爬蟲庫
-提供了簡單易用的類HTTP協議網絡爬蟲功能
-支持鏈接池、SSL、Cookies、HTTP(S)代理等
-Python最主要的頁面級網絡爬蟲功能庫
Scrapy:優秀的網絡爬蟲框架
-提供了構建網絡爬蟲系統的框架功能,半成品
-支持批量和定時頁面爬取、提供數據處理流程等
-Python最主要且最專業的網絡爬蟲框架
pyspider:強大的Web頁面爬取系統
-提供了完整的網頁爬取系統構建功能
-支持數據庫後端、消息隊列、優先級、分佈式架構等
-Python重要的網絡爬蟲第三方庫
Python庫之Web信息提取
Beautiful Soup:HTML和XML的解析庫
-提供瞭解析HTML和XML等Web信息的功能
-又名beautifulsoup4或bs4,能夠加載多種解析引擎
-常與網絡爬蟲庫搭配使用,如Scrapy、requests等
Re:正則表達式解析和處理功能庫
-提供了定義和解析正則表達式的一批通用功能
-可用於各種場景,包括定點的Web信息提取
-Python最主要的標準庫,無需安裝
Python-Goose:提取文章類型Web頁面的功能庫
-提供了對Web頁面中文章信息/視頻等元數據的提取功能
-針對特定類型Web頁面,應用覆蓋面較廣
相對於bs4庫,抽象層次更加高,更加方便
Python庫之Web網站開發
Django:最流行的Web應用框架
-提供了構建Web系統的基本應用框架
-MTV模式:模型(model)、模式(Template)、視圖(Views)
-Python最重要的Web應用框架,略微複雜的應用框架,比較適合專業的網站構建
Pyramid:規模適中的Web應用框架
-提供了簡單方便構建Web系統的應用框架
-不大不小,規模適中,適合快速構建並適度擴展類應用
-Python產品級Web應用框架,起步簡單可擴展性好
Flask:Web應用開發微框架
-提供了最簡單構建Web系統的應用框架
-特色是:簡單、規模小、快速
-Django > Pyramid > Flask好
Python庫之網絡應用開發
WeRoBot:微信公衆號開發框架
-提供瞭解析微信服務器消息及反饋消息的功能
-創建微信機器人的重要手段
aip:百度AI開放平臺接口
-提供了訪問百度AI服務的Python接口
-語音、人臉、OCR、NLP、知識圖譜、圖像搜索等領域
-Python百度AI應用的最主要方式
MyQR:二維碼生成第三方庫
-提供了生成二維碼的系列功能
-基本二維碼、藝術二維碼和動態二維碼
Python庫之圖形用戶界面
PyQT5:QT開放框架的Python接口
-提供了建立QT5程序的Python API接口
-Qt是很是成熟的跨平臺桌面應用開發系統,完備GUI
-推薦的Python GUI開發第三方庫
wxPython:跨平臺GUI開發框架
-提供了專用於Python的跨平臺GUI開發框架
-Python最主要的圖形用戶界面
PyGObject:使用GTK+開發GUI的功能庫
-提供了整合GTK+、WebKitGTK+等庫的功能
-GTK+:跨平臺的一種GUI框架
-實例:Anaconda採用該庫構建GUI
Python庫之遊戲開發
PyGame:簡單的遊戲開發功能庫
-提供了基於SDL的簡單遊戲開發功能及實現引擎
-理解遊戲對外部輸入的相應機制及角色構建和交互機制
-Python遊戲入門最主要的第三方庫
Panda3D:開源、跨平臺的3D渲染和遊戲開發庫
-一個3D遊戲引擎,提供Python和C++兩種接口,Python接口更加全面也是該庫推薦使用的語言
-支持不少先進特性:法線貼圖、光澤貼圖、卡通渲染等
-由迪士尼和卡內基梅隆大學共同開發
cocos2d:構建2D遊戲和圖形界面交互應用的框架
-提供了基於OpenGL的遊戲開發圖形渲染功能
-支持GPU加速,採用樹形結構分層管理遊戲對象類型
-適用於2D專業級遊戲開發
Python庫之虛擬現實
VR Zero:在樹莓派上開發VR應用的Python庫
-提供大量與vr開發相關的功能
-針對樹莓派的vr開發庫,支持設備小型化,配置簡單化
-很是適合初學者實踐vr開發及應用
pyovr:Oculus Rift的Python接口
-針對Oculus VR設備的python開發庫
-基於成熟的VR設備,提供全套文檔,工業級應用設備
-Python+虛擬現實領域探索的一種思路
Vizard:基於Python的通用VR開發引擎
-專業的企業級虛擬現實開發引擎
-提供詳細的文檔
-支持多種主流的VR硬件設備,具備必定的通用性
Python庫之圖形藝術
Quads:迭代的藝術
-對圖片進行四分迭代,造成像素風
-能夠生成動態或者靜態圖片
-簡單易用,具備很高展現度
ascii_art:ASCII藝術庫
-將普通圖片轉爲ASCII藝術風格
-輸出能夠是純文本或彩色文本
-可採用圖片格式輸出turtle庫
問題分析: