21世紀的企業(yè)競爭是數(shù)據(jù)的競爭,誰掌握數(shù)據(jù),誰就掌握未來。我們每個人都處于數(shù)據(jù)洪流之中,大數(shù)據(jù)可以幫助我們分析數(shù)據(jù)背后的價值。數(shù)據(jù)整合分析后得到的信息,是數(shù)據(jù)背后的價值,大數(shù)據(jù)實現(xiàn)了數(shù)據(jù)到信息的轉(zhuǎn)化,掌握了大數(shù)據(jù)時代下的數(shù)據(jù),就能夠指導(dǎo)世界發(fā)展。
正所謂“工欲善其事 必先利其器”,在時代的大背景下,選擇最有前景的工具去完成手頭的工作,是值得我們每個人去停下來思考的問題。
最近幾年,大數(shù)據(jù)、人工智能、機器學(xué)習(xí)等概念異常火爆,以至于普通人對此均有所耳聞。而Python語法簡單靈活易學(xué),擁有龐大的外部庫可擴展自己的應(yīng)用領(lǐng)域,尤其是許多與大數(shù)據(jù)內(nèi)容相關(guān)的庫,如Matplotlib
、Numpy
、Pandas
、SciPy
、TensorFlow
等,因此Python成為了大數(shù)據(jù)、人工智能、機器學(xué)習(xí)的首選語言而備受關(guān)注。所以我們說,用python
做數(shù)據(jù)分析,再合適不過了!
Python
語法簡單易學(xué)
如果你不是科班出身的程序猿,那么Python對你來講應(yīng)該是最好的編程語言了,沒有之一。如果你是科班程序員,再掌握一門Python
語言,絕對是如虎添翼的事情。
Python
語言非常的簡潔,并且可讀性非常強。所以,Python
的程序?qū)τ谛率峙笥褌兎浅S押?,只要你按部就班地學(xué)習(xí),并輔之以一定的練習(xí)與實戰(zhàn),進入這個領(lǐng)域并且能夠用Python
工作完成日常工作,3個月足矣。并且這會導(dǎo)致一個良性循環(huán),Python
在日常工作中打開局面,會進一步激發(fā)你的學(xué)習(xí)興趣,進而促使你有更多的信心去更加深入地學(xué)習(xí)這門語言。
# Python 打印99乘法表
for i in range(1, 10):
for j in range(1, i+1):
print("{}×{}={}".format(i, j, i*j), end=' ')
print("")
單從Python語法角度來說,其基礎(chǔ)語法非常簡單,非常注重用少量的代碼構(gòu)造出很多功能。簡單4行代碼,就可以打印出99乘法表,簡約而不簡單。移動互聯(lián)時代,快人一步,則搶奪先機。簡潔的語法,則是更高開發(fā)效率的代名詞。
Python
還是一門腳本語言
腳本語言的“優(yōu)勢”,其實在于它不需要事先“編譯”。而Python不僅僅是一門高級語言,它還有腳本語言的特征。這就能拿來做很多事情了。例如做數(shù)據(jù)清洗的時候,我們迫切地需要看到每一步的執(zhí)行效果,以此來判斷下一步的行動,而這是其它高級語言所不能提供的能力。
Python
提供了很多交互式編程環(huán)境,比如Ipython
,還有最近大名鼎鼎的Jupyter
。這對我們的數(shù)據(jù)分析場景尤為重要。
試想這樣一個情況:我有很多封裝為函數(shù)的小段可視化代碼,為了避免代碼過于分散,我將封裝好后全部放進一個文件中。如果我希望同時執(zhí)行其中的數(shù)段代碼可視化功能,以比較不同的代碼執(zhí)行的效果。那我可要抓狂了,因為在同一個集成編輯環(huán)境中,我只能顯示一個可視化效果,除非我將它們分別下載下來一一比較。
在交互式編程環(huán)境中,比如Jupyter
,則完全沒有這樣的煩惱。每段代碼可以在同一個頁面中分開運行,并交互式的展現(xiàn),執(zhí)行完成后,結(jié)果會以文本文件的格式寫入到當(dāng)前頁面中。當(dāng)你執(zhí)行一整套流程,Jupyter
結(jié)果會像一篇筆記一樣讓你賞心悅目。而這正是Python作為一門腳本語言帶來的獨特魅力。
從這個角度說,選擇用Python做數(shù)據(jù)分析,是理所當(dāng)然的選擇。事實上,我們可以用先用Python腳本語言的特性做數(shù)據(jù)處理,再用高級語言的特性對數(shù)據(jù)能力進行封裝。甚至于可以在封裝階段調(diào)用C語言的接口,提供額外的擴展功能,而這又是Python作為“膠水語言”的特性了。
Python
語言是人工智能的首選
日前,Tiobe發(fā)布了2019年6月編程語言排行榜,排名前五的分別是:Java、C、Python、C++、 Visual Basic。其中,Java依舊穩(wěn)居第一,Python則升至第三位。
Python
在統(tǒng)計、AI 編程、腳本編寫、系統(tǒng)測試等領(lǐng)域均排名第一。此外,Python
還在Web編程和科學(xué)計算等領(lǐng)域處于領(lǐng)先地位,總之,Python
無處不在。目前的情況是,越來越多的開發(fā)者正在涌入這些領(lǐng)域,為這些領(lǐng)域帶來強大的生命力。
火熱只是表象,深層次的原因則是強大的AI支持庫。
NumPy
支持維度數(shù)組與矩陣運算,堪稱AI數(shù)據(jù)神器,而各種算法,實際上處理的都是矩陣和向量。使用NumPy
,矩陣的轉(zhuǎn)置、求逆、求和、叉乘、點乘……都可以輕松地用一行代碼搞定,行、列可以輕易抽取,矩陣分解也不過是幾行代碼的問題。而且,NumPy
在實現(xiàn)層對矩陣運算做了大量的并行化處理,通過數(shù)學(xué)運算的精巧,而不是讓用戶自己寫多線程程序,來提升程序效率。
對于AI模型,幾十上百行代碼就夠了。當(dāng)然你也可以選擇采用成熟的模型而調(diào)用Scikit-Learn
的接口,效果卻輕而易舉地超越前輩的規(guī)則模型,簡直沒有比這更讓新入門的朋友如此開心的事情了。
對于深度神經(jīng)模型,Python
也有現(xiàn)成的平臺的可以選用,比如TensorFlow
,是搭建深度神經(jīng)網(wǎng)絡(luò)的首選。
Python生態(tài)的完善,讓Python的學(xué)習(xí)曲線非常平緩。你可以選擇先成為一名數(shù)據(jù)分析師,在完全駕馭這個領(lǐng)域之后,再學(xué)習(xí)經(jīng)典算法,成為一名數(shù)據(jù)挖掘領(lǐng)域的專家。如果你對新技術(shù)充滿虔誠與狂熱,那么進入深度學(xué)習(xí)領(lǐng)域吧。數(shù)據(jù)分析能力將成為你在AI這個領(lǐng)域的奠基石,算法與數(shù)學(xué)的積累,會讓你在AI的殿堂里走的更遠,總之你的一切能力都不會浪費,他們都會因你的下一次選擇而不斷升華。
而這源于你今天選擇了Python
這門工具,開啟了數(shù)據(jù)分析的序幕。
統(tǒng)計分析?數(shù)據(jù)可視化?Python都擅長
如果說Python是基礎(chǔ)的話,那么Python數(shù)據(jù)分析的三大工具(Numpy
,Pandas
,Matplotlib
)則是數(shù)據(jù)分析領(lǐng)域最為燦爛的三大明珠。正是這三大工具,把數(shù)據(jù)分析推向了另一個高潮。
Numpy
提供了一套高效操作數(shù)組的方法,是Python科學(xué)計算的基礎(chǔ)包。
Pandas
是一個表格容器,它納入了大量的標(biāo)準(zhǔn)化的數(shù)據(jù)模型,提供了高效地操作大型數(shù)據(jù)集所需的方法。這是成為強大而高效的數(shù)據(jù)分析環(huán)境的重要因素之一。
Matplotlib
則是提供了一套可視化的方法。初次接觸大家可能會有這樣的疑問,Matplotlib
和MATLAB
的名字有些相似,它們是否有一定的相似性呢?
可以這么說,Matplotlib
的誕生是源于模仿MATLAB
,但是依托Python
強大的開發(fā)生態(tài),解決MATLAB
自身的局限性。MATLAB
是一款科學(xué)計算軟件,在處理數(shù)據(jù)與程序的交互式場景中,就顯得有些相形見絀。而Python
作為一款高級語言,在與應(yīng)用層的交互性方面有著近乎降維打擊的優(yōu)勢。并且Matplotlib
繼承了Python
語法簡潔優(yōu)美、開源免費的特點,因此在學(xué)術(shù)界和工業(yè)節(jié)應(yīng)用廣泛。
特別是近幾年,依托于Python建立的數(shù)據(jù)分析生態(tài)愈發(fā)完善,像基于Matplotlib
更高級封裝的Seaborn
,以及依托百度Echarts
而來的Pyecharts
等等,這些越來越多的開發(fā)者貢獻自己的智慧,把Python
的數(shù)據(jù)開發(fā)生態(tài)搭建得越來越齊全。
所以說,選擇用Python
做數(shù)據(jù)分析,其實是選擇了這個生態(tài),依托于這個生態(tài),就像是站在了巨人的肩上,只有站得高,才能看得遠。
沒有數(shù)據(jù)源?那自己寫個爬蟲好了
俗話常說“巧婦難為無米之炊”,我們學(xué)習(xí)數(shù)據(jù)分析,可能最大的阻礙不是語法知識,而是沒有足夠的數(shù)據(jù)源去實戰(zhàn)。如果不在實際項目中,空學(xué)幾句語法,那不成了花架子了?用Python則完全不用擔(dān)心!
網(wǎng)絡(luò)爬蟲通俗的講就是通過程序去自動采集數(shù)據(jù)。世界上80%的爬蟲是基于Python開發(fā)的,學(xué)好爬蟲技能,可為后續(xù)的大數(shù)據(jù)分析、挖掘、機器學(xué)習(xí)等提供重要的數(shù)據(jù)源。
Python寫爬蟲,其實也很簡單,只要你了解基礎(chǔ)的HTML知識,那么也可以快速開發(fā)出自己的爬蟲程序,這里我們簡單看一個豆瓣電影清單的demo,只要三十行的代碼量,就可以自動從豆瓣上采集。在本章的第三小節(jié),我們會詳細講解這個demo,包括爬蟲的編寫邏輯、requests
庫的安裝等等。
#!/usr/bin/env python
# coding: utf-8
import json
import re
import requests
from requests import RequestException
# 獲取網(wǎng)頁的內(nèi)容,以文本形式返回
def get_page(url):
headers = {
"Host":"movie.douban.com",
"User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36"
}
try:
response = requests.get(url, headers=headers)
if response.status_code == 200:
return response.text
return None
except RequestException:
return None
# 對網(wǎng)頁文本內(nèi)容進行解析
def parse_page(html):
pattern = re.compile('<li.*?list-item.*?data-title="(.*?)".*?data-score="(.*?)".*?>.*?<img.*?class="lazyload" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC" data-original="(.*?)".*?/>', re.S)
items = re.findall(pattern, html)
for item in items:
yield{
'title': item[0],
'score': item[1],
'image': item[2],}
# 爬蟲主程序,同時print效果
def main():
url = "https://movie.douban.com/cinema/nowplaying/beijing/"
html = get_page(url)
print(html)
for item in parse_page(html):
print(item)
main()
總結(jié)
總結(jié)來說,用Python做數(shù)據(jù)分析,再適合不過了!Python是一個強有力的編程生態(tài),通俗來說就是,Python
能力非常全面:Numpy
,Pandas
是專門為數(shù)據(jù)分析打造的工具,而Matplotlib
等工具則提供了可視化的捷徑;如果沒有數(shù)據(jù),Python
還可以非常便捷地用來編寫爬蟲程序,解決數(shù)據(jù)來源的問題。利用Python
工具,可以在最短的時間內(nèi),打通數(shù)據(jù)獲取、清洗、統(tǒng)計、到可視化的整個流程。并且Python
語法簡單易學(xué),學(xué)習(xí)曲線平滑,非常適宜沒有編程基礎(chǔ)或者非科班出身的朋友學(xué)習(xí)。
特別需要指出的是,學(xué)會了這門課,不僅僅是多了一個技能,而是多了一個打開AI大門的鑰匙,一張AI賽程的入場券!所以,你準(zhǔn)備好了嗎?