신호 데이터의 프로세싱 프로젝트의 진행 과정 로그로 아래의 글에서 이어집니다.
[Project 1] 신호 데이터의 Contact & Release 지점 찾기 (1)
등간격으로 점을 찍는 데이터에 한정, 마주한 문제 3
데이터를 한 번에 측정하지 않고 몇 번에 걸쳐서 측정한 경우들도 있었다. 이렇게 몇 번에 걸쳐서 측정하게 되면 timestamp가 급격하게 바뀌는 지점이 여러 곳 생기는데 이것은 이제까지의 가정에 반하는 경우였다. 이제까지는 timestamp가 65536을 찍었을 때만 1로 갱신된다고 생각해 왔는데, 65536가 아니어도 큰 수를 차이로 하는 지점들이 생기게 되었고, 이러면 비이상적인 timestamp 간격으로 이상 지점, 즉 missing location를 감지하는 해결 방식에 오류가 생기는 것이었다. 데이터가 나눠서 찍힌 부분이 line이 바뀌는 곳이었다면 별 문제가 되지 않지만, 여기서 점들이 missing 되었다면 문제가 발생한다.
선택한 해결 방안
결과적으로 해결하지 못하고 다음 프로젝트로 넘어갔다. timestamp 격차가 많이 나는 데이터인지 아닌지를 판별하고, missing 된 점이 없다면 cropping이 가능하지만, missing 된 점이 있다면 그 위치를 찾아내지 못하기 때문에 cropping이 불가하다. missing이 감지된다면, timestamp의 격차가 많이 나는 인덱스들과 missing의 의심이 시작되는 지점의 인덱스를 제공하는 걸로 마무리했다.
업데이트
1. Object-Oriented Programming 방식으로 바꾸기?
track 해야 하는 함수들의 파라미터가 너무 많이 생겼다. 가독성이 더 좋고 예쁜 코드를 위해 OOP를 사용을 고려해 보기
진행여부: X
2. missing의 위치를 한번 잘못 찾았다면, 인덱스 끝과 끝까지 계속 잘못 찾게 됨
찾은 missing의 개수가 총 missing의 개수를 넘어가면 missing을 잘못 찾았다고 error raise 하기
진행여부: O
3. 데이터가 등간격의 점이 아니고, edge to edge의 line이거나 패턴일 경우?
처음 프로젝트를 assign 받을 때에는 신호의 증가의 1/3 정도가 끝난 부분부터 신호의 감소가 2/3 정도까지 끝난 구간을 원한다고 하셨다. 이 문제를 풀기 위해 이용하고자 했던 것은 ruptures 라이브러리의 change point detection이었는데 문제들이 좀 있었고... 후에 문제가 증가와 감소가 아예 끝난, stabilized 된 구간의 시작점과 끝점으로 재정의됨과 동시에, 등간격의 점에 대해서 contact과 release를 찾는 것이 우선시 되었다 (이 경우 사람이 직접 찾을 수 없는 개수의 터치가 진행되기 때문에).
결과적으로 이 부분 또한 제대로 해결하지 못했는데, 이유는 하나 혹은 몇 개의 데이터에는 맞춰낼 수 있지만, 다양한 경향성을 갖는 데이터에 모두 적용가능한 툴을 만들기는 어려웠기 때문이다 (물론 내가 부족했기에 ㅎㅅㅎ). 따라서, 터치의 개수가 크지 않다면, 툴이 contact, release라고 예측하고 있는 지점들을 신호의 경향성 그래프와 함께 제공하고, 유저로 하여금 액션을 취하게 해야겠다고 생각했다.
어떤 인풋 혹은 액션을 허용하는 게 제일 좋을지에 대해서 고민해 봤다.
그래프를 보면서 rel_height 설정하게 하기? 혹은 그래프의 구간을 드래그하게 하기? 주로 터치의 끝점이 정확하지 않으니까 끝점에서 뺄 크기를 정하는 parameter 추가하기? 결과적으로는 이렇게 input을 넣을 것이면 차라리 직접 contact, release를 클릭하는 방법이 정확도라도 보장할 수 있을 것 같아 유저로 하여금 contact, release를 직접 클릭하게 구현했다.
진행여부: O
4. exe file로 변환하기
pyinstaller를 통해서 .py 파일을 .exe 파일로 변환할 수 있다. exe 파일로 tool을 제공하는 이유는, python을 run 시키는 데에 필요한 dependency 문제를 해결하기 위해서이다.
아래와 같이 pip을 통해 pyinstaller를 설치하고 command를 사용하면 된다. 이용할 수 있는 여러 가지 파라미터가 있으니 활용 목적에 따라 설정하면 되는데, 나는 하나의 파일만을 변환하고 싶었고, 미친 듯이 커지는 (아마도 사용하는 라이브러리들 때문에) 용량을 조금이나마 줄이기 위해 upx를 이용해 봤다.
pip install pyinstaller
pyinstaller findContacts.py --onefile --upx-dir=`path_where_you_installed_upx`
여러 개의 폴더와 파일들이 생기는데, 원하는 exe 파일은 dist 폴더에서 찾아볼 수 있다.
진행여부: O
마무리
나중에 제대로 잘 정리하려고 미루다 보니 곧 내가 뭘 했는지도 까먹게 생겼다. 일단은 이렇게나마 대충 정리하고 넘어가 보겠다.
명심하자. "잘"하는 것보단 "하는 것"이 중요하다. 잘하는 것도, 한다는 행위가 먼저 있어야만 논하는 게 가능하다.
잘할 수도 있다는 가능성을 유보하기 위해서 "하기"를 피하지 말자. 잘 안 해도, 못해도 괜찮다. 일단 너에게는 하는 게 중요하다.
해결할 수 있는 방법들이 다 있을 거라고 생각합니다. 다양한 의견과 피드백 주시면 감사하겠습니다!
'스터디 로그 > Internships' 카테고리의 다른 글
[Project 2] Least Squares Method (1) (0) | 2023.03.18 |
---|---|
0316 (0) | 2023.03.17 |
[Project 1] 신호 데이터의 Contact & Release 지점 찾기 (1) (0) | 2023.02.26 |
스타일러스 펜 (+ 기술의 종류) (1) | 2023.02.12 |
전기용량, 접지, 유도계수, 축전기 (0) | 2023.01.28 |