반응형

안녕하세요.

 

제가 통신 전공으로 프로토콜 등도 중요하지만 정확한 센서 데이터 수집하는 것도 굉장히 중요하다고 요즘 느낍니다.

 

정확한 데이터를 기반으로 머신러닝, 딥러닝, 필터링이 가능하기 때문에 정확한 데이터를 모으는 것은 가장 중요합니다. 

 

UART Serial 통신(9600, 115200bps)을 통해 가장 심플한 CSV형식이 현재 구글에서 가장 돌고 있습니다. 

 

매번 데이터  수집을 위해 데이터 짜는 것이 귀찮기 때문에 저를 위해 메모장 느낌으로 코딩을 기록했습니다. 

 

파이썬 공식 문서를 보면 쉽게 알 수 있지만, 번역기에 돌린 한국말이 약간 이상합니다. 

https://docs.python.org/ko/3/library/csv.html

 

csv — CSV 파일 읽기와 쓰기 — Python 3.9.7 문서

소위 CSV (Comma Separated Values – 쉼표로 구분된 값) 형식은 스프레드시트와 데이터베이스에 대한 가장 일반적인 가져오기 및 내보내기 형식입니다. CSV 형식은 RFC 4180에서 표준화된 방식으로 형식을

docs.python.org

 

import os

path_ = './data/test.csv'
fieldnames = ['device_name','f_port', 'ucnt', 'dr', 'rssi', 'snr', 'channel', 'lat', 'long_', 'alt']


if __name__ == '__main__':
	file_exists = os.path.isfile(path_)
	
    while(1):
    """
    Do something ex) serial.read, post, parsing...
    """
        with open(file_name, 'a', newline='\n') as csvfile:
            wr = csv.DictWriter(csvfile, delimiter=',', fieldnames=fieldnames)
            if not file_exists: wr.writeheader()
            wr.writerow({
                'device_name' :device_name,
                'f_port':f_port,
                'ucnt' : ucnt, 
                'dr' :dr, 
                'rssi':rssi, 
                'snr':snr, 
                'channel':channel, 
                'lat':lat, 
                'long_': long_, 
                'alt': alt})

 

1. with문을 사용한 이유 :

우선 파이썬 공식문서는 with문을 쓰기 권장한다. 파일 쓰기 위해선 파일을 열어야 합니다. 그리고 쓰기가 완료되면 닫아야 합니다. 하지만 파일 쓰기가 완료되었지만, 파일이 열려 있으면 파일이 깨지거나, 제대로 된 데이터가 아닐 수 있습니다. with문은 이를 방지 위해 파일 열기, 닫기를 자동으로 해줍니다. 

 

2. 위 csv 저장하는 코드는 데이터를 이어 저장하는 형식이며, 만약 파일 이름(path_)이 지정한 경로(./data/) 내에 이름이 같은 파일이 없다면, csv header(fieldnames)를 추가한다. 파일 이름이 지정한 경로 내에 이름이 같은 파일이 있다면, csv header를 추가하지 않고, 데이터를 그대로 이어 저장한다.

    

csv 형태를 잘 만들어 놓으면 나중에 pandas 혹은 matlab가지고 놀기 편합니다. 

 

이런 느낌의 코드를 전에 짜놓고 또 못찾아서 새로 짜고를 3번 정도 반복할쯤 그냥 블로그에 올리기로 했습니다.

728x90
반응형
반응형

안녕하세요. 오늘은 파이썬으로 CSV형식으로 이루어진 파일구조를 알아보겠습니다. 

 

csv(comma-separated values) : 쉼표로 분리된 데이터형식을 말합니다. 

 

예를 들어, 

5x5의 데이터가 있다고 가정합니다. 이를 csv형식으로 변환하면.

 

열은 (,)로 표현하고, 행은 (\n : new line : 띄어쓰기)로 표현합니다.

 

당연히, 우리들이 많이 사용하는 엑셀로 csv파일을 표현할 수 있습니다. 

 

평소처럼 엑셀을 사용하고, 저장할 때 csv로 저장해주면 됩니다. 

 

csv파일

 

엑셀에 기본 형태에 알아 보았으니, 이제 파이썬으로 코딩을 하겠습니다. 

 

아주 편하게, 파이썬은 csv파일을 표현하기 위한 라이브러리가 존재합니다. 

import csv

f = open('example.csv', 'w', encoding='utf-8') # file open 
wr = csv.writer(f)  # csv file write

wr.writerow(["a", "A"])
wr.writerow(["b", "B"])
wr.writerow(["c", "C"])
wr.writerow(["d", "D"])
wr.writerow(["e", "E"])
wr.writerow(["f", "F"])

f.close()  # file close

csv

1. 우선 csv파일을 만들기 위해선 생성할 파일을 열어줍니다.

우선 우리는 파일을 작성하는 예제이기 때문에 'w'를 사용합니다. 

'w'  : write (쓰기), 'r' : read(읽기)

 

2. 열린 파일을 csv.wrtie()에  넣는다.

 

3. wr.write( )를 통해 csv파일에 넣고자 데이터를 작성한다. 

 

4. 당연히 파일을 열었으니, 파일을 닫아 작업을 완료한다. 

 

 

위 csv 라이브러리를 사용하면 간편하게 csv구조를 만들 수 있습니다. 

 

우리들은 csv파일 형식에 대해 알게 되었습니다. csv 라이브러리를 사용하지 않는다면 표현할 수 없는걸까요?

 

이번에는 csv파일을 사용하지 않고, 직접 우리들이 csv파일 형식으로 만들어 줍시다. 

f = open("example.csv", 'w')
list_i = ["a", "b", "c", "d", "e", "f"]

for i in list_i:
    f.write(i)
    f.write(",")
    f.write(i.upper())
    f.write("\n")
f.close()

csv

 

 

1. 우선 csv파일을 만들기 위해선 생성할 파일을 열어줍니다.

우선 우리는 파일을 작성하는 예제이기 때문에 'w'를 사용합니다. 

'w'  : write (쓰기), 'r' : read(읽기)

 

2. write를 통해 자신이 쓰고자 하는 데이터를 입력한다. 

열을 표현하기 위해 쉼표(, : comma)를 직접 입력한다. 

행을 표현하기 위해 띄어쓰기(\n : new line)를 직접 입력한다. 

 

3. 파일을 열었으니, 파일을 닫아 작업을 완료한다.

 

당연히 코딩할 때, csv를 사용하나, 안사용하나 결과의 차이는 없습니다. 

 

하지만 좀 더 로우레벨로 코딩을 하고 싶거나, 파일 입출력에 공부를 하고 싶다면 이런식으로 접근하는 것도 나쁘지 않다고 생각합니다. 

728x90
반응형

+ Recent posts