ABOUT ME

Today
Yesterday
Total
  • [python] 파이썬을 이용한 빅 데이터 실습 8 - 데이터 입출력
    카테고리 없음 2021. 11. 1. 14:23
    반응형

     

     

     

     

     

     

     

     

     

     

     

     

    외부에서 제공해주는 데이터 사용하기

     

    파일에서 데이터 읽어오기

     

     

     

    import pandas as pd
    from pandas import Series, DataFrame

     

     

     

    csv파일 데이터 입출력

     

     

    csv 파일 읽기 - read_csv()

     

    파일은 현재 사용하는 쥬피터 실습 파일이 넣어진 파일 안에

    ex1의 파일이 존재한단 하의 실습입니다.

    보통은 c드라이브에 들어있습니다.

     

     

     

     

    pd.read_csv('data/ex1.csv')

     

    실행결과

     

    	a	b	c	d	message
    0	1	2	3	4	hello
    1	5	6	7	8	world
    2	9	10	11	12	foo

     

    sep인자 활용하기

     

     

     

    각각을 columns으로 쪼개고 싶을 때 인자값(sep)을 사용

    - 특정 구분자를 기준으로 필드들이 구분되어 있는 csv형태의 파일은

    모두 처리 가능하므로 파일의 확장자는 상관이 없다

     

    pd.read_csv('data/ex2.txt', sep=' ')

     

    실행결과

     

    	a	b	c	d	message
    0	1	2	3	4	hello
    1	5	6	7	8	world
    2	9	10	11	12	foo

     

     

     

    encoding 인자 활용하기

     

     

     

    -여기서부터는 실행결과가 너무 길어서 생략하겠습니다 

     소스를 주의해주세요!

     

    해당 파일은 문자열이 인코딩하는 방식과 맞지 않으면 에러가 뜬다

    그럴때 ecoding 인자를 활용 윈도위 계열의 경우 cp949를 사용한다

     

    pd.read_csv('data/2020KBO야구.csv', encoding='cp949')

     

     

     

     

     

    header, names 인자 활용하기 (컬럼명이 파일에 포함되어 있지 않은 경우)

     

     

     

    컬럼명이 포함되어 있지 않은 경우(데이터만 있는 경우)

     

    header 인자 활용하기 : 컬럼명으로 사용할 라인 지정

    기본값: 0 (첫번 째 줄은 컬럼명으로 활용하라는 의미)

    None : 컬럼명이 없음을 의미. 즉, 첫번째 줄부터 데이터로 읽기

    2개 줄이 컬럼명으로 사용하는 경우, 리스트 형태로 지정

    ex) header = [0,1]

     

     

    pd.read_csv('data/2020KBO야구_컬럼명미포함.csv', encoding='cp949',
               header = None)

     

     

    name 인자 활용하기 : 컬럼을 명시적으로 지정

    기본적으로 컬럼명은 파일에 포함되어 있지 않기 때문에

    이 인자값을 컬럼명으로 지정하고, 파일의 첫번째 줄부터 데이터로 읽음

     

     

    pd.read_csv('data/2020KBO야구_컬럼명미포함.csv', encoding='cp949',
               names = ['선수명','팀명','타율','안타','홈런','연봉'])

     

     

     

     

     

    불필요한 줄은 제외하고 데이터 읽기

     

     

     

    skiprows을 이용하여, 특정 행을 읽지 않도록 한다

     

     

    pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949',
               skiprows = [0,1,2],
               names = ['선수명','팀명','타율','안타','홈런','연봉'])

     

     

    comment 인자를 이용하여, 주석은 데이터로 읽지 않는다

     

    pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949',
               comment = '*',
               names = ['선수명','팀명','타율','안타','홈런','연봉'])

     

     

    비어 있는 줄의 경우 기본적으로 데이터를 읽지 않도록 설정되어 있다

    비어 있는 줄을 읽을 경우 : skip_blank_lines = False

     

    pd.read_csv('data/2020KBO야구_주석포함.csv', encoding='cp949',
               comment = '*',
               names = ['선수명','팀명','타율','안타','홈런','연봉'],
               skip_blank_lines=False)

     

     

    용량이 매우 큰 파일 읽기

     

     

     

    데이터를 한 번에 읽어서 데이터프레임으로 저장해 오는 것이 불가능 할 수 있다

    파일의 크기가 컴퓨터의 성능(가용 메모리 크기)보다 크면,

    Out Of Memory(OOM) Error 발생

     

     

    nrows

    - 기본적으로 앞에 있는 데이터만 읽어 올 수 있다

     

     

    pd.read_csv('data/2020KBO야구.csv', encoding='cp949', nrows = 10)

     

    chunksize

    - 지금까지 실행해 본 read.csv() 함수는 파일을 읽은 내용을

    데이터프레임 형태로 반환해 주었다

    chunksize 인자

    파일을 읽을 준비가 되어 있는 텍스트 파일 리더(TextFileReader)라는 객체를 리턴

    chunksize의인자값으로 리턴된 객체를 변수(커서)에 담아 놓음

    next(커서) : chunksize 개수만큼 데이터를 읽어 온다

     

     

    커서 = pd.read_csv('data/2020KBO야구.csv', encoding='cp949', chunksize = 10)
    
    next(커서)

     

     

    끊어서 읽어 온 데이터 저장하기

    데이터 목록 변수에 빈(empty) 리스트 할당

    루프문에 커서를 활용할 수 있다

    next(커서)가 호출되면서 변수(data)에 저장

    데이터목록 변수에 data를 append

     

     

     

    데이터목록 = []
    for data in 커서 : 
        데이터목록.append(data)

     

     

    결과를 csv 파일로 저장하기 - to_csv()

     

    data = pd.read_csv('data/2020KBO야구.csv', encoding='cp949')
    result = data.pivot_table(index='팀명',values='안타',aggfunc='sum')
    
    result.to_csv('data/팀별안타수.csv',encoding='cp949')

     

     

    저장완룟 ~~

     

     

     

     

     

     

    excel 파일의 입출력

     

     

    excel 파일 읽기 - read_excel()

     

     

     

    pd.read_excel('data/2020KBO야구.xlsx')

     

     

     

     

    첫 번째 sheet가 아닌 원하는 sheet을 읽어 오기

     

     

     

    sheet_name = 0 (기본값) : 첫 번째 sheet의 데이터를 읽어 옴

    sheet_name = 1 : 두 번째 sheet의 데이터를 읽어 옴

    - 숫자 대신 sheet 의 이름을 넣을 수도 있다

     

    pd.read_excel('data/2020KBO야구.xlsx', sheet_name = 1)

     

     

     

    2개 이상의 시트 데이터를 읽어 올때는 사전타입의 데이터로 리턴한다

     

    data = pd.read_excel('data/2020KBO야구.xlsx', sheet_name = ['LG','두산'])
    data

     

     

    전체 sheet 읽어 오기

     

     

     

    sheet_name에 리스트 형태로 모두 작성하거나 None 으로 작성

    2개 이상의 sheet이므로 사전(Dict)형태

     

     

    야구데이터 = pd.read_excel('data/2020KBO야구.xlsx', sheet_name = None)
    
    두산, SK, NC, LG, KT, KIA, 한화, 키움, 롯데, 삼성 = 야구데이터.values()

     

     

     

     

     

     

    결과를 excel 파일로 저장하기 - to_xlsx()

     

     

    두산.to_excel('data/두산데이터.xlsx')

     

     

    두둥! 작성완룟

     

     

     

    반응형

    댓글

Designed by Tistory.