2013年7月23日火曜日

データクレンジングの方法

分析ができるようにデータを整理整頓することを
データクレンジングと言います。
あらゆるデータを紐付けて、
分析用のデータセットを作ります。

データクレンジングは大きく3つの操作があるかと思っています。

1.結合
2.整列
3.抽出

1.結合(マージ)
 結合は、正規化されたデータを分析用にデータをまとめる作業です。
 たとえば、コンビニの売上データを分析するときに、
 2つのデータが用意されていたとします。
  ----
   データ名:df1(店舗属性) カラムの名前: ShopID | adress | openDate
   データ名:df2(店舗売上) カラムの名前: ShopID | totalRevenue
  ----

 これをSQLで結合を行う場合は
  select * from df1 innner join df2 on df1.ShopId = df2.ShopID;
 これをRで結合する場合は
  merge(df1,df2,by="ShopID",all = T)

2.整列(ソート)
 整列は、まとめたデータを順番に並べる作業です。
 コンビニの売上データの例をとると、
 「出店日」順で並べる。
 「店舗売上」順で並べる。といった操作です。

 「出店日順で並べる。」をSQLで行う場合には
    select * from df3 order by openDate ; 
  同じくRで行う場合には
   
merge(df1,df2,by="ShopID",all = T)

  (*)df3はdf1とdf2をマージしたデータです。

3.抽出(フィルタリング)
 抽出は、データを意味のあるデータ群にまとめる作業です。
 同じようにコンビニの売上データの例をとると
 「店舗売上」を5億円超をAランク、5億円〜3億円をBランク、
  「出店日」を年度ごとにまとめる。といった作業です。


 ランク付けをSQLで行う場合には
  
select * from df3 where totalRevenue > 500000000;
select * from df3 where totalRevenue < 500000000 and totalRevenue >= 300000000;

同じく、Rで行う場合には
 
rankA <- (df3$totalrevenue > 500000000)
rankB <- (df3$totalrevenue <= 500000000) &(df3$totalrevenue > 300000000)


df_rankA <- df3[rankA,]
df_rankB <- df3[rankB,]



以下、補足
◯データクレンジングの操作は本当にこれだけ?
重複チェック、Nullチェックや、ナンバリングなど他にも
細かい操作はたくさんあるかと思いますが、
基本は上記の3つの組み合わせの作業なのかなと思ってます。

◯結合について
結合は、内部結合、外部結合を正しく理解してデータ操作を行い、
正しく結合しないと、存在しないはずのデータが増えたりします!
データクレンジングの作業にも落とし穴があるので、確認しながら作業をすることが大事です!