본문 바로가기

[일상봇 만들기] 나의 하루하루를 도와줄 친구!

mok_cha

목차는 총 6 개의 단원으로 구성되어 있습니다.

들어가며

Level_1

Level_2

Level_3

Level_4

200% 활용하기

 

[들어가며]

// 4차산업혁명 시대

- 아침부터 저녁까지 00씨의 일상에서 AI 스피커, 시장 동향 파악, 자동응답 챗봇을 사용하는 하루 소개

- AI 스피커

  “아침에 일찍 회의가 있으니까 평소보다 30분 일찍 깨워줘~”

  집을 나서기 전, 비가 오는지 혹은 미세먼지가 어떤지 파악

- 시장분석 도구

  정보 수집기를 통해서 평소 1시간 걸리는 뉴스 클리핑 작업을 5분 안에 끝냄.

- 자동응답 챗봇

  퇴근 후에 나에게 오는 고객단순문의사항에 대하여 자동응답 챗봇으로 응대.

 

// 00씨의 하루에서 파이썬은 어디에 있나요?

- AI, 빅데이터, 봇 시장에서 파이썬이 높은 점유율로 사용되고 있습니다.

- 이 책에서는 그 중에서 우리의 하루를 많이 도와줄 조금 똑똑한 챗봇을 만들어 볼 겁니다.

 

// 왜 파이썬일까요?

파이썬은 쉽기 때문에 빠르게 무언가를 만들어보는데 아주 적합합니다.

이는 프로그래밍 언어의 문법이나 구조적인 부분에 소비하는 시간을 줄이고, 문제 해결 시 핵심적인 부분에 집중할 수 있다는 거죠.

 

// 파이썬 책이 너무 많아요, 다른 도서와 어떤 차이가 있나요?

가장 큰 차이는 개념에서 실습으로 이어지는 구조이고, 보고 따라하기만 하면 누구나 챗봇을 완성할 수 있다는 점입니다.

이 책은 장황하고 이론적인 설명을 배제하고, 배우자 마자 바로바로 사용할 수 있는 실전 노하우를 집중적으로 다루었습니다.

그러므로 기존의 난해한 프로그래밍 입문서, 또는 기초가 생략된 프로젝트 도서보다 훨씬 더 실용적입니다.

 

// 개념에서 실습으로 이어지는 구성

개념인 문법적인 부분을 이해하고, 실습 부분인 연습문제를 풀 때 챗봇의 재료가 되는 코드를 접하게 됩니다.

이러한 과정을 통해 코딩에 대한 자신감을 얻고, 동시에 실전에서 즉시 사용할 수 있는 노하우를 빠르게 배울 수 있습니다.

 

// 이 책의 목표는?

독자가 빠른 기간 안에 업무 혹은 생활에 불편한 부분을 해결할 수 있게 만드는 것입니다.

 

1. 책을 보면서 달성하는 목표

쉽게 사용할 수 있는 프로그래밍 언어인 파이썬을 이용하여

자동으로 [ 출퇴근 소요시간 ] 을 알려주는 로봇을 만들어보자!

        [ 미세먼지     ]

        [ 날씨       ]

        [ 일출/일몰시간  ]

        [ 뉴스 헤드라인  ]

 

2. 책을 본 이후 달성하는 목표

내 맘대로 로봇을 조립해보자.

 

// 어떤 분들이 이 책을 접하면 좋을까요?

이 책은 프로그래밍을 전문적으로 공부한 적이 없는 분을 대상으로 합니다.

구체적으로는, 다음과 같은 분들에게 이 책을 권합니다.

- 업무 혹은 생활에 불편한 부분을 해결하고 싶으신 분

- 학원 또는 독학으로 코딩을 배웠으나 어디에 써먹어야 할 지 모르겠는 분

- 뉴스, 날씨, 미세먼지, 출근소요시간 등 단순작업을 매일 직접 반복하는 분

[Level_1]

1. 자료형의 종류와 만드는 방법은?

  1. 숫자

- 정수, 실수

  2. 불리언

- True, False

  3. 문자열

- '', "", '''''', """"""

  4. 리스트

- [] 대괄호로 만들기

  5. 딕셔너리

- {} 중괄호로 만들기

 

2. 변수는 자료를 상자에 넣는 겁니다.

- 이름 짓는 방법과 규칙

- 대입연산자에 대해

  

3. 자료를 읽는 방법은?

  1. 숫자와 불리언

- 변수명 호출

  2. 문자열과 리스트

- 인덱싱과 슬라이싱

  3. 딕셔너리와 다중구조

- 키값 알아보기

- 키값으로 밸류 조회하기

[예제문제]

인터넷의 자료를 내 컴퓨터로 가져오는 첫걸음(웹 자료형 JSON)

   JSON - requests 사용하지 않고,

   req = '''https://api.sunrise-sunset.org/json?lat=37&lng=126&date=today'''

   복붙하여 json.loads(req) 사용

  딕셔너리와 JSON은 사실 거의 같은 겁니다.

 

[도전문제]

일조량 정보를 제공하는 웹 페이지에서 아래 조건으로 정보를 조회하기

  딕셔너리.keys() 와 딕셔너리를 키값으로 조회하는 방법으로

  day_length 값을 가져오세요.

예제코드:

import json

https://api.sunrise-sunset.org/json?lat=37&lng=126&date=today

접속하여 내용을 복사 / 붙여넣기한다.

json_value = '''여기에 붙여넣기하세요'''

dictionary = json.loads(json_value)

dictionary

[Level_2]

1. 문자열

sunrise 코드를 포매팅으로 개선해보자

 

2. 제어와 반복문

  1. 코드 없이 알아보기

  2. 배우지 않고 그냥 읽어보기

  3. 공통되는 부분 = 들여쓰기와 콜론

  4. if 문의 구조

     - if, else, elif

  5. for 문의 구조

     - in 앞과 뒤에 넣는 것은?

  6. while 문의 구조

     - 조건과 반복 부분은 어디에?

  7. for 와 while 상호비교, 같은 결과이지만 다른 문법?

[예제문제]

네이버에서 뉴스 실시간으로 가져오기 첫걸음(웹 자료형 XML)

  우리에게 필요한건 단 하나(RSS)

  예제코드:

     import requests

     import xmltodict

     url = ''' 접속할 RSS주소를 입력 '''

     req = requests.get(url).text.encode(encoding="ISO-8859-1")

     diction = xmltodict.parse(req)

     diction['rss']['channel']['item'][0]['title']

  XML도 딕셔너리와 사실 거의 같은 겁니다.

 

[도전문제]

날씨에 대한 예제코드를 보고, 아래 조건대로 개선해보기

   - day 에는 오늘(0), 내일(1), 모레(2) 정보가 있습니다.

    이를 이용해 오늘의 정보만 출력되게끔 제어 / 반복문을 만들어주세요.

예제코드:

  import requests

  import xmltodict

  url = 'http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1117052000'

  req = requests.get(url).text

  diction = xmltodict.parse(req)

  diction['rss']['channel']['item']['description']['body']['data'][0]['wfKor']

 

[Level_3]

1. 함수

  1. 코드 없이 알아보기   

     - 어릴 적 배운 함수는...

     - 들어가는 것과 나오는 것

  2. 함수의 구조

     - 들여쓰기와 콜론

     - 함수를 만들 때 4 가지 경우가 있는데...

        - input X / output X

        - input X / output O

        - input O / output X

        - input O / output O

     - 기본값 설정하기

  3. 변수의 계급에 대하여

[예제문제1]

함수로 묶어보기

  기존의 sunrise 예제를 함수로 바꿔보세요.

 

[예제문제2]

복잡한 구조의 웹 자료를 손쉽게 다루기(bs4)

  XML의 태그만 알면 됩니다.

  기존의 RSS 뉴스와 날씨 예제를 bs4를 사용해 개선해보세요

 

[도전문제]

bs4로 미세먼지 정보를 손쉽게 다루는 함수를 만들어보세요

서초구를 함수의 input 기본값으로, return 값으로는 미세먼지 정보를 출력하세요

예제코드:

 import requests

 from bs4 import BeautifulSoup

 def dust_hunter(r_name = "서초구"):

base = 'http://openapi.airkorea.or.kr/openapi/services/rest'

service = '/ArpltnInforInqireSvc/getCtprvnMesureSidoLIst'

key = '?serviceKey=%2FvNQLW62FZQHdzvFTGDTGRNSyckmTODOYb98%2B0jVNVHk0iimUZV%2B5Gik%2FA7QkgsCKFs6l%2BBjWh2IfQyiQLp4TA%3D%3D'

rows = '&numOfRows=25'

page = '&pageNo=1'

sido = '&sidoName=서울'

freq = '&searchCondition=DAILY'

xml = base + service + key + rows + page + sido + freq

req = requests.get(xml).text

bs1 = BeautifulSoup(req, "html.parser")

 

'''

여기를 채워주세요

'''

return return_text

[Level_4]

1. 클래스, 메소드, 그리고 모듈

  1. 만들고 사용해보기

  2. import 해서 사용해보기

  3. 당신도 모르는 사이에...

  4. dir()

  5. 정석대로 공부하기 - document

  6. 실용적으로 공부하기 - stack overflow

  

2. selenium

   한빛출판사 새로나온 책의 태그정보 전부 가져오기

  

3. telegram_1 - 봇 준비하기

  1. 휴대폰 또는 컴퓨터에서 텔레그램 설치하기

  2. BotFather 에게 말을 걸어서 나의 봇을 만들기

  3. BotFather 로부터 HTTP API Key 받기

  4. 나의 봇을 활성화시키고 말 걸어보기

  5. 아무 일도 일어나지 않는 이유는?

 

4. telegram_2 - 파이썬으로 내 봇 제어하기

  1. 파이썬 텔레그램 라이브러리 설치하기

     - !pip install python-telegram-bot

  2. 내 봇에 접속하기

  3. 봇이 나에게 말 걸게 하기

  4. 이제는 무엇을 할 수 있을까요?

[예제문제]

RSS 뉴스, 날씨, 미세먼지를 텔레그램 알람 받기

 

[도전문제]

매일 아침 출근 소요시간을 시간대별로 알려주는 봇을 만들고자 합니다.

셀레늄으로 마우스를 올려놓는 hover 와 키를 보내는 send_keys를 사용하여

내 집에서 출근장소까지의 길찾기 검색을 수행할 수 있는 path_finder 함수를 만들어보세요.

예제코드:

     from urllib.request import urlopen

     from selenium import webdriver

     from bs4 import BeautifulSoup

     from selenium.webdriver.common.keys import Keys

     from selenium.webdriver.common.action_chains import ActionChains

     import time

 

     def path_finder(fr, to):

        path = 'C:/Users/one/Desktop/bot_overall/chromedriver.exe'

        driver = webdriver.Chrome(path)

        pagestr = "https://map.kakao.com/"

        driver.get(pagestr)

        '''

        이 부분을 채워주세요

        '''

[200% 활용하기]

1. interactive bot

  1. 질문에 대답하게 만들기

  2. 미세먼지 지역 이름 input 으로 받기

  

2. 관리하기 편하게 만들기

  1. 기능별로 묶어서 구성해보기

     - 기능들만 모았을 때 - Model

     - 기능을 제어하는 부분 - Controller

     - 사용자에게 보여질 부분 - View

     

3. 출근소요시간 데이터 시각화하기

  1. 정보 수집하기

     - 반복문과 time

     - pandas

  2. 눈으로 확인하기

     - matplotlib

 

'[일상봇 만들기] 나의 하루하루를 도와줄 친구!' 카테고리의 다른 글

level_03_part_2  (0) 2019.07.03
level_03_part_1  (0) 2019.07.02
level_02_part_2  (0) 2019.06.24
level_02_part_1  (0) 2019.06.20
level_00_들어가며  (0) 2019.06.20