본문 바로가기
Python

[IDLE] 데이터 분석 및 가공

by amoomar 2022. 5. 10.
반응형

 

크롤링이나 다운로드 한 파일을 가공하고, 시각화 하는 작업이 백엔드 개발자의 역할이다.

포털에서 자료를 다운받아, 해당 파일을 원하는 대로 가공 및 시각화 하는 실습을 진행하였다.

목차는 아래와 같이 이루어져 있다.

 

1. 필요한 파일 다운
2. 파일 복사
3. 파일 읽어오기
4. 파일 작성

 

 


 

 

 

1. 필요한 파일 다운

 

공공데이터포털이나, 기상자료개방포털 등에서 실습을 위한 자료 데이터를 다운 받는다.

 

실습은 공공데이터 포털에서 아래의 파일을 다운 받아 진행되었다.

도로 재비산먼지 측정 정보

 

이때 확장자 .csv는 엑셀 파일과 같다.

 

다운 받은 파일에 접근하여 읽어오거나 재작성 할  예정이다. IDLE [파일 입출력]포스팅을 참고하여 파일의 위치를 옮겨둘 필요가 있다.

이때 파일명을 간단하게 변경하여 작업한다.

 

파일 위치 및 파일명

 

 

 


 

 

 

2. 파일 복사

 

작업 중간에 파일 내용이 소실되거나 하는 불상사를 방지하기 위해서 복사 파일을 별도로 두고, 작업이 끝날시마다 txt파일로 한 번씩 확인하여 제대로 된 데이터를 복사 파일에 save하며 관리하는 것이 용이하다.

 

아래는 파일의 복사를 위한 코드이다.

# 1. 파일복사
with open('test1.csv', 'rb') as resource:
    with open('test2.csv', 'wb') as copy:
        while True:
            buff=resource.read(1024)#바이트
            
            # 작업완료:불러온 buff가 공백이라면,
            # if buff==''로 작성될 수도 있다.
            # 이때, 동적타이핑이기 때문에 라인마다 타입이 달라진다. buff가 공백이라면 false가 반환될 수 있음
            # 즉, buff가 false이라면,
            if not buff:
                break
                
            #작업미완료라면 계속 수행
            copy.write(buff)#내용을 작성
            
print('완료!') #로그 개념

'''
객체.read(크기)는 해당 객체의 기재된 크기만큼만 read하는 메서드이다.
이터레이터처럼 작용하여, 1024바이트를 불러온 후 다음 1025부터 1024바이트를 다시 불러오는 형식!
'''

 

 

with는 close()메서드를 자동호출해준다.

또한 필수인 예외처리는 일부 지원하기 때문에 실무에서는 해당 구문이 file=open보다 더 많이 사용된다.

 

 

무한루프문을 통해 원본파일의 내용을 가져와 test2.csv파일을 작성한다. 아래와 같이 정상적으로 사본파일이 작성되는 것을 확인할 수 있다.

 

 

 


 

 

3. 파일 읽어오기

 

데이터의 가공을 위해서는 파일을 python으로 불러와 가공할 수 있는 데이터로 만드는 작업이 필수이다.

해당 목차에서 불러온 데이터를 배열에 담는 작업을 진행하였다.

 

# 2. 파일내용 확인
dataList=[]
with open('test2.csv','rt', encoding='CP949') as file:
    while True:
        file.readline()#첫줄(구분문구) 제거
        #파일을 읽어들이기
        line=file.readline()
        if not line:#파일 내용이 끝나면 종료
            break
        data=line.split(',')#쪼갠 데이터를 dataList에 저장
        dataList.append(data)#내용 append
        print(dataList)
# 인코딩 관련 예외 해결방법
# https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=youji4ever&logNo=221592440302

 

readline을 한 번 해주어 필요 데이터 외에 해당 데이터가 무엇을 나타내는지 구분하는 텍스트를 날려주고, 데이터만을 line에 저장하였다.

 

split( )

해당 메서드에 대한 이해가 가능하도록 설명이 잘 되어있는 링크를 첨부하였다.

https://opentutorials.org/course/50/96

 

split - 생활코딩

요약(Summary) 문자열을 인자로 주어진 문자열일 기준으로 쪼개서 배열에 담는다 문법(Syntax) string.split(separator, limit) 인자(Parameters) 인자명 데이터형 필수/옵션 설명 separator string 옵션 문자열을 분

opentutorials.org

 

 

csv파일에서는 다음 행의 데이터를 쉼표( , )로 구분하기 때문에 split을 활용하여 쉼표로 연결된 데이터를 하나의 배열로 인식하여 저장하도록 하는 개념이다. 이 내용은 csv파일을 txt파일로 열었을때 이해가 쉽다.

드래그 된 부분은 구분 문구이다.

즉, 한 줄을 하나의 배열로 인식할 수 있도록 쉼표로 연결된 문장을 하나의 배열로 인식하게 하여 dataList에 append한 것이다.

 

dataList를 출력해보면 아래와 같은 출력결과를 확인할 수 있다.

정상 append

 

 

 

 

 


 

 

 

4. 파일 작성

 

추가가 필요한 데이터를 csv파일로 작성하는 실습을 진행하였다.

 

# 3. 가공하여 파일 내용 작성(가공은 생략)
import csv #모듈을 import

with open('test3.csv', 'wt', newline='') as file: #줄바꿈을 제거함
    w=csv.writer(file, delimiter=',')
    w.writerow([1, 'apple', '2022-05-09,10:56'])
    w.writerow([2, 'banana', '2022-05-10,10:56'])
    w.writerow([3, 'kiwi', '2022-05-11,10:56'])

with open('test3.csv','r',newline='') as file:
    r=csv.reader(file,delimiter=',')
    for v in r:
        print(v)

 

이때 csv형식의 파일을 작성하기 위해 객체 csv모듈을 import함으로써 csv객체에 접근하여 메서드를 사용할 수 있게 된다.

write하게 되면 줄바꿈(\n)이 자동으로 들어간다. 이때 이 줄바꿈을 제거하기 위해 newline=''을 매개변수로 둔다.

delimiter=' , ' 설정을 통해 csv파일의 필드가 쉼표별로 구분될 수 있게 하였다.

 

 

위의 코드에 따라 출력된 test3.csv의 내용은 아래와 같다.

출력

 

 

 

 

파일 위치를 확인해보니 지정된 위치에 명시한 파일명으로 저장된 모습을 확인할 수 있다.

파일 위치

 

 

 

 

파일 내용 또한 정상적으로 작성 되었다.

파일 내용

 

 

 

 

 


 

 

 

 

 

 

 

반응형

'Python' 카테고리의 다른 글

[아나콘다] 데이터 분석 및 가공_2  (0) 2022.05.11
[아나콘다] 데이터 분석 및 가공  (0) 2022.05.10
[IDLE] 객체와 상속  (0) 2022.05.06
[IDLE] 파일 입출력  (0) 2022.05.04
[IDLE] 예제와 중복제거  (0) 2022.05.03