강의 선택 이유
사실 나는 자동화 업무를 개발하고 운영관리하는 일을 하고 있다.
다만 RPA 특성상 직접 크롤링을 하는 모듈이나 라이브러리를 사용하여 코딩하지 않고, 이미 하나의 모듈로 다 만들어져있는 액티비티라는 로우코드를 활용해 로직을 짜는 일을 한다.
그래서 Python으로 직접 크롤링 + 전처리를 해볼 수 있게 코드를 짜는 것을 연습하고 싶어 이 강의를 신청하게 됐다.
강의 구성
xlsxwriter
크롤링해온 데이터를 전처리하고 엑셀에 입력하는 것은 xlsxwriter 모듈을 이용하게 된다.
크롤링에 대한 내용보다는, 크롤링해온 데이터를 어떻게 가공해서 엑셀에 넣는지에 대한 연습을 하는 것이
이 강의에 더 맞는 목적인 것 같다.
강의 요약
Python 엑셀 프로그래밍 (xlsxwriter)
▶ xlsxwriter 를 활용하여 데이터를 어떻게 엑셀에 입력하는지 처음에 배우게 된다.
# xlsxwriter를 불러오기
import xlsxwriter
# 엑셀 파일을 생성하고, sheet를 만들기
workbook = xlsxwriter.Workbook('tutorial_1_1.xlsx')
worksheet = workbook.add_worksheet('jejucodingcamp')
# 값을 넣거나, 산술연산도 가능
worksheet.write('A2', '=A1+B1')
worksheet.write('B2', '=A1=B1')
worksheet.write('A3', '=SUM(A1,B1)')
worksheet.write('B3', '=IMSUB(A1,B1)')
worksheet.write('C3', '=PRODUCT(A1,B1)')
worksheet.write('D3', '=QUOTIENT(A1,B1)')
# 만약 수식이 잘못됐을 경우에는, 엑셀파일을 열 때 에러가 발생함!!!
# close 안 하면 파일이 생성이 안 됨, 마지막에 꼭 close 필수!!
workbook.close()
-----------------------------------------------------------------------------------------------------
2. Write 메소드
이 강의의 궁극적인 목표는 결국 데이터를 가공해서, 엑셀에 정리하는 업무 자동화를 이뤄내는 것이다.
따라서 가장 많은 시간을 할애하는 부분이 엑셀 작성 부분이라고 느꼈다.
▶ write 메소드에 대해 자세히 다뤄주신다.
# 사용 가능한 메소드의 종류를 보는 방법
dir(workbook)
dir(worksheet)
# write 메소드 : 워크시트.write(행번호, 열번호, 입력값)
# write 메소드를 쓰면 기입하는 데이터의 형식에 따라서, 메소드가 다른 것들이 호출됨
worksheet.write(0, 0, 'Excel')
# -> write_string() 호출됨
worksheet.write(1, 0, 3)
# -> write_number() 호출됨
worksheet.write(2, 0, '=COS(PI()/4)')
# -> write_formula() 호출됨
worksheet.write(3, 0, '')
# -> write_blank 호출됨
worksheet.write(4, 0, None)
# -> write_blank 호출됨
▶ 서식 지정과 날짜에 관한 메소드도 배울 수 있었다.
# 셀 서식 설정
cellFormat = workbook.add_format({'bold':True, 'italic':True})
worksheet.write(0, 0, 'hello world', cellFormat)
# 사용할 수 있는 서식 종류 확인
https://xlsxwriter.readthedocs.io/format.html
=========================================================
# 날짜 메소드
1. 엑셀 날짜 수식 이용
worksheet.write(0, 0, '=DATEVALUE("1-Jan-2020")')
2. Python 자체 메소드 이용
import datetime
# 날짜 값
date_time = datetime.datetime.strptime('2020-5-6', '%Y-%m-%d')
# 현재 날짜로 대입히려면??
# ->> datetime.datetime.now()
# 출력할 형식
date_format = workbook.add_format({'num_format': 'd mmmm yyyy'})
# add_format({'num_format': 'd mmmm yyyy'}) # 20.4.16
# add_format({'num_format': 'yyyy-mm-dd'}) # 2020.4.16
# add_format({'num_format': 'yy/mm/dd hh:mm'}) # 20/4/16 12:00
# add_format({'num_format': 'yyyy mmm dd'}) # 2020 Apr 16
# add_format({'num_format': 'yyyy mmm dd hh:mm AM/PM'}) # 2020 Apr 16 12:00 PM
worksheet.write(0, 0, date_time, date_format)
-----------------------------------------------------------------------------------------------------
3. 각종 파일들을 열어 읽고 쓰는 방법
▶ txt파일, csv파일, json 파일에 대해 다뤘다.
1. txt 파일
<txt 파일 쓰기 모드>
# 열 때 쓰기 모드로 열고 write 메소드로 이어서 쓰기
file = open('./data/tutorial_2_1_1.txt', 'w')
for i in range(10):
data = f'양 {i} 마리 \n'
file.write(data)
file.close()
=====================================================
<txt 파일 읽기 모드>
# 읽기 모드 'r' 로 열고 작업
file = open('./data/tutorial_2_1_1.txt', 'r')
# readline 은 1줄만 읽어옴
data = file.readline()
print(data)
file.close()
=====================================================
# readline으로 여러줄 읽어오려면
file = open('./data/tutorial_2_1_1.txt', 'r')
while True:
data = file.readline()
print(data)
if not data:
break
file.close()
=====================================================
# 메소드로 여러줄 읽어오려면
file = open('./data/tutorial_2_1_1.txt', 'r')
data = file.readlines()
print(data)
file.close()
=====================================================
<append 모드로 이어서 쓰기>
# append 모드로 열고 작업 시작
file = open('./data/tutorial_2_1_1.txt', 'a')
for i in range(10):
data = f'소 {i} 마리 \n'
file.write(data)
file.close()
-------------------------------------------------------------
2. csv 파일
<csv 파일 쓰기 모드>
# 열 때 쓰기 모드로 열고 write 메소드로 이어서 쓰기
file = open('./data/tutorial_2_1_1.csv', 'w')
for i in range(10): # 다음 행에 같은 것을 반복해서 총 10행
for j in range(5): # 1. 한 행에 5개 입력하고
data = f'TEST {i} {j} 위치,'
file.write(data)
data = f'\n' # 2. 개행 한번 해주고
file.write(data)
file.close()
-------------------------------------------------------------
3. json 파일
json 데이터를 딕셔너리로 디코딩해서 사용하는 방법과
딕셔너리를 json으로 변경하여 사용하는 방법 2가지가 있다.
<json -> 딕셔너리> : loads 사용
import json
jsonString = '''{
"이름" : "이호준",
"나이" : "10",
"번호" : "010-0000-0000",
"주소" : "제주도 제주시"
}'''
# string 형태의 json -> 딕셔너리 디코딩
json_de = json.loads(jsonString)
json_de
# {'이름': '이호준', '나이': '10', '번호': '010-0000-0000', '주소': '제주도 제주시'}
==============================================
<딕셔너리 -> json> : dumps 사용
jsonString = {
"이름" : "이호준",
"나이" : "10",
"번호" : "010-0000-0000",
"주소" : "제주도 제주시"
}
# json 디코딩
# 아스키 형태의 문자열로 깨지지 않기하기 위한 옵션 "ensure_ascii"
# 보기 좋게 정렬하려면 "indent" 로 들여쓰기 수치 조절
s = json.dumps(jsonString, ensure_ascii=False, indent=4)
print(s)
#
{
"이름": "이호준",
"나이": "10",
"번호": "010-0000-0000",
"주소": "제주도 제주시"
}
-----------------------------------------------------------------------------------------------------
4. 한글 파일 크롤링
olefile, ole-py를 사용해서 한글 파일의 텍스트를 한번에 읽어오고,
해당 텍스트에서 필요한 데이터만 뽑아내는 처리를 하는 것을 배우게 된다.
사실상 크롤링하는 작업은
import ole
with ole.open('./data/입사지원서.hwp') as f:
# 한글 파일의 ole 구조 출력해보기
# print(f.list_streams())
# 그 중에서 PrvText에 해당하는 스트림을 읽어오기
data = f.get_stream('PrvText').read().decode('utf-16le')
splitData = data.split('><')
이렇게 라이브러리를 통해서 간단하게 이루어지지만 가져온 텍스트에서 원하는 것을 뽑아내는 것이 늘 복잡하다.
['이 력 서\r\n<인적사항',
'성 명',
'홍길동',
'생 년 월 일',
'1993년 8월 13일',
'현 주 소',
'제주특별자치도 제주시',
'연 락 처',
'010-2233-1478',
'이 메 일',
'ab8ab@naver.com>\r\n\r\n<학력사항',
'학교명',
'전공',
'성적',
'졸업구분',
'소재지',
'건국대학교',
'컴퓨터공학과',
'4.1/4.5',
'졸업',
'서울>\r\n\r\n<자격면허',
'자격면허증명',
'시행기관',
'취득년월',
'TOEIC',
'점수',
'정보처리기사',
'한국산업인력공단',
'19.05.22',
이런식으로 값을 split해주기 때문에.. 원하는 소제목의 index를 찾아서 그 다음것을 들고와라..
라는 식의 반복문을 만들어 정리하게 된다.
-----------------------------------------------------------------------------------------------------
5. pdf 크롤링
pdf도 마찬가지로 pdfminer라는 것을 사용해서 뽑아온다.
강의에서도 해당 내용을 자세히 다루진 않고, 역시 뽑아온 텍스트를 어떻게 전처리하여 사용하는지에 초점이 맞춰져있다.
# pdf 크롤링하는 법
from io import StringIO
from pdfminer.converter import TextConverter
from pdfminer.layout import LAParams
from pdfminer.pdfdocument import PDFDocument
from pdfminer.pdfinterp import PDFResourceManager, PDFPageInterpreter
from pdfminer.pdfpage import PDFPage
from pdfminer.pdfparser import PDFParser
output_string = StringIO()
with open('./data/입사지원서.pdf', 'rb') as in_file:
parser = PDFParser(in_file)
doc = PDFDocument(parser)
rsrcmgr = PDFResourceManager()
device = TextConverter(rsrcmgr, output_string, laparams=LAParams())
interpreter = PDFPageInterpreter(rsrcmgr, device)
for page in PDFPage.create_pages(doc):
interpreter.process_page(page)
output_string.getvalue()
이런식으로 보기 어렵게 나와있는 데이터에서 원하는 것을 뽑아내는 것이 업무 자동화의 핵심이다.
-----------------------------------------------------------------------------------------------------
6. 그래프 그리기
텍스트 데이터 외에, 데이터를 사용하여 그래프를 그리거나 이미지를 엑셀에 첨부하는 것도
충분히 가능하다.
해당 내용들은 강의에서 자세히 알아볼 수 있으니 관심이 있는 분들은 강의를 수강해보면 많은 도움이 될 듯!
-----------------------------------------------------------------------------------------------------
수강 후기
매일 같은 작업을 반복하고, 같은 형식의 결과물을 내야하는 회사원들에게 아주 유용한 강의가 될 것 같다.
Python 에 대해 잘 모르더라도 제공되는 템플릿을 좀 응용할 수 있는 정도로만 공부를 하게 된다면
공부에 할애한 시간 그 이상으로 많은 효율을 누릴 수 있게 될 것이다.
실제로 RPA로 많은 기업들이 비용을 들여가며 이러한 반복 작업을 최소화하고 있는데
이러한 일을 저렴한 비용으로 공부하고 본인의 업무에 활용하여 괴로운 반복작업에서 수고를 덜 수 있다는 게
이 강의의 가장 큰 매력이 아닐까 싶다.
매일 비슷한 결과보고서를 도출해내야하는 직장인, 같은 형식의 데이터를 매일 입력하는 작업이 필요한 사람들..
모두에게 이 강의를 추천하고 싶다.
'위니브 엠버서더' 카테고리의 다른 글
[위니브 엠베서더 3기] 제주 하간디 이신 데이터들 Python으로 몬딱 분석해불게 수강후기 (0) | 2024.08.29 |
---|---|
[위니브 엠버서더 3기] 파이썬 코딩테스트 기초 입문 강의 5주차 도전 (2) | 2024.08.27 |
[위니브 엠버서더 3기] 파이썬 코딩테스트 기초 입문 강의 4주차 도전 (0) | 2024.07.30 |
[위니브 엠버서더 3기] 아주 쉽다 클라우드! AWS Lightsail 자습서! 인프런 클라우드 강의 수강 후기 (13) | 2024.07.30 |
[위니브 엠버서더 3기] 비전공자 파이썬 코테 입문 3주차 (0) | 2024.07.01 |