상세 컨텐츠

본문 제목

[Python] numpy의 genfromtxt 함수를 이용해 csv 파일을 가져오기

프로그래밍/Python

by 척척석사 민준 2020. 8. 25. 13:37

본문

728x90

저번 포스팅에서는 MATLAB에서 csv 파일을 가져오는 방법에 대해서 포스팅했었다. 같은 기능을 무료 소프트웨어인 파이썬(Python)에서 구현해보려고 한다. 컴공과도 아닌데 굳이 처음부터 개발할 이유는 없다. 나는 그냥 남들이 이미 만들어놓은거 구글링으로 잘 찾아서 원하는 기능을 구현하는게 목표다. 파이썬에서 매트랩처럼 데이터를 불러오려면 "numpy" 라는 라이브러리가 필요하다. 매트랩은 기본적으로 행렬기반이라 필요없지만 파이썬은 아니기 때문에 numpy를 설치해서 (아나콘다를 설치하면 기본으로 들어있다) 데이터를 입출력해야 한다. (다른 고수들은 이런 방법 안쓰고도 잘 하겠지만.. 나는 허접이기에 MATLAB으로 코드짜고 그걸 파이썬으로 번역을 해서 사용한다) 

 

사설이 길었다. 본론으로 들어가서 오실로스코프에서는 측정한 전류전압의 데이터가 csv로 저장할 수 있다. csv는 Comma-Seperated Value로 직역하면 쉼표로 구분된 값들이다. (csv 파일 열어보면 그 말의 의미를 알 수 있는데 메모장으로 열면 숫자랑 글자랑 쉼표만 있다) csv파일을 읽는 방법을 구글링하면 나오는 방법들이 있다.

 

1. 파이썬 기본 내장함수인 open 함수와 for문을 이용한 방법

data = open('example.csv', 'r', encording='utf-8')

2. 표준 라이브러리 csv의 함수 reader이용

improt csv

with open('example.csv' , 'r' , encording='utf8') as f :
    dat = [k for k in csv.reader(f)]

3. numpy의 loadtxt 함수 이용

import numpy as np

data = np.loadtxt('example.csv' , delimiter=',' , skiprows = 1, dtype=float)

 

이 별거 아닌 기능을 써보려고 1번부터 3번까지 시도해봤는데 MATLAB처럼 깔끔하게 불러오는건 없었다. 

그래서 책을 찾아봤는데 참고한 책은 "엔지니어를 위한 파이썬 - 나카쿠키 켄지 지음 심효섭 옮김" 으로 이 책덕에 고통에서 해방되었다. (도서관에서 빌린 책이기 때문에 내돈내산은 아니다)

 

4. numpy의 genfromtxt 함수 이용

import numpy as np

data = np.genfromtxt('example.csv' , skip_header = 1 , delimiter = ',' , dtype = float)

import 는 라이브러리를 가져온다는 뜻으로 numpy를 불러와서 앞으로 np라고 호출하겠다는 의미이다. (MATLAB은 함수를 호출할 때 그냥 쓰지만 파이썬은 라이브러리를 알려줘야 불러온다) 

data라는 리스트에 (데이터가 한개면 변수고 여러개면 자동으로 리스트가 된다) np에서 불러온 genfromtxt 함수로 불러온 데이터를 저장한다. 

genfromtxt는 example.csv 라는 원본데이터에서 맨 위에 있는 헤더파일(파일정보) 첫줄을 지워주고 (skip_header = 1,  헤더정보가 20줄이면 skip_header = 20 으로 바꾸면 된다) 구분자(delimite)는 쉼표로 한다(csv파일을 읽을때는 delimiter = ','). 데이터타입은 실수(float)로 한다.

 

재료는 다 주어졌으니 이제 오실로스코프로 측정한 데이터를 불러오는 코드를 만들어보자

먼저 csv 데이터를 리스트로 옮기는 코드를 만들었다. 

파이썬(Spyder, Phthon 3.7 ver)에서 실행한 모습

 

MATLAB에서 만들었던 코드 처럼 CSV파일을 불러봐서 시간정보는 리스트 T에 전압정보는 리스트 V에 전류정보는 리스트 I에 저장하는 코드는 다음과 같다. (다양한 방법이 있겠지만 나는 코드간 통일성을 위해 이렇게 만들었다) 

import numpy as np

CSV = input("CSV파일명을 입력하시오 (Typing your csv file name) \n : ") 
csv_data = np.genfromtxt(CSV, skip_header = 20 , delimiter = ',', dtype = float)

T = csv_data[:, 0]
V = csv_data[:, 1]
I = csv_data[:, 3]

 

이 코드를 이용하면 오실로스코프에서 저장한 csv파일을 이용해 시간, 전압, 전류 데이터를 각각의 리스트 T, V, I에 저장할 수 있다. 

파이썬(Spyder Python 3.7)에서 코드를 실행한 모습

 

정보출처

1. 책 : 엔지니어를 위한 파이썬 (나카쿠키 켄지 지음, 신효섭 옮김) 

2. [MATLAB] 오실로스코프에서 csvread 함수를 사용해서 데이터불러오기 (여기 블로그에 있음, 내글)

728x90

관련글 더보기