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