분류 전체보기
- 15. pandas로 excel파일 읽고 / 쓰기 2018.07.09
- 14. 파이참에서 pandas 설치 및 기본 사용해보기 2018.07.09
- 2018 국제 인공지능대전 - 7. 9(월) 인공지능과 디지털 헬스케어 2018.07.09
- 업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx) 2018.07.07
- 13. 기존 프로젝트를 python-docx로 문서화해보기 2018.07.07
- 12. Python-docx 사용해보기 2018.07.07
- 11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) 2018.07.05
- 참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 2018.07.05
- 10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 2018.07.04
- 9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) 2018.07.04
- 참고 : 클래스를 이용하여 데이터 입력하고 쓰기 2018.07.04
- 8. 클래스(class)와 인스턴스(instance) 및 생성자 2018.07.04
- 7. 파일 쓰기( TXT /CSV ) 2018.07.04
- 6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수) 2018.07.03
- 5. 반복문 - while 과 for 그리고 응용(홀짝구분/구구단/리스트요소들 출력) 2018.07.02
15. pandas로 excel파일 읽고 / 쓰기
pandas_excel.py
불러올 엑셀파일 : mandoo_management.xlsx
저장된 엑셀파일 : result.xlsx
- 새로운 파이썬 파일을 만든다.
- 불러올 엑셀파일을 만들고, 해당 프로젝트(studying_pandas)에 mandoo_management.xlsx 엑셀파일을 저장하자(csv아님)
- 이제 파이썬에서 pandas모듈을 이용해 엑셀파일을 불러오고, 테스트로 출력까지 해보자.
- df = pd.read_excel('mandoo_management.xlsx', sheet_name='Sheet1')와 같이
Pandas -> DataFrame으로 불러오는데, pd.read_excel()함수를 사용하고, 인자에는 ('파일명', sheet_name='시트명')이 필요하다
*엑셀의 기본시트명은 Sheet1 이다.
- 불러온 것을 print(df) 으로 확인하려 했더니, install xlrd라는 어떠한 Excel support가 필요하다고 에러가 난다. - Settings > Project Interpreter > + > xlrd를 검색해서 설치하고, 다시 출력시켜보자.
확인해보았더니, 판다스에서는 첫row를 자동으로 칼럼명으로 인지한 것을 확인할 수 있다.
CSV를 다룰 때는,
읽을 때, 첫ROW를 제외하고
쓸때는 첫ROW를 따로 쓰고 나머지를 FOR문에서 썼다. - 첫row로 인지된 칼럼명row 중 하나의 칼럼을 출력시켜보자
- print( df['칼럼명'] ) - 출근시간 퇴근시간 칼럼을 이용하여, 근무시간 칼럼즈를 추가해보자
- df['근무시간'] = df['퇴근시간'] - df['출근시간']
마찬가지로, 시간당 만두생산 칼럼을 추가해보자.
- df['시간당 만두'] = df['만두생산'] / df['근무시간'] - 이제 시간당 만두를 잘만드는 사람의 순위를 메겨보여주도록 해보자.
특정 칼럼을 기준으로 df를 새롭게 위치시켜 보여준다.
df.sort_values()함수로 정렬을 하는데,
by=['칼럼명'] -> 해당칼럼을 기준으로 정렬한다.
ascending=[False] -> 오름차순을 False로 두어, 내림차순으로 정렬된다.
- df = df.sort_values(by=['시간당 만두'], ascending=[False])
기준칼럼이 똑같은 경우에는, 2순위의 칼럼을 지정할 수 있다. 이 때, ascending인자에도 False로 내림차순 만들어줘야한다.
위에서는 시간당만두가 100.0 으로 같은 조재성과 안철수 중 근무시간은 안철수가 더 많다.
- df = df.sort_values(by=['시간당 만두' , '근무시간' ], ascending=[False, False]) - DataFrame이 완성되었다면, 엑셀로 저장할 수 있다. 마찬가지로 시트명을 같이 명시해줘야한다.
- df.to_excel('result.xlsx', sheet_name='Sheet1)
바로 실행시키면 아래와 같이 openpyxl모듈이 없다고 뜬다. 마찬가지로 설치해주면된다.
결론적으로, 기본 엑셀파일이 -> pandas를 거쳐 ->
계산식을 통한 새로운 칼럼 추가 & sorting(1순위>2순위)이 되어서 저장
pandas에서 엑셀파일을
열때는--> xlrd
저장할 때는--> openpyxl
모듈이 필요했다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
17. 웹스크래핑 시작하기 - HTML 이해 / CSS from bootstrap (0) | 2018.12.30 |
---|---|
16. pandas를 이용해 차트그리기 (1) | 2018.07.11 |
14. 파이참에서 pandas 설치 및 기본 사용해보기 (0) | 2018.07.09 |
업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx) (0) | 2018.07.07 |
13. 기존 프로젝트를 python-docx로 문서화해보기 (0) | 2018.07.07 |
14. 파이참에서 pandas 설치 및 기본 사용해보기
Pandas
엑셀로 다 할 수 있겠지만, 파이썬 & pandas를 사용하면 반복되는 업무와 큰 데이터를 쉽게 다룰 수 있다.
판다스 공식 홈페이지
사용해보기
새로운 프로젝트를 만들어보자. (studying_pandas)
새로운 파이썬 파일을 만들자.(pandas_basic.py)
- 먼저, 판다스 모듈을 설치해야한다. pip로 하는 방법도 있겠지만,
File> Settings [ Ctrl+ Alt +S ] > Project : ~ > Project Interpreter > + > pandas를 검색해서 설치한다.
- pandas를 설치하면, Numpy 와 matplotlib을 함께 설치하므로 많은 시간이 걸린다. - pandas_basic.py에서 import pandas를 하자.
Numpy에서 array를 주로 사용했다면,
pandas에서는 DataFrame을 가장 많이 사용한다.
인자로는 df= pandas.DataFrame( [ [1,2,3], [4,5,6] ]) 와 같이, 리스트안에 리스트가 들어가는 것이 DataFrame이다.
- 출력해보면, 행렬처럼, 엑셀형태처럼 나온다. - 칼럼즈에 대해서 먼저 print를 해보자.
- df.columns 를 print해보면, 0부터 3전 까지, 스텝은 1씩 올라간다
df.columns = [리스트] 형식으로 칼럼명을 대입해보자.
- 칼럼명이 바뀐다. - 인덱스도 마찬가지로 리스트형식으로 대입해준다.
- df.index = [ 리스트 ] - DataFrame 선언과 동시에 columns와 index를 지정해줘도 된다.
- pandas를 import할 때, pd로 줄여서 입력시킬 수 있다.
- import pandas as pd - 새로운 칼럼즈을 추가해보자.
추가는 그냥 DataFrame[ '칼럼명' ] 만 해주면 새로 생성된다. 여기에 a열과 b열을 뺀 값을 넣어보자.
- df['d'] = df['a'] - df['b'] - 인덱스(행)를 추가할 때는, 기존 df에다가 새로운 것을 대입하는 방식으로 하는데,
df = df.append()로 추가하는데, 기존인덱스를 무시해야지만 추가 할 수있다.
만약, 각 열의 합을 요소로 가지는 행을 추가한다면, 인자로 df.sum()를 해주면 된다.
- df = df.append( df.sum(), ignore_index=True)
*만약 행 추가시, ignore_index 옵션을 안주면 에러난다.
무시되어, 0부터 차례되로 출력되는 index는 다시 df.index = [리스트]로 index값을 넣어주면된다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
16. pandas를 이용해 차트그리기 (1) | 2018.07.11 |
---|---|
15. pandas로 excel파일 읽고 / 쓰기 (0) | 2018.07.09 |
업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx) (0) | 2018.07.07 |
13. 기존 프로젝트를 python-docx로 문서화해보기 (0) | 2018.07.07 |
12. Python-docx 사용해보기 (0) | 2018.07.07 |
2018 국제 인공지능대전 - 7. 9(월) 인공지능과 디지털 헬스케어
데이터분석 공부나 한의학 임상에 대해 더 배우고 싶어서 서울에 올라온지 얼마 안되서
큰 컨퍼런스가 열리는 것을 확인하고 참석을 위해 사전등록을 했다.
첫날은 인공지능과 디지털 헬스케어에 대한 전체적인 컨퍼런스이고
둘째 날 부터는 워크샵들이 관심이 갔다.
먼저, 강연 듣기전 각 세션에서 업체들 이 소개하는 부스를 살펴보았는데,
- 딥러닝을 통해, 사람들과 가위바위보 하는 팀
- 손으로 드론을 제어하는 팀 (가장 흥미..진진)
- VR체험
각종 인사들의 축사 뒤에, 본격적인 첫날 강의가 이루어졌다.
14:10 ~ 14:30 서울아산병원, 김남국 교수
애니악이라는 컴퓨터 계산기에 네트워크가 붙으면서 정보처리기가 되었다.
거기에 CONNECTIVITY가 붙어서 자동화기기가 되었다.
그 과정에서 보안 등이 문제가 되면서 블록체인이 수면위로 떠올랐다.
헬스케어와 관련된 빅데이터는 항상 논란이 되었다.
CLINICAL DATA는 전체 데이터중 10%
더 나아가 GENOMIC EVULOTION에 의해 GENOMICS DATA는 30% 정도가 된다.
데이터도 의료환경도 개발되고 있다. 이런데에 있어서는 효율적인 R&D가 중요하다.
- IoT 체온계 -> kinsa라는 미국 스타트업에서 3주간의 데이터를 분석하여 influenza 예측이 가능하다
- Google Trends -> 마찬가지로 3주간의 데이터를 가지고 influenza 예측이 가능하다
- 새로운 정보에 대해서는 조심스러운 접근이 필요하다
IBM의 opportuniy를 보면
- 8 trillion exam 중에 2trillion 은 wastes in healthcare industry 이다.
우리나라도 Vuno - Bone aging - > 비보험수가로서 인허가가 나서 수익을 가질 수 있는 정도이다.
AI+Hearthcare의 CAGR : 연간42% 성장률을 보인다.
Digital Hospital
- 의사의 일만 줄인것 이 아니라 응급의료 파견 서비스 등을 통해 암환자 입원역략 60%증가, 응급시 ㄹ대기자 25%감소 수술대기자 25:감소
EMR + IoT -> 의사(대부분은 간호사)의 일이 감소한다.
- 종이차트 -> 사무실에서 EHR에 일일이 수치 입력하던 것에서
- 데이터를 환자의 손목밴드에서 자동업로드 등의 방법
- 아이들의 wareless band를 발목에 착용하여 체온상승 관찰
Patient Empowerment 관점에서
- 환자들이 똑똑해짐. 환자를 능동적인 객체로 끌여들여 진찰할 필요가 있다.
- IoT, 블록체인 등을 relocation하자
구글은 2008년 의료데이터를 모으려했으나 실패
- 병원에서 환자에게 주는 benefit / 동기가 부족
- 환자는 정보관리의 능력이 없음.
우리나라의 Mediblock은 시도를 했으나,,
- 결국은 데이터를 모아야하는데 기술력 부족
- regid한 데이터이므로 암호를 잃어버리면 아무도 acess 불가
딥러닝
- 데이터 + 정답을 주면 expert 프로그래머가 멋지게 짜던 것에서
이제는 딥러닝을 통해 컴퓨터가 프로그램을 짜고 예측한다.
- Better decision에서는 IBM의 왓슨이 가능하다.
- 챗봇을 통해 쉽게 의료지식을 물어볼 수 있다.
그러나 지금은 Medical Imaging에서 가장 포텐션이 크다.
- 지금은 보통 의사보다는 잘하지만, 아주 expert한 의사보다는 떨어지는 수준
DeepRadiology.com -> block chain power
AI apps Platform -> Philips, Siemen etc
병원입장에서 보면?
- 고사양 장비, 의사의 개입 등 많은 문제가 있다.
- 막상 현장에서 쓰고 있는 것은 거의 없다.
- 인간이 잘 못하는, 의사들의 잡일(응급판독, 수술후 제대로 되었는지 절단 여부)에 대해 인공지능이 하면 좀 더 잘할 것 같다.
- 인공지능(cnn)이 미리 판독하고, 의사가 판단하는... 수가가 없더라도 더 많은 진료를 할 수 있어 수가가 높아진다.
- Surgical Imaging field -> CT 등을 인공지능이 알아서 자르고 판독함
- Surgery Video -> 신경 접근 등에 대한 경고를 해준다던지... 이러한 기술
- 대장내시경도 왠만한 의사보다는 잘하지만, expert 보다는 잘 못하는
- Spine surgert에서 의사는 Two port endoscopy로 양손 중 한손으로 엔도스코피를 보고 있는데, 인공지능이 그 한손을 대체 해 준다면 혁신이 될 것이다.
다양한 Issue가 있다. 법적..윤리적.. 등
- FDA는 시범사업이 거의 끝나간다.
- FDA는 안저소견에 있어서, 의사를 도와주는 컨셉에서 -> 의사대신이 인공지능이 판단하는 식으로의 인허가가 제공되고 있다.
3분 진료 (환자의 설명부족)-> 15분 진료(의사의 효율부족)
- 3분 진료에 있어서, 환자에게 충분히 설명시켜줄 인공지능을 이용하는 방향으로 가야한다.
세션1.
정보통신 산업진흥원, 이준영팀장 - 4차 산업혁명 시대 정밀의료의 미래
- 우리가 원하는 의료서비스는? 의료질 향상과 의료비 감소
현 의료서비스의 아쉬움
- 보편적 의료의 한계
- 오진율 증가(암 오진률 61%)
- 의료서비스 질 저하
- 의료비 증가
해결책
-궁극적으로는 ICT(정보통신)이다.
-국내 병원 및 기업의대응
- 수도권 대형병원 중심으로 자체 유전체 연구소 개설 및 병원-기업간 공동연구 진행 중
- 삼성SDS- 삼성아산병원 - 기업-병원간 협력
- IBM 왓슨 국내 병원 도입 현황
- 가천대 길병원, 부산대병원, 대구대, 계명대, 건양대, 조선대, 화순전남대병원 도입
> 한국 만의 암환자의 유전특성에 대한 기술이 필요하다.
우리의 현실
- 최고의 ICT역량 보유(HIS : 병원의 병원정보시스템 / PACS : 영상정보관리 시스템)
Iot + 의료 -> IoMT 개발 -> 정밀의료 네트웤 기반은 갖춘 상태다.
AI는 의료에 적합한 기술인가?
한국형 정밀 의료 서비스 : 닥터.앤서 : AI의사
- 빅5 포함 25개 병원 + ICT기업 19개 기업 참여 , 3년간 357억
의료정보를 활용한 클라우드 기반 정밀의료 병원정보시스템 사업시간(17~19년)
뷰노.. 첫 식약청 허가.. 그러나 AI개발자의 고민도 많다.
서울아산병원 닥터.앤서 프로젝트 담당의 김영학 교수
K-DASH : AI기반 정밀의료 솔루션 추진단
25병원 + 19기업 = 병원기업 협력
한국형 정밀의료 서비스 -> 닥터앤서의 목표
- 심혈관(심뇌혈관질환, 심장질환), 뇌(치매, 뇌전증, 소아희귀난치성 유전질환), 암(유방암, 대장암, 전립선암)을 중점으로 8개 중점질환 정밀의료 서비스개발
- 모델링을 통한 환자질환 예측개발
현황
- 21개의 SW이 목표
- 3년간 357억 투입 예정
- 올해와 내년에 3개의 SW에 대해 직접 서비스 예정
- 대장암은 우리나라의 데이터가 가장 많다.
- 세포진단을 통해 치매진단
- 뇌전증(간질) 질환
- 소아희귀난치성 유전질환은 유전체 데이터를 활용하는 것이 특징
- 일찍이 없었던 협력.. 프로젝트..
- 현재는 2개월 차.. 내년에는 소프트웨어로 구현시범
- 최초 클라우드 활용(안전, 효율적으로 여러병원이 참여)
- SW기업은 총 17개 기업 ( 중견기업+스타트 기업)
- 카카오 브레인과 클라우드 구축
참여기업 예, VUNO
삼성SDS 조일영, 이민영 수석
P-HIS : 정밀의료 병원정보시스템
클라우드 기반 병원정보시스템 (CLOUD-EHR)에 대한 시각
- 기회 : 고품질 서비스, 초기 투자비용 절감, 강력한 보안
- 도전 : 표준기능의 활용, 병원별 독립성 보장, 데이터의 활용성
데이터의 표준화, 구조화
- 수기 서식-> 서식생성기 -> 서식 생성을 통해 표준화
이상... 2쨋날 워크샵은 총무가 허락해주는 데로 결제해서 들어봐야지
업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx)
csv_to_python_to_csv_practice 프로젝트 : practice_by_csv_module.py
나의 클래스 모듈 : employee.py
시작 엑셀(csv)데이터 : emplyee_list.csv
시작 문서 양식(form) : form.docx ( 제목0,1,2 / paragraph / circle , check)
-시작 문서 양식 내용포함(form) : form_save.docx
결과 엑셀(csv)데이터 : result.csv
결과 문서(docx)데이터 : result.docx
- 엑셀형태로 구성하고 싶은 데이터가 있다고 가정하고, 칼럼들을 클래스의 필드로 만든다.
- 상수를 제외하고, 생성자로 정의하여 클래스( , , , )로 인스턴스생성과 동시에 입력받도록 해준다.
*만약, 상수로 먼저 선언하고서, 인자로 받아도 되고, 안받아도 되도록 설정하려면,
(1) 생성자의 인자로서 wage_per_hour = None으로 default로 둔다.
(2) 기본적으로 self.wage_per_hour = wage_per_hour는 바로 입력하지 않고,
(3) if wage_per_hour: 를 통해 default인 None이 아닌 값이 넘어와서 True를 가질 때,
상수였던 필드(wage_per_hour = 7530) 에 self.wage_per_hour = wage_per_hour를 대입하도록 한다.
- 칼럼 중에 함수식이 필요한 것은, 클래스 내부의 함수로 정의하여 self.필드들을 이용해서 (return에다가) 계산식을 만든다.
ex> 퇴근시간 - 출근시간 = 근무시간 - 만약, 함수식 계산을 한 칼럼에 또 함수식을 써야하는 경우에는
클래스에 정의된 함수식을 또 호출하는 함수를 생성하면 된다. 필드와 마찬가지로 return에다가 self.함수()로 호출해서 계산식을 만든다.
ex> 일당 = 근무시간(퇴근시간 - 출근시간) * 시급 - 클래스를 정의한 부분을 모듈화 시키기 위해
(1) 새로운 파이썬 파일 : employee.py 를 만들고
(2) 클래스 정의 코드를 잘라내서 붙혀넣는다.
(3) 기존 파이썬 파일에서는 from employee(파이썬 파일) import Employee(클래스명)으로 가져온다.------CSV 읽어들이는 코드-----
- 이제 인스턴스 인자로 들어갈 데이터들을 엑셀파일에서 받아오기 위해, CSV (쉼표로분리)로 프로젝트내에 다른이름 저장
- f = open('파일명.csv', 'r')를 통해 열고 / f.close()도 미리 같이 작성
f.readlines()를 통해 각 row을 list로 받음 -> (리스트이므로) for문을 통해 개별 출력시켜본다.
import csv 를 통해 모듈을 가져온다(아나콘다로 설치시 미리 깔려있음)
lines = csv.reader(f)를 통해 csv의 모든 라인을 리스트로 받아온다( f.readlines()와 달리, 4개로 미리 쪼개어져있다) - 첫 줄은 칼럼명row이므로, 2번째줄 부터 읽기 위해선, while문과 비슷하게
i =0 작성 -> for안에서 읽어진 lines를 i > 0부터 콤마로쪼개는 작업 등등을 하도록 하고, for문 마지막에 i += 1를 달아준다. 각 리스트는 콤마(,)를 통해 4개의 요소가 붙어있으므로 .split(',')를 통해 다시 리스트로 쪼개어 받는다.
4개로 쪼개진 요소를 담는 list를 for문을 돌면서 출력시켜본다.
4개 요소를 담고 있는 리스트는 리스트[0], [1], [2], [3] 형태로 개별접근이 가능해진다.- 이제 for문을 돌면서 4개의 요소를 입력받아 생성될 인스턴스들을 관리할 리스트를 for문전에 만든다.
ex> employee_list = [] or employee_list = list() - for문을 돌면서, 인스턴스관리 리스트에 .append()안에 인스턴스를 생성하면서, 생성자4개를 입력해준다.
ex> employee_list.append( 클래스( 필드[0], 필드[1], 필드[2], 필드[3]) )
* 이 때, csv에서 받은 요소들은 모두 문자열로 가져온다. 정수 데이터인 출근시간, 퇴근시간, 시급은 int()로 감싸주어야 클래스에서 계산된다.
ex> employee_list.append( 클래스( 필드[0], int( 필드[1]), int(필드[2]), int(필드[3]) ) ) - 인스턴스관리리스트를 확인해보기 위해
(1) print(len())로 전체 길이를 살펴보고
(2) <리스트를 이용한 for문>을 통해, 세부적으로 인스턴스 안의 필드나 함수를 하나씩 확인하는데,
print()로 , {}\t{}\t .format( 인스턴스.필드1, 인스턴스.필드2,.., 인스턴스.함수1(), 인스턴스.함수2(),) 형식으로 한 줄로 출력해보자. - csv파일로 쓰기위해, 위에서 인스턴스 필드/함수 세부 확인한 print문을 고치면 된다. print->write 수정시 줄바꿈을 항상기억 + 칼럼명row출력
(1) for문 전에 open() '파일명', 'w' 이 들어갔다. + 3번째 인자로서, newline=''을 넣어줘야, csv_writer.writerow([])후에 자동 줄바꿈이 x
(2)for문 전에 csv_file.write( 칼럼명row\n')csv_writer = csv.write(f)를 통해 쓰기 변수를 생성해준다.
첫줄(칼럼명)은 csv_writer.writerow( [ 배,열,형,태] ) 로 넣어준다. 줄바꿈은 안해줘도 자동으로 된다.
(3) for문 안에 print->csv_file.writecsv_writer.writerow([ , , , ]) 로 고치고,새로운 칼럼{} 만들어주고, \t 를 콤마(,)로 수정하고, \n줄바꿈 해주기(4) for문 끝나면 close()----- 문서화 하는 코드 -----
- 12강 자료를 이용해, docx형식의 양식 파일(form_save.docx)을 만든다. -> 편의성을 위해, 내용은 지운다(form.docx)
- [설정 > Project Interpreter ]에서 add를 통해 [python-docx]를 검색하여 모듈을 추가한다
- docx_practice.py를 참고하여
- import / 양식파일을 포함한 Document객체 생성 / 제목을 넣는다
- 제목1 수준으로 소제목을 만든 뒤,
본문 수준으로 리스트를 작성해보자.
인스턴스관리 리스트를 이용한 for문으로 각 행의 정보(각 인스턴스.필드, 함수)를 뽑아내는데,
.format을 활용하여 문장형식으로 작성해보자 - 제목2수준으로 하나 넣어준 뒤, table을 생성해보자
- table객체는 document.add_table( rows=1, cols=6 )로 한 행씩 몇개의 정보가 들어가는지 더해가는 기준을 만든다.
- table.style = ' ' 로 미리 문서양식에서 만든 사용자지정양식을 기입해 스타일을 지정한다
- 첫 행은 for문 전에 미리 작성해준다. 첫 행만 table.rows[0].cells를 통해 첫 행들의 각 셀들을 리스트 변수로 받아준다.
받은 첫 행의 각 셀들의 리스트변수[0], [1].text, .. 형식으로 접근하여 문자열형식칼럼명을 적어준다. - 2번째 행부터는 정보가 들어가므로, 인스턴스관리 리스트를 이용한 FOR문에서 table.add_row().cells 로 각 셀들을 변수로 받는다
그리고 각 셀들을 리스트요소 접근방식으로 접근 하되, 마찬가지로 .text를 붙히고 str( 인스턴스.필드, 함수()) 형식으로 문자열만 오로지 대입한다.
만약, 정수로 표현되야 한다면 str()안에 int()로 감싸준다 - 저장은 document.save('파일명')으로 한다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
15. pandas로 excel파일 읽고 / 쓰기 (0) | 2018.07.09 |
---|---|
14. 파이참에서 pandas 설치 및 기본 사용해보기 (0) | 2018.07.09 |
13. 기존 프로젝트를 python-docx로 문서화해보기 (0) | 2018.07.07 |
12. Python-docx 사용해보기 (0) | 2018.07.07 |
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) (0) | 2018.07.05 |
13. 기존 프로젝트를 python-docx로 문서화해보기
mandoo_wage_calculator.py에서는 employee.py의 Employ클래스를 가져다 쓰고있는 상태였다.
- 먼저 from docx import Document
- Document('양식.docx')로 변수를 생성해주는데, 인자에는 양식.docx를 지정해준다.
동시에, 까먹지 않도록, document.save('저장할 파일명.docx')를 지정해준다. - 그 사이에다가 document.add_heading('', 0)을 통해 제목(0)을 작성해주고, 확인해보자
- 출근한 직원을 인스턴스관리 리스트를 이용해 for문을 이용해 뽑아보자.
- '{}님은 {}시 출근, {}시 퇴근'.format( 인스턴스.필드, ~~) 형태로 문장형태로 작성할 수도 있다. - docx_practice.py에서 연습했던 테이블작성 코드를 가져와서, 근무시간, 일당을 포함한 테이블을 작성할 수 있다.
* 자료가 담긴 인스턴스들을 관리하는 employee_list를 이용한 for문에서, 각 인스턴스.필드들을 -> 각 셀에 대입해주는데
각 셀 접근[n].text = str( 인스턴스.필드) 형식으로 문자열만 입력 가능하다! - 시급과 일당 같은 경우, 정수로 표현되어야 하므로, str()안에 int()로 변환시킨다.
- 이제, input이 되는, employee_list.csv 파일을 수정하여서 바뀌는 상황을 살펴보자.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
14. 파이참에서 pandas 설치 및 기본 사용해보기 (0) | 2018.07.09 |
---|---|
업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx) (0) | 2018.07.07 |
12. Python-docx 사용해보기 (0) | 2018.07.07 |
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) (0) | 2018.07.05 |
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 (0) | 2018.07.05 |
12. Python-docx 사용해보기
docx_practice.py
form.docx : docx문서 양식파일(내용 없음)
form_save.docx : docx문서 양식파일(양식 내용 보존)
설치
구글에서 [ python-docx ]를 검색해서 공식홈페이지 들어간 뒤 설치해보자.
- csv모듈과는 다르게, 아나콘다 설치를 하더라도 자동으로 설치되지 않기 때문에 수동으로 설치를 해줘야한다.
- 방법은 2가지가 있다.
(1) 파이썬 프롬프트(터미널)에서 pip(핍)을 이용하는 방법이 있다. (생략)
(2) 파이참의 Setting > Project : mandoo_management > Project interpreter 를 이용하는 방법이 있다.(실습) - Project Interpreter에 가면, 해당 프로젝트의 환경설정이 모두 나타나있다.
우측의 초록색 플러스 버튼을 누른 뒤, [ python-docx ]를 검색한 후, 왼쪽하단의 Install Package를 눌러 설치하자.
- 닫아보면 Interpreter에 설치된 것을 확인할 수 있다.
*다른 프로젝트에서는 설치되지 않는 것을 확인해보았음. - mandoo_management프로젝트에서 새로운 파이선 파일 docx_practice.py를 만들고 공식문서의 import부분을 복사해오자.
사용법
- 클래스처럼 Document()를 document변수에 넣는다.
- document.add_heading( '제목명' , 0)을 통해서 제목을 넣을 수있다.
- document.save('파일명')을 통해 docx파일로 저장한다.
docx의 글자체 등 스타일은 미리 양식을 만들어 놓아야한다.
- add_heading( '',0) -> MS WORD의 [제목]
- add_heading( '',1) -> MS WORD의 [제목1]
- add_heading( '',2) -> MS WORD의 [제목2]
- add_heading( '',3) -> MS WORD의 [제목3]
- add_paragraph('') -> MS WORD의 [표준]
이므로 미리 양식을 지정해놓고 , 프로젝트 폴더내 위치시켜서, Document('파일명')선언시 빈칸이 아닌, '파일명'을 넣어준다.
양식을 만드는 방법은
- form.docx를 프로젝트내에서 생성하고
- 해당 양식에서, 원하는 스타일로 바꾼 뒤
- 블록으로 선택해놓고
- 우측상단의 스타일에서 해당 [ 양식 >우클릭> 선택영역과 일치하도록 제목 업데이트 ]
- 필요한 모든 것 위와 같은 방법으로 (2~4) 다 바꾼 뒤, 저장
- document = Document( 'form.docx') 폼 양식 지정
- 파일 확인후, 맨 처음의 양식 지우기
새로운 스타일을 만든 다음, 파이썬-docx에서 지정해줄 수 있다.
제목이 아닌 add_paragraph로 들어간다.
- 마찬가지로, 동그라미 스타일로 작성후 ->
- 블록지정 한 다음,
- 스타일메뉴 중 새로운 스타일을 클릭하여, 이름을 지정해준다.
- 파이썬에서는 document.add_paragraph( ' 내용 ', style = '스타일명' ) 으로 스타일인자를 추가시켜주면 된다.
테이블도 만들어보자. 공식문서에서 일단 가져오자.
- 공식문서의 테이블 부분을 복사해서 가져온다.
- 이 때, for문의 in리스트인 recordset이 빨간줄이 뜬다. 위에서 문서상에도 선언을 안해놨다.. - 코드를 확인하니,
- table = document.add_table( row =1 , cols = 3)로 table을 하나 생성하여 변수에 담는다. row는 1줄 칼럼은 3개
- hdr_cells = table.rows[0].cells 을 통하여 칼럼명row인 0번째row의 모든 cell들에 대한 변수를 생성한다.
- hdr_cells[0], [1], [2] .text 를 통해서, 해당row의 각 cell들에 접근하여 문자열로 데이터를 집어넣는다. - 리스트는 없으므로, for문을 지우고, 안에 내용은 띄워쓰기를 삭제시켜서 해석해본다.
- row_cells = table.add_row().cells 를 통해 새로운 row를 하나 추가하고, 동시에 그 row의 모든 셀을 받도록 한다.
- 해당row의 0번째, 1, 2번째 셀들에 접근하여 문자열 데이터를 집어넣는다.
표도 스타일을 미리 정해줄 수 있다.
- 아무표나 작성한 뒤
- 더블클릭하고 -> 표 스타일 메뉴 -> 표스타일 새로 만들기
- 스타일 이름 지정해주고, 양식 고르기
- 파이썬에서 table 변수 생성한 다음 줄에,
table.style = '스타일명' 을 통해 표 스타일 지정해주기
form.docx에서는 이미 양식이 저장되어 있기 때문에,
docx파일 생성후, 양식 지우기를 하기 싫다면,
form.docx내용을 다 지워놓으면 된다.
- form.docx의 내용을 다 지우자. 양식은 저장되어있다.
- 그리고 나서 다시한번 demo.docx를 생성해보자.
- 앞에는 양식이 그대로 나와서 지워줬던 것을 안지워도 된다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
업무 자동화 최종정리 : CSV모듈로 CSV읽고 -> 클래스모듈화를 통한 인스턴스생성 및 계산 칼럼추가 -> CSV 쓰기 + MS WORD 문서화까지(.docx) (0) | 2018.07.07 |
---|---|
13. 기존 프로젝트를 python-docx로 문서화해보기 (0) | 2018.07.07 |
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) (0) | 2018.07.05 |
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 (0) | 2018.07.05 |
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 (0) | 2018.07.04 |
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기)
정의
모듈은 쉽게 말해 남들이 만들어 놓은 것을 갖다 쓰는 것을 말한다.
직접 만드는 것이 아니라.. 갖다 쓰는 것! import를 통해 갖다 쓴다.
다른 사람들의 솔루션을 활용하여 개발속도, 신뢰도 향상을 꾀할 수 있다.
- 모듈, 라이브러리 : 연장이 되어, 간단한 프로그램을 만들 수 있다.
- 프레임워크 : 좀 더 큰 개발, 웹/기계학습 등을 체계 안에서 개발할 수 있다
CSV 모듈
기존 9강. mandoo_management 프로젝트를 그대로 사용한다.
csv_read_practice.py
먼저 csv모듈을 이용한 읽기 방법
- 사용방법 : import csv
*csv모듈은 아나콘다 설치시, 이미 미리 설치되었으므로, import만 해주면 된다. - csv파일 여는 법/닫는 법은 기존과 똑같다.
- 라인을 읽는 readlines()대신 -> csv.reader(f)로 읽는다. 읽은 lines를 for문을 통해 출력해보자.
- 이전에서는 읽은 csv를 콤마기준으로 짜르는 .split(')의 과정이 필요없게 된다. 자동으로 나누어져 있다.
기존의 프로젝트를 바꾸어 개선해보자.
- 먼저 import csv
- lines = f.readlines() -> csv.reader(f)
- for문 안에서,
info = line.split(',') -> 삭제
info[n]->line[n]으로 변경
csv모듈을 이용한 쓰기 방법
- 여는법/닫는법은 동일하나, 열 때, 마지막인자에 newline=''을 비워주는 인자를 넣어줘야 작성후 한줄바꾸기가 없어진다.
- f.write('{}, {}, {}'.format(, , )의 방식에서 ->
(1) (읽기처럼)변수를 한번 거쳐준다. csv_writer = csv.write(f)
(2) 변수를 이용해서, csv_writer.writerow( [리,스,트,형,태] ) 만 넣어주면, '{},{},{}\n'.format 과 줄바꿈을 하지 않아도 된다.
*csv쓰기를 할 때, f = open시 3번째 인자 newline=''을 주지않으면, writerow 이후 줄바꿈1줄이 자동으로 시행된다. - csv쓸 때, open시 newline=''을 주면, 자동으로 줄바꿈이 생기지 않는다.
기존 프로젝트를 개선해보자.
- f_output = open('employee_result.csv', 'w' , newline='') 3번째 인자 추가
- 읽기처럼 쓸 때도, 쓰기변수 생성 : csv_writer = csv.write(f)
- 기존의 f.write('이름, 출근시간, 퇴근시간, 시급, 근무시간, 일당\n') -> 쓰기변수로 writerow함수 + 내용물은 배열로 + 줄바꿈\n은 삭제
csv_writer.writerow(['이름', '출근시간', '퇴근시간', '시급', '근무시간', '일당']) - for문안에서는, f.write( ' {}, {} \n '.format( , ) )했던 것을 주석처리[ ctrl + / ] ->
csv_writer.writerow( [
배열로 각 인스턴스.필드, 함수 채워줌
])
내가 만든 파이썬 파일 분할하고 import하기
내가 만든 class 정의 부분과 <---> 본격적인 f = open 읽기 ~ 작업 ~ 쓰기 까지를 분리하고 싶다.
- 새로운 파이썬 파일을 만들자. employee.py
- class Employee: 정의부분만을 잘라내서 붙힌다.
- 기존의 mandoo_wage_calculator.py 에서는 클래스가 빠져나갔을 것이므로, 클래스의 인스턴스 생성시 빨간색 오류가 뜰 것이다.
from employee import Employee
- from은 같은 프로젝트내 py파일 employee.py를 불러오고
- import는 py파일안의 클래스를 가져온다는 뜻이다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
13. 기존 프로젝트를 python-docx로 문서화해보기 (0) | 2018.07.07 |
---|---|
12. Python-docx 사용해보기 (0) | 2018.07.07 |
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 (0) | 2018.07.05 |
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 (0) | 2018.07.04 |
9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) (0) | 2018.07.04 |
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기
practice.py(깃허브) in csv_to_python_to_csv_practice 프로젝트
왼쪽과 같은 단순 데이터 csv->
파이참에서 클래스의 인스턴스생성 인자로 받아 수식을 함수로 정의->
오른쪽과 같은 수식계산완료후 csv
- 엑셀형태로 구성하고 싶은 데이터가 있다고 가정하고, 칼럼들을 클래스의 필드로 만든다.
- 상수를 제외하고, 생성자로 정의하여 클래스( , , , )로 인스턴스생성과 동시에 입력받도록 해준다.
*만약, 상수로 먼저 선언하고서, 인자로 받아도 되고, 안받아도 되도록 설정하려면,
(1) 생성자의 인자로서 wage_per_hour = None으로 default로 둔다.
(2) 기본적으로 self.wage_per_hour = wage_per_hour는 바로 입력하지 않고,
(3) if wage_per_hour: 를 통해 default인 None이 아닌 값이 넘어와서 True를 가질 때,
상수였던 필드(wage_per_hour = 7530) 에 self.wage_per_hour = wage_per_hour를 대입하도록 한다.
- 칼럼 중에 함수식이 필요한 것은, 클래스 내부의 함수로 정의하여 self.필드들을 이용해서 (return에다가) 계산식을 만든다.
ex> 퇴근시간 - 출근시간 = 근무시간 - 만약, 함수식 계산을 한 칼럼에 또 함수식을 써야하는 경우에는
클래스에 정의된 함수식을 또 호출하는 함수를 생성하면 된다. 필드와 마찬가지로 return에다가 self.함수()로 호출해서 계산식을 만든다.
ex> 일당 = 근무시간(퇴근시간 - 출근시간) * 시급
--------------------------------------------------------------------------------------------------------------------------------- - 이제 인스턴스 인자로 들어갈 데이터들을 엑셀파일에서 받아오기 위해, CSV (쉼표로분리)로 프로젝트내에 다른이름 저장
- f = open('파일명.csv', 'r')를 통해 열고 / f.close()도 미리 같이 작성
f.readlines()를 통해 각 row을 list로 받음 -> (리스트이므로) for문을 통해 개별 출력시켜본다. - 첫 줄은 칼럼명row이므로, 2번째줄 부터 읽기 위해선, while문과 비슷하게
i =0 작성 -> for안에서 읽어진 lines를 i > 0부터 콤마로쪼개는 작업 등등을 하도록 하고, for문 마지막에 i += 1를 달아준다. - 각 리스트는 콤마(,)를 통해 4개의 요소가 붙어있으므로 .split(',')를 통해 다시 리스트로 쪼개어 받는다.
4개로 쪼개진 요소를 담는 list를 for문을 돌면서 출력시켜본다.
4개 요소를 담고 있는 리스트는 리스트[0], [1], [2], [3] 형태로 개별접근이 가능해진다. - 이제 for문을 돌면서 4개의 요소를 입력받아 생성될 인스턴스들을 관리할 리스트를 for문전에 만든다.
ex> employee_list = [] or employee_list = list() - for문을 돌면서, 인스턴스관리 리스트에 .append()안에 인스턴스를 생성하면서, 생성자4개를 입력해준다.
ex> employee_list.append( 클래스( 필드[0], 필드[1], 필드[2], 필드[3]) )
* 이 때, csv에서 받은 요소들은 모두 문자열로 가져온다. 정수 데이터인 출근시간, 퇴근시간, 시급은 int()로 감싸주어야 클래스에서 계산된다.
ex> employee_list.append( 클래스( 필드[0], int( 필드[1]), int(필드[2]), int(필드[3]) ) ) - 인스턴스관리리스트를 확인해보기 위해
(1) print(len())로 전체 길이를 살펴보고
(2) <리스트를 이용한 for문>을 통해, 세부적으로 인스턴스 안의 필드나 함수를 하나씩 확인하는데,
print()로 , {}\t{}\t .format( 인스턴스.필드1, 인스턴스.필드2,.., 인스턴스.함수1(), 인스턴스.함수2(),) 형식으로 한 줄로 출력해보자. - csv파일로 쓰기위해, 위에서 인스턴스 필드/함수 세부 확인한 print문을 고치면 된다. print->write 수정시 줄바꿈을 항상기억 + 칼럼명row출력
(1) for문 전에 open() '파일명', 'w' 이 들어갔다.
(2) for문 전에 csv_file.write( 칼럼명row \n')
(3) for문 안에 print-> csv_file.write 로 고치고, 새로운 칼럼{} 만들어주고, \t 를 콤마(,)로 수정하고, \n줄바꿈 해주기
(4) for문 끝나면 close()
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
12. Python-docx 사용해보기 (0) | 2018.07.07 |
---|---|
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) (0) | 2018.07.05 |
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 (0) | 2018.07.04 |
9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) (0) | 2018.07.04 |
참고 : 클래스를 이용하여 데이터 입력하고 쓰기 (0) | 2018.07.04 |
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기
기존에 만들었던 엑셀형태의 데이터를 -> 클래스를 통해 인스턴스로 칼럼들을 채우도록하고 -> 리스트로 관리하기를 다시 반복해보자.
그런데 인스턴스를 계속 파이참에서 하나씩 생성하기는 좀 그렇다.
엑셀을 사용해서 생성해보자.
- 엑셀에서, 칼럼명 없이, 생성자 순( name, work_start, work_finish, wage_per_hour)으로 작성하자.
- 다음으로, 저장을 할 때, 파이참프로젝트 폴더내 csv(쉼표로분리)로 저장하자.
*csv utf-8(쉼표로 분리)는 아니다.
파이참이 utf-8을 선호를 하지만, csv에서 만큼은 한글관련해서 깨져버리는 것을 확인했었다. - 이제 파이참 프로젝트 내에 생성된 csv파일을 읽어보자.
- 이전에는 파일쓰기를 해서 -> open('파일명', 'w') 였지만, 이번에는 파일읽기 이므로, open('파일명', 'r') 이다.
- 까먹을 수 있으니, f = open()작성과 함께 밑에는 f.close()도 미리 작성해주자.
- 잘은 모르겠지만, 파일을 여는 f라는 변수의 타입을 확인해보자. 어떠한 클래스의 하나이며, 그래서 f.write함수도 쓸 수 있었다. - csv파일을 쓸 때에 f.write()가 있었다면,
csv파일을 읽을 때는 f.readlines()를 이용한다. 문자열의 .join('')처럼, csv을 모두 읽어들인 다음, list를 반환한다.
- 읽어들인 list를 len()으로 길이를 확인해보면, 엑셀에서 작성한 row수과 같다. - open 'r' -> readlines -> lines변수에 읽어들인 리스트들을 for문을 이용하여 하나씩 불러내서 확인해보자
각 리스트안에는 인스턴스 생성할 때 필요한 인자들이 콤마를 통해 붙어있다.
우리는 콤마로 구분된 놈들을 4개로 다시 나누어서, 인스턴스생성시 인자로
들어가도록 해야한다
- 먼저, for문을 들어가기 전에 인스턴스를 관리할 빈 리스트를 생성해 놓는다.
- for문 안에서는, line.split(',')를 이용해 콤마를 기준으로 각 라인을 4개로 쪼갠 뒤, info라는 리스트변수에 담아놓고, print로 확인해보았다.
- 제대로 각 line들이 4개로 쪼개어진 것을 확인했다면,
info라는 리스트의 각 요소를 [0], [1], [2], [3]으로서 접근하여 인스턴스를 생성과 동시에 append해준다. - 그런데, 첫번째 인스턴스인 employ_list[0].worked_hours를 print해보면 에러가 난다.
- 대입은 되긴 되나,, 사실 name을 제외하면 다 정수이다.
- 파일을 읽었을 때는, 모두 str로 인식되기 때문이다. ( csv의 15 -> 파이참 1과 5가 붙어있는 문자열로 인식)
그렇기 때문에, 함수안의 계산식 str- str 의 에러가 나는 것이다.
- for문 속에서, name인자 위치의 info[0]을 제외하고 전부 int( )함수로 감싸주어, 정수로 만들어주자. - 확인을 위해 인스턴스 리스트(employee_list)를 출력시켜보자.
(1) 전체적으로는 len()함수로 길이를 확인한다.
(2) 세부적으로는 for문을 돌면서, 각 인스턴스의 필드들을, print( , , , )로 한번에 확인한다.
인스턴스들의 인자들을 받아들이기 위해서,
첫 줄 부터 데이터를 입력하여 칼럼명row가 매우 아쉽다.
- 만약 첫줄에 칼럼명을 입력하고 실행한다면 에러가 난다.
- 에러라인으로 가보면, 출근시간 인자에 int( '숫자' ) 가 아닌 int( '출근시간' ) 으로서, 문자열을 정수로 바꿔버렸기 때문
엑셀(csv)의 2번 째 줄 부터 읽는 방법은?
- while문 처럼, for문 전에, i = 0이라는 변수를 들어오기 전에 미리 생성하고,
- for문 안에서는, if i > 0 일때만, 쪼개어서, 인스턴스 생성하는 작업을 하도록 하고
if문 끝나는 곳에서 i += 1 을 넣어준다.
클래스의 인스턴스를 이용해 생성된 엑셀 형태의 데이터에
파일쓰기를 통해 근무시간과 일당 칼럼을 더해서 csv로 배출해보자.
- 인스턴스 리스트(employee_list)를 세부적으로 확인하기 위해 for문안에서 각 인스턴스의 필드를 print(, , , )했던 것을
--> 그대로 파일쓰기에 활용한다.
*앞에 빠진 시급도 채워넣었다. - print-> f.write로 고칠 때는 csv파일이므로 '문, 자, 열'을 콤마로 나눠야하므로 '{}, {}, {}'.format( , , )의 형태가 필요하다
이제 employee_list.csv 로 읽고 - > 파이썬에서 데이터를 추가처리( 근무시간 , 일당 계산) -> employee_result.csv 파일로 쓰기 과정을 가진다.
즉, 읽는 파일을 수정하면 쓰는 파일도 변경된다.
노동법에 의해 4시간마다 30분 break_time 가지는 것을 고려한
근무시간 계산 함수를 수정해보자.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
11. 파이썬 CSV모듈 (읽기, 쓰기) + 클래스 분할하기) (0) | 2018.07.05 |
---|---|
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 (0) | 2018.07.05 |
9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) (0) | 2018.07.04 |
참고 : 클래스를 이용하여 데이터 입력하고 쓰기 (0) | 2018.07.04 |
8. 클래스(class)와 인스턴스(instance) 및 생성자 (0) | 2018.07.04 |
프로젝트명 : mandoo_management
문자열 클래스에서 제공하는 함수들 연습
- split()함수는, 구분자를 인자로 입력받아서 문자열을 구분자로 쪼갠 다음 list형태로 반환한다.
- 문자열을 .split(',')을 이용하여 쪼갠 다음, 타입을 확인했더니 list타입이다.
- 쪼개어져 리스트가 된 문자열을 for문으로 출력했더니 2개의 문자열이 나왔다. - 콤마가 아닌 공백(space)를 구분자로 주고 쪼개어보자.
- message.split(' ') - join()함수는 ' '.join(배열)의 형태로 함수앞에서는 사이를 붙혀주는 붙힘자를 받아, 쪼개어진 배열(리스트)를 하나로 합쳐주는 함수다.
- 타입을 확인하보면 str 클래스가 된다.
- replace( , ) 함수는 2개의 인자를 받아서 ( ' 바꾸고싶은 문자열 ' , ' 바꿀 문자열 ' ) 형태를 가진다.
- 공백을 물결표시로 바꾸려면 인자를 ( ' ', '~') 형식으로 주면된다.
- 한글 '이'를 숫자'2'로 바꾸고 싶드면 ( '이', '2') 형식으로 주면 된다. - upper()와 lower() 함수는 전부 대문자 혹은 전부 소문자로 바꿔준다.
*참고) 문자열 시작을 ' 로 했는데, 문자열 중간에 '를 쓰고싶다면 앞에 \만 붙히면 된다. - startswith()함수는 인자로 받은 문자열로 시작하는지 안하는지 boolean형태로 뱉어낸다.
마찬가지로 endswith() 함수도 받은 인자로 끝나는지 안나는지 boolean형태로 뱉어낸다.
- 끝날 때, 공백까지 같아야한다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
참고 : 엑셀의 CSV파일을 읽고->클래스를 활용하여 함수까지계산 -> CSV파일로 쓰기 (0) | 2018.07.05 |
---|---|
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 (0) | 2018.07.04 |
참고 : 클래스를 이용하여 데이터 입력하고 쓰기 (0) | 2018.07.04 |
8. 클래스(class)와 인스턴스(instance) 및 생성자 (0) | 2018.07.04 |
7. 파일 쓰기( TXT /CSV ) (0) | 2018.07.04 |
참고 : 클래스를 이용하여 데이터 입력하고 쓰기
- 엑셀형태로 구성하고 싶은 데이터가 있다고 가정하고, 칼럼들을 클래스의 필드로 만든다.
- 상수를 제외하고, 생성자(def __init(self, 받,을,변수):로 정의하여 클래스명( , , , )로 인스턴스생성과 동시에 입력받도록 해준다.
*만약, 상수로 먼저 선언하고서, 인자로 받아도 되고, 안받아도 되도록 설정하려면,
(1) 인자로서 wage_per_hour = None으로 default로 둔다.
(2) 기본적으로 self.wage_per_hour = wage_per_hour는 바로 입력하지 않고,
(3) if wage_per_hour: 를 통해 default인 None이 아닌 값이 넘어와서 True를 가질 때,
상수였던 필드(wage_per_hour = 7530) 에 self.wage_per_hour = wage_per_hour를 대입하도록 한다.
- 칼럼 중에 함수식이 필요한 것은, 클래스 내부의 함수로 정의하여 self.필드들을 이용해서 (return에다가) 계산식을 만든다.
ex> 퇴근시간 - 출근시간 = 근무시간 - 만약, 함수식 계산을 한 칼럼에 또 함수식을 써야하는 경우에는
클래스에 정의된 함수식을 또 호출하는 함수를 생성하면 된다. 필드와 마찬가지로 return에다가 self.함수()로 호출해서 계산식을 만든다.
ex> 일당 = 근무시간(퇴근시간 - 출근시간) * 시급 - 본격적으로, 데이터를 관리하기 위해서, 빈 리스트를 생성하자.
ex> employee_list = [] or employee_list = list() - 빈 리스트에다가 인스턴스를 생성함과 동시에 append로 리스트에 추가 해주자.
ex> employee_list.append( 클래스( 필드1, 필드2, 필드3, 필드4) )
employee_list.append( 클래스( 필드1, 필드2, 필드3, 필드4) ) ... - 리스트에 채워진 인스턴스를 <리스트를 이용한 for문>을 통해, 하나씩 인스턴스를 받아서 .필드 or .함수()에 접근하여
print()로 확인하는데, {}\t{}\t .format( 인스턴스.필드1, 인스턴스.필드2, ,) 형식으로
한 줄로 출력해보자. - csv파일로 쓰고 싶다면,
(1) for문 전에 open() '파일명', 'w' 이 들어갔다.
(2) for문 전에 csv_file.write( 칼럼명 첫줄 \n')
(3) for문 안에 print-> csv_file.write 로 고치고, \t 를 콤마(,)로 수정하고, \n줄바꿈 해주기
(4) for문 끝나면 close()
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
10. 다수의 인스턴스 생성을 위한 엑셀에 인자 입력-> csv로 저장 -> 파일읽기-> 인스턴스 생성 -> 파일 쓰기 (0) | 2018.07.04 |
---|---|
9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) (0) | 2018.07.04 |
8. 클래스(class)와 인스턴스(instance) 및 생성자 (0) | 2018.07.04 |
7. 파일 쓰기( TXT /CSV ) (0) | 2018.07.04 |
6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수) (0) | 2018.07.03 |
8. 클래스(class)와 인스턴스(instance) 및 생성자
소개
클래스는 간단하게 자료형태 : integer, float, string, list
인스턴스는 값 : 1,2,3 0.1, 3.14, 'Hello world', [1, 2, 3]
이전에 파이썬 프롬프트에서는 아래와 같이 자료형을 확인할 때, 클래스를 명시해줬었다.
나만의 자료형태도, 클래스로 정의할 수 있다.
새로운 자료형태의 클래스
- 엑셀로 자료형태를 정의해본다고 가정하자.
- 아래에서, 가로 한줄한줄이 나의 자료형태가 된다. 즉, 새로운 클래스가 된다.
- 이러한 자료형태의 변수로 선언할 수 있다. - 파이썬에서, 4가지 정보를 가지는 클래스를 만들어보자.
- 변수명, 함수명과 다르게 클래스명은 첫글자를 대문자로 쓴다.
- 인자가 없을 떄는 ()없이 그냥 클래스명: 으로 끝낸다.
- 만약 값을 비워두고 싶다면 None을 대입한다 - 생성한 클래스의 인스턴스는 인스턴스변수 = 클래스() 형태로 생성한다.
(java의 경우, 클래스명 인스턴스 변수 = new 클래스명()으로 생성) - 클래스안에 정의한 필드들(name, wage_per_hour ... )에 접근하기 위해서는
인스턴스.필드명으로 접근하면 된다. - 만약 각 필드들에 새로운 값을 입력하지 않았다면, 클래스에서 넣어준 최초값이 출력된다.
- 다른 인스턴스를 생성하더라도, e000과는 개별된 e001이 생성된다.
- 근무시간을 추가해보자.
- 엑셀에서는 함수식을 쓸 수 있다.
- 파이참의 함수식을 클래스에도 넣을 수 있다. - 클래스안에서 def 함수식을 정의할 때, 인자의 괄호를 열면, self가 자동으로 입력된다.
일반 함수식과 다르게, 클래스안의 함수에서는 self라는 인자가 반드시 들어가야한다. - 클래스안의 필드를 클래스속 함수에서 사용할 때는, self.필드명으로 접근한다.
- 이제 인스턴스에서 클래스안의 함수를 사용할 때에는, 필드와 동일하게 접근하며, ()인자식이 붙는것만 차이가 난다
그리고 self라는 인자는 안적어준다.
클래스안에는 필드(변수) 뿐만 아니라 함수도 넣어놓을 수 있다.!
클래스안에 함수에서 self다른함수를 호출할 수도 있다.
- 엑셀에서 일당 칼럼을 추가한다고 해보자. 함수를 이용해서 구한 근무시간에 시급을 곱하면 된다.
- 파이썬에서도 할 수 있다.
클래스안에 일당을 구하는 함수를 만들어보자.
- 일당을 구하려면 앞에서 클래스에 정의한 함수()를 사용해야한다.
클래스안에서 함수를 정의할 때, 인자로 반드시 self를 붙혔다.
클래스안의 함수에서 클래스안의 필드를 이용할 때, self를 붙혔다.
클래스안의 함수에서 클래스안의 함수를 이용할 때도, self를 붙힌다.
- 정의한 일당구하는 함수식을 print로 찍어주자.
이제 각각이 제대로 출력되는 것을 확인 했으니
하나도 묶어서 {} /t .format을 이용하여 한줄로 출력해보자.
조재성, 추미애, ... 사람마다 각각
- 인스턴스 생성
- 클래스 필드마다 값 대입
- 출력
하기가 쉽지가 않다. 리스트를 사용할 수도 있으나... 클래스를 사용하므로
그래서 인스턴스를 생성함과 동시에, 필드에 값을 넣을 수 있는
클래스의 생성자를 도입할 것이다.
- 생성자를 정의할 때는, 기본형식이 정해져있다.
- def __init__(self): 로서, 언더바2개가 init 양쪽으로 있다. - 이제 생성자의 필수인자인 self, 옆에다가 추가로 받을수 있는 인자명을 필드명과 동일하게 적어준다.
*이 때, 시급은 상수라서 안받는다. - 마지막으로, 인자로 들어온 값(name)을 ----> 클래스의 필드인 self.필드 에 대입해주는 식을 작성한다.
이제 인스턴스 생성한 것을 변수에 대입하지말고, 리스트에 담아 관리해보자.
- 빈 리스트를 만들고
*리스트는 = []로 생성 or = list()로 생성 둘다 가능하다. - 각 인스턴스를 append를 통해 리스트에 추가하자.
- for문을 통해 리스트에 있는 것을 다 출력하도록 하자.
* 여러개의 리스트가 있어서, 각각 순서대로 접근할 때는 range(0, len())을 썼지만, 여기서는 리스트 1개로 관리-> 리스트를 이용한 for문
print대신 -> csv으로 파일 쓰기까지 해보자.
(프로그래밍 print개념 -> 파일 입출력으로 생각하자. txt는 utf-8코딩 / csv는 안코딩)
- 마찬가지로 for문 돌기전에 open() / for문안에서 write ( ) 에 줄바꿈해주기 / for문 끝나고 close() )
- 우리는 각 value를 \t를 이용해 구분했으나 --> csv는 comma로 구분해주기
- 첫번째 칼럼명도 작성해준다... \n도 까먹으면 안된다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
9. 문자열 클래스의 함수(split과 join / replace / upper와 lower / startswith와 endswith) (0) | 2018.07.04 |
---|---|
참고 : 클래스를 이용하여 데이터 입력하고 쓰기 (0) | 2018.07.04 |
7. 파일 쓰기( TXT /CSV ) (0) | 2018.07.04 |
6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수) (0) | 2018.07.03 |
5. 반복문 - while 과 for 그리고 응용(홀짝구분/구구단/리스트요소들 출력) (0) | 2018.07.02 |
7. 파일 쓰기( TXT /CSV )
txt 파일 쓰기
- 먼저 txt파일을 연 다음(open( 'file명') , 써야(mode-'w')한다. 그것을 어떠한 변수에 대입해준다.
*파일명이 존재하지 않으면, 새로 생성해준다. 프로젝트안에 생성되는 것을 확인할 수 있다. - 열어서 쓰게 해주는 변수를 이용해서 .write( '문자열')을 이용하면 입력시킬 수 있다.
- 쓰고 난 다음에는 닫아준다.
- 한줄 더 추가하고 싶다면, 또 밑에다가 f.write를 해주면 된다.
*하지만 자동으로 줄바꿈이 되지 않는다. -> 위에 문자열 마지막에 \n를 통해 작성한 뒤 한 줄 바꿔주자.
* 실행시킬 때 마다 덮어쓰기가 되는 것 같다.
- 한글을 출력시켜보자.
- 한글이 깨지면서 인코딩문제가 생긴다. 컴퓨터는 한글을 모르기 때문이다. but 실제 txt파일은 잘 열린다. - 위와 같은 문제가 생기는 이유는
Pycharm은 기본적으로 UTF-8로 인코딩 되어있는데, 우리가 생성한 문서txt는 UTF-8로 인코딩되어있지 않아서 문제가 생기는 것.
* 첫번째, 파일을 열 때, ( '파일명', '모드', 에 이어서 encoding 인자를 지정해준다)
*마치 default인자처럼, 파이참이 기본적으로 다른 인코딩으로 되어있는 것을 강제로 UTF-8을 default로 지정해주는 것이다.
CSV 파일 쓰기
CSV : COMMA SEPARATED VALUES 로서,
- 변수에 대입하면서, open()열고 파일명' ~.csv' + 모드'w' + encoding='utp-8'
* csv는 utf-8인코딩하면, 엑셀에서 깨진다. 지워야한다. - write시 마찬가지로, 문자열 안에서, 콤마로 나누어준다.
- close로 닫는다.
- txt와 마찬가지지만, 파일확장자만 txt -> csv로 바뀌었다. 그리고 입력시 문자열처럼 입력하면서, 콤마로 values들을 나눈다.
- txt파일과 마찬가지로, 위쪽문장 끝에, \n을 해줘야 줄바꿈이 된다.
만두가게 임금계산 프로그램을 파일로 저장해보자.
mandoo_wage_txt_csv_generator.py
지난번 mandoo_wage.py의 함수 및 소스코드를 복사해온다.
긴 문장 은 -> txt파일로 저장
짧은 문장은 -> csv파일로 저장할 것이다.
- 먼저 긴문장이 출력되는 for문에서 txt파일을 쓰는 과정을 적어보자(위에서 한 것 참고)
1. for문이 시작되기 전에, txt파일을 연다.
2. for문안에 print()로 출력된 부분을 f.write( + \n줄바꿈 )로 바꿔주기만 하면 된다.
* print는 자동으로 줄바꿈 해주는 것 같다.
3. for문이 끝나고 f.close()를 통해 txt파일을 닫아준다. - 아래 짧은 문장을 csv로 써보자. 마찬가지의 과정이다.
1. for문 전에 open시, 파일명만 제대로 바꾸자.
*csv파일은 open()시 3번째 인자에서, utf-8인코딩하면, 파이참에서는 잘보이지만, 엑셀에서 깨진다.!! ----> 하지마라
2. print대신 csv_file.write(' , , , ')할 때, 정보들을 콤마로 벌려주자.
3. for문 끝나고, close해준다. - 엑셀에서는 '시간',이나 '원'을 사용하지않으므로 빼준다. 그리고 엑셀 맨 윗줄에 칼럼명을 넣으면 좋을 것 같다.
for문을 돌기전에, csv_file.write로 칼럼명 3개를 미리 써놓으면 된다. + 줄바꿈도 빼먹으면 안된다. - 이제 여기에, 출근시간/퇴근시간도 추가해서 출력해보자.
칼럼명에서 추가 / write()에서 {}추가 / format에서 인자 추가 작업을 해주면 된다. - 파이썬으로 쓴 csv파일에 대해서 엑셀 함수를 적용하고 싶다면
[ 다른이름으로 저장-> 엑셀 통합문서로 저장 ] 하고 난 뒤, 사용하면 된다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
참고 : 클래스를 이용하여 데이터 입력하고 쓰기 (0) | 2018.07.04 |
---|---|
8. 클래스(class)와 인스턴스(instance) 및 생성자 (0) | 2018.07.04 |
6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수) (0) | 2018.07.03 |
5. 반복문 - while 과 for 그리고 응용(홀짝구분/구구단/리스트요소들 출력) (0) | 2018.07.02 |
4. 파이참 프로젝트 생성 후 버전관리 + 조건문 학습 (0) | 2018.07.02 |
6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수)
기본적인 함수 사용법
def^함수명( 인자 ) :
계산식(인자 / 반환받을 변수)
return 변수
의 형태이다.
return 없이 출력만 혹은 계산만 하는 함수도 있다.
이전에 미리 정의된 함수로서, print(), len(), type() 함수 등이 있다. 지금부터는 함수를 만드는 방법에 대해 이야기 해보자.
사용해보기
함수를 정의하고, 그 함수를 사용해서 값을 return하고, 그 리턴 값을 a라는 변수에 넣은 뒤, 출력시켜보자.
만약 계산식이 간단하다면, return 에다가 바로 계산식을 적어줘서 반환변수없이 사용할 수 도 있다.
구구단 함수를 정의해보자
- 먼저, 이전시간에 했던, 2단을 출력하는 코드를 작성해본다.
- 이제, 2단을 j로 바꿀 것인데, 함수에 인자로 들어가서, 원하든 단을 출력하도록 해보자.
* return 이 없는 함수이다. 대신 출력물을 배출한다.
return 이 없는 함수와, return이 있는 함수를 한눈에 보자. - 인자가 2개인 함수도 작성할 수 있다.
- 문자열을 인자로 받을 수 도 있다.
함수를 왜 쓰는가?
mandoo_wage.py
- 시급과 함께, 리스트의 형태로, 직원/ 시작*종료시간 이 주어지고, for문은 리스트를 사용하므로, range(0, len(리스트))를 이용해서
i번째 사람의 근무시간(종료-시간시작), 일당( 근무시간*시급)을 계산한 뒤, 출력해보자.
하지만, 노동법을 생각해서, 일당 시간을 수정해야한다.
- break_time이라는 변수를 만들어서, 4시간 이상 근무를 했다면, 4시간마다( 4로 나눈 몫! ) 0.5(30분)시간씩 곱해져야한다.
그리고 worked 에서 break_time을 뺀 시간이 근무시간이다.
잘못된 부분을 고치는데, 만약 for문이 여러개였다면 이었다면??
노동법을 고려해 수정한 코드인, if worked >= 4 부분을, for문 마다 붙혀넣는 것이 아니라 , 이 부분을 함수로 만들어 함수만 집어넣으면 된다.
- worked_hours 계산하는 것도, 차라리 함수 인자를 work_start_, work_finish 2개로 받으면 된다.
- 기존의 for문 속, worked 계산식은 함수속으로 들어가는 대신, 함수는 2개의 인자를 받게된다.
*이 때, 봉착하는 문제는, print문 속 {}시간 근무에 들어간 format속의 변수 worked다.
*worked 계산식이 함수로 들어가버렸기 때문에 --> 함수에서 wage(일당)뿐만 아니라, worked_hours 도 추가로 반환해주도록 하자. - 함수에서 wage, wokred_hours 2개를 return해줬으면, for문 속에서도 2개의 변수에 받으면 된다.
이렇게 함수를 이용하면 , 반복에 있어서 편하게 할 수 있으며,
수정/보안할 때도, 한번만 해주면 된다
- 시급도 바뀔 수 있다. 시급도 인자로 받아보자.
-def wage_calculator( ar1, ar2, wage_per_hour)로 인자를 추가해주고, 함수 계산식 7530을 wage_per_hour로 바꿔주자.
- 함수를 사용하는 곳으로 가서, 7530을 입력해주자. - 시급을 3번째 인자로 주면서, default값도 =7530으로 지정해주면 ---> 함수를 사용할 때는 인자 2개만 넣어도 된다!
자동으로 7530이 3번째 인자로 인식된다.
- 만일 디폴트값이 없다면, 함수사용시 3번째 인자 대입을 빠트리면 안된다 - 시급을 default인 7530원이 아닌 다른 값으로 주고 싶다면, 함수사용시 2개의 인자만 있었던 곳에, 3번째 인자를 대입해주면 된다.
함수 만들시 유의점
- 목적이 명확한 표형으로 함수명 작성
- 함수명은 소문자와 언더바(_)로 작성하는게 정석
- 파라미터(인자)도 소문자로
- 한 함수는 한가지 기능만 & 한 화면이상 넘어가지 않게 작성하는 것이 좋다.
함수와 scope
함수 속의 인자인 x와 y는 함수안에서만 의미가 있다.
파이썬에서 이미 만들어져 제공하는 함수
input() : 사용자 입력을 기다렸다가, 차례대로 실행된다. / 숫자도 문자열로 받는다. / 인자는 '문자열'로 안내문 역할을 할 수 있다.
- 파이참에서는 기본적으로 제공하는 함수에 대해 보라색으로 표시된다.!
- 함수를 실행시키면 아무것도 안일어난 것 같지만, 콘솔창에 마우스를 찍어보면, 커서가 깜박인다. 입력을 받을 수 있는 상태이다.
- 이 때, 어떤 값을 입력하면, 초록색으로 사용자의 입력값이 표시되고, 엔터를 치면 ---> a에 저장된다음, print()함수를 타게된다.
- 문자열도 입력가능하다
- input()인자에는 사용자입력에 대한 안내를 작성할 수 있다.
- 구구단 프로그램의 단수를 입력받아보자.
- 역시 먼저 2단을 작성한 다음, 단수를 x로 입력받는 함수를 만들어보자.
- 위와 같이 7단이 아니라, 7의 갯수가 연이서 나타나는 이유는 input()으로 받은 것은 문자열이기 때문이다.
- a의 type을 확인해보기 위해, type(a)를 print로 출력해보자.
* type(a)만 입력하면 아무것도 나타나지 않음. print( type() ) 은 쌍으로 생각하자. - input()으로 받은 사용자입력 [문자열]을 int형으로 바꾸는 함수가 int()이다.
- 만약 사용자 입력이 문자열인 경우 int( 문자열 ) 하면 에러가 난다. 문자열 숫자 -- > int() --> 정수 숫자만 가능하다. - 구구단함수를 다시 호출해보자( range (1, 10)까지 해야 1부터 9까지.. 앞에는 오타)
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
8. 클래스(class)와 인스턴스(instance) 및 생성자 (0) | 2018.07.04 |
---|---|
7. 파일 쓰기( TXT /CSV ) (0) | 2018.07.04 |
5. 반복문 - while 과 for 그리고 응용(홀짝구분/구구단/리스트요소들 출력) (0) | 2018.07.02 |
4. 파이참 프로젝트 생성 후 버전관리 + 조건문 학습 (0) | 2018.07.02 |
3. 파이썬 기초 문법 - 산술-비교연산자 / 변수와 숫자 / 문자열과 .format / Boolean, 리스트 (0) | 2018.06.30 |
5. 반복문 - while 과 for 그리고 응용(홀짝구분/구구단/리스트요소들 출력)
소개
while의 사용례
for의 사용례 2가지
while문 사용해보기
새로운 프로젝트를 만들고, py파일을 만든 다음, 아래 문장을 실행시켜보자.
print('study while')
condition = True
while condition:
print('wow')
조건이 계속 True이므로, wow가 계속해서 반복될 것이다. 이 때는, 좌측의 정지버튼을 눌러서 정지시킨다.
* 정지 단축키는 Ctrl+F2 이다.
while문의 기본 사용은 아래와 같다.
인자 i를 만들고, 0부터 시작시키도록해서, 특정 횟수를 반복하고, 그 속에서는 하나씩 +1 시켜준다.
i = 0
while i < 10:
print(i)
i = i + 1
이제, 가지고 있는 모든 돈을 계란사는데 모두 쓰는 프로그램을 만들어보자.
- 먼저, 변수로는 [ 내가 가진 돈 / 계란 1개 가격 / 보유 계란수 ] 를 변수로 둔다.
* i인자를 0으로 생성하는 대신, 가진돈 / 계란가격을 변수로 생성한 뒤 가진돈 > 계란가격 이기만 하면 [ 돈 마이너스 -> 계란 획득 ]의 과정
- while문의 조건에다가는, 내가 가진 돈이 계란가격보다 클 떄, (1) 돈을 내고, (2) 그만큼 계란 가지도록 반복되도록 한다.
- print문으로 먼저 보유계란수 와 남은 돈을 출력해준다. 보유계란 0개부터 찍히고, 남은돈 10,000원부터 찍힌다.
*상황 [ 출력 -> 연산 ] 을 반복하면, 아래그림과 같이 맨 마지막 연산이 계산은 되지만 출력되지 않는다.
* 만약 [ 연산 -> 출력 ] 을 반복하면, 맨 처음 상태는 찍히지 않고, 첫번 째 연산후에 출력이 될 것이다.
그러므로, [ 출력 -> 연산 ] 으로 while을 반복하고, while문 끝나고 마지막 연산된 것을 따로 출력해주는 형태로 해보자.
반대로, 먼저 [상활출력 ] 후에 while에서 [ 연산 -> 출력] 의 형태를 가져도 된다.
for문 사용해보기
for문은 리스트를 사용하거나 range를 사용하는 방법 2가지가 있다.
- 먼저 range를 이용한 for문의 기본적인 사용방법은 아래와 같다
- 0부터 10전까지, 즉, 0, 1, 2, ~ , 9까지 반복된다. 10번 반복된다.
만약 while을 사용한다면, 아래와 같다.
- while문은 먼저 변수 i = 0을 선언해주고, 어떤 반복행위를 작성한 뒤, i = i + 1으로 하나씩 수동으로 올려줬다.
- i = i +1 이 귀찮다면, i += 1 을 대신 쓸 수 있다.
응용 - 홀짝 구분해주는 프로그램 제작
0부터 9까지를 반복하는데, i가 짝수인지 홀수인지는
for문 안에서, if문을 통해 2로 나눈 나머지가 0라면 짝수, else 홀수로 구분하면된다.
- print ( i + '문자열')은 불가하다. -> i를 str()함수로 문자열로 바꿔준다.
- 정수나 실수를 문자열로 바꾸는 작업이 귀찮다면 -> 문자열이 아닌 변수는 {}로 비워놓고 .format을 쓰면 된다.
print(str(i) + ' : 홀수')
print('{} : 홀수'.format(i))
구구단 출력해보기
먼저, range를 0이 아닌 1부터 9까지의 범위인 (1, 9)로 지정해준다.
for문 안에서는 2단을 먼저 해본다.
for i in range(1,10):
print('2 * {} = {}'.format(i, 2*i))
- 이제 가정한 2단을 j로 바꿔주는 반복문을 작성해야한다.
i는 각 구구단에서, 1부터 9까지 곱해주는 놈이었다.
그러나 2는 또, 전체에서 2부터 9까지 크게 한바퀴 돌아야한다.
즉, for i ~ 안에 들어갈 것이 아니라, for i를 감싸주는 for j in range(2,10)이 되어야한다.
*기존에 있던 2문장을 전체선택 한 다음, [TAB]을 누르면 안드로이드스튜디오와 마찬가지로 4칸 들여써진다.
직원 정보를 출력해보자.
이름리스트, 생일리스트를 5개 (0,4)만들고,
for문 속에서 리스트 요소에 접근[i]하여 각각을 프린트해보자.
* print문은 ,(콤마)를 통해서 여러개 출력시킬 수 도 있다. ex> print( name_list[i], birth_list[i] )
그런데 만약에, 리스트에 하나가 추가된다면?
for i in range(0,5) 상태로는 자동으로 업데이트가 되지 않는다.
'빅데이터 관련 프로그래밍 > Python3 기초 및 업무자동화' 카테고리의 다른 글
7. 파일 쓰기( TXT /CSV ) (0) | 2018.07.04 |
---|---|
6 . 함수 - (기본사용법 /구구단출력 / for문 속 함수 / default인자 / 유의점, scope / 기본 제공함수) (0) | 2018.07.03 |
4. 파이참 프로젝트 생성 후 버전관리 + 조건문 학습 (0) | 2018.07.02 |
3. 파이썬 기초 문법 - 산술-비교연산자 / 변수와 숫자 / 문자열과 .format / Boolean, 리스트 (0) | 2018.06.30 |
2. Pycharm 설치하기(대학생 1년 무료 라이센스 이용하기) (0) | 2018.06.28 |