[데이터 추출 및 가공 01] 커맨드 실행 환경 만들기

Home / 데이터 추출과 가공 / [데이터 추출 및 가공 01] 커맨드 실행 환경 만들기

커맨드 실행 환경 만들기

앞으로 파이썬 프로그래밍의 기본을 다지고 나면 본격적으로 머신러닝이나 딥러닝 같은 인공지능과 관련된 프로그래밍도 시도할 수 있습니다. (이하 머신러닝과 딥러닝을 인공지능이라는 단어로 대신 쓰겠습니다) 인공지능은 알고리듬도 중요하지만, 데이터가 없으면 인공지능 알고리듬은 그냥 껍네기나 마찬가지인 경우가 많습니다. 그만큼 데이터가 중요합니다.

그러면 데이터를 어디서 구할 수 있을까요?
처음에 인공지능을 배우고 프로그래밍을 시작하는 단계라면 다행히도 인터넷에는 인공지는 알고리듬에 바로 사용할 수 있게 잘 가공된 데이터들이 아주 많습니다. 이런 데이터들올 다운로드 받아 프로그래밍한 인공지는 알고리듬에 테스트해 볼 수 있습니다.

하지만 뭔가 새로운 걸 인공지능으로 해볼려고 하면 문제가 생깁니다. 남들이 다뤄보지 않은 새로운 데이터는 찾기도 어렵지만, 찾아도 인공지능 알고리듬에 바로 쓸 수 있을 만큼 깔끔하지도 않습니다. 본인이 직접 만든 데이터가 아니면, 당장 필요없는 내용들이 많고 원하는 데이터도 한 곳에 몰려있지 않고 이곳저곳에 흩어져 있기도 합니다. 본인이 기록한 데이터라도 애초에 인공지능에 적용하는 것을 염두에 두지 않고 만들어낸 데이터라면 데이터가 복잡하고 지저분할 가능성이 있습니다.

애초부터 인공지능 알고리듬에 바로 적용할 수 있도록 깔끔하게 데이터를 저장한다고하더라도 문제입니다. 그 만큼 당장 필요하지 않은 데이터를 저장하지 않는다고도 볼 수 있기 때문입니다. 지금은 필요하지 않지만 나중에 필요할 수도 있는 데이터가 있을 수 있으므로, 나중을 생각한다면 가능하면 많은 데이터를 다 저장할 필요가 있습니다. 같은 작업을 다시 수행하기 곤란하다면 더 더욱 그렇습니다.이렇게 저장된 데이터라면 인공지능 알고리듬에 바로 사용할 수 없는 경우가 대부분입니다.

따라서 인공지능 알고리듬에 바로 쓸 수 있도록 데이터를 정제하서 적절한 형식으로 뽑아내는 일이 필요합니다.경우에 따라서는 copy-paste를 반복하는 원시적인 수작업으로 원하는 데이터를 뽑아낼 수도 있습니다.

그러나 처리할 데이터의 양이 많고 내용이 복잡하면 단순 수작업으로 해결하기에는 불가능한 경우도 생깁니다. 이럴때는 몇가지 표준 command들을 조합해 쓰면, 복잡한 텍스트 데이터를 가공하고 유용한 데이터를 뽑아내는 일이 한결 쉬워집니다. 그중 가장 중요한 커맨드들은 다음과 같습니다.

curl
sed
grep
awk

웬만한 텍스트 데이터는 일종의 패턴이 있습니다. 예를 들면 웹페이지가 그렇습니다. html이 정한 규칙을 따라 만들기 때문에 그 안에 우리가 원하는 데이터도 일종의 페턴 속에 자리잡고 있을 가능성이 큽니다. 바로 이점을 이용해서 필요한 데이터를 뽑아내는 작업을 어느정도는 자동화할 수 있습니다. 그때 이용하는 커맨드들이 위의 커맨드들입니다.

특히 sed와 grep을 설명할때 정규 표현(regular expression)이라는 것이 등장하는데, 이 방법은 데이터 가공과 추출에 있어 꽃이라고 할 수 있습니다. 파이썬을 비롯한 각종 프로그래밍에서도 아주 유용하게 쓰이는 방법입니다.

파이썬 공부자료와는 별도로, 제가 시간이 나는대로 데이터 가공과 추출을 하는데 기본으로 쓰이는 위의 커맨드들을 하나 하나 설명하려고 합니다. 이후 복잡한 테이터 가공이나 추출을 위한 shell script 작성 방법, 더 나아가 perl script까지 시간이 허락하면 진행해 볼 생각입니다. 알고리듬의 입력으로 사용할 데이터를 사전 처리할 일이 많은 분들에게는 유용한 정보가 될 것입니다.

그런데 이런 표준 커맨드들을 윈도우즈에서 사용하는데는 문제가 있을 수 있습니다. 하지만 Mac이나 Linux를 쓰면 거의 문제가 없습니다. 그 이유는 위에 언급한 커맨드대부분이 원래 Unix라는 운영체계(OS) 환경에서 만들어졌기 때문입니다. (curl은 비교적 최근인 20여년전에 만들어졌습니다)

Mac은 스티브 잡스가 다시 돌아온 이후 한체레 Mac OS를 뒤집어 없은 때가 있었습니다. 이때 Unix계열인 BSD를 기반으로 다시 만들어졌습니다. Linux도 Unix와 같은 환경을 만드는 방향으로 개발되어 왔고요. 그래서 Mac이나 Linux에서는, Unix환경에서 만들어진 커맨드들을 조합해서  쓰는데는 문제가 거의 없습니다.

그런데 윈도우즈는 태생 자체가 완전히 다릅니다. 초기 멕킨토시 (이때는 Unix기반이 아니었던 걸로 압니다) 의 GUI를 흉내내서 만든 OS로 Unix환경과는 사실상 관계가 없는 OS입니다. grep, sed, awk 등을 쓰는 것을 기본으로 하지 않는 OS로 출발한거죠. 그래서 윈도우즈를 있는 그대로 쓰면서 <데이터 추출과 가공>과 관련된 공부를하기에는 무리가 있을 가능성이 큽니다.

부득이하게 윈도우즈를 쓴다면 윈도우즈에 Cygwin이나 Linux subsystem for Windows 같이 리눅스 환경을 만드는 프로그램을 설치하는 것을 추천합니다. VirtualBox로 윈도우즈에 Linux가상 머신을 설치하는 것도 좋겠습니다.

Cygwin:
https://www.cygwin.com/
https://www.youtube.com/watch?v=hh-V6el8Oxk
Linux subsystem for Windows:
https://docs.microsoft.com/en-us/windows/wsl/install-win10
VirtualBox:
https://www.virtualbox.org/
https://www.ubuntu.com/

다음 자료에서는 curl이라는 커맨드에 대해 알아보겠습니다.