前言與案例
前言
使用Python的幾個(gè)原因:
- Python目前有比較強(qiáng)大的數(shù)據(jù)分析庫(kù): pandas, scikit-learn
- Python和C與FORTRAN的交互比較容易泞遗,可以使用C和FROTRAN的庫(kù)處理線性代數(shù)惰许,優(yōu)化問題,積分和快速傅里葉變換
- Python既能用于探索性研究史辙,設(shè)計(jì)原型機(jī)汹买,并且也能構(gòu)建生產(chǎn)系統(tǒng)。如果使用R/SAS聊倔,后續(xù)還得用Java, C#, C++實(shí)現(xiàn)生產(chǎn)系統(tǒng)的代碼
不用Python的理由也有:
- 運(yùn)行速度太慢晦毙。不過和人力相比起來,計(jì)算機(jī)成本不算啥
- Python有一個(gè)被人嫌棄的全局解釋鎖(global interpreter lock, GIL)方库,不能使用多線程结序,怎么玩集群!
不過目前有PyPy等項(xiàng)目可以加速纵潦,初學(xué)者目前不需要擔(dān)心這個(gè)運(yùn)行速度問題徐鹤,更大的問題是你想不出數(shù)據(jù)分析方案。
必要的Python庫(kù):Numpy(Python數(shù)值計(jì)算的基石),pandas(將R的data.frame在Python中進(jìn)行實(shí)現(xiàn)), matplotlib(Python最棒的圖形庫(kù)), IPython和Jupyter(效率神器), SciPy(科學(xué)計(jì)算常用庫(kù)), scikit-learn(機(jī)器學(xué)習(xí)少不了它), statsmodels(Python的統(tǒng)計(jì)分析庫(kù))
Python最佳發(fā)行版: Anaconda
Python版本:Python3是未來趨勢(shì)
Python社區(qū)和會(huì)議:pydata,, pystatsmodels
約定俗成的幾行代碼:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import statsmodels as sm
一些術(shù)語(yǔ):
- Mugne/munging/wrangling: 通常翻譯成數(shù)據(jù)規(guī)整化邀层,指的是非結(jié)構(gòu)化數(shù)據(jù)和混亂的數(shù)據(jù)經(jīng)過一系列的處理成為結(jié)構(gòu)和整齊的數(shù)據(jù)形式
- pseudocode: 偽代碼返敬,就是不能直接運(yùn)行的代碼,主要表現(xiàn)思想
- Syntactic sugar: 語(yǔ)法糖寥院, 不是新的語(yǔ)言特性劲赠,僅僅是將一些語(yǔ)法變得更加好寫,好用而已秸谢。雖然大家經(jīng)常會(huì)吐槽XXX不就是語(yǔ)法糖嘛凛澎,但是用的時(shí)候一點(diǎn)都不含糊。
案例
在正式開始使用Python進(jìn)行數(shù)據(jù)分析的時(shí)候估蹄,先了解Python能做什么能夠提高我們學(xué)習(xí)的信心塑煎。作者舉了幾個(gè)例子,用來體現(xiàn)數(shù)據(jù)分析的常規(guī)流程:讀取臭蚁、寫入數(shù)據(jù)最铁,準(zhǔn)備數(shù)據(jù)讯赏,格式變換,建模和計(jì)算冷尉,可視化展示漱挎。
所用數(shù)據(jù)可以在https://github.com/wesm/pydata-book進(jìn)行下載
git clone https://github.com/wesm/pydata-book.git
案例:usa.gov的短域名數(shù)據(jù), 展示前10個(gè)時(shí)區(qū)
%matplotlib inline
# 讀取數(shù)據(jù)
import json
records = [json.loads(line) for line in open(file="../pydata-book/datasets/bitly_usagov/example.txt")]
# 數(shù)據(jù)準(zhǔn)備雀哨,清理
from pandas import DataFrame, Series
df = DataFrame(records)
clean_tz = df['tz'].fillna('Missing')
clean_tz[clean_tz == ''] = 'Unknown'
tz_counts = clean_tz.value_counts()
# 可視化
tz_counts[:10].plot(kind='barh', rot=0)
IPython常用操作
后續(xù)的主要數(shù)據(jù)分析都是利用Ipython磕谅,IPython是加強(qiáng)版的Python交互終端,效率神器震束。一般都是通過命令行jupyter notebook
啟動(dòng)瀏覽器版怜庸。在Jupyter下,混寫markdown語(yǔ)法和Python代碼保存為pynb格式垢村,方便讓別人理解你的分析過程割疾。
IPython用起來和普通的Python shell差不多,但是記住如下特性能夠大大提高效率
在正式學(xué)習(xí)數(shù)據(jù)分析之前嘉栓,我們需要先找一個(gè)合適的工具宏榕。IPython雖然只提供了更強(qiáng)大的交互式shell界面,但是由于它的"執(zhí)行-探索"的設(shè)計(jì)理念非常符合數(shù)據(jù)分析侵佃,所以我們先來熟悉一下IPython麻昼,為之后的學(xué)習(xí)打下基礎(chǔ)。
- 安裝
pip install ipython
- 啟動(dòng)
在cmd直接敲下ipython
就會(huì)出現(xiàn)交互式的界面
常用功能
- 1.Tab補(bǔ)全
是不是覺得每次都把命令打全特別累呀馋辈,是不是會(huì)突然忘記某個(gè)命令怎么拼寫了呢抚芦?只要輸入命令的前幾個(gè),按下Tab迈螟,Ipython就會(huì)為你自動(dòng)補(bǔ)全叉抡,或者提供候補(bǔ)選項(xiàng),甚至它會(huì)為你補(bǔ)全文件路徑答毫。
- 2.屬性查看
褥民?
你剛剛定義了一個(gè)變量,但是你Python剛?cè)腴T洗搂,不清楚這個(gè)變量到底屬于list還是dic消返,這時(shí)候你只要在這個(gè)變量后加一個(gè)?
就能查看詳細(xì)信息了(其實(shí)放在前面也行)
ps:如果你定義的是一個(gè)函數(shù)耘拇,使用
??
還可以查看源代碼
- 3.內(nèi)部執(zhí)行python腳本
在普通python命令下撵颊,我們想執(zhí)行一個(gè)腳本只能先退出然后運(yùn)行這個(gè)腳本,但是在ipython下你可以直接在內(nèi)部執(zhí)行一個(gè)剛定義的腳本惫叛,這個(gè)神奇的方法就叫做%run
- 4.神奇的復(fù)制
假設(shè)你有一段代碼如下:
x5
print('hello world')
hello()
你不想一行一行的重新敲秦驯,希望直接復(fù)制運(yùn)行,怎么做呢挣棕?一種方法直接復(fù)制粘貼译隘,這種方法遇到tab縮進(jìn)的代碼容易出錯(cuò)。另一個(gè)方法復(fù)制之后用%paste
或cpaste
洛心,高端又安全固耘。
- 5.快捷鍵
假設(shè)你運(yùn)行hello函數(shù)時(shí),不小心敲成了ehllo词身。你想修改這個(gè)錯(cuò)誤厅目,于是你用方向鍵一個(gè)一個(gè)往前移動(dòng),這太不效率了用Ctrl+A吧法严。還有沒有其他快捷鍵呢损敷?當(dāng)然有了,下面就是Ipython提供的快捷鍵深啤,記住他們可以讓你的效率提高好多倍呢拗馒!
- Ctrl-P 或上箭頭鍵 后向搜索命令歷史中以當(dāng)前輸入的文本開頭的命令
- Ctrl-N 或下箭頭鍵 前向搜索命令歷史中以當(dāng)前輸入的文本開頭的命令
- Ctrl-R 按行讀取的反向歷史搜索(部分匹配)
- Ctrl-Shift-v 從剪貼板粘貼文本
- Ctrl-C 中止當(dāng)前正在執(zhí)行的代碼
- Ctrl-A 將光標(biāo)移動(dòng)到行首
- Ctrl-E 將光標(biāo)移動(dòng)到行尾
- Ctrl-K 刪除從光標(biāo)開始至行尾的文本
- Ctrl-U 清除當(dāng)前行的所有文本譯注12
- Ctrl-F 將光標(biāo)向前移動(dòng)一個(gè)字符
- Ctrl-b 將光標(biāo)向后移動(dòng)一個(gè)字符
- Ctrl-L 清屏
- 6.與操作系統(tǒng)互動(dòng)
在普通的python環(huán)境中,與操作系統(tǒng)互動(dòng)是一件比較麻煩的事情溯街,你看需要import os然后執(zhí)行某些指令诱桂。但是IPython為你解決了這些問題。
呈昔!cmd 執(zhí)行系統(tǒng)shell的cmd
output = !cmd args 運(yùn)行cmd并儲(chǔ)存標(biāo)準(zhǔn)輸出
%cd 文件目錄 切換文件目錄
%pwd 查看當(dāng)前工作目錄
%dirs 查看當(dāng)前目錄的所有文件
%env 打印環(huán)境變量
事實(shí)上你可以用挥等!+args執(zhí)行所有的環(huán)境變量。
- 7.魔法命令(magic commands)
除了之前%run
之外堤尾,IPtyhon還提供了許多以%
開頭的魔法指令肝劲,下面只是幾個(gè)比較實(shí)用。
- %matplotlib
可以將matplotlib的圖表直接嵌入到Notebook之中郭宝,或者使用指定的界面庫(kù)顯示圖表辞槐,它有一個(gè)參數(shù)指定matplotlib圖表的顯示方式。 - 性能分析
%timeit調(diào)用timeit模塊對(duì)單行語(yǔ)句重復(fù)執(zhí)行多次剩蟀,計(jì)算出其執(zhí)行時(shí)間催蝗。%%timeit則用于測(cè)試整個(gè)單元中代碼的執(zhí)行時(shí)間 - %hist
查看命令行歷史 - %reset
重置IPython內(nèi)的所有變量
你可以執(zhí)行%magic查看關(guān)于各個(gè)命令的說明,而在命令之后添加?可以查看該命令的詳細(xì)說明育特。