기본 콘텐츠로 건너뛰기

추천 게시물

2025년 3차 청년 매입임대 신청 후기 ..예비번호 1번에서 마감

결론부터 말하자면 마감일까지 예비번호 1번인채로 끝났습니다. ㅠㅠ 28호수 모집에 최초발표시 예비 41번이었나? 42번이었나 그랬어요. 처음엔 아예 기대를 안했는데, 시간이 지날수록 점점 예비가 줄어들다가 결국 예비 6번까지 왔어요. 그러다 12월 말에 LH에서 아직 미계약된 거 4호 남았는데 주택개방 보러오라고 해서... 현지 실사까지 갔다왔는데..ㅎㅎ 신축이라 그럼지 집 좋더라고요 넓고... 민간대비 진짜 반값!! 부랴부랴 서류로 희망주택 호수도 제출하고... 근데 뭐 결국엔 안됐습니다 1번에서 끊긴걸 보니 제 앞번호 분들 중에 한명은 포기하신듯...?

파이썬으로 지번주소를 도로명주소로 변환하기, 코딩공부

    목차

업무를 하다보면 지번주소로 되어있는 옛날 자료들을 도로명주소로 바꿔야할 때가 있습니다.
인간적으로 30건 미만은 그냥 찾아서 하겠는데 그 이상으로 변환해야 할 자료가 많으면 좀 곤란해집니다.  

파이썬과 카카오 API를 활용해서 진행해보겠습니다. 

지번주소 정보가 담겨있는 엑셀 파일을 열어서 거기에 있는 주소들을 읽어오고
각 주소를 카카오API를 이용해서 웹에서 도로명 주소, 위도, 경도 정보를 찾아
새로운 엑셀 파일에 저장합니다.


>

0. 파이썬 설치 및 비주얼 스튜디오 설치

이 부분은 '파이썬 설치, 비주얼 스튜디오 설치'로 웹 검색하시면 자세하게 설명된 글 많습니다. 참고하셔서 설치해주세요

1. 카카오 API 발급

카카오 디벨로퍼스 사이트에 들어가서 로그인하고 상단 메뉴에서 내 애플리케이션을 클릭합니다.
서비스 이용 동의 페이지가 나타나는 경우 필수 항목에 동의하고, 개발자 이름을 입력한 다음 회원가입 버튼을 클릭해 다음 단계로 넘어갑니다. 
전체 애플리케이션 페이지가 나타나면, 애플리케이션 추가하기를 클릭합니다.
내용 대충 입력하시고 넘어갑니다. 

준비는 끝났습니다. 


2. 필요한 라이브러리 설치합니다.


import requests
import openpyxl
import time

*파이썬을 방금 설치하셨다면
cmd 열어서 pip install requests openpyxl 입력 하시면 됩니다.

requests: 웹에서 데이터를 가져오는 데 사용하는 라이브러리입니다.
openpyxl: 엑셀 파일을 다루는 데 사용하는 라이브러리입니다.
time: 잠시 기다리기 위해 사용합니다 (API 호출 속도 조절)

3. 카카오 API 인증을 위한 정보를 입력합니다.


# API 정보 설정
url = "https://dapi.kakao.com/v2/local/search/address.json"
REST_API_KEY = "카카오 API를 입력하세요"
headers = {"Authorization": f"KakaoAK {REST_API_KEY}"}

'카카오 API를 입력하세요' 부분에는 방금 발급받은 REST_API키를 붙여넣습니다.


4. 엑셀파일을 열고, 데이터를 기록할 파일을 생성합니다.


# 입력 및 출력 파일 설정
input_wb = openpyxl.load_workbook("address.xlsx")
input_ws = input_wb.worksheets[0]  # 첫 번째 시트 선택

output_wb = openpyxl.Workbook()
output_ws = output_wb.active
output_ws.append(["원본 주소", "도로명 주소", "지번 주소", "위도", "경도"])

input_wb = address.xlsx 엑셀파일을 읽어옵니다.
input_ws = 불러온 엑셀파일의 첫번째 시트를 읽어옵니다.

output_wb = 엑셀파일을 만들고
output_ws = 첫번째 시트에
output_ws.append = 헤더(제목)을 첫 번째 행으로 추가합니다.

입력한 원본주소, 도로명, 지번, 위도, 경도 4개만 표시하겠습니다.

5. API를 통해 주소를 검색하고 결과를 저장합니다.


# 주소 검색 및 결과 저장
for row in input_ws.iter_rows(min_row=2, max_col=1):  # 첫 번째 열만 읽음
    addr = str(row[0].value)  # 원본 주소 가져오기
    params = {"query": addr}
   
    try:
        resp = requests.get(url, params=params, headers=headers)
        resp.raise_for_status()  # 요청 성공 여부 확인
        data = resp.json()
       
        if data.get("documents"):  # 검색 결과가 있을 경우
            doc = data["documents"][0]
            road_address = doc.get('road_address', {}).get('address_name')
            address = doc.get('address', {}).get('address_name')
            longitude = doc.get('x')
            latitude = doc.get('y')
        else:
            road_address = address = longitude = latitude = None
       
        # 결과 저장
        output_ws.append([addr, road_address, address, latitude, longitude])
   
    except requests.exceptions.RequestException as e:
        print(f"Error fetching data for {addr}: {e}")
        output_ws.append([addr, None, None, None, None])
   
    time.sleep(0.5)  # 요청 간 간격을 두어 API 제한 방지

# 결과 저장 및 파일 닫기
output_wb.save("result_address.xlsx")
input_wb.close()
output_wb.close()

  • 주소 읽기: 엑셀 파일의 첫 번째 행부터 주소를 읽어옵니다.
  • 정보 검색: 읽어온 주소로 웹에서 정보를 검색합니다.
  • 정보 저장: 검색한 정보를 새 엑셀 파일에 저장합니다. 
  • 에러 처리: 주소를 찾지 못하거나 오류가 발생하면, None 값을 기록합니다.
  • time.sleep(0.5): 요청 사이에 잠시 텀을 둬서 API 조회시 오류를 방지합니다.



  • 6. 전체코드입니다.

    import requests
    import openpyxl
    import time
     
    # API 정보 설정
    url = "https://dapi.kakao.com/v2/local/search/address.json"
    REST_API_KEY = "API_key"
    headers = {"Authorization": f"KakaoAK {REST_API_KEY}"}

    # 입력 및 출력 파일 설정
    input_wb = openpyxl.load_workbook("address.xlsx")
    input_ws = input_wb.worksheets[0]  # 첫 번째 시트 선택

    output_wb = openpyxl.Workbook()
    output_ws = output_wb.active
    output_ws.append(["원본 주소", "도로명 주소", "지번 주소", "위도", "경도"])

    # 주소 검색 및 결과 저장
    for row in input_ws.iter_rows(min_row=2, max_col=1):  # 첫 번째 열만 읽음
        addr = str(row[0].value)  # 원본 주소 가져오기
        params = {"query": addr}
       
        try:
            resp = requests.get(url, params=params, headers=headers)
            resp.raise_for_status()  # 요청 성공 여부 확인
            data = resp.json()
           
            if data.get("documents"):  # 검색 결과가 있을 경우
                doc = data["documents"][0]
                road_address = doc.get('road_address', {}).get('address_name')
                address = doc.get('address', {}).get('address_name')
                longitude = doc.get('x')
                latitude = doc.get('y')
            else:
                road_address = address = longitude = latitude = None
           
            # 결과 저장
            output_ws.append([addr, road_address, address, latitude, longitude])
       
        except requests.exceptions.RequestException as e:
            print(f"Error fetching data for {addr}: {e}")
            output_ws.append([addr, None, None, None, None])
       
        time.sleep(0.5)  # 요청 간 간격을 두어 API 제한 방지

    # 결과 저장 및 파일 닫기
    output_wb.save("result_address.xlsx")
    input_wb.close()
    output_wb.close()

    댓글

    이 글도 관심 있으실 것 같아요!

    카드형 온누리상품권 충전방법 및 사용후기, 온누리상품권 삼성페이로 사용

    1. 온누리상품권 개요 온누리 상품권은 전통시장 활성화를 위해 정부에서 발행하는 상품권 으로 보통 5~10% 할인된 가격으로 구매가 가능하며, 일반적으로 전통시장에서 사용할 수 있다고 알려져 있습니다. 그런데, 의외로 전통시장 외에도 많은 곳에서 온누리상품권을 받는다는 사실 알고 계셨나요? 저도 그동안 전통시장에서만 사용할 수 있다고 잘못 알고 있어서, 명절이나 행사 때 지류형 온누리 상품권을 줄 때마다 처치곤란이었습니다. 2. 온누리상품권 종류와 특징 요약 지류상품권 특징 : 종이 형태의 상품권 장점 : 일반 상품권과 동일하게 간편하게 사용 환불 : 사용 금액의 60% 이상 사용 시 거스름돈 환불 가능 주의점 : 사용 시 현금영수증 발급요청 해야함 모바일상품권 특징 : 온누리페이 앱을 통해 QR결재 *제로페이와 동일한 형식 장점 : 상품권을 들고 다니지 않아도 편리함 장점 : 자동으로 현금영수증 발급 환불 : 60% 이상 사용 시 환불 가능(할인 구매액 제외) 카드형상품권 특징 : 온누리상품권 앱에서 충전 후 신용카드나 체크카드에 등록하여 사용 장점 : 등록 후 일반카드처럼 사용하면 끝, 편리함 장점 : 카드 사용실적 반영이 가능(사용카드별 상이할 수 있음) 단점 : 가맹점주(사장님) 입장에서 카드수수료가 발생할 수 있음.  온누리상품권은 지류, 모바일, 카드형 세가지로 구분되며, 각 방식에 따라 가맹점 차이가 있습니다. 동일한 가게인데 지류형은 가능하고, 카드형은 불가능한 경우가 실제로 많이 있습니다. 그래서 방문하기전에 온누리상품권 가맹점포 찾기 (클릭시 이동) 에 들어가셔서 조회해보시는 걸 추천드립니다. 3. 카드형 온누리상품권을 추천하는 이유 저는 세가지 종류의 온누리상품권을 모두 사용해봤는데요. 결론적으로 지류형 / 카드형 사용을 추천합니다. 지류형은 가입된 점포가 많고, 사용이 직관적입니다. 다만, 현금영수증 발급을 따로 요청해야하고, 잔돈이 생기는 등 귀찮은 점이 많습니다. 스마트기기에 익숙하지 않은 어르신들에게 추천합니다. 모바일형은...

    공무원 일반용역 수의계약 용역 알아보기 - 3

    1. 수의계약 업무흐름도 처음으로 돌아가서, 업무 담당자가 ' 무인민원발급기 유지보수 용역' 을 계약하려면 구체적으로 어떤 과정을 거쳐 계약을 체결하게 될까요? 지자체, 공공기관 등 기관별로 세세한 내용은 다를 수 있으나  간단히 표와 글로 정리하면 아래와 같습니다. 수의계약 흐름도 사업계획 수립 사전절차 이행  ex) 원가심사 의뢰 등    사전절차  결과 반영 //  설계서 , 가격조사 등 실시,  계약의뢰 ( 발주부서 →계약부서 ) 계약상대자와 협상을 통하여 계약금약 결정 - 수의시담 (계약부서 ) 계약체결 (계약부서 )  사업수행관리 준공 및 정산 그럼, 각 단계별로 천천히 알아보도록 하겠습니다. 2. 사업계획 수립 먼저, 유지보수 용역 발주와 관련해 사업(용역) 계획을 수립해야 합니다. 사업(용역) 계획의 서식은 기관마다 다르지만 보통은 어느 정도 규격화 되어있습니다. 기본틀 안에서 담당 팀장님, 과장님 스타일에 따라 내용이 추가되거나 빠지곤 합니다.  용역건별로 계획을 세우는 경우도 있고, 사업추진에 여러 가지 해야 할 게 많다면 연초에 XX사업 종합계획 형식으로 하는 경우도 있습니다. 아래는 무인민원발급기 유지보수 용역계약 계획의 간단한 예시입니다. (계약금액 3,000만 원, 수의계약 대상이 장애인기업인 경우) 제목 : 2024년 무인민원발급기 유지보수 용역 수의계약 추진계획 ☐ 유지보수 용역개요   ဝ 용 역 명  : 2024년 무인빈원발급기 유지보수 용역   ဝ 용역내용 : 관내 무인민원발급기 유지보수 및 정기점검   ဝ 용...

    공무원 일반용역 수의계약 용역 알아보기 - 4

    안녕하세요. 지난 글 에서는 일반용역( 무인민원발급기 유지보수 용역 )의 수의계약 체결을 위해 사업담당자가  사업계획 수립, 계약 사전절차 이행 그리고 계약부서로 계약의뢰 하는 과정에 대해 알아보았습니다. 이제 본격적으로 가격협상(수의시담) 및 최종 계약 체결, 사업수행관리, 그리고 최종적으로 준공 및 정산 단계에 대해  살펴보고,  이 과정들을 통해 일반용역 수의계약이 어떻게 흘러가는지, 최종적으로 어떤 방식으로 정산이 이루어지는지 대해 자세히 다뤄보겠습니다. 가격협상(수의시담) 및 계약체결 사업부서에서 계약부서로 계약에 필요한 구비서류와 함께 공문을 시행했다면, 축하합니다. '무인민원발급기 유지보수 용역'  수의계약 체결을 위해 사업담당자가 해야 할 부분은 거의 끝났습니다. 계약의뢰 공문 시행 다음은 계약부서 계약담당자가 사업부서에서 보내온 서류를 다시 한 번 검토하고, 실제로 계약업체와 수의계약을 체결하는 건데요. 이 과정에서 계약담당자는 계약업체와 가격협상을 할 수 있습니다. 가격협상은 앞서 진행했던 계약심사에서 산출내역서 등 계약금액 산출 근거를 검토한 것과는 별개의 과정으로, 명확한 법적 기준은 없지만 보통 5% ~ 10% 내외로 가격협상을 하곤 합니다. 참고로 가격협상은 수의시담 이라는 용어를 쓰기도 하는데요. 좀 생소한 단어죠? 한자로는  수의시담(隨意示談 ) 이라고 하는데요.  한자어 풀이를 찾아보니  자기 마음대로 한다는 뜻의 ‘수의’라는 한자어와 화해와 해결이라는 뜻의 ‘시담’이라는 한자어를 합친 것이라고 합니다. 사실 몇 년 전에 행정규칙 용어 정비 과정에서 지금은 공식적으로 수의시담이라는 용어 대신 가격협상이라는 용어로 교체된 걸로 알고 있습니다만, 아직도 현장에서는 많이 쓰는 용어라서, 알아두시면 좋을...