[C#] DataFrame으로 표 형식의 데이터를 처리해보자

2024. 7. 31. 23:18C#

728x90
반응형

 안녕하세요. 진득 코딩입니다. 이번 시간에는 DataFrame을 이용하여 데이터 조작 및 분석을 위한 설계를 하고 표 형식으로 데이터를 처리하는 방법을 사용해보도록 하겠습니다.

 DataFrame이란 표 형식으로 데이터를 처리하는 방법을 제공하는 여러 프로그래밍 언어를 하나의 노트북 환경에서 사용할 수 있게 해주는 도구입니다. 데이터 조작 및 분석을 위해서 설계된 도구입니다.

DataFrame 시작하기

 DataFrame을 사용하는 방법은 여러 가지 있지만 필자는 VS code에서 진행하였습니다. VS code를 실행하시고 ctrl+shift+x를 클릭하게 되시면 검색창이 나옵니다. 여기에 poly를 검색하시면 Polyglot Notebooks가 나오게 됩니다. 

 해당 파일을 설치해주시면 됩니다.

 파일을 생성할 때에는 Polyglot Notebook을 선택해주시고 .ipynb, C#을 선택해서 파일을 생성하시면 됩니다.

 먼저 Nuget을 참조해주고 Polyglot Notebook이 포함된 패키지인 Microsoft.Data.Anlysis를 using해줍니다. 위와 같이 패키지가 설치됐다는 문구가 나오면 성공적으로 설치된겁니다.

 IO와 Linq도 using해주고 사용할 csv를 path에 넣어주고 DataFrame에 넣어주면 DataFrame을 사용할 준비가 완료됐습니다.

 console같은 추가적인 코드 없이 그냥 변수값만 적어주면 위와 같이 DataFrame에 있는 요소들이 출력되게 됩니다.

 DataFrame에 Description을 사용하게 되면 해당 파일의 크기와 최댓값, 최솟값, 그리고 평균값이 나오게 됩니다.

 Info() 메서드를 사용하게 되면 각각의 컬럼의 데이터타입이 출력되게 됩니다. 또한 각각의 컬럼의 길이도 함께 출력되게 됩니다.

vsCode에서 ScottPlot 사용하기 

 이번에는 NuGet의 ScottPlot를 사용해보도록 하겠습니다. 뒤에 버전을 입력해서 해당 버전을 사용할 수도 있고 따로 언급하지 않으면 최신 버전이 사용되게 됩니다.

 formatter를 이용하여  ScottPlot를 미리 세팅해줄 수 있습니다. 그리고 필요한 요소들을 using 해주게 되면 ScottPlot를 사용할 준비가 됐습니다.

 위와 같이 csv 파일을 이용하지 않고 그냥 데이터를 생성해서 DataFrame에 넣어서 사용할 수있습니다. xs와 ys를 넣은 DataFrame을 출력해보면 위와 같이 표 형태로 데이터가 나오게 됩니다.

 위에서 DataFrame에 넣은 데이터를 똑같이 ScottPlot에 넣어서 출력해보면 위와 같이 출력됩니다. DataFrame에 넣은 데이터는 표로 출력이 되고 ScottPlot에 넣은 데이터는 그래프로 출력되는 것을 확인할 수 있습니다.

 위 DataFrame에 넣은 데이터 말고 새로 만든 dataX와 dataY를 넣은 ScottPlot를 출력하게 되면 위와 같은 그래프가 나오게 됩니다.

DataFrame 활용해보기

 이번에는 새로운 파일을 생성해서 DataFrame을 활용하는 예제들을 살펴보도록 하겠습니다. 이름, 나이, 키 데이터가 들어가 있는 각각의 배열을 생성하고 DataFrameColumn에 각각의 배열을 넣은 후에 DataFrame을 출력해보면 각각의 배열에 있는 데이터들이 DataFrame에 잘 들어가 있는 것을 확인할 수 있습니다.

 이번에는 이미 데이터가 들어가있는 DataFrame에 행을 추가하는 방법을 살펴보도록 하겠습니다. List를 만들어서 new해준 후에 각각의 데이터를 key-value 방식으로 넣어준 후에 해당 lis를 Append를 해주고 inplace를 true로 해주면 해당 값이 dataFrame에 들어가게 됩니다. 기본 DataFrame을 변경할 때에는 inplace를 true로 해주고 새로운 DataFrame을 리턴할 때에는 false로 지정해주시면 됩니다.

 이번에는 열을 추가하는 방법에 대해서 살펴보도록 하겠습니다. 열을 추가할 때에는 배열을 만들어서 데이터를 넣어주고 해당 데이터를 PrimitiveDataFrameColumn에 원하는 컬럼 이름으로 넣고 (dataFrame 이름).Columns.Add() 메서드를 이용하여 넣어주시면 됩니다. 

 데이터를 가공하는 orderBy와 Filter로 데이터에 조건을 걸어주는 법을 알아보도록 하겠습니다. 처음에 orderBy를 한 후에 Filter를 사용하였더니 orderBy이 잘 적용되지 않은 것을 확인하실 수 있습니다.

 위처럼 filter와 orderBy를 사용하게 되면 각각 나이가 30이상인 사람만 잘 출력되고 이름의 알파벳 순으로 잘 정리가 되어서 출력되는 것을 확인할 수 있습니다.

 이럴때에는 OrderBy가 아닌 Filter를 먼저 적용해주거나 OrderBy를 적용하여서 따로 변수에 담은 후에 해당 변수를 Filter 처리하는 방식으로 사용해야 합니다.

 위와 같이 df["컬럼명"]을 사용하여 값을 가져와서 새로운 데이터를 만들 수 있습니다. 여기에서 Enumerable은 foreach같은 역할을 하는 메서드로 해당 메서드를 이용하여 iqcol을 배열로 만들어서 열 추가를 해주는 모습입니다.

 이번에는 static 메서드로 평균과 표준편차를 구해서 double 배열로 return하는 메서드를 만들어서 적용해보도록 하겠습니다. 일단 위와 같이 예외처리가 된 평균과 표준편차를 구해주는 메서드를 만들어서 평균과 표준편차를 배열에 넣어서 리턴하였습니다.

 이름은 double이 아니기 때문에 index가 1인 이름 컬럼을 skip해주기 위해 skip(1)을 해주고 DataFrame에 있는 column들을 불러와서 foreach해줍니다. 해당 데이터들을 위에서 미리 만들어둔 MeanAndStd 메서드에 넣어서 해당 값들을 가져와서 위와 같이 출력할 수 있습니다.

ScottPlot 활용해보기

 이번에는 ScottPlot를 활용해보도록 하겠습니다. 위에서 배운대로 ScottPlot를 참조해주고 미리 default 값을 설정해준 후에 필요한 using을 해줍니다.

 위와 같이 DataFrame에서 Column을 가져와서 각각 나이 배열과 키 배열을 만들어서 Scatter에 넣어줍니다. x축에 들어갈 배열을 먼저 넣어주고 y축에 들어갈 배열을 뒤에 넣어주고 myplot1을 출력해주면 나이가 x축에 들어가고 키가 y축에 들어간 그래프가 출력되게 됩니다.

 이번에는 그냥 데이터를 넣는 것이 아닌 나이에 있는 데이터들을 orderby로 오름차순 정리해서 넣어보도록 하겠습니다. 먼저 df에 있는 age 컬럼을 가져와서 orderby해준 후에 해당 데이터를 변수에 담고 오름차순 정리된 새로운 데이터를 배열로 만들어서 Scatter에 넣어주시면 됩니다.


 C#을 다룰 때 IDE를 계속 Visual Studio만 사용하다가 VScode를 사용하고 새로운 패키지를 배우게 되니 굉장히 어색하고 뭔가 불편했지만 기본적인 예제와 함께 VScode와 DataFrame과 꽤나 친해진 시간이었습니다. 다음 시간에는 DataFrame 관련된 실습을 통해 DataFrame을 좀 더 소화시키는 시간을 가져보도록 하겠습니다. 이번 시간은 여기까지입니다. 끝까지 봐주셔서 감사합니다.😀

728x90
반응형
LIST