Level 01 |
02_자료를 알아보는 방법은? |
1_변수명 호출
문법 |
변수명 = 자료 예) 변수명 또는 print(변수명) |
변수명 = 자료
예)
변수명
또는
print(변수명)
여러분 주변의 누군가가 내 이름을 불러주면 나에게 의미가 생겨나는 것과 같아요.
숫자, 논리, 문자열, 리스트, 딕셔너리 등등 무엇이건 간에, 변수명을 호출하게 되면 해당 변수에 저장된 값을 확인할 수 있습니다.
프린터가 종이에 글자를 인쇄해 주는 것과 같이, print()는 변수 안에 들어있는 값을 문자열(글자)로 바꿔서 화면에 표시해주는 기능입니다.
예제 01 – 여러분의 나이, 이름 정보가 담긴 딕셔너리 형태의 mydata 변수를 만들어, 잘 만들어졌는지 변수명 호출로 확인해보세요
mydata = {'나이' : 30, '이름' : 'Howard'}
mydata
print(mydata)
설명 01
SHAPE \* MERGEFORMAT
|
2_순서가 있는 문자열과 리스트
예1)
특정 위치의 값을 하나 조회하는 인덱싱
리스트[찾고자 하는 위치 순번]
문자열[찾고자 하는 위치 순번]
예2)
a 부터 b 까지 특정 범위의 값을 조회하는 슬라이싱
리스트[a : b]
문자열[a : b]
우리는 순서를 셀 때 1 번째부터 세지만, 파이썬은 0 번째부터 셉니다.
방금 표현한 ‘번째’ 라는 개념을 우리는 순서라고 부르고, 파이썬에서는 인덱스라고 합니다.
인덱스로 값을 조회하는 방법은 다음과 같습니다.
# 이 예제는 아래 두 코드로 문자열과 리스트를 만들어 진행합니다.
# 문자열과 리스트를 같은 방법으로 다루어 같은 결과가 나오는 것을 확인합니다.
# 문자열도 리스트와 같이, 글자 하나 하나가 순서를 가지고 모여있는 일종의 ‘묶음’ 입니다.
예제 02
[변수 만들기 복습]
Hello 라는 문자열 msg_str 를 만드세요.
‘H’, ’e’, ’l’, ’l’, ’o’ 라는 글자들로 이루어진 리스트 msg_list 를 만드세요.
msg_str = 'Hello'
msg_list= ['H', 'e', 'l', 'l', 'o']
[인덱싱]
msg_str 와 msg_list 의 0번째와 1번째 값을 조회해보세요.
msg_str[0]
msg_list[0]
msg_str[1]
msg_list[1]
0 번째가(0번 인덱스) 자료의 가장 처음에 들어있는 값입니다.
1 번째는 0 다음이니까 e 가 나오겠죠? 2 번째는 해 보지 않아도 l 이라는 느낌이 올 겁니다.
위 예시에서는 Hello 라는 아주 짧은 단어의 경우를 보았고, 이 때에는 마지막의 값을 우리가 손가락으로 세어서 바로 찾아낼 수 있었습니다. 하지만 문장 정도만 되어도 우리는 마지막의 인덱스를 단번에 구하기 어렵습니다. 이럴 때에는 어떻게 할 수 있을까요?
msg_str[-1]
msg_list[-1]
msg_str[-2]
msg_list[-2]
마이너스 첫번째는 맨 마지막입니다. 마이너스는 기존 인덱스와는 순서가 반대로 되어있습니다.
[슬라이싱]
데이터의 처음부터 4번째 까지 묶어서 조회 해보세요.
msg_str[0:4]
msg_list[0:4]
순서가 있는 묶음에 대해 다루고 있으니까, 묶음으로 선택해서 원하는 부분만 가져오는 것도 할 수 있어요.
콜롱 : 을 기준으로 왼쪽이 ‘부터’ 에 해당하고, 오른쪽이 ‘까지’ 입니다.
슬라이싱에서의 숫자는 인덱스 순번과 조금 다릅니다. (커서가 깜박이는 지점이 슬라이싱의 0)
인덱스 0은 가장 처음 값을 의미하고, 슬라이싱 0 은 커서가 갈 수 있는 가장 처음 위치입니다.
SHAPE \* MERGEFORMAT
|
3_다른 것(?)이 중요한 딕셔너리
예1)
키로 밸류를 조회하는 방법
딕셔너리[키]
딕셔너리.get(키)
예2)
키, 밸류만 따로 알아보기
딕셔너리.keys()
딕셔너리.values()
딕셔너리는 키와 밸류가 하나의 쌍으로 묶여있는 형태입니다.
문자열과 리스트에서는 대괄호 안에 순서에 해당되는 숫자(인덱스)를 넣어서 조회했었죠?
딕셔너리에서는 대괄호 안에 인덱스가 아닌 키를 넣어서 조회 합니다.
키, 밸류만 따로 알아보는 방법을 알아야 하는 이유는 :
지금은 딕셔너리가 단순하지만, 앞으로 여러분들이 키 와 밸류를 한 눈에 파악하기 어려울 만큼 복잡한 구조를 만나더라도 손쉽게 다룰 수 있어야 하기 때문입니다.
예제 03
[단순해 보이지 않는 딕셔너리를 단순하게 다루기]
이번 단원에서는 오늘 서울의 일출과 일몰시간, 낮의 길이 등을 다뤄 볼 거 에요.
데이터를 파이썬으로 수집해오는 방법은 다음 챕터에서 알아보고, 지금은 일단 가져온 이후에 데이터를 다루는 것을 해보겠습니다.
[준비하기]
웹을 통한 데이터 수집의 첫 단계로, 이번에는 JSON 웹 자료형을 다룹니다.
생소한 이름이지만, 우리가 배운 딕셔너리와 동일하게 생겼고, 동일하게 사용하면 됩니다.
Import json
데이터변수명 = '''
웹에서 복사해 가져온 데이터
'''
딕셔너리변수명 = Json.loads(데이터변수명)
[실행방법]
1. 아래 주소 접속
https://api.sunrise-sunset.org/json?lat=37&lng=126&date=today
2. 아래와 같은 페이지가 나옵니다.
페이지가 표기되지 않는 경우, 인터넷 연결을 확인하세요.
3. 페이지의 내용을 드래그하여 복사합니다.
4. 복사한 값을 블록주석(문자열) 로 감싸서 req 변수에 넣고, 이를 사용합니다.
5. 이를 코드로 구현하면 아래와 같습니다.
[작동원리]
import json # 파이썬에서 json을 사용하기 위한 도구를 불러옵니다.(도구 이름이 json)
json.loads(req) # json.loads(req) 는 json 형태인 req를 딕셔너리 자료형으로 바꿔줍니다.
[더 알아보기]
예제_01
(위에서 가져온 json을 그대로 사용합니다.)
이 딕셔너리의 키 값을 조회하세요.
import json
req = '''
여기에 복사한 내용을 붙여넣기 하세요
'''
dictionary = json.loads(req)
dictionary
설명_01
SHAPE \* MERGEFORMAT
|
dictionary.keys() # 사용하면 이 딕셔너리에서 조회 가능한 키 값 목록이 나옵니다.
예제_02 (예제_01 을 그대로 사용합니다.)
‘day_length’ 키와 묶여있는 값은 오늘 서울 낮의 길이 입니다.
이 값을 출력해보세요.
dictionary['results']['day_length']
dictionary.keys() 사용하면 이 dictionary에서 조회 가능한 키 값 목록인
[‘results’, ‘status’] 가 나옵니다.
‘day_length’ 는 ‘results’ 키로 조회 한 값인 딕셔너리의 키 입니다.
(딕셔너리 안에 딕셔너리가 들어있는 구조입니다.)
따라서, dictionary[‘results’] 로 첫 번째 딕셔너리를 조회하고, results 에 묶여있는 두 번째 딕셔너리는 dictionary[‘results’].keys() 로 키를 알아볼 수 있습니다.
이후, dictionary[‘results’][‘day_length’] 로 오늘 서울 낮의 길이를 알 수 있습니다.
도전_01 (예제_02 을 그대로 사용합니다.)
dictionary[‘results’][‘day_length’] 에 들어있는 정보는 문자열 입니다.
문자열은 슬라이싱으로 잘라낼 수 있다고 했는데요,
슬라이싱을 사용하여 시:분:초 로 되어있는 정보를 앞의 두 글자만 가져와 출력해보세요.
설명_02
SHAPE \* MERGEFORMAT
|
dictionary['results']['day_length'] # 는 문자열이므로, 슬라이싱 문법을 사용할 수 있습니다.
first_two = dictionary['results']['day_length'][0:2]
print(first_two)
__이번 단원에서 JSON, 딕셔너리의 구조에 대하여__
폴더와 트리 구조에 대한 내용
SHAPE \* MERGEFORMAT
|
__키 밸류 구조에 대해 한 걸음 더 나아가기__
JSON은 딕셔너리가 아니지만, 딕셔너리와 같은 구조로 되어있습니다.
(문자열로 되어있다는 것만 제외하면 딕셔너리랑 완전히 똑같이 생겼죠!)
여기에서 중요한 건, '딕셔너리가 아니지만 딕셔너리와 같은 구조로 되어있다' 라는 것입니다.
딕셔너리와 같이 폴더와 트리 구조로 되어있다면, 우리는 딕셔너리와 같이 다룰 수 있다는 것이죠.
아래는 XML 이라고 하는 자료형 입니다.
[예제문제]
날씨 정보가 담긴 XML 자료형이 있습니다.
딕셔너리를 '키' 로 조회했고, 리스트를 '인덱스' 로 조회했었죠?
네이버에서 뉴스 실시간으로 가져오기 첫걸음(웹 자료형 XML)
준비하기 - 1) 네이버에서 키워드를 하나 골라서, 검색합니다.
2) 검색 결과가 나오면, 뉴스 탭으로 갑니다.
3) 해당 키워드와 관련있는 뉴스가 나온 것을 확인합니다.
4) 오른쪽 중간에 '뉴스검색 RSS 보기' 를 클릭합니다.
5) 주소창에 있는 주소를 복사합니다. RSS주소라고 하는데, 이를 문자열로 사용할 것입니다.
우리에게 필요한건 단 하나(RSS)
예제코드:
import requests
import xmltodict
url = ''' 접속할 RSS주소를 입력 '''
req = requests.get(url).text.encode(encoding="ISO-8859-1")
diction = xmltodict.parse(req)
# diction 부터 시작하여 뉴스 제목을 조회합니다.
diction['rss']['channel']['item'][0]['title']
XML도 딕셔너리와 사실 거의 같은 겁니다.
[도전문제]
날씨 정보가 담긴 XML 자료형이 있습니다.
딕셔너리를 '키' 로 조회했고, 리스트를 '인덱스' 로 조회했었죠?
이를 이용하여 최종적으로 ['wfKor'] 키 안에 들어있는 날씨 정보를 조회해 보세요.
예제코드:
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 부터 시작하여 날씨 정보를 조회합니다.
diction['rss']['channel']['item']['description']['body']['data'][0]['wfKor']
Level 01 |
03_이번 장에서 사용했던 . 은 무엇인가요? |
이번 장에서 딕셔너리를 다루면서 .keys() 과 .values() 등을 보았습니다.
그리고 requests 뒤에는 .get() 이 있었고, xmltodict 뒤에는 .parse() 도 사용했죠.
이를 문법을 통해 알아보면 공통적으로 이렇게 생겼습니다.
. 을 기준으로 왼쪽이 '대상' 이고 오른쪽이 '방법' 입니다.
예)
대상.방법()
dictionary.keys() # dictionary 라는 변수를 대상으로 keys() 라는 방법을 사용합니다.
requests.get() # requests 라는 변수를 대상으로 get() 이라는 방법을 사용합니다.
xmltodict.parse() # xmltodict 라는 변수를 대상으로 parse() 라는 방법을 사용합니다.
keys() 는 딕셔너리의 key 들을 뽑아내주는 '방법'을 의미하는 것이었습니다.
dictionary.keys() 는 dictionary 라는 변수를 대상으로 keys() 라는 방법을 사용한다는 것입니다.
이제, 이 '방법'을 일단 우리는 '내장함수' 라는 표현을 사용할 것입니다.
딕셔너리와 리스트, 문자열 등등등...
지금까지 다루었던 많은 부분들 각각 어떠한 내장함수들이 있는지 알아보는 방법을 알려드릴게요.
예)
mydict = {'a' : 10, 'b' : 20, 'c' : 30}
딕셔너리인 변수 뒤에 . 을 입력하고 나서, 키보드 탭(tab) 을 눌러보세요
[스크린 샷]
[스크린 샷]
딕셔너리 내부에 이미 만들어져 있는 내장함수의 목록이 화면에 보이게 됩니다.
그 안에는 우리가 사용해 본 keys, values, get 이 들어있는 것을 확인 할 수 있죠.
이 내장함수들은 특징이 있는데, 딕셔너리를 기준으로 설명해 볼까요
1) 같은 딕셔너리 끼리는 내장함수들이 동일합니다. (딕셔너리가 아닌 것은 내장함수가 다르게 들어있습니다.)
2) 파이썬을 만든 분들께서 딕셔너리를 만들 때 '사람들이 많이 쓸 법한 방법들' 을 내장함수로 넣어 둔 것입니다.
이 '내장함수' 라는 표현은,
마지막 단계에서 문법 용어를 따로 소개하여 더 명확한 개념을 안내하겠습니다.
'[일상봇 만들기] 나의 하루하루를 도와줄 친구!' 카테고리의 다른 글
Level_01_part_0 우리 작은 친구와 만나보기 -on going (0) | 2019.08.06 |
---|---|
level_01_part_1 (0) | 2019.08.02 |
[서버] 컴퓨터를 계속 켜 두어야 하나요? [to-do 있음] (1) | 2019.08.01 |
200%_part_02 (0) | 2019.08.01 |
200%_part_01 (0) | 2019.08.01 |