python pandasベース3
宣言:本文は『python for data analysis』に基づいて整理する
1記述統計計算
(1)sumメソッド
sumメソッドを使用して合計を計算する
sumメソッドにaxisパラメータを入力すると統計的次元を変更できます
NaN値の場合、パラメータskipnanを使用して保存を選択できます(デフォルトでは無視されます).
(2)他の方法、例えばidxmaxとidaminは結果のインデックスを返す
accumulations:
記述方法describe(R言語のsummaryを思い出す....)
デジタルデータフレームの場合
文字型データフレームの場合
(3)類似の方法とパラメータは以下の表の通りである.
Method Description
count Number of non-NA values describe Compute set of summary statistics for Series or each DataFrame column
min, max Compute minimum and maximum values
argmin, argmax Compute index locations (integers) at which minimum or maximum value obtained, respectively
idxmin, idxmax Compute index values at which minimum or maximum value obtained, respectively
quantile Compute sample quantile ranging from 0 to 1
sum Sum of values
mean Mean of values median Arithmetic median (50% quantile) of values
mad Mean absolute deviation from mean value
var Sample variance of values
std Sample standard deviation of values
skew Sample skewness (3rd moment) of values
kurt Sample kurtosis (4th moment) of values cumsum Cumulative sum of values
cummin, cummax Cumulative minimum or maximum of values, respectively
cumprod Cumulative product of values
diff Compute 1st arithmetic difference (useful for time series)
pct_change Compute percent changes
2.相関と共分散
彼らはいずれもペアのパラメータに従って結果を計算した.
次のコードはヤフー金融データ、一部の会社の株式データを取得するために使用されます.
変更率のパーセントを計算し、pct_を使用します.change
(1)Seriesについてcorrは,交差する非NaNデータ,インデックスによって関連付けられた2組のSeriesの相関を計算するために用いられ,covは共分散を計算する
(2)DataFrameのcorrとcovは全データの相関と共分散を返す.
3一意の値(uniqueを使用)、値の記数(周波数統計に相当、value_counts()を使用)、集合性
もし私たちがSeriesを持っていたら
統計objに現れる異なる値はuniqueを用いる
異なる値が発生した回数を統計したい場合はvalue_を使用します.counts
isinは、集合ベクトルの包含関係を記述するために使用することができる
4欠落した値の処理
すべての欠落値をPandasでNaNで表し、pythonに内蔵されているNone値もNaNとして扱われます.
(1)欠落値の処理:削除
dropna()を使用するか、data[data.notnull()を使用するか
dropna()メソッドは、空の値(または欠落した値)を含むすべての行と列を削除するため、パラメータhowを使用して削除を指定できます.how='all'は、すべての行が欠落している値(nan)値のみを削除することを意味します.
パラメータaxis=1を入力して指定したカラムを削除することもできます.
(2)欠落値の処理:塗りつぶし
使用方法fillna
データオブジェクトdf:
0を使用してNaN値を入力
また、dict(辞書)オブジェクトを塗りつぶしポリシーとして使用して、カラムのNaNデータをどのような数値で塗りつぶすかを指定することもできます(次のコード:1カラムのNaNを0.5で塗りつぶし、3カラム(存在しない)を-1で塗りつぶす)
また、戻り値を持つメソッドを入力パラメータとして使用することもできます.axisを指定して行または列を指定することもできます.
5階層インデックス
階層インデックスはpandasの重要な部分であり、高緯度データを低緯度で処理する視点を提供します.
(1)簡単に使う
(2)階層インデックスを使用してデータのサブセットをより正確に選択する
より深いサブセットを選択することもできます
(3)stackメソッドとunstackを用いて階層インデックスのデータをそれぞれDataFrame型データと階層インデックスデータに復元する
(4)どの次元でも階層インデックスとして使用できる
1記述統計計算
(1)sumメソッド
In [198]: df = 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 [199]: df
Out[199]: one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
sumメソッドを使用して合計を計算する
In [200]: df.sum()
Out[200]: one 9.25
two -5.80
sumメソッドにaxisパラメータを入力すると統計的次元を変更できます
In [201]: df.sum(axis=1)
Out[201]: a 1.40
b 2.60
c NaN
d -0.55
NaN値の場合、パラメータskipnanを使用して保存を選択できます(デフォルトでは無視されます).
In [202]: df.mean(axis=1, skipna=False)
Out[202]: a NaN
b 1.300
c NaN
d -0.275
(2)他の方法、例えばidxmaxとidaminは結果のインデックスを返す
In [203]: df.idxmax()
Out[203]: one b
two d
accumulations:
In [204]: df.cumsum()
Out[204]: one two
a 1.40 NaN
b 8.50 -4.5
c NaN NaN
d 9.25 -5.8
記述方法describe(R言語のsummaryを思い出す....)
デジタルデータフレームの場合
In [205]: df.describe()
Out[205]: 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
文字型データフレームの場合
In [206]: obj = Series(['a', 'a', 'b', 'c'] * 4)
In [207]: obj.describe()
Out[207]: count 16
unique 3
top a
freq 8
(3)類似の方法とパラメータは以下の表の通りである.
Method Description
count Number of non-NA values describe Compute set of summary statistics for Series or each DataFrame column
min, max Compute minimum and maximum values
argmin, argmax Compute index locations (integers) at which minimum or maximum value obtained, respectively
idxmin, idxmax Compute index values at which minimum or maximum value obtained, respectively
quantile Compute sample quantile ranging from 0 to 1
sum Sum of values
mean Mean of values median Arithmetic median (50% quantile) of values
mad Mean absolute deviation from mean value
var Sample variance of values
std Sample standard deviation of values
skew Sample skewness (3rd moment) of values
kurt Sample kurtosis (4th moment) of values cumsum Cumulative sum of values
cummin, cummax Cumulative minimum or maximum of values, respectively
cumprod Cumulative product of values
diff Compute 1st arithmetic difference (useful for time series)
pct_change Compute percent changes
2.相関と共分散
彼らはいずれもペアのパラメータに従って結果を計算した.
次のコードはヤフー金融データ、一部の会社の株式データを取得するために使用されます.
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()})
変更率のパーセントを計算し、pct_を使用します.change
In [209]: returns = price.pct_change()
In [210]: returns.tail()
Out[210]: 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
(1)Seriesについてcorrは,交差する非NaNデータ,インデックスによって関連付けられた2組のSeriesの相関を計算するために用いられ,covは共分散を計算する
In [211]: returns.MSFT.corr(returns.IBM) Out[211]: 0.49609291822168838
In [212]: returns.MSFT.cov(returns.IBM) Out[212]: 0.00021600332437329015
(2)DataFrameのcorrとcovは全データの相関と共分散を返す.
In [213]: returns.corr()
Out[213]: 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 [214]: returns.cov()
Out[214]: 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
3一意の値(uniqueを使用)、値の記数(周波数統計に相当、value_counts()を使用)、集合性
もし私たちがSeriesを持っていたら
In [217]: obj = Series(['c', 'a', 'd', 'a', 'a', 'b', 'b', 'c', 'c'])
統計objに現れる異なる値はuniqueを用いる
In [218]: uniques = obj.unique()
In [219]: uniques
Out[219]: array([c, a, d, b], dtype=object)
異なる値が発生した回数を統計したい場合はvalue_を使用します.counts
In [220]: obj.value_counts()
Out[220]: c 3
a 3
b 2
d 1
isinは、集合ベクトルの包含関係を記述するために使用することができる
In [222]: mask = obj.isin(['b', 'c'])
In [223]: mask In [224]: obj[mask]
Out[223]: Out[224]:
0 True 0 c
1 False 5 b
2 False 6 b
3 False 7 c
4 False 8 c
5 True
6 True
4欠落した値の処理
すべての欠落値をPandasでNaNで表し、pythonに内蔵されているNone値もNaNとして扱われます.
In [229]: string_data = Series(['aardvark', 'artichoke', np.nan, 'avocado'])
In [232]: string_data[0] = None
In [233]: string_data.isnull()
Out[233]: 0 True
1 False
2 True
3 False
(1)欠落値の処理:削除
dropna()を使用するか、data[data.notnull()を使用するか
In [234]: from numpy import nan as NA
In [235]: data = Series([1, NA, 3.5, NA, 7])
In [236]: data.dropna()
Out[236]:
0 1.0
2 3.5
4 7.0
dropna()メソッドは、空の値(または欠落した値)を含むすべての行と列を削除するため、パラメータhowを使用して削除を指定できます.how='all'は、すべての行が欠落している値(nan)値のみを削除することを意味します.
In [242]: data.dropna(how='all')
Out[242]: 0 1 2
0 1 6.5 3
1 1 NaN NaN
3 NaN 6.5 3
パラメータaxis=1を入力して指定したカラムを削除することもできます.
In [243]: data[4] = NA
In [244]: data In [245]: data.dropna(axis=1, how='all')
Out[244]: Out[245]:
0 1 2 4 0 1 2
0 1 6.5 3 NaN 0 1 6.5 3
1 1 NaN NaN NaN 1 1 NaN NaN
2 NaN NaN NaN NaN 2 NaN NaN NaN
3 NaN 6.5 3 NaN 3 NaN 6.5 3
(2)欠落値の処理:塗りつぶし
使用方法fillna
データオブジェクトdf:
In [248]: df
0 1 2
0 -0.577087 NaN NaN
1 0.523772 NaN NaN
2 -0.713544 NaN NaN
3 -1.860761 NaN 0.560145
4 -1.265934 NaN -1.063512
5 0.332883 -2.359419 -0.199543
6 -1.541996 -0.970736 -1.307030
0を使用してNaN値を入力
In [250]: df.fillna(0)
Out[250]: 0 1 2
0 -0.577087 0.000000 0.000000
1 0.523772 0.000000 0.000000
2 -0.713544 0.000000 0.000000
3 -1.860761 0.000000 0.560145
4 -1.265934 0.000000 -1.063512
5 0.332883 -2.359419 -0.199543
6 -1.541996 -0.970736 -1.307030
また、dict(辞書)オブジェクトを塗りつぶしポリシーとして使用して、カラムのNaNデータをどのような数値で塗りつぶすかを指定することもできます(次のコード:1カラムのNaNを0.5で塗りつぶし、3カラム(存在しない)を-1で塗りつぶす)
In [251]: df.fillna({1: 0.5, 3: -1})
Out[251]: 0 1 2
0 -0.577087 0.500000 NaN
1 0.523772 0.500000 NaN
2 -0.713544 0.500000 NaN
3 -1.860761 0.500000 0.560145
4 -1.265934 0.500000 -1.063512
5 0.332883 -2.359419 -0.199543
6 -1.541996 -0.970736 -1.307030
また、戻り値を持つメソッドを入力パラメータとして使用することもできます.axisを指定して行または列を指定することもできます.
In [259]: data = Series([1., NA, 3.5, NA, 7])
In [260]: data.fillna(data.mean())
Out[260]: 0 1.000000
1 3.833333
2 3.500000
3 3.833333
4 7.000000
5階層インデックス
階層インデックスはpandasの重要な部分であり、高緯度データを低緯度で処理する視点を提供します.
(1)簡単に使う
In [261]: data = Series(np.random.randn(10), index=[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd'],[1, 2, 3, 1, 2, 3, 1, 2, 2, 3]])
In [262]: data
Out[262]: a 1 0.670216
2 0.852965
3 -0.955869
b 1 -0.023493
2 -2.304234
3 -0.652469
c 1 -1.218302
2 -1.332610
d 2 1.074623
3 0.723642
(2)階層インデックスを使用してデータのサブセットをより正確に選択する
In [265]: data['b':'c']
Out[265]:
b 1 -0.023493
2 -2.304234
3 -0.652469
c 1 -1.218302
2 -1.332610
より深いサブセットを選択することもできます
In [267]: data[:, 2]
Out[267]: a 0.852965
b -2.304234
c -1.332610
d 1.074623
(3)stackメソッドとunstackを用いて階層インデックスのデータをそれぞれDataFrame型データと階層インデックスデータに復元する
In [268]: data.unstack()
Out[268]: 1 2 3
a 0.670216 0.852965 -0.955869
b -0.023493 -2.304234 -0.652469
c -1.218302 -1.332610 NaN
d NaN 1.074623 0.723642
(4)どの次元でも階層インデックスとして使用できる
In [270]: frame = DataFrame(np.arange(12).reshape((4, 3)), index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]], columns=[['Ohio', 'Ohio', 'Colorado'], ['Green', 'Red', 'Green']])
In [271]: frame
Out[271]: Ohio Colorado
Green Red Green
a 1 0 1 2
2 3 4 5
b 1 6 7 8
2 9 10 11