오음

python) enumerate모듈, def 함수 만들기 본문

데이터 엔지니어링/파이썬

python) enumerate모듈, def 함수 만들기

오준돌 2023. 3. 7. 17:48

enumerate 함수

  • 순서가 있는 자료형(list,set,tuple,dict,str)을 입력받아 인덱스 값과 함께 리턴
  • for문으로 반복사용
for x in enumerate(['a','b','c']): # 값이 하나일 때 튜플로 생성
    print(x)

(0, 'a') (1, 'b') (2, 'c')

 

def 함수 정의하기

# f(x) = ax + b
# f(x) = 5x + 3
def func_a(x,a=5,b=3): # 기본값을 뒤에 셋팅
    return a*x + b
    
# listcomprehesion
[func_a(5,x,3) for x in range(1,11)]
[8, 13, 18, 23, 28, 33, 38, 43, 48, 53]

 

활용

2023.03.06 - [데이터 엔지니어링/파이썬] - python) Crawling 활용하기, 데이터 저장하기(pickle)

 

python) Crawling 활용하기, 데이터 저장하기(pickle)

이전에 활용했던 서울지역 스타벅스 매장정보를 전국으로 늘려 크롤링 하기 payload = {"in_biz_cds":"0", "in_scodes":"0", "ins_lat":"37.4866133", "ins_lng":"127.0205992", "search_text":"", "p_sido_cd":"01", "p_gugun_cd":"", "isErr

oh-um.tistory.com

  • 저장해놓은 스타벅스 데이터로 함수 활용하기

저장한 데이터를 pickle함수로 불러오기

import pickle
with open("path",'rb') as f:
    star = pickle.load(f)
  • mission1 : 지역명 검색하면 해당지역의 매장보여주는 함수
def search_store(store_gu):
    total = []
    for data in star:
        if data['gugun_name'] == store_gu and data['gugun_name'] != None:
            total.append(data['s_name']) 
    return total

데이터가 입력받은 값과 같은 지역이거나 None값이 아닌 데이터들의 매장명을 빈 리스트에 append해준다.

search_store("강남구")
['역삼아레나빌딩', '논현역사거리', '신사역성일빌딩', '국기원사거리', '대치재경빌딩R', '봉은사역', '압구정윤성빌딩', '코엑스별마당', '삼성역섬유센터R', '압구정R', '수서역R', '양재강남빌딩R', '선릉동신빌딩R', '봉은사로선정릉', '강남오거리', '스타필드코엑스몰R', '강남구청정문', '도곡공원', '강남R', '대치은마사거리', '청담영동대로', '압구정', '신사가로수', '청담스타R', '강남우성',

...

'삼성역', '테헤란로아남타워', '강남논현', '삼성동', '역삼이마트']
 
  • mission2 : 해당지역에서 주차가 가능한 매장정보 찾는 함수 생성
# 데이터 가져오기
url_parking = "https://www.starbucks.co.kr/store/getStoreView.do"
import tqdm
starbucks = []
for i in tqdm.tqdm(star):
    r =  requests.post(url_parking,data={"in_biz_cd" : f"{i['s_biz_code']}"})
    starbucks += r.json()['view']
    
# dd = []
# for i in aaa.json()['view']:
#     if '주차가능' in i['park_info']:
#         dd.append(i['park_info'])
# print(dd)  

def search_store(store_gu,park='주차가능'):
    total = []
    for data in starbucks:
        if data['gugun_name'] == store_gu and data['gugun_name'] != None :
            if '주차가능' in data['park_info']:  # '주차가능'값만 추출
                total.append(f"{data['s_name']} : {data['park_info']}")
    return total

parking정보는 기존에 데이터를 가져오는 주소url에 없기 때문에 parking정보가 있는 페이지와 비교해서 겹치는 값(s_biz_code)를 통해 크롤링한다.

 

search_store함수의 park값은 주차가능으로 기본값을 맞추고 앞썬 함수내용에서 'park_info'값만 추가하여 출력한다.

 

search_store('서초구')

['방배로 :  1.주차가능 2.주차장위치 - 건물 지하주차장 (지하 3~4층 이용) 3.주차가능대수 - 80대 이상 4.주차조건 - 구매시 30분 추가 무료 (이후 10분당 천원) 5.주차요금정산방법 - 매장 파트너에게 요청',
 '센트럴F1 : 1.주차가능 2.주차장위치-백화점주차장,파미에주차장3.주차가능대수-100대이상4.주차조건 -조건부무료 (영수증합산5만원이상 1시간무료 (백화점주차장)영수증합산3만원이상1시간무료(파미에주차장)5.주차요금정산방법 -출차시 영수증 제시',
 '청계산입구역 : 1. 주차가능  2. 주차장 위치- 빌딩 지하  3. 주차가능대수- 20대 이상  4. 주차조건- 조건부 무료(구매 품목당 1시간 무료 / 차량 1대당 최대 2시간)  5. 주차요금정산방법- 파트너에게 요청',
 '파미에파크R : 1.주차가능 2.주차장 위치 : 매장 후면 파미에스테이션 주차장 3. 주차가능대수 -5대이상 4. 주차조건 -센트럴 몰(백화점 제외) 합산 구매금액 5만원 이상 60분 무료(조건미충족시 기본요금 10분 1000원) 5. 주차요금 정산 방법 : 출차시 영수증 제시',
 '서초파라곤 : 1. 주차가능  2. 주차장위치-건물내 지하  3. 주차가능대수-제한 없음(장애인2대 포함) 4. 조건부 무료(영수증 1만원 이상 주차권 50분 무료/ 이후 10분당 1000원) 건물 내 식당 및 상가 중복합산불가 5. 주차요금정산방법-파트너문의',
 '반포역 : 1.주차가능   2. 주차장위치-매장 전면   3. 주차가능대수 50대이상    4.주차조건 -조건부 무료(영수증 지참시 1시간 무료)  5. 주차요금 정산방법 -출차 시 영수증 제시',
 '남부터미널 :  1. 주차가능 2. 주차장위치 - 건물 지하 주차장  이용(지하 1층) 3.주차가능대수 - 20대 이상 4.주차조건 - 1만원 이상 구매 시 1시간 무료주차권 지급 (스타벅스카드 충전금액 미포함/ 당일 영수증에 한함) 5.주차정산방법-파트너에게 요청',
 '뉴코아강남 : 1.주차가능 2.주차장 위치 -킴스클럽 3.주차가능대수- 20대이상 4.주차조건- 당일영수증 2시간무료 5.주차요금정산방법-당일영수증을 매장 파트너에게 제시 후 차량 등록 필요.',
 '하이브랜드 : 1. 주차가능  2. 주차장 위치- 빌딩 지하 3층 및 타워주차장  3. 주차가능대수- 500대 이상  4. 주차조건- 조건부 무료(1시간무료, 이후 10분당 1천원)  5. 주차요금정산방법- 파트너에게 요청',
 '영동2교 : 1. 주차가능 2. 주차장 위치-매장 전면 3. 주차가능대수-3대 4.주차조건- 유료 (평일 30분 3,000원), 건물 주차관리요원에게 문의',
 '강남GT타워 : 1.주차가능   2.주차장위치-지하주차장  3.주차가능대수-100대이상   4.주차조건-1시간 무료   5.주차정산방법-파트너에게 요청 ',
 '강남에비뉴 : 1. 주차가능  2. 주차장위치-입점건물 지하 3층~7층   3.주차가능대수- 100대이상  4. 주차조건- 유료 10분당 1천원 5. 주차요금정산-출차시 직접 카드결제( 현금불가)',
 '반포자이 : 주차가능(반포자이플라자상가 지하2~3층,2시간무료)']