Julia&Juno: はじめ方3_データフレームの集計, DataFramesMeta ver. 2

はじめ方1_インストールとグラフの作成

はじめ方2_データフレームとパイプ演算子

はじめ方3_データフレームの集計

はじめ方4_グラフにラインと文字を入れる

 

I.DataFramesMeta

 

次に解説があります。

 

https://github.com/JuliaData/DataFramesMeta.jl

 

ライブラリDataFramesMetaを用いると、データフレームを効率的よく処理できます。Rのdplyrに似た機能を持ちます。上の文書にの対応表があります。

 

<code>Julia       dplyr
---------------------------
@where            filter
@transform        mutate
@by
groupby           group_by
@based_on         summarise/do
@orderby          arrange
@select           select</code>

 

II.グループ分けして集計

 

1.ライブラリとデータの読み込み

 

ライブラリとWeb上の英語と数学のサンプル・データを読み込みます。

 

using Gadfly
using CSV, DataFrames
using DataFramesMeta
using HTTP
using Statistics
# load the data
resp = HTTP.request("GET", "hhttps://pastebin.com/raw/nWkAe1qR")
df0 = CSV.read(IOBuffer(String(resp.body)))
 

 

2.平均点の算出

 

英語と数学の平均点をベースのmean()で算出します。

 

julia> mean(df0[:english])
42.931
julia> mean(df0[:japanese])
63.45399999999999 

 

3.nationalityでグループ分けして平均を算出

 

gropupbyでグループ分けし、@based_on()で列と関数を指定して集計

 

# 3列を取り出す
df0_selected = @select(df0, :english, :japanese, :nationality);
# nationalityでグループ分けする
g = groupby(df0_selected, :nationality);
# 出身国別の平均点を算出
@based_on(g, mean = mean(:english))
 

 

5×2 DataFrame
│ Row │ nationality │ mean    │
│     │ String      │ Float64 │
├─────┼─────────────┼─────────┤
│ 1   │ japanese    │ 37.1333 │
│ 2   │ nepal       │ 69.3115 │
│ 3   │ indonesia   │ 51.1    │
│ 4   │ china       │ 43.15   │
│ 5   │ vietnam     │ 45.8333 │

 

III.パイプ演算子を使用

 

パイプ演算子(|>)を用いてIIを完結に書き直します。

df0 |> @select(:english, :japanese, :nationality)でよさそうですが、エラーになりました。

 

julia>df0 |> @select(:english, :japanese, :nationality)
ERROR: MethodError: no method matching getindex(::Symbol, ::typeof(!), ::Symbol)
 

@linqで初めて、あとの@を除くとよいようです。このあたりはまだ十分理解していません。

 

julia> @linq df0 |> 
           select(:english, :japanese, :nationality) |>
           groupby(:nationality) |>
           based_on(mean = mean(:english))
5×2 DataFrame
│ Row │ nationality │ mean    │
│     │ String      │ Float64 │
├─────┼─────────────┼─────────┤
│ 1   │ japanese    │ 37.1333 │
│ 2   │ nepal       │ 69.3115 │
│ 3   │ indonesia   │ 51.1    │
│ 4   │ china       │ 43.15   │
│ 5   │ vietnam     │ 45.8333 │

 

Rのdplyrとほぼ同等の機能がありそうです。

 

About shibatau

I was born and grown up in Kyoto. I studied western philosophy at the University and specialized in analytic philosophy, especially Ludwig Wittgenstein at the postgraduate school. I'm interested in new technology, especially machine learning and have been learning R language for two years and began to learn Python last summer. Listening toParamore, Sia, Amazarashi and MIyuki Nakajima. Favorite movies I've recently seen: "FREEHELD". Favorite actors and actresses: Anthony Hopkins, Denzel Washington, Ellen Page, Meryl Streep, Mia Wasikowska and Robert DeNiro. Favorite books: Fyodor Mikhailovich Dostoyevsky, "The Karamazov Brothers", Shinran, "Lamentations of Divergences". Favorite phrase: Salvation by Faith. Twitter: @shibatau

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.