함수형으로 데이터 과학 #3 : 입력한 데이터를 집약하는 ①
어제는 @ 코바타코의 GraphQL for Elixir # 2 요청 및 응답 값을 생각해보십시오.이었습니다.
fukuoka.ex 대표의 piacere 입니다
이번에도 방문해 주셔서 감사합니다

이 연재의, 전회까지의 기사는, 이하가 됩니다
|> 함수형으로 데이터 과학 #1: 다양한 데이터 입력
|> 함수형으로 데이터 과학 #2: 입력된 데이터 변환
이번에는, 「데이터 전처리」의 계속으로서 「인풋 한 데이터의 집계」에 대해 해설합니다
Elixir의 Enum 중에서는 다소 다루기 어려운 Enum.group_by()를 SQL의 GROUP BY와 같이 사용하는 샘플로도 활용할 수 있는 칼럼입니다.
샘플 데이터 등은 지난번 과 같은 것을 사용합니다
이제 Phoenix 서버를 시작하고 브라우저에서 "
http://localhost:4000
"의 웹 페이지를 볼 수 있다면 다음을 시도해 봅시다.


fukuoka.ex 설립으로부터 1주년 기념이 되는, fukuoka.ex#11 「DB/데이터 사이언스에 커넥트 하는 Elixir」

데이터 집계
데이터 집계로는 다음이 인기입니다.
그룹화
동일한 키 값을 가진 데이터를 나열하려면 먼저 Enum.group_by()에서 "키 값"과 "데이터 목록"형식으로 그룹화하고 키 값과 데이터 목록 각각에 열 이름을 다시 지정하는 작업 합니다
lib/sample_db_web/templates/page/index.html.eex
…
datas = result
|> Enum.group_by( &( &1[ "Profession" ] ), &( &1[ "ApplicantIncome" ] ) )
|> Enum.map( &(
%{ "Profession" => elem( &1, 0 ), "ApplicantIncome" => elem( &1, 1 ) |> Lst.to_csv } ) )
…
카운트
카운트는, 그룹핑 후의 키 값과 데이터 리스트의 각각에 열명을 다시 붙일 때, 데이터 리스트에 Enum.count() 하는 것으로 취득할 수 있습니다
lib/sample_db_web/templates/page/index.html.eex
…
datas = result
|> Enum.group_by( &( &1[ "Profession" ] ), &( &1[ "ApplicantIncome" ] ) )
|> Enum.map( &(
%{ "Profession" => elem( &1, 0 ), "ApplicantIncome" => elem( &1, 1 ) |> Enum.count } ) )
합계
합계는, 그룹핑 후의 키치와 데이터 리스트의 각각에 열명을 재붙이는 조작시, 데이터 리스트를 Enum.reduce()로 더해 가면 취득할 수 있습니다
lib/sample_db_web/templates/page/index.html.eex
…
datas = result
|> Enum.group_by( &( &1[ "Profession" ] ), &( &1[ "ApplicantIncome" ] ) )
|> Enum.map( &(
%{ "Profession" => elem( &1, 0 ), "ApplicantIncome" => elem( &1, 1 )
|> Enum.reduce( 0, fn( n, acc ) -> acc + String.to_integer( n ) end ) } ) )
…
최대값・최소값
최대치·최소치는, 그룹핑 후의 키값과 데이터 리스트의 각각에 열명을 다시 붙이는 조작시, 데이터 리스트에 Enum.max() 혹은 Enum.max()를 실시하는 것으로 취득할 수 있습니다
lib/sample_db_web/templates/page/index.html.eex
…
datas = result
|> Enum.group_by( &( &1[ "Profession" ] ), &( &1[ "ApplicantIncome" ] ) )
|> Enum.map( &(
%{ "Profession" => elem( &1, 0 ), "ApplicantIncome" => elem( &1, 1 )
|> Enum.map( fn( n ) -> String.to_integer( n ) end ) |> Enum.max } ) )
…
lib/sample_db_web/templates/page/index.html.eex
…
datas = result
|> Enum.group_by( &( &1[ "Profession" ] ), &( &1[ "ApplicantIncome" ] ) )
|> Enum.map( &(
%{ "Profession" => elem( &1, 0 ), "ApplicantIncome" => elem( &1, 1 )
|> Enum.map( fn( n ) -> String.to_integer( n ) end ) |> Enum.min} ) )
…
평균값, 중앙값, 백분위수, 분산 값, 표준 편차, 최빈값
이러한 통계계는, Elixir의 Enum가, 표준으로 계산하는 기능을 갖고 있지 않기 때문에, 다음 번, 자전에서 함수를 만들면서, 대응해 보겠습니다
끝
이번에는 '데이터 전처리'에 이어 '입력 한 데이터 집계'의 전반에 대해 다루었습니다.
다음 번에는 '입력한 데이터 집계' 후반
내일은 @yukq16 님의 「2차원 리스트 가산 함수」입니다
p.s.「좋아요」 잘 부탁드립니다
원한다면 페이지 왼쪽 상단의
또는
을 클릭하십시오.
여기의 숫자가 늘어나면, 필자로서는 「우케하고 있다」라고 하는 감각을 얻을 수 있어 연재를 더욱 진화시켜 나가는 동기 부여가 되기 때문에, 보다 Elixir 재료를 보고 싶다고 하는 당신, 우리와 함께 북돋워 제발!
Reference
이 문제에 관하여(함수형으로 데이터 과학 #3 : 입력한 데이터를 집약하는 ①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/piacerex/items/ef434011d154dc73f0cd
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
원한다면 페이지 왼쪽 상단의


여기의 숫자가 늘어나면, 필자로서는 「우케하고 있다」라고 하는 감각을 얻을 수 있어 연재를 더욱 진화시켜 나가는 동기 부여가 되기 때문에, 보다 Elixir 재료를 보고 싶다고 하는 당신, 우리와 함께 북돋워 제발!

Reference
이 문제에 관하여(함수형으로 데이터 과학 #3 : 입력한 데이터를 집약하는 ①), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/piacerex/items/ef434011d154dc73f0cd텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)