봉지라면의 봉지 속 이야기

BongjiNoodle's Packet Inside Story

나의 진솔담백한 이야기

컴퓨터공학/데이터분석기초실습

데이터분석기초실습] 4. 데이터 입출력

봉지라면 2022. 11. 5. 00:13
반응형

데이터 입출력

  • 패키지와 라이브러리
  • CSV파일 활용

 

 

 

 

 

 

 

 

 

 

 

 


Python Package vs. Library

라이브러리란?

서브루틴이나 함수들의 집합

 

일반적으로 라이브러리(Library)는 파이썬 내부에 있는 정적 라이브러리(내장 라이브러리)를 가리킴

  • 정적/내장 라이브러리: 외부에서 호출하지 않고 내부적으로 파이썬 자체에 포함된 라이브러리

다른 패키지의 코드를 가져올 수 있는 동적 라이브러리(외장 라이브러리)는 패키지(Package)라 함

  • 동적/외장 라이브러리: 외부의 패키지를 파이썬 내부에서 설치하여 사용하는 것
import [package]			#패키지 전체를 호출하는 경우
from [package] import [function]	#패키지 중 일부 함수만 호출하는 경우

Python 내장함수(Built-in Function)

내장(Built-in)이란 파이썬이 기본적으로 해당 함수를 포함하고 있다는 의미

  • 즉 import 구문을 이용해 load하지 않아도 사용 가능한 함수

 

예시) 내장함수 적용: input())

text = input("문장, 단어를 입력하세요: ")
print(text)

#입력창이 뜨며 입력한 값이 출력됨

 


외장 패키지(External Package)

대표적인 패키지는 pandas, numpy 등과 같은 데이터를 다루는 패키지

 

외장 패키지(External Package) 설치

아나콘다가 포함하지 않은 패키지의 경우 외장 패키지를 설치해 아나콘다 내부에서 사용 가능

 

아나콘다는 기본적으로 많은 패키지를 보유하고 있지만 그 외의 패키지들이 필요한 경우 pip 설치 명령어를 통해 설치 가능

  • pip의 경우 패키지 설치만이 아니라 삭제, 검색(search, show), 수정(-upgrade) 시에도 사용
#리눅스, 맥OS
$ pip install [라이브러리]

#윈도우
C:\Anaconda> pip install [라이브러리]

#삭제
C:\Anaconda> pip uninstall [라이브러리]

예제

pip install numpy #설치

pip uninstall numpy #삭제

CSV 파일 활용

CSV 파일이란?

CSV는 Comma-Separated Values의 약자

 

즉 각각의 데이터 값을 콤마(,)로 구분하는 파일 형식

 

데이터 분석 전문가들이 자주 사용하는 파일 형식

  • 정부에서 운영하는 공공 데이터 포털(www.data.go.kr)이 제공하는 일반적인 파일 형식

엑셀 프로그램에서 열어 엑셀 파일처럼 사용 가능

 

CSV 파일의 첫 번째 레코드에는 열 제목이 포함되어 있음 (일반적 관행)


CSV 파일 읽기

CSV 모듈을 불러옴

 

Open() 함수로 파일을 열어서 f에 저장

 

f를 reader() 함수에 넣어 data라는 reader 객체 생성

 

for문을 이용하여 data 출력 및 f.close()로 파일 닫기

 

 

* 2011년 8월 1일까지 9년간 울릉도 기온과 풍속에 대한 데이터 이용

import csv

f=open('weather.csv')
data=csv.reader(f)

for row in data:
	print(row)
f.close()

'''
출력 결과
['일시', '평균기온', '최대풍속', '평균풍속']
['2010-08-01', '28.7', '8.3', '3.4']
['2010-08-02', '25.2', '8.7', '3.8']
['2010-08-03', '22.1', '6.3', '2.9']
['2010-08-04', '25.3', '6.6', '4.2']
['2010-08-05', '27.2', '9.1', '5.6']
['2010-08-06', '26.8', '9.8', '8']
['2010-08-07', '27.5', '9.1', '5']
['2010-08-08', '26.6', '5.9', '4']
['2010-08-09', '26.9', '5.1', '3.1']
['2010-08-10', '25.6', '10.2', '5.5']
(이하 생략)
'''

 

CSV 파일에서 헤더(header) 추출

헤더는 데이터의 첫 번째 줄에 위치 (데이터 값들의 제목 표시)

 

두 번째 줄부터는 데이터의 속성

 

next() 함수: 첫 번째 데이터 행을 읽으면서 데이터의 탐색 위치를 다음 행으로 이동시키는 함수

import csv

f=open('weather.csv')
data=csv.reader(f)
header=next(data)

print(header)
f.close()

'''
출력 결과
['일시', '평균기온', '최대풍속', '평균풍속']
'''

 

CSV 파일에서 속성만 추출

next()함수를 통해 data 내부 내용이 다음 행으로 이동되어 헤더가 제거된 속성만 추출 가능

import csv

f=open('weataher.csv')
data=csv.reader(f)
header=next(data)

for row in data:
	print(row)
f.close()

'''
출력 결과
['2010-08-01', '28.7', '8.3', '3.4']
['2010-08-02', '25.2', '8.7', '3.8']
['2010-08-03', '22.1', '6.3', '2.9']
['2010-08-04', '25.3', '6.6', '4.2']
['2010-08-05', '27.2', '9.1', '5.6']
(이하 생략)
'''

 

CSV 파일에서 원하는 데이터만 추출

평균 풍속 데이터 추출

import csv

f=open('weather.csv')
data=csv.reader(f)
header=next(data)

for row in data:
	print(row[3], end=',')
f.close

 

실습) 지난 10년간 울릉도의 최대 풍속은?

import csv

f=open('weather.csv')
data=csv.reader(f)
header=next(data)
max_wind=[]

for row in data:
	if row[2] =='':
    	max_wind.append(0)
	else:
    	max_wind.append(float(row[2]))
f.close()

print('지난 10년간 울릉도의 최대 풍속은: ',max(max_wind), 'm/s')

'''
출력 결과
지난 10년간 울릉도의 최대 풍속은:  26.0 m/s
'''

 

CSV 파일 저장

CSV 모듈을 불러옴

 

평균 풍속 데이터만 추출한 값을 aws 리스트에 저장

 

open()함수로 저장할 파일 명을 입력하고, w(write)로 표시

 

for문을 이용하여 aws에 저장된 리스트를 쓰고, f.close()로 파일 닫기

import csv

aws=[]

f=open('weather.csv')
data=csv.reader(f)

for row in data:
	aws.append(row[3])
f.close
f=open("weather_aws.csv","w")

for i in range(len(aws)):
	f.write(aws[i]+'\n')
    
f.close()

 

CSV 실습

앞서 사용했던 울릉도의 기상 데이터에는 일일 평균 풍속 데이터가 있다. 이 데이터를 바탕으로 몇월의 울릉도가 가장 바람이 강한지 알아 보고 싶다. 결과는 아래와 같다. 달이 0부터 시작하여 11(실제는 1월부터 12월)까지 있고, 3일 때에 가장 큰 풍속을 보이므로, 울릉도는 4월에 가장 강한 바람이 분다는 것을 알 수 있다.
import csv
import matplotlib.pyplot as plt

f= open('weather.csv') #CSV 파일을 열어 f에 저장
data= csv.reader(f) #reader() 함수로 읽기
header= next(data) #헤더 제거

monthly_wind= [0 for x in range(12)] #매달 풍속을 담을 리스트, 초기화 0
dayts_counted=[0 for x in range(12)] #각 달마다 측정된 일수, 초기화 0

for row in data:
    month= int(row[0][5:7]) #0번 열에서 달 정보 추출
    if row[3]!= '': #풍속 데이터 존재하는지 확인
        wind= float(row[3]) #풍속 데이터를 얻어 옴
        monthly_wind[month- 1]+= wind #해당 달에 풍속 데이터를 추가
        days_counted[month- 1]+= 1 #해당 달의 일수를 증가
        
for i in range(12):
    monthly_wind[i]/= days_counted[i] #일수로 나눠 월평균 구하기
    
plt.plot(monthly_wind, 'blue') #matplotlib을 통해 시각화
plt.show()

f.close() #파일을 닫음

'''
출력 결과
(출력 결과는 위의 사진과 같습니다.)
'''

본 데이터분석기초실습은 [지능형 데이터 공학 및 응용 연구실 - 경상국립대학교 컴퓨터과학부]에서 수업한 자료를 토대로 정리하여 작성하였습니다.



반응형