함수형으로 데이터 과학 #3 : 입력한 데이터를 집약하는 ①
어제는 @ 코바타코의 GraphQL for Elixir # 2 요청 및 응답 값을 생각해보십시오.이었습니다.
fukuoka.ex 대표의 piacere 입니다
이번에도 방문해 주셔서 감사합니다
이 연재의, 전회까지의 기사는, 이하가 됩니다
|> 함수형으로 데이터 과학 #1: 다양한 데이터 입력
|> 함수형으로 데이터 과학 #2: 입력된 데이터 변환
이번에는, 「데이터 전처리」의 계속으로서 「인풋 한 데이터의 집계」에 대해 해설합니다
Elixir의 Enum 중에서는 다소 다루기 어려운 Enum.group_by()를 SQL의 GROUP BY와 같이 사용하는 샘플로도 활용할 수 있는 칼럼입니다.
샘플 데이터 등은 지난번 과 같은 것을 사용합니다
이제 Phoenix 서버를 시작하고 브라우저에서 "
http://localhost:4000
"의 웹 페이지를 볼 수 있다면 다음을 시도해 봅시다.답례:6/22의 fukuoka.ex#11, 덕분에 분위기가 고조되었습니다
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.)