12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

抽出した標本から統計量などを求める

Last updated at Posted at 2014-05-29

以前 Hadoop で母集団から全数走査して標本を抽出する話をしました。データに関する事前の情報が少なく手探りで分析していく場合、抽出した標本をまず様々な角度からアドホックに分析してデータの特徴や傾向をつかんでいくことになります。

pandas の関数を駆使する

Hadoop による標本抽出pandas の相性は抜群です。以前にも紹介したように pandas + matplotlib の組み合わせは Series (シリーズ) と DataFrame (データフレーム) という 2 つのデータ構造を利用して分析結果を可視化することができます。

Hadoop で抽出された標本の読み込み

Hadoop の出力はタブ区切りの定型的なデータ構造を持ちますから pd.read_table() 関数を利用してそのまま読み込むことができます。

import pandas as pd
df = pd.read_table('hadoop-out.txt')
df.describe() # 複数の要約統計量を求める

#=> count              38156219 # のべ総個体数  
#   unique              6536847 # ユニークな個体数
#   top      0024D69XXXXX,Area9 # 1 件目のインデックス

また辞書オブジェクトをデータフレームに強制的に変換するには次のような方法があります。

df = pd.DataFrame(list(self.dic.values()), index=list(self.dic.keys()))

そもそも Fluentd などを利用して Hadoop で処理するまでの時点でデータが構造化されているのが常ですから、構造化されたデータを扱う pandas と相性が良いのは納得のいくところです。

シリーズとデータフレームの便利な関数

ワードカウント等の結果をさらに集約するのに便利なのが value_counts() 関数です。シリーズをはじめ配列やシーケンスなど一次元のデータ構造からその値の観測頻度を求めます。

また pandas には欠損値を埋める関数 fillna() も用意されており、これを使うと抽出工程で穴ができた場所を何らかの値で埋めるといったことが可能になります。

引数 説明
value 穴埋めをおこなうスカラー値。 (辞書でも可)
axis 0 なら行、 1 なら列
limit 連続穴埋めの最大回数
method 平均値や中央値で穴埋めをするときに指定する

データフレームの duplicated() 関数はシリーズを返します。これはそのデータフレームですでに登場した値なら True を返しますので重複のチェックに使えます。

replace() 関数は値の置換をします。たとえば 99999 は欠損値であると見なして NaN に置き換えるには次のようにします。

series.replace('99999', np.nan)

基準値以外の外れ値を除去したり丸めることも容易です。

# 絶対値が 3 を超える (-3 から 3 の間以外) 値を NaN に
data[np.abs(data) > 3] = np.nan

まとめ

pandas の関数を利用すると抽出した標本から分析対象のターゲットを絞り込むのに役立ちます。分析の PDCA サイクルを素早く回すのに Hadoop と親和性の高い pandas は欠かせません。

12
12
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?