이해하기 쉽고, 장황하지 않은 자료를 기반으로 강의를 진행합니다.
잔재미코딩 소식 공유
좀더 제약없이, IT 컨텐츠를 공유하고자, 자체 온라인 사이트와, 다음 두 채널도 오픈하였습니다
응원해주시면, 곧 좋은 컨텐츠를 만들어서 공유하겠습니다
●  잔재미코딩 뉴스레터 오픈 [구독해보기]
●  잔재미코딩 유투브 오픈 [구독해보기]

2. 파이썬 라이브러리 익히기 (엑셀 다루며 라이브러리 활용/프로그래밍 연습하기)

  • 설치: 터미널 오픈 -> pip install openpyxl
  • anaconda 패키지를 설치하면 openpyxl 라이브러리 설치 필요없음
    • anaconda 패키지: 파이썬 컴파일러 + 주요 라이브러리 + 주요 툴을 한꺼번에 설치해줌

openpyxl: 엑셀 파일을 다루는 라이브러리

엑셀 파일을 다룬다

  1. 엑셀 파일 생성은 어떻게 하나?
  2. 엑셀 쉬트는 어떻게 만드나?
  3. 엑셀 쉬트에 있는 데이터는 어떻게 읽나?
  4. 엑셀 쉬트에 데이터를 어떻게 쓰나?
  5. 엑셀 파일을 어떻게 저장하나?

생각해보기
다음 예제를 실행하고, 노트북 파일이 있는 디렉토리에 생성된 score2.xlsx 파일을 오픈해보며 각각을 어떻게 쓰면 될지 다음 항목에 넣어보세요

1. 엑셀 파일 생성은 어떻게 하나?
2. 엑셀 쉬트는 어떻게 만드나?
3. 엑셀 쉬트에 있는 데이터는 어떻게 읽나?
4. 엑셀 쉬트에 데이터를 어떻게 쓰나?
5. 엑셀 파일을 어떻게 저장하나?
In [ ]:
import openpyxl
 
# 엑셀파일 열기
work_book = openpyxl.load_workbook('data/train.xlsx')
 
# 현재 Active Sheet 얻기
work_sheet = work_book.active

# Age Sorting 이라는 쉬트를 작성하는 예제
work_sheet_new = work_book.create_sheet('new sheet')

# work_sheet.rows는 해당 쉬트의 모든 행을 객체로 가지고 있음
for each_row in work_sheet.rows:
    # cell(row=행 번호, column=열 번호).value = 해당 세로셀/가로셀에 어떤 값을 넣어주세요
    work_sheet_new.cell(row=each_row[0].row, column=1).value = each_row[2].value
    
# 엑셀 파일 저장
work_book.save("score2.xlsx")
work_book.close()

한 줄씩 실행해보기

In [ ]:
import openpyxl
In [ ]:
work_book = openpyxl.load_workbook('data/train.xlsx')

라이브러리 import 를 다르게 해보면!

In [ ]:
from openpyxl import *
In [ ]:
work_book = load_workbook('data/train.xlsx')
In [ ]:
work_sheet = work_book.active
In [ ]:
work_sheet.title
In [ ]:
work_sheet.rows
In [ ]:
for each_row in work_sheet.rows:
    print (each_row[0].value)
In [ ]:
for each_row in work_sheet.rows:
    print (each_row[3].value)
In [ ]:
work_sheet_new = work_book.create_sheet('new sheet')
In [ ]:
for each_row in work_sheet.rows:
    print (each_row[0].row)
In [ ]:
for each_row in work_sheet.rows:
    # cell(row=행 번호, column=열 번호).value = 해당 세로셀/가로셀에 어떤 값을 넣어주세요
    work_sheet_new.cell(row=each_row[0].row, column=1).value = each_row[2].value
    
# 엑셀 파일 저장
work_book.save("score2.xlsx")
work_book.close()
In [ ]:
 
프로그래밍 연습
위 예에서 train 쉬트에 있는 name 데이터를 new sheet 의 A 열에 넣어보기

뭔가 부족함 -- 이름이 셀 사이즈보다 길다. 셀 사이즈를 늘리는 방법이 없을까?

생각해 보기
셀 사이즈를 변경하기 위해 구글에서 openpyxl cell size 키워드로 검색해서 찾아보기

프로그래밍 연습
위 예에서 train 쉬트에 있는 name 데이터를 new sheet 의 A 열에 넣어보기 (셀 사이즈도 알맞게 변경해보세요)

각 항목이 의미하는 바가 무엇인지 알고싶다면! 타이타닉 승선자 명단
- Name: 이름
- Sex: 성별
- Survived: 살아남았는지를 나타냄 - 0 = No, 1 = Yes  
- pclass: #등석 - 1 = 1st, 2 = 2nd, 3 = 3rd   
- sibsp: #명의 형제자매/와이프와 동승했는지를 나타냄   
- parch: #명의 부모/아이와 동승했는지를 나타냄      
- ticket: 티켓번호  
- cabin: 선실번호 (짐을 어디다 놓았는지)     
- embarked: 어느 항구에서 탔는지를 나타냄 - C = Cherbourg, Q = Queenstown, S = Southampton  
In [ ]:
import openpyxl
 
# 엑셀파일 열기
work_book = openpyxl.load_workbook('data/train.xlsx')
 
# 현재 Active Sheet 얻기
work_sheet = work_book.active

# Age Sorting 이라는 쉬트를 작성하는 예제
work_sheet_new = work_book.create_sheet('new sheet')

# 셀 사이즈를 바꾸는 코드 넣기
work_sheet_new.column_dimensions['A'].width = 50

# work_sheet.rows는 해당 쉬트의 모든 행을 객체로 가지고 있음
for each_row in work_sheet.rows:
    # cell(row=행 번호, column=열 번호).value = 해당 세로셀/가로셀에 어떤 값을 넣어주세요
    work_sheet_new.cell(row=each_row[0].row, column=1).value = each_row[2].value
    
# 엑셀 파일 저장
work_book.save("score2.xlsx")
work_book.close()

사용법을 익히는 것과, 실제 원하는 것을 프로그래밍으로 만드는 것과는 조금 다릅니다.

프로그래밍 연습
new sheet를 만들어서, 기존 쉬트에 있는 데이터를 new sheet 에 그대로 넣기
In [ ]:
import openpyxl
 
# 엑셀파일 열기
work_book = openpyxl.load_workbook('data/train.xlsx')
 
# 현재 Active Sheet 얻기
work_sheet = work_book.active

# Age Sorting 이라는 쉬트를 작성하는 예제
work_sheet_new = work_book.create_sheet('new sheet')

for each_row in work_sheet.rows:
    # cell(row=행 번호, column=열 번호).value = 해당 세로셀/가로셀에 어떤 값을 넣어주세요
    for each_column in range(12):
        work_sheet_new.cell(row=each_row[0].row, column=each_column + 1).value = each_row[each_column].value
    
# 엑셀 파일 저장
work_book.save("score2.xlsx")
work_book.close()
프로그래밍 연습
Survived, Died 쉬트 만들고, 각각 Survived 값이 1, 0 인 데이터를 각 쉬트에 넣기
프로그래밍 연습
전체 데이터의 평균 나이를 구하고, Under Avg Age, Above Avg Age 쉬트를 만들어, 평균 나이 이하 데이터, 평균 나이 이상 데이터 넣기

프로그래밍 연습
다음 필드값을 합쳐서 family 라는 필드로 만들어서 new sheet 에 전체 데이터 넣기

- sibsp: #명의 형제자매/와이프와 동승했는지를 나타냄   
- parch: #명의 부모/아이와 동승했는지를 나타냄
In [ ]:
 

파이썬에서 유용한 자료구조 Dictionary 활용해보기

프로그래밍 연습
위 예에서 train 쉬트에 있는 name 데이터를 스페이스로 짤라서, 각 단어에 대해 중복되어 나오는 단어만 집합으로 만들어 출력해보기

참고: 문자열 짜르기
string = 'Dave Mr. Korea'
word_list = string.split(' ')
print (word_list)

Dictionary 주요 용법

  • 사전 데이터 생성: data_dict = dict()
  • 사전 데이터 넣기: data_dict[key] = value
  • 사전 데이터 읽기: data_dict[key]
  • 사전 데이터 삭제: del data_dict[key]
  • 사전 데이터 해당 키가 있는지 확인하기
    • key in data_dict (있으면 True, 없으면 False)
    • key not in data_dict (있으면 True, 없으면 False)

Set 주요 용법

  • 집합 데이터 생성: data_set = set()
  • 집합 데이터 넣기: data_set.add(data)
  • 집합 데이터 삭제: data_set.remove(data)
In [ ]:
import openpyxl
 
# 엑셀파일 열기
work_book = openpyxl.load_workbook('data/train.xlsx')
 
# 현재 Active Sheet 얻기
work_sheet = work_book.active

# Age Sorting 이라는 쉬트를 작성하는 예제
work_sheet_new = work_book.create_sheet('new sheet')

data_dict = dict()
data_set = set()
# work_sheet.rows는 해당 쉬트의 모든 행을 객체로 가지고 있음
for each_row in work_sheet.rows:
    # cell(row=행 번호, column=열 번호).value = 해당 세로셀/가로셀에 어떤 값을 넣어주세요
    name_strings = each_row[3].value
    word_list = name_strings.split(' ')
    for word in word_list:
        if word not in data_dict:
            data_dict[word] = 1
        else:
            data_set.add(word)
            
print (data_set)  
# 엑셀 파일 저장
# work_book.save("score2.xlsx")
work_book.close()