今天,咱們正式開始數據分析課程的基礎篇,Python 基礎。html
爲何是 Python 呢,在相關的開發語言調查中,使用過 Python 的開發者,大多數人都會把 Python 做爲本身的主要語言。在數據分析領域,使用 Python 語言更是最多的。Python 語言語法簡潔,搭建方便,並且還擁有龐大健全的第三方庫供使用。好比科學計算工具庫 Pandas 和 NumPy;深度學習工具 Keras 和 TensorFlow;以及機器學習工具庫 Scikit-learn 等等。python
總之,若是你想在數據分析、機器學習等領域作深刻研究的話,那麼熟練掌握 Python 語言就是最好的敲門磚。web
咱們首先來了解下如何安裝和搭建 Python 語言環境 正則表達式
當前流行的 Python 版本有兩個,2.X 和 3.X,因爲 2.X 即將再也不維護,因此我建議直接使用 3.X 版本做爲你的主要版本。算法
目前市面上流行着不少的 Python 編輯器,好比 Sublime,Notebook++ 等,不過我仍是推薦以下兩個數據庫
PyCharm:這是一個跨平臺的 Python 開發工具,不但擁有常規的調試、語法高亮,智能提示等功能外,還自帶多個數據庫鏈接器,使你在調試數據庫的時候也能駕輕就熟,再也不忙於處處下載各類數據庫客戶端。編程
Jupyter:這個是一個 web 式的在線編輯器,每次運行一行代碼,你均可以當即獲得結果,很是方便,在代碼調試階段,用處無限。cookie
若是你是 Linux 或者 MacOS 操做系統,那麼通常會自帶 Python2.6 的版本。若是想要安裝 3.X 的版本,須要自行編譯安裝,若是沒有 Linux 操做基礎的話,建議仍是使用 Windows,之後有機會了,再學習 Linux 及相關操做。網絡
若是是 Windows 操做系統,能夠直接到 Python 官網下載 .exe 安裝包,一路下一步便可完成安裝。app
相信你們都有這種經驗,學習任何一門語言時,入門的都是輸出 Hello World,下面咱們就來看看如何使用 Python 來輸出 Hello World
print("Hello World") sum = 1 + 2 print("sum = %d" %sum) >>> Hello World sum = 3
print 函數,用來在控制檯打印輸出,sum = 語法是聲明變量並賦值,%d 是用來作字符串替換。
列表
list1 = ["1", "2", "test"] print(list1) list1.append("hello") print(lists) >>> ['1', '2', 'test'] ['1', '2', 'test', 'hello']
list 是 Python 內置的一種數據類型,是一種有序的集合,能夠隨時添加和刪除其中的元素。
元組
tuple1 = ("zhangsan", "lisi") print(tuple1[0]) >>> zhangsan
tuple 和 list 很是相似,可是 tuple 一旦初始化就不能修改。
字典
dict1 = {"name1": "zhangsan", "name2": "lisi", "name3": "wangwu"} dict1["name1"] >>> 'zhangsan'
Python 內置了字典:dict 全稱 dictionary,在其餘語言中也稱爲 map,使用鍵-值(key-value)存儲,具備極快的查找速度。
集合
s = set([1, 2, 3]) print(s) >>> {1, 2, 3}
set 和 dict 相似,也是一組 key 的集合,但不存儲 value。因爲 key 不能重複,因此,在 set 中,沒有重複的 key。
變量
變量的概念基本上和初中代數的方程變量是一致的,只是在計算機程序中,變量不只能夠是數字,還能夠是任意數據類型。
a = 1 a = 3 print(a) >>> 3
age = 30 if age >= 18: print('your age is', age) print('good') else: Print('your are not belong here') >>> your age is 30 good
if ... else... 是很是經典的條件判斷語句,if 後面接條件表達式,若是成立,則執行下面的語句,不然執行 else 後面的語句。同時還要注意,Python 語言是採用代碼縮進的方式來判斷代碼塊的,通常是四個空格或者一個 tab,二者不要混用。
names = {"zhangsan", "lisi", "wangwu"} for name in names: print(name) >>> lisi zhangsan wangwu
names 是一個集合,爲可迭代對象,使用 for 循環,name 會依次被賦值給 names 中的元素值。
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum) >>> 2500
在循環內部變量 n 不斷自減,直到變爲-1時,再也不知足 while 條件,循環退出。
切片
L = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu'] print(L[1]) print(L[1:3]) >>> lisi ['lisi', 'wangwu']
Python 中,下標都是從 0 開始的,且都是左閉右開區間
迭代
對於列表、元組和字典,都是可迭代對象,可使用 for 來進行迭代取值
L = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu'] D = {"zhangsan":1, "lisi": 2, "wangwu": 3, "zhaoliu": 4} for l in L: print(l) print('\n') for k,v in D.items(): print("鍵:", k, ",", "值", v) >>> zhangsan lisi wangwu zhaoliu 鍵: zhangsan , 值 1 鍵: lisi , 值 2 鍵: wangwu , 值 3 鍵: zhaoliu , 值 4
對於字典,使用 items(),但是同時遍歷鍵值對
調用函數
Python 內置了不少有用的函數,咱們能夠直接調用
>>> abs(100) 100 >>> abs(-20) 20 >>> abs(12.34) 12.34 >>> max(1, 2) 2 >>> max(2, 3, 1, -5) 3
在調用函數時,若是傳入的參數有問題,程序會拋出異常。
這裏包含了 Python 中全部的內置函數:
https://docs.python.org/zh-cn/3/library/functions.html
定義函數
在 Python 中,定義一個函數要使用 def 語句,依次寫出函數名、括號、括號中的參數和冒號:,而後,在縮進塊中編寫函數體,函數的返回值用 return 語句返回。
def add(num1, num2): return num1 + num2 result = add(1,2) print(result) >>> 3
在代碼中,定義了一個叫作 add 的函數,它會接收兩個參數,而且會返回他們之和。函數定義以後,可使用函數名稱後面跟()來調用,若是函數有返回值,能夠賦給一個變量來接收。
調用模塊
Python 自己就內置了不少很是有用的模塊,只要安裝完畢,這些模塊就能夠馬上使用。
import time def sayTime(): now = time.time() return now nowtime = sayTime() print(nowtime) >>> 1566550687.642805
使用 import 來導入模塊,以後就能夠調用該模塊爲咱們提供的各類方法變量等。
模塊說白了就是一組工具的集合,咱們固然能夠本身編寫一些工具,而後組成本身的模塊,供後面編程使用。
咱們本身編寫模塊,通常目錄結構以下
mytest ├─ __init__.py ├─ test1.py └─ test2.py
如今咱們就能夠在其餘的文件中引用並調用這兩個 test 工具文件了
import mytest mytest.test1
你應該注意到了 init.py 文件,這個文件能夠是空文件,包含了 init.py 文件的文件夾就是一個」包「(Package)。若是咱們須要像上面那樣引用文件,就必須包含 init.py 文件。
安裝第三方模塊
在 Python 中,安裝第三方模塊,是經過包管理工具 pip 完成的。
通常來講,第三方庫都會在 Python 官方的 pypi.python.org 網站註冊,要安裝一個第三方庫,必須先知道該庫的名稱,能夠在官網或者 pypi 上搜索,好比 Pillow 的名稱叫 Pillow,所以,安裝 Pillow 的命令就是:
pip install Pillow
類和實例
面向對象最重要的概念就是類(Class)和實例(Instance),必須牢記類是抽象的模板,好比 Student 類,而實例是根據類建立出來的一個個具體的「對象」,每一個對象都會擁有類所提供的方法,但各自的數據可能不一樣,也可能各自定義不一樣的方法。
在 Python 中,使用 class 關鍵字來定義類
class Student(object): pass
定義好類以後,就能夠實例化該類了
zhangsan = Student() zhangsan.age = 20 print(Student) print(zhangsan) print(zhangsan.age) >>> <class '__main__.Student'> <__main__.Student object at 0x00EA7350> 20
此時,變量 zhangsan 就是類 Student 的一個實例了。同時咱們還給 zhangsan 綁定了一個屬性 age 並賦值。
請謹記面向對象三大基本要素:抽象,封裝,繼承。若是你當前對這些尚未太多的概念的話,也沒關係,你能夠在後面的學習中慢慢體會。
讀取文件,是後面要常常用到的操做,在 Python 中,使用 open 函數能夠很是方便的打開一個文件
f = open('/Users/tanxin/test.txt', 'r') f.read() f.close()
標示符 'r' 表示讀,這樣,咱們就成功地打開了一個文件,而後使用 read 函數來讀取文件內容,最後用 close 來關閉文件。
文件使用完畢後必須關閉,由於文件對象會佔用操做系統的資源,而且操做系統同一時間能打開的文件數量也是有限的
使用 with 來方便的打開文件
with open('/Users/tanxin/test.txt', 'r') as f: print(f.read())
with 語句幫助咱們完成了 close 的過程
文件讀取還有 readline() 和 readlins() 兩個函數。readline() 一次讀取一行數據,readlines() 一次讀取全部內容並按行返回一個列表。
正則表達式是一個很大的學科,其中的內容是徹底能夠單獨寫滿一本書的,咱們這裏只作些簡單的介紹。
Python 中提供了 re 模塊來作正則
import re str1 = "010-56765" res = re.match(r'(\d{3})-(\d{5})', str1) print(res) print(res.group(0)) print(res.group(1)) print(res.group(2)) >>> <re.Match object; span=(0, 9), match='010-56765'> 010-56765 010 56765
match() 方法判斷是否匹配,若是匹配成功,返回一個 Match 對象,不然返回 None
配合 group 方法,能夠有效的提取出字字符串。
requests 庫,是一個很是經常使用的 HTTP 網絡請求庫,後面的爬蟲課程,咱們會大量的使用它。
import requests r = requests.get('https://www.baidu.com') r = requests.post('http://test.com/post', data = {'key':'value'}) payload = {'key1': 'value1', 'key2': 'value2'} r = requests.get("http://test.com/get", params=payload)
此時的 r 是一個 response 對象,咱們能夠從中獲取到相關信息
r.text # 獲取響應內容 r.content # 以字節的方式讀取響應信息 response.encoding = "utf-8" # 改變其編碼 html = response.text # 得到網頁內容 binary__content = response.content # 得到二進制數據 raw = requests.get(url, stream=True) # 得到原始響應內容 headers = {'user-agent': 'my-test/0.1.1'} # 定製請求頭 r = requests.get(url, headers=headers) cookies = {"cookie": "# your cookie"} # cookie 的使用 r = requests.get(url, cookies=cookies)
這裏只是簡單介紹了 Python 的語法,若是要深刻學習,你還須要花費更多的精力。不過世上無難事,只怕肯攀登。不要一直停留在入門的階段,平時多找些刷題的網站,好比 Leetcode,online Judge 等等,在刷題的同時,更能鍛鍊本身的編程思惟和算法能力。
本節課咱們知道 Python 做爲數據分析領域最主流的語言,掌握它是必備的技能。同時還了解了 Python 的一些基本語法,相信你必定體會到了它的簡潔之處。下面就是練習,練習,再練習了。俗話說,熟能生巧,巧後達精。咱們只有把 Python 這個工具徹底掌握熟練,在進行數據分析的時候,就會事半功倍了。
第一題:定義一個函數,求解 1 到 99 之和,再以面向對象的思惟,定義一個類,使得調用該類的方法來計算數字之和。
第二題:嘗試用 requests 庫獲取某個網站的響應信息