今天,我們正式開始數(shù)據(jù)分析課程的基礎(chǔ)篇,Python 基礎(chǔ)。
創(chuàng)新互聯(lián)專注于朔城企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城網(wǎng)站制作。朔城網(wǎng)站建設(shè)公司,為朔城等地區(qū)提供建站服務(wù)。全流程專業(yè)公司,專業(yè)設(shè)計,全程項目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
為什么是 Python 呢,在相關(guān)的開發(fā)語言調(diào)查中,使用過 Python 的開發(fā)者,大多數(shù)人都會把 Python 作為自己的主要語言。在數(shù)據(jù)分析領(lǐng)域,使用 Python 語言更是最多的。Python 語言語法簡潔,搭建方便,而且還擁有龐大健全的第三方庫供使用。比如科學(xué)計算工具庫 Pandas 和 NumPy;深度學(xué)習(xí)工具 Keras 和 TensorFlow;以及機(jī)器學(xué)習(xí)工具庫 Scikit-learn 等等。
總之,如果你想在數(shù)據(jù)分析、機(jī)器學(xué)習(xí)等領(lǐng)域做深入研究的話,那么熟練掌握 Python 語言就是最好的敲門磚。
我們首先來了解下如何安裝和搭建 Python 語言環(huán)境?
當(dāng)前流行的 Python 版本有兩個,2.X 和 3.X,由于 2.X 即將不再維護(hù),所以我建議直接使用 3.X 版本作為你的主要版本。
目前市面上流行著很多的 Python 編輯器,比如 Sublime,Notebook++ 等,不過我還是推薦如下兩個
PyCharm:這是一個跨平臺的 Python 開發(fā)工具,不但擁有常規(guī)的調(diào)試、語法高亮,智能提示等功能外,還自帶多個數(shù)據(jù)庫連接器,使你在調(diào)試數(shù)據(jù)庫的時候也能得心應(yīng)手,不再忙于到處下載各種數(shù)據(jù)庫客戶端。
Jupyter:這個是一個 web 式的在線編輯器,每次運行一行代碼,你都可以立即得到結(jié)果,非常方便,在代碼調(diào)試階段,用處無限。
如果你是 Linux 或者 MacOS 操作系統(tǒng),那么一般會自帶 Python2.6 的版本。如果想要安裝 3.X 的版本,需要自行編譯安裝,如果沒有 Linux 操作基礎(chǔ)的話,建議還是使用 Windows,以后有機(jī)會了,再學(xué)習(xí) Linux 及相關(guān)操作。
如果是 Windows 操作系統(tǒng),可以直接到 Python 官網(wǎng)下載 .exe 安裝包,一路下一步即可完成安裝。
相信大家都有這種經(jīng)驗,學(xué)習(xí)任何一門語言時,入門的都是輸出 Hello World,下面我們就來看看如何使用 Python 來輸出 Hello World
print("Hello World")
sum = 1 + 2
print("sum = %d" %sum)
>>>
Hello World
sum = 3
print 函數(shù),用來在控制臺打印輸出,sum = 語法是聲明變量并賦值,%d 是用來做字符串替換。
列表
list1 = ["1", "2", "test"]
print(list1)
list1.append("hello")
print(lists)
>>>
['1', '2', 'test']
['1', '2', 'test', 'hello']
list 是 Python 內(nèi)置的一種數(shù)據(jù)類型,是一種有序的集合,可以隨時添加和刪除其中的元素。
元組
tuple1 = ("zhangsan", "lisi")
print(tuple1[0])
>>>
zhangsan
tuple 和 list 非常類似,但是 tuple 一旦初始化就不能修改。
字典
dict1 = {"name1": "zhangsan", "name2": "lisi", "name3": "wangwu"}
dict1["name1"]
>>>
'zhangsan'
Python 內(nèi)置了字典:dict 全稱 dictionary,在其他語言中也稱為 map,使用鍵-值(key-value)存儲,具有極快的查找速度。
集合
s = set([1, 2, 3])
print(s)
>>>
{1, 2, 3}
set 和 dict 類似,也是一組 key 的集合,但不存儲 value。由于 key 不能重復(fù),所以,在 set 中,沒有重復(fù)的 key。
變量
變量的概念基本上和初中代數(shù)的方程變量是一致的,只是在計算機(jī)程序中,變量不僅可以是數(shù)字,還可以是任意數(shù)據(jù)類型。
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... 是非常經(jīng)典的條件判斷語句,if 后面接條件表達(dá)式,如果成立,則執(zhí)行下面的語句,否則執(zhí)行 else 后面的語句。同時還要注意,Python 語言是采用代碼縮進(jìn)的方式來判斷代碼塊的,一般是四個空格或者一個 tab,兩者不要混用。
names = {"zhangsan", "lisi", "wangwu"}
for name in names:
print(name)
>>>
lisi
zhangsan
wangwu
names 是一個集合,為可迭代對象,使用 for 循環(huán),name 會依次被賦值給 names 中的元素值。
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
>>>
2500
在循環(huán)內(nèi)部變量 n 不斷自減,直到變?yōu)?1時,不再滿足 while 條件,循環(huán)退出。
切片
L = ['zhangsan', 'lisi', 'wangwu', 'zhaoliu']
print(L[1])
print(L[1:3])
>>>
lisi
['lisi', 'wangwu']
Python 中,下標(biāo)都是從 0 開始的,且都是左閉右開區(qū)間
迭代
對于列表、元組和字典,都是可迭代對象,可以使用 for 來進(jìn)行迭代取值
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(),可是同時遍歷鍵值對
調(diào)用函數(shù)
Python 內(nèi)置了很多有用的函數(shù),我們可以直接調(diào)用
>>> abs(100)
100
>>> abs(-20)
20
>>> abs(12.34)
12.34
>>> max(1, 2)
2
>>> max(2, 3, 1, -5)
3
在調(diào)用函數(shù)時,如果傳入的參數(shù)有問題,程序會拋出異常。
這里包含了 Python 中所有的內(nèi)置函數(shù):
https://docs.python.org/zh-cn/3/library/functions.html
定義函數(shù)
在 Python 中,定義一個函數(shù)要使用 def 語句,依次寫出函數(shù)名、括號、括號中的參數(shù)和冒號:,然后,在縮進(jìn)塊中編寫函數(shù)體,函數(shù)的返回值用 return 語句返回。
def add(num1, num2):
return num1 + num2
result = add(1,2)
print(result)
>>>
3
在代碼中,定義了一個叫做 add 的函數(shù),它會接收兩個參數(shù),并且會返回他們之和。函數(shù)定義之后,可以使用函數(shù)名稱后面跟()來調(diào)用,如果函數(shù)有返回值,可以賦給一個變量來接收。
調(diào)用模塊
Python 本身就內(nèi)置了很多非常有用的模塊,只要安裝完畢,這些模塊就可以立刻使用。
import time
def sayTime():
now = time.time()
return now
nowtime = sayTime()
print(nowtime)
>>>
1566550687.642805
使用 import 來導(dǎo)入模塊,之后就可以調(diào)用該模塊為我們提供的各種方法變量等。
模塊說白了就是一組工具的集合,我們當(dāng)然可以自己編寫一些工具,然后組成自己的模塊,供后面編程使用。
我們自己編寫模塊,一般目錄結(jié)構(gòu)如下
mytest
├─ __init__.py
├─ test1.py
└─ test2.py
現(xiàn)在我們就可以在其他的文件中引用并調(diào)用這兩個 test 工具文件了
import mytest
mytest.test1
你應(yīng)該注意到了 init.py 文件,這個文件可以是空文件,包含了 init.py 文件的文件夾就是一個”包“(Package)。如果我們需要像上面那樣引用文件,就必須包含 init.py 文件。
安裝第三方模塊
在 Python 中,安裝第三方模塊,是通過包管理工具 pip 完成的。
一般來說,第三方庫都會在 Python 官方的 pypi.python.org 網(wǎng)站注冊,要安裝一個第三方庫,必須先知道該庫的名稱,可以在官網(wǎng)或者 pypi 上搜索,比如 Pillow 的名稱叫 Pillow,因此,安裝 Pillow 的命令就是:
pip install Pillow
類和實例
面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實例(Instance),必須牢記類是抽象的模板,比如 Student 類,而實例是根據(jù)類創(chuàng)建出來的一個個具體的“對象”,每個對象都會擁有類所提供的方法,但各自的數(shù)據(jù)可能不同,也可能各自定義不同的方法。
在 Python 中,使用 class 關(guān)鍵字來定義類
class Student(object):
pass
定義好類之后,就可以實例化該類了
zhangsan = Student()
zhangsan.age = 20
print(Student)
print(zhangsan)
print(zhangsan.age)
>>>
<__main__.Student object at 0x00EA7350>
20
此時,變量 zhangsan 就是類 Student 的一個實例了。同時我們還給 zhangsan 綁定了一個屬性 age 并賦值。
請謹(jǐn)記面向?qū)ο笕蠡疽兀撼橄?,封裝,繼承。如果你當(dāng)前對這些還沒有太多的概念的話,也不要緊,你可以在后面的學(xué)習(xí)中慢慢體會。
讀取文件,是后面要經(jīng)常用到的操作,在 Python 中,使用 open 函數(shù)可以非常方便的打開一個文件
f = open('/Users/tanxin/test.txt', 'r')
f.read()
f.close()
標(biāo)示符 'r' 表示讀,這樣,我們就成功地打開了一個文件,然后使用 read 函數(shù)來讀取文件內(nèi)容,最后用 close 來關(guān)閉文件。
文件使用完畢后必須關(guān)閉,因為文件對象會占用操作系統(tǒng)的資源,并且操作系統(tǒng)同一時間能打開的文件數(shù)量也是有限的
使用 with 來方便的打開文件
with open('/Users/tanxin/test.txt', 'r') as f:
print(f.read())
with 語句幫助我們完成了 close 的過程
文件讀取還有 readline() 和 readlins() 兩個函數(shù)。readline() 一次讀取一行數(shù)據(jù),readlines() 一次讀取所有內(nèi)容并按行返回一個列表。
正則表達(dá)式是一個很大的學(xué)科,其中的內(nèi)容是完全可以單獨寫滿一本書的,我們這里只做些簡單的介紹。
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))
>>>
010-56765
010
56765
match() 方法判斷是否匹配,如果匹配成功,返回一個 Match 對象,否則返回 None
配合 group 方法,可以有效的提取出字字符串。
requests 庫,是一個非常常用的 HTTP 網(wǎng)絡(luò)請求庫,后面的爬蟲課程,我們會大量的使用它。
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 對象,我們可以從中獲取到相關(guān)信息
r.text # 獲取響應(yīng)內(nèi)容
r.content # 以字節(jié)的方式讀取響應(yīng)信息
response.encoding = "utf-8" # 改變其編碼
html = response.text # 獲得網(wǎng)頁內(nèi)容
binary__content = response.content # 獲得二進(jìn)制數(shù)據(jù)
raw = requests.get(url, stream=True) # 獲得原始響應(yīng)內(nèi)容
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 的語法,如果要深入學(xué)習(xí),你還需要花費更多的精力。不過世上無難事,只怕肯攀登。不要一直停留在入門的階段,平時多找些刷題的網(wǎng)站,比如 Leetcode,online Judge 等等,在刷題的同時,更能鍛煉自己的編程思維和算法能力。
本節(jié)課我們知道 Python 作為數(shù)據(jù)分析領(lǐng)域最主流的語言,掌握它是必備的技能。同時還了解了 Python 的一些基本語法,相信你一定體會到了它的簡潔之處。下面就是練習(xí),練習(xí),再練習(xí)了。俗話說,熟能生巧,巧后達(dá)精。我們只有把 Python 這個工具完全掌握熟練,在進(jìn)行數(shù)據(jù)分析的時候,就會事半功倍了。
第一題:定義一個函數(shù),求解 1 到 99 之和,再以面向?qū)ο蟮乃季S,定義一個類,使得調(diào)用該類的方法來計算數(shù)字之和。
第二題:嘗試用 requests 庫獲取某個網(wǎng)站的響應(yīng)信息