Thống kê tóm tắt theo nhóm

Xử lý dữ liệu trong Julia

Katerina Zahradova

Instructor

Những gì đã biết

# Tính lương tối thiểu trung bình
combine(wages, :effective_min_wage_2020_dollars => mean)
1x1 DataFrame
Row | effective_min_wage_2020_dollars_mean
     | Float64
____|_______________________
   1| 8.37093
Xử lý dữ liệu trong Julia

Những gì đã biết

# Lọc và tính trung bình
first(combine(filter(r -> r.region =="W", wages), :effective_min_wage_2020_dollars => mean))
first(combine(filter(r -> r.region =="S", wages), :effective_min_wage_2020_dollars => mean))
first(combine(filter(r -> r.region =="NE", wages), :effective_min_wage_2020_dollars => mean))
DataFrameRow (1 columns)
Row | effective_min_wage_2020_dollars_mean
    | Float64
____|_______________________
   1| 8.75413
...
Xử lý dữ liệu trong Julia

Dùng combine() và groupby()

# Gom theo vùng
wages_by_region = groupby(wages, :region)

# Tính trung bình theo nhóm combine(wages_by_region, :effective_min_wage_2020_dollars => mean)
4x2 DataFrame
Row region    effective_min_wage_2020_dollars_mean
    String    Float64
__________________________
1    S        8.15458
2    W        8.59119
3    NE       8.75413
4    MW       8.1514
Xử lý dữ liệu trong Julia

Kết hợp combine() và groupby()

# Kết hợp hai bước
combine(groupby(wages, :region), :effective_min_wage_2020_dollars => mean)
4x2 DataFrame
Row region    effective_min_wage_2020_dollars_mean
    String    Float64
__________________________
1    S        8.15458
2    W        8.59119
3    NE       8.75413
4    MW       8.1514
Xử lý dữ liệu trong Julia

Dùng combine() và groupby()

# Đổi tên cột
combine(groupby(wages, :region), 
        :effective_min_wage_2020_dollars => mean => :average_min_wage_2020_dollars)
4x2 DataFrame
Row region    average_min_wage_2020_dollars
    String    Float64
__________________________
1    S        8.15458
2    W        8.59119
3    NE       8.75413
4    MW       8.1514
Xử lý dữ liệu trong Julia

Nhiều hàm trên một cột

# Dùng nhiều hàm trên một cột
combine(groupby(wages, :region), 
                    :effective_min_wage_2020_dollars .=> [mean, median, maximum])
4x4 DataFrame
Row  region  effective_min_wage_2020_dollars_mean  ...
     String  Float64                               ...
____________________________________________________________________________________
1    S       8.15458                               ...
2    W       8.59119                               ...
3    NE      8.75413                               ...
4    MW      8.1514                                ...
Xử lý dữ liệu trong Julia

Nhiều hàm trên một cột

# Dùng nhiều hàm trên một cột
combine(groupby(wages, :region), :effective_min_wage_2020_dollars .=> [mean, median] .=> [:average, :median])
4x2 DataFrame
Row region  average  median
    String  Float64  Float64
____________________________
1    S      8.15458  8.0
2    W      8.59119  8.34
...
# ĐỪNG quên dấu chấm!
combine(groupby(wages, :region), :effective_min_wage_2020_dollars => [mean, median])
ArgumentError: Unrecognized column selector ...
Xử lý dữ liệu trong Julia

Nhiều cột với một hàm

combine(groupby(wages, :region), [:state_min_wage, :federal_min_wage] .=> mean)
4x2 DataFrame
Row region  state_min_wage_mean  federal_min_wage_mean
    String  Float64              Float64
______________________________________________________
1   S       2.73128              4.35566
2    W       4.26638              4.35566
...
# ĐỪNG quên dấu chấm
combine(groupby(wages, :region), [:state_min_wage, :federal_min_wage] => mean)
MethodError: objects of type ...
Xử lý dữ liệu trong Julia

Nhiều cột với nhiều hàm

# Hàm dưới dạng ma trận 1 hàng
combine(groupby(wages, :region), [:state_min, :federal_min] .=> [mean median])
Row region  state_min_mean  federal_min_mean  state_min_median  federal_min_median
_________________________________________________________________________________
1   S       2.73128         4.35566           2.0                4.25
...
# Hàm dưới dạng vector
combine(groupby(wages, :region), [:state_min, :federal_min] .=> [mean, median])
Row region  state_min_mean  federal_min_median 
______________________________________________
1   S       2.73128         4.25
...
Xử lý dữ liệu trong Julia

Các hàm khả dụng

Các hàm có thể dùng:

  • Hàm thống kê thường dùng như sum(), mean(), minimum(), ...
  • Hàm do người dùng định nghĩa (phát tán)
  • Hàm ẩn danh, bọc trong ByRow()
  • Hàm đặc thù của DataFrames: nrow, proprow, ...
Xử lý dữ liệu trong Julia

Ghi nhớ nhanh

# Grouped DataFrame gdf
# 1 cột + 1 hàm
combine(gdf, :c => f => :new_c)

# 1 cột + 2+ hàm
combine(gdf, :c .=> [f1, f2, ...] .=> [:new_c_f1, :new_c_f2, ...])

# 2+ cột + 1 hàm
combine(gdf, [:c1, :c2, ...] .=> f .=> [:new_c1_f, :new_c2_f, ...])

# 2+ cột + 2+ hàm - mọi kết hợp
combine(gdf, [:c1, :c2, ...] .=> [f1 f2 ...] .=> [:c1_f1, :c2_f1, ..., :c1_f2, ...])

# 2+ cột + 2+ hàm - bắt cặp
combine(gdf, [:c1, :c2, ...] .=> [f1, f2, ...] .=> [:new_c1_f1, :new_c2_f2, ...])
Xử lý dữ liệu trong Julia

Ayo berlatih!

Xử lý dữ liệu trong Julia

Preparing Video For Download...