久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

利用Python進(jìn)行數(shù)據(jù)分析

 powerbaby 2016-02-17

利用Python進(jìn)行數(shù)據(jù)分析——pandas入門(五)(4)

2014年10月08日 ? 綜合 ? 共 5512字 ? 字號(hào) ? 評(píng)論關(guān)閉

1,、排序和排名

根據(jù)條件對(duì)數(shù)據(jù)集排序(sorting)也是一種重要的內(nèi)置運(yùn)算,。要對(duì)行或列索引進(jìn)行排序(按字典順序),,可使用sort_index方法,它將返回一個(gè)已排序的新對(duì)象:

In [80]: obj = pd.Series(range(4), index=['d', 'a', 'b', 'c'])

In [81]: obj.sort_index()
Out[81]: 
a    1
b    2
c    3
d    0
dtype: int64

而對(duì)于DataFrame,,則可以根據(jù)任意一個(gè)軸上的索引進(jìn)行排序:

In [82]: frame = pd.DataFrame(np.arange(8).reshape((2, 4)), index=['three', 'one'], columns=['d', 'a', 'b', 'c'])

In [83]: frame.sort_index()
Out[83]: 
       d  a  b  c
one    4  5  6  7
three  0  1  2  3

[2 rows x 4 columns]

In [84]: frame.sort_index(axis=1)
Out[84]: 
       a  b  c  d
three  1  2  3  0
one    5  6  7  4

[2 rows x 4 columns]

數(shù)據(jù)默認(rèn)是按升序排序的,,但也可以降序排序:

In [85]: frame.sort_index(axis=1, ascending=False)
Out[85]: 
       d  c  b  a
three  0  3  2  1
one    4  7  6  5

[2 rows x 4 columns]

若要按值對(duì)Series進(jìn)行排序,可使用其order方法:

In [86]: obj = pd.Series([4, 7, -3, 2])

In [87]: obj.order()
Out[87]: 
2   -3
3    2
0    4
1    7
dtype: int64

在排序時(shí),,任何缺失值默認(rèn)都會(huì)被放到Series的末尾:

In [88]: obj = pd.Series([4, np.nan, 7, np.nan, -3, 2])

In [89]: obj.order()
Out[89]: 
4    -3
5     2
0     4
2     7
1   NaN
3   NaN
dtype: float64

在DataFrame上,,你可能希望根據(jù)一個(gè)或多個(gè)列中的值進(jìn)行排序,。將一個(gè)或多個(gè)列的名字傳遞給by選項(xiàng)即可達(dá)到該目的:

In [90]: frame = pd.DataFrame({'b': [4, 7, -3, 2], 'a': [0, 1, 0, 1]})

In [91]: frame
Out[91]: 
   a  b
0  0  4
1  1  7
2  0 -3
3  1  2

[4 rows x 2 columns]

In [92]: frame.sort_index(by='b')
Out[92]: 
   a  b
2  0 -3
3  1  2
0  0  4
1  1  7

[4 rows x 2 columns]

要根據(jù)多個(gè)列進(jìn)行排序,傳入名稱的列表即可:

In [93]: frame.sort_index(by=['a', 'b'])
Out[93]: 
   a  b
2  0 -3
0  0  4
3  1  2
1  1  7

[4 rows x 2 columns]

排名(ranking)跟排序關(guān)系密切,,且它會(huì)增設(shè)一個(gè)排名值(從1開始,,一直到數(shù)組中有效數(shù)據(jù)的數(shù)量)。它跟numpy.argsort產(chǎn)生的間接排序索引差不多,,只不過(guò)它可以根據(jù)某種規(guī)則破壞平級(jí)關(guān)系,。接下來(lái)介紹Series和DataFrame的rank方法。默認(rèn)情況下,,rank是通過(guò)“為各組分配一個(gè)平均排名”的方式破壞平級(jí)關(guān)系的:

In [95]: obj.rank()
Out[95]: 
0    6.5
1    1.0
2    6.5
3    4.5
4    3.0
5    2.0
6    4.5
dtype: float64

也可以根據(jù)值在原數(shù)據(jù)中出現(xiàn)的順序給出排名:

In [96]: obj.rank(method='first')
Out[96]: 
0    6
1    1
2    7
3    4
4    3
5    2
6    5
dtype: float64

當(dāng)然,,你也可以按降序進(jìn)行排名:

In [97]: obj.rank(ascending=False, method='max')
Out[97]: 
0    2
1    7
2    2
3    4
4    5
5    6
6    4
dtype: float64

DataFrame可以在行或列上計(jì)算排名:

In [98]: frame = pd.DataFrame({'b': [4.3, 7, -3, 2], 'a': [0, 1, 0, 1], 'c': [-2, 5, 8, -2.5]})

In [99]: frame
Out[99]: 
   a    b    c
0  0  4.3 -2.0
1  1  7.0  5.0
2  0 -3.0  8.0
3  1  2.0 -2.5

[4 rows x 3 columns]

In [100]: frame.rank(axis=1)
Out[100]: 
   a  b  c
0  2  3  1
1  1  3  2
2  2  1  3
3  2  3  1

[4 rows x 3 columns]

2、帶有重復(fù)值的軸索引

直到目前為止,,我所介紹的所有范例都有著唯一的軸標(biāo)簽(索引值),。雖然許多pandas函數(shù)(如reindex)都要求標(biāo)簽唯一,但這并不是強(qiáng)制性的,。我們來(lái)看看下面這個(gè)簡(jiǎn)單的帶有重復(fù)索引值的Series:

In [101]: obj = pd.Series(range(5), index=['a', 'a', 'b', 'b', 'c'])

In [102]: obj
Out[102]: 
a    0
a    1
b    2
b    3
c    4
dtype: int64

索引的is_unique屬性可以告訴你它的值是否是唯一的:

In [103]: obj.index.is_unique
Out[103]: False

對(duì)于帶有重復(fù)值的索引,,數(shù)據(jù)選取的行為將會(huì)有些不同。如果某個(gè)索引對(duì)應(yīng)多個(gè)值,,則返回一個(gè)Series,;而對(duì)應(yīng)單個(gè)值的,則返回一個(gè)標(biāo)量值,。

In [104]: obj['a']
Out[104]: 
a    0
a    1
dtype: int64

In [105]: obj['c']
Out[105]: 4

對(duì)DataFrame的行進(jìn)行索引時(shí)也是如此:

In [107]: df = pd.DataFrame(np.random.randn(4, 3), index=['a', 'a', 'b', 'b'])

In [108]: df 
Out[108]: 
          0         1         2
a  0.863195  0.039140  0.328512
a  1.387189  1.878447  1.899090
b -1.239626 -0.256105 -0.699475
b  0.325932 -0.834134  0.833157

[4 rows x 3 columns]

In [109]: df.ix['b']
Out[109]: 
          0         1         2
b -1.239626 -0.256105 -0.699475
b  0.325932 -0.834134  0.833157

[2 rows x 3 columns]

3,、匯總和計(jì)算描述統(tǒng)計(jì)

pandas對(duì)象擁有一組常用的數(shù)學(xué)和統(tǒng)計(jì)方法。它們大部分都屬于約簡(jiǎn)和匯總統(tǒng)計(jì),,用于從Series中提取單個(gè)值(如sum或mean)或從DataFrame的行或列中提取一個(gè)Series,。跟對(duì)應(yīng)的NumPy數(shù)組方法相比,它們都是基于沒(méi)有缺失數(shù)據(jù)的假設(shè)而構(gòu)建的,。接下來(lái)看一個(gè)簡(jiǎn)單的DataFrame:

In [110]: df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], 
                            index=['a', 'b', 'c', 'd'], columns=['one', 'two'])

In [111]: df
Out[111]: 
    one  two
a  1.40  NaN
b  7.10 -4.5
c   NaN  NaN
d  0.75 -1.3

[4 rows x 2 columns]

調(diào)用DataFrame的sum方法將會(huì)返回一個(gè)含有列小計(jì)的Series:

In [112]: df.sum()
Out[112]: 
one    9.25
two   -5.80
dtype: float64

傳入axis=1將會(huì)按行進(jìn)行求和運(yùn)算:

In [113]: df.sum(axis=1)
Out[113]: 
a    1.40
b    2.60
c     NaN
d   -0.55
dtype: float64

NA值會(huì)自動(dòng)被排除,,除非整個(gè)切片(這里值的是行或列)都是NA。通過(guò)skipna選項(xiàng)可以禁用該功能:

In [114]: df.mean(axis=1, skipna=False)
Out[114]: 
a      NaN
b    1.300
c      NaN
d   -0.275
dtype: float64

有些方法(如idxmin和idxmax)返回的是間接統(tǒng)計(jì)(比如達(dá)到最小值或最大值的索引):

In [115]: df.idxmax()
Out[115]: 
one    b
two    d
dtype: object

另一些方法則是累計(jì)型的:

In [116]: df.cumsum()
Out[116]: 
    one  two
a  1.40  NaN
b  8.50 -4.5
c   NaN  NaN
d  9.25 -5.8

[4 rows x 2 columns]

還有一種方法,,它既不是約簡(jiǎn)型也不是累計(jì)型,。describe就是一個(gè)例子,它用于一次性產(chǎn)生多個(gè)匯總統(tǒng)計(jì):

In [117]: df.describe()
Out[117]: 
            one       two
count  3.000000  2.000000
mean   3.083333 -2.900000
std    3.493685  2.262742
min    0.750000 -4.500000
25%    1.075000 -3.700000
50%    1.400000 -2.900000
75%    4.250000 -2.100000
max    7.100000 -1.300000

[8 rows x 2 columns]

對(duì)于非數(shù)值型數(shù)據(jù),,describe會(huì)產(chǎn)生另外一種匯總統(tǒng)計(jì):

In [118]: obj = pd.Series(['a', 'a', 'b', 'c'] * 4)

In [119]: obj.describe()
Out[119]: 
count     16
unique     3
top        a
freq       8
dtype: object


4,、相關(guān)系數(shù)與協(xié)方差

有些匯總統(tǒng)計(jì)(如相關(guān)系數(shù)和協(xié)方差)是通過(guò)參數(shù)對(duì)計(jì)算出來(lái)的。我們來(lái)看幾個(gè)DataFrame,,它們的數(shù)據(jù)來(lái)自Yahoo! Finance的股票價(jià)格和成交量:

import pandas.io.data as web

all_data = {}
for ticker in ['AAPL', 'IBM', 'MSFT', 'GOOG']:
	all_data[ticker] = web.get_data_yahoo(ticker, '1/1/2000', '1/1/2010')

price = DataFrame({tic: data['Adj Close']
		for tic, data in all_data.iteritems()})
volume = DataFrame({tic: data['Volume']
		for tic, data in all_data.iteritems()})

說(shuō)明:

雅虎鏈接已經(jīng)失效,,不能訪問(wèn)獲取數(shù)據(jù)。

接下來(lái)計(jì)算價(jià)格的百分?jǐn)?shù)變化:

In [1]: returns = price.pct_change()

In [2]: returns.tail()
Out[2]: 
AAPL GOOG IBM MSFT
Date 
2009-12-24  0.034339  0.011117  0.004420  0.002747
2009-12-28  0.012294  0.007098  0.013282  0.005479
2009-12-29 -0.011861 -0.005571 -0.003474  0.006812
2009-12-30  0.012147  0.005376  0.005468 -0.013532
2009-12-31 -0.004300 -0.004416 -0.012609 -0.015432

Series的corr方法用于計(jì)算兩個(gè)Series中重疊的、非NA的,、按索引對(duì)齊的值的相關(guān)系數(shù),。與此類似,cov用于計(jì)算協(xié)方差:

In [3]: returns.MSFT.corr(returns.IBM)
Out[3]: 0.49609291822168838

In [4]: returns.MSFT.cov(returns.IBM)
Out[4]: 0.00021600332437329015

DataFrame的corr和cov方法將以DataFrame的形式返回完整的相關(guān)系數(shù)或協(xié)方差矩陣:

In [5]: returns.corr()
Out[5]: 
         AAPL     GOOG      IBM     MSFT
AAPL 1.000000 0.470660 0.410648 0.424550
GOOG 0.470660 1.000000 0.390692 0.443334
IBM  0.410648 0.390692 1.000000 0.496093
MSFT 0.424550 0.443334 0.496093 1.000000

In [6]: returns.cov()
Out[6]: 
         AAPL     GOOG      IBM     MSFT
AAPL 0.001028 0.000303 0.000252 0.000309
GOOG 0.000303 0.000580 0.000142 0.000205
IBM  0.000252 0.000142 0.000367 0.000216
MSFT 0.000309 0.000205 0.000216 0.000516

利用DataFrame的corrwith方法,,你可以計(jì)算其列或行跟另一個(gè)Series或DataFrame之間的相關(guān)系數(shù),。傳入一個(gè)Series將會(huì)返回一個(gè)相關(guān)系數(shù)值Series(針對(duì)各列進(jìn)行計(jì)算)

In [7]: returns.corrwith(returns.IBM)
Out[7]: 
AAPL 0.410648
GOOG 0.390692
IBM  1.000000
MSFT 0.496093

傳入一個(gè)DataFrame則會(huì)計(jì)算按列名配對(duì)的相關(guān)系數(shù)。這里,,我計(jì)算百分比變化與成交量的相關(guān)系數(shù):

In [8]: returns.corrwith(volume)
Out[8]: 
AAPL -0.057461
GOOG  0.062644
IBM  -0.007900
MSFT -0.014175

傳入axis=1即可按行進(jìn)行計(jì)算,。無(wú)論如何,在計(jì)算相關(guān)系數(shù)之前,,所有的數(shù)據(jù)項(xiàng)都會(huì)按標(biāo)簽對(duì)齊

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多