數(shù)據(jù)分析工具:科學(xué)計算庫

學(xué)習(xí)手札的內(nèi)容來源于 《Python 數(shù)據(jù)爬取與實戰(zhàn)手冊》——郭卡 戴亮
其中操作環(huán)境都是 Windows 系統(tǒng)赎线,我在 Linux 環(huán)境浪汪,難以驗證所記手段的可操作性


提要

  • Numpy 庫的使用 - 單一類型數(shù)據(jù)處理
  • Pandas 庫的 DataFrame 結(jié)構(gòu) - 復(fù)雜類型數(shù)據(jù)處理
  • Scikit-learn 庫斜友,數(shù)據(jù)建模的基本過程

單一類型數(shù)據(jù)處理 - Numpy 庫

import numpy as np

1. ndarray 數(shù)組

1.1 數(shù)組類型
ndarray 數(shù)組的所有元素類型可通過 np.typeDict.values() 查得。

1.2 生成數(shù)組
(1) 生成等差數(shù)列 np.arrange(), np.linspace()
(2) 生成 n 維數(shù)組 np.zeros(), np.ones(), np.full().
(3) 數(shù)組變形 a.reshape()

1.3 數(shù)組切片
(1) 一維數(shù)組切片語法與 python 序列基本相同
(2) 多維數(shù)組(以二維為例)以下語法:
連續(xù)切片: a[2, 2:4]
不連續(xù)切片:a[ [2,3,4], [1,3,4] ]
倒序切片: a[2:4, :: -1]
條件篩選切片:a[a<21]

1.4 數(shù)組運算
拼接、分解贮匕、轉(zhuǎn)置勺良、行列式(方陣)绰播、求逆矩陣(方陣)、點乘

2. Numpy 常用函數(shù)

2.1 均值尚困、方差
求和 np.sum()
求均值 np.mean()
求方差 np.var() 標(biāo)準(zhǔn)差 np.std()
最值 np.max(), np.min()
中位數(shù) np.median()
統(tǒng)計百分位數(shù) np.percentile()

2.2 隨機數(shù)(與 Python 內(nèi)置庫 random 用法類似)

2.3 數(shù)據(jù)處理
去重 np.unique()
直方圖統(tǒng)計 np.histogram()
相關(guān)系數(shù) np.corrcoef()
遍歷 np.piecewise(), np.select(), 都是對滿足條件的元素應(yīng)用某種修改蠢箩,還有 np.where()返回符合條件的元素的下標(biāo)事甜。
多項式擬合 np.polyfit()

2.3 動態(tài)數(shù)組
使用 Python 內(nèi)建類型 array 實現(xiàn)動態(tài)數(shù)組 a[]谬泌,再用 np.frombuffer() 創(chuàng)建一個與 a[] 共享內(nèi)存的 ndarray

3. 性能優(yōu)化
3.1 Numpy 語句優(yōu)化

a  = np.zeros(10000)
b = a * 2   # 隱式拷貝
a *= 2      #就地操作
# 就地操作要比拷貝操作性能高得多逻谦。

3.2 用 numexpr 優(yōu)化 Numpy 速度

import numpy as np
import numexpr as ne
a = np.linspace(1, 100, 10000)
b = a.reshape(100, 100)
c = a.reshape(100, 100)
timeit ne.evaluate("sin(b) + cos(c)")
10000 loops, best of 3: 126 us per loop
timeit np.sin(b)+np.cos(c)
10000 loops, best of 3: 371 us per loop

復(fù)雜類型數(shù)據(jù)處理 - Pandas 庫

Pandas 在 Numpy 的基礎(chǔ)上開發(fā)掌实,適用于處理大量復(fù)雜數(shù)據(jù)。

import pandas as pd

  1. 四種基礎(chǔ)數(shù)據(jù)結(jié)構(gòu)
    Series邦马、Time-Series贱鼻、DataFrame、Panel
  • Series 同時具有一維數(shù)組和字典的性質(zhì)
a = pd.Series( [7, 8, 9, 10], ['a', 'b', 'c', 'd'] )
>>> a[1]
8
>>> a['a']
7
  • Time-Series 就是使用時間戳作為索引的 Series滋将,具備 Series 的所有功能
>>> datas = ['2017-06-20', '2017-06-21', '2017-06-22', '2017-06-23',  ... ]
>>> ts = pd.Series(np.arrange(1, 7, 1), index = pd.to_datetime(dates))
>> ts
2017-06-20    1
2017-06-21    2
2017-06-22    3
2017-06-23    4
...           ...

從 Time-Series 中讀取元素不需嚴(yán)格的時間格式邻悬,只需傳入能被轉(zhuǎn)成時間格式的參數(shù)即可。

>>> ts['2017/06/20']
1
>>> ts['2017 06 20']
1
  • DataFrame 是 Pandas 中最常用的數(shù)據(jù)結(jié)構(gòu)随闽,可看成是多個有相同索引的 Series 的組合
>>> df = pd.DataFrame(np.arrange(1, 13 ,1).reshape(4,3),
... index=['a', 'b', 'c', 'd'], columns=['A',  'B', 'C'])
>>> df
   A  B  C
a  1  2  3 
b  4  5  6
c  7  8  9
d  10 11 12
>>> df1 = pd.DataFrame( {'A': [1, 4, 7, 10], 'B': [2, 5, 8, 11], 'C':[3, 6, 9, 12]},
... index = ['a', 'b', 'c', 'd'])
>> df1
   A  B  C
a  1  2  3 
b  4  5  6
c  7  8  9
d  10 11 12

DataFrame 增拘悦、刪、查橱脸、改 操作:

獲取列名與索引 df.columns, df.index
讀取元素 df.['xxx'][1], df.get_value(1, 'xxx'), df.at[1, 'xxx'], df.iat[1,6], df.loc[1, 'xxx'], df.iloc[1,6]
讀取一行或一列 df['xxx'], df[6]
刪除列 del df['xxx']
刪除行 df = df.drop([1, 4]) 刪除第 1础米、4 行
插入列 df['newIndex'] = np.arrange(1, 11, 1)
插入行 df.loc[MAXROW +1] = np.arrange(1, 8, 1)
改變列順序 將已有的索引按想要的順序排列給 df.columns賦值即可 df.columns = ['zzz', ..., 'bbb', 'aaa']
修改數(shù)據(jù)類型 df['xxx'] = df['xxx'].astype(np.float)

篩選數(shù)據(jù)
>>> df['xxx'][ df['a'] > 2 & df['b'] < 5]

統(tǒng)計函數(shù)
由于 Pandas 是基于 Numpy 開發(fā)的,大部分 Numpy 統(tǒng)計函數(shù)都可用添诉,如 sum() mean() median() count()等等屁桑。

  • Panel
    Series 是一維,DataFrame 是二維栏赴,Panel 就是三維蘑斧。

Panel 的創(chuàng)建
(1) 由三維數(shù)組直接創(chuàng)建 p = pd.Panel([[[9, 2], [4, 6]], [[3, 8], [7, 5]]])
(2) 由 DataFrame 數(shù)組創(chuàng)建,如下

>>> n = pd.DataFrame({0:[1,4],  1:[2,5], 3:[3,6] })
>>> n
  0 1 2
0 1 2 3
1 4 5 6
>>> j = pd.Panel('a': n, 'b': n) #在 DataFrame 的基礎(chǔ)山加了一個維度

2. Pandas 使用技巧
Pandas 對 Python 中影響計算速度的操作均進行了優(yōu)化,在數(shù)據(jù)處理過程中盡量使用 Pandas 方法竖瘾,可以十分有效地提升數(shù)據(jù)處理速度(尤其在大數(shù)據(jù)量時沟突,性能提升甚至可達(dá)十倍以上)

  • 快速逐行遍歷 df.iterrows()

for x in df.iterrows() ...

  • 批量數(shù)據(jù)處理 df.apply()

df1 = df['B'].apply(lambda x: x/2) # 處理 'B' 列
df1 = df.apply(lambda row: row['A'] + row['B'], axis=1) # 按行處理捕传,注意 axis 參數(shù)
df1 = df.apply(lambda x: x**2) #全體遍歷處理
#上面的 lambda 表達(dá)式也可以替換成函數(shù)

  • 處理缺失數(shù)據(jù)
>>> a
  A B
0 1 2
1 3 4
2 5 6
>>> a=a.where(a > 3)
   A    B
0  NaN  NaN
1  NaN  4.0
2  5.0  6.0
# 出現(xiàn) NaN 之后數(shù)值類型變成了 float惠拭。

可以直接去除 NaN: a=a.dropna(),或者填充新值: a=a.fillna({'A': 1, 'B': 2})


Python 機器學(xué)習(xí)庫 Scikit-learn

未上手庸论,容后再續(xù)


End

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末职辅,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子聂示,更是在濱河造成了極大的恐慌域携,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鱼喉,死亡現(xiàn)場離奇詭異秀鞭,居然都是意外死亡,警方通過查閱死者的電腦和手機扛禽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門锋边,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人旋圆,你說我怎么就攤上這事◆锘校” “怎么了灵巧?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長抹沪。 經(jīng)常有香客問我刻肄,道長,這世上最難降的妖魔是什么融欧? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任敏弃,我火速辦了婚禮,結(jié)果婚禮上噪馏,老公的妹妹穿的比我還像新娘麦到。我一直安慰自己,他們只是感情好欠肾,可當(dāng)我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布瓶颠。 她就那樣靜靜地躺著,像睡著了一般刺桃。 火紅的嫁衣襯著肌膚如雪粹淋。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天,我揣著相機與錄音桃移,去河邊找鬼屋匕。 笑死,一個胖子當(dāng)著我的面吹牛借杰,可吹牛的內(nèi)容都是我干的过吻。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼第步,長吁一口氣:“原來是場噩夢啊……” “哼疮装!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起粘都,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤廓推,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后翩隧,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體樊展,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年堆生,在試婚紗的時候發(fā)現(xiàn)自己被綠了专缠。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡淑仆,死狀恐怖涝婉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情蔗怠,我是刑警寧澤墩弯,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站寞射,受9級特大地震影響渔工,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桥温,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一引矩、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧侵浸,春花似錦旺韭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至履腋,卻和暖如春珊燎,著一層夾襖步出監(jiān)牢的瞬間惭嚣,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工悔政, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留晚吞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓谋国,卻偏偏與公主長得像槽地,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芦瘾,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,066評論 2 355

推薦閱讀更多精彩內(nèi)容