출처: https://astrocosmos.tistory.com/202 [ASTROCOSMOS:티스토리] 하나둘셋넷 :: 하나둘셋넷
728x90

데이터 수집] 한국은행 Open API 서비스

 

OpenAPI_Guide_Python.pdf
0.48MB

 

 

import requests
import xml.etree.ElementTree as ET
import xml.dom.minidom

# OpenAPI URL 정의
url = "http://ecos.bok.or.kr/api/StatisticItemList/sample/xml/kr/1/1/901Y009/"

# API 호출
response = requests.get(url)

# HTTP 요청 성공 시
if response.status_code == 200:
    try:
        # API 리턴값을 가져옴
        contents = response.text
        ecosRoot = ET.fromstring(contents)

        # 호출 결과에 오류가 있는지 확인
        if ecosRoot[0].text[:4] in ("INFO", "ERRO"):
            print(ecosRoot[0].text + " : " + ecosRoot[1].text)
        else:
            # 결과값을 예쁘게 출력
            dom = xml.dom.minidom.parseString(contents)
            pretty_xml_as_string = dom.toprettyxml(indent=" ")
            print(pretty_xml_as_string)
    except Exception as e:
        print(str(e))
# 예외 처리
else:
    print("API 요청 실패: 상태 코드", response.status_code)

 

728x90
728x90

KT Aivle School 에이블스쿨 기자단] 11.27(월)~ 12.03(일) "제안전략 수립, 제안서 작성"

내용

(1) 7차 미니프로젝트 대면 예약

(2) 제안전략 수립(~수요일)

(3) 제안서 작성(~금요일)

(4) 월간 데이콘 - DACON 데이터 분석 아이디어 경진대회 공모전

 

7차 미니프로젝트 대면 예약

 

 

 그동안 2번만 미니 프로젝트에 대면으로 참석하기도 했고, 이번 프로젝트는 대면을 희망하는 인원들이 꽤 있어서 수요일로 강의실 예약을 신청했다. 수요일에는 회식 또한 진행할 예정이라 좋은 추억을 만들지 않을까 싶다.

 당일로 왕복하려면 새벽에 일찍 일어나야 하지만, 미래의 내가 알아서 잘하겠지란 생각하고 있다.

 

 

제안 전략 수립(~수요일)

 

세분화

 

ㆍ 고객가치를 정의하기 위해서는 "세분화" 과정이 필요함을 배웠고 예시를 들으니 쉽게 이해할 수 있었다.

ex) 어린이가 좋아하는 것은?(X) → 다문화 가정의 어린이가 좋아하는 활동은?

 

포지셔닝

 

ㆍ 포지션이란 고객의 마음 속에 제품이나 기업이 점하는 위치를 말하며, 포지셔닝이란 기업이 고객의 마음 속에 원하는 위치름 점하기 위한 일련의 과정을 말한다.

 

효과적 포지셔닝?

      (1) 3C( 고객, 경쟁사, 자사 ) 고려

      (2) 가능한 비교우위 파악 "솔루션 차별화" -> "상품 차별화", "서비스 차별화", "이미지 차별화", "인적 차별화"

      (3) 포지셔닝의 유형 "속성/효익(Benefit) 포지셔닝", "사용현황 포지셔닝", "제품사용자 포지셔닝", "경쟁자 포지셔닝",

          "제품군 포지셔닝" 

 

ㆍ 포지셔닝을 통한 차별화

      (1) 상품/제품 차별화

      (2) 서비스 차별화

      (3) 이미지 차별화

 

 

마케팅 4P Mix

 

ㆍ "제품", "가격", "유통", "프로모션"

 

(역)가치사슬

 

ㆍ "가치사슬" : 기업에서 경쟁전략을 세우기 위해, 자신의 경쟁적 지위를 파악하고 이를 향상시킬 수 있는 지점 찾기(Reference point)

 

고객의 추구 가치

 

ㆍ"기능", "사용", "정서", "경제"

 

제안서 작성(~금요일)

 

청자 중심의 보고서 작성 PREP

(1) 강조(Point)

(2) 이유(Reason)

(3) 예시(Example)

(4) 강조(Point)

 

4 Box Tool

(1) Summary ( 주제 요약 )

(2) Introduction ( 개요 )

(3) Body ( 본문 )

(4) Review ( 요약 )

 

핵심 차별화 요소

 

(1) 고객의 중요 니즈 

 

(2) 경쟁사 대비 우위점

 

이번 주 수업을 통해 느낀 점

이번 주 수업을 통해 느낀 점은 평소에 뉴스를 꾸준히 보고 정리하며, 자신이 관심 있는 분야를 포함하여 다양한 분야의 지식이 중요함을 배웠다. 실습 보고서를 작성하면서 어려웠던 점은 사실 방법보다는 보고서를 작성하고자 하는 분야에 대한 지식 부족이었기 때문에 이러한 생각을 갖게 되었다. 이런 어려움을 다음에 겪지 않도록 하기 위해 티스토리에 비공개 카테고리를 만들어 두고, 개인적으로 꾸준히 기사를 스크랩하고 이에 대한 생각을 정리해두는 습관을 가져야겠다는 목표를 세웠다.

 

 

월간 데이콘 - DACON 데이터 분석 아이디어 경진대회 공모전

 

 이번에 DACON에서 진행하는 데이터 분석 아이디어 공모전에 참가하기로 결정했다. 같은 분반 에이블러 2명과 함께 팀을 결성하였다. 공모전 조원을 모집할 때마다, 에이블스쿨 에이블러로서의 편리함을 느끼고 있다.

 그동안, 에이블스쿨의 커리큘럼을 정신없게 따라오며 초기에 진행했던 데이터 분석( p-vale 분석 ) 개념이 흐릿해졌었는데 이렇게 공모전을 나가니 복습을 할 수 있어서 좋았다.

 유튜브를 통해 데이터 분석가 로드맵에 대해 검색을 해보며, "프로젝트 기반 학습" 방법을 추천해주었는데, 이번 공모전을 통해 이 학습법의 효과를 체감할 수 있었다.

 

 

 

 

"팀즈"를 이용하니 데이터분석 공모전에 대해 의견을 나누고 파일을 주고 받을 때 편리했다.

지금까지 팀즈를 이용하여 공모전들에 참여했고, 현재는 "백준 문제 풀이 스터디,", "SQL 문제 풀이 스터디"를 리더로서 진행하면서 활용하고 있는데, 게시판을 통해 팀원들에게 공지사항을 알려주고 회의를 시작할 때는 모임 개설 버튼을 통해 간단하게 진행 가능하다는 점이 큰 장점으로 다가왔다.

 

728x90
728x90

SQL SUM, MAX, MIN] 가격이 제일 비싼 식품의 정보 출력하기

 

전체 코드

-- 코드를 입력하세요
SELECT f.PRODUCT_ID,	f.PRODUCT_NAME,	f.PRODUCT_CD, f.CATEGORY, f.PRICE
    FROM FOOD_PRODUCT f
    
    INNER JOIN(
        SELECT MAX(PRICE) AS PRICE
        FROM FOOD_PRODUCT

    ) AS m ON f.PRICE= m.PRICE;

 

 

풀이 순서

1]  PRICE 전체 열에서 PRICE 최대값을 구하기

 

SELECT MAX(PRICE) AS PRICE
FROM FOOD_PRODUCT

 

2]  f.PRICE= m.PRICE 를 통해 INNER JOIN 하여 정답을 출력

728x90
728x90

SQL String, Date] 재구매가 일어난 상품과 회원 리스트 구하기

 

 

-- 코드를 입력하세요
SELECT c.CAR_ID
    FROM CAR_RENTAL_COMPANY_CAR c
    INNER JOIN(
        SELECT CAR_ID, START_DATE
        FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY
    ) as h on c.CAR_ID = h.CAR_ID
    WHERE MONTH(h.START_DATE) = 10 AND  c.CAR_TYPE = '세단'
    GROUP BY CAR_ID
    ORDER BY CAR_ID DESC;

 

1] CAR_RENTAL_COMPANY_CARCAR_RENTAL_COMPANY_RENTAL_HISTORY 를 CAR_ID 기준으로 INNER JOIN

 

2] MONTH(h.START_DATE) 을 통해 10월에 대여를 시작한 차의 정보를 얻는다.

3] GROUP BY CAR_ID를 사용하면 문제 조건에 따라 중복없이 값을 출력할 수 있다.

728x90
728x90

SQL SELECT] 재구매가 일어난 상품과 회원 리스트 구하기

 

GROUP BY USER_ID를 한다면, USER_ID와 PRODUCT_ID가 모두 같은 행을 출력 가능하고, 이때 COUNT(PRODUCT_ID)가 1보다 큰지 확인

728x90
728x90

SQL JOIN] 즐겨찾기가 가장 많은 식당 정보 출력하기

 

 

-- 코드를 입력하세요
SELECT b.BOOK_ID, A.AUTHOR_NAME, DATE_FORMAT(b.PUBLISHED_DATE, "%Y-%m-%d")
    FROM BOOK b
    INNER JOIN(
        SELECT AUTHOR_ID, AUTHOR_NAME
        FROM AUTHOR
        
    ) AS A ON b.AUTHOR_ID = A.AUTHOR_ID
    WHERE CATEGORY = '경제'
    ORDER BY b.PUBLISHED_DATE;

 

1] BOOK 테이블에서 BOOK_ID, PUBLISHED_DATE 가져오기

 

2] DATE_FORMAT(b.PUBLISHED_DATE, "%Y-%m-%d")을 사용하여 형식 맞추기

 

3] INNER JOIN을 위해 AUTHOR 테이블의 AUTHOR_ID 필요

 

4] 테이블 출력 시에 AUTHOR 테이블의 AUTHOR_NAME 필요

 

728x90
728x90

SQL IS_NULL] NULL 처리하기

 

 

-- 코드를 입력하세요
SELECT ANIMAL_TYPE, IFNULL(NAME, 'No name') AS NAME, SEX_UPON_INTAKE
    FROM ANIMAL_INS
    ORDER BY ANIMAL_ID;

 

 

728x90
728x90

SQL GROUP BY] 즐겨찾기가 가장 많은 식당 정보 출력하기

 

1] FOOD_TYPE 별로 가장 인기가 많은 MAX(FAVORITES) 테이블 만들기

SELECT FOOD_TYPE, MAX(FAVORITES) AS MaxFavorites
        FROM REST_INFO
        GROUP BY FOOD_TYPE

 

 

(1) FROM REST_INFO

(2) GROUP BY FOOD_TYPE

 

 

2] 기존 테이블과 INNER JOIN

-- 코드를 입력하세요
SELECT r.FOOD_TYPE, r.REST_ID, r.REST_NAME, r.FAVORITES
    FROM REST_INFO r
    INNER JOIN(
        
        SELECT FOOD_TYPE, MAX(FAVORITES) AS MaxFavorites
        FROM REST_INFO
        GROUP BY FOOD_TYPE
        
    ) AS max_res ON r.FOOD_TYPE = max_res.FOOD_TYPE 
                    AND r.FAVORITES = max_res.MaxFavorites
    ORDER BY r.FOOD_TYPE DESC;

 

 

(1) FOOD_TYPE이 같고, 기존 테이블 FAVORITES =  최대값 테이블 MaxFavorites 같도록 합친다.

 

주의

-- 코드를 입력하세요
SELECT r.FOOD_TYPE, r.REST_ID, r.REST_NAME, MAX(r.FAVORITES)
    FROM REST_INFO r    
    GROUP BY r.FOOD_TYPE

 

GROUP BY에 속하지 않은 모든 컬럼은 집계 함수 내에 있어야 한다.

 

728x90
728x90

python 기법] 파일 읽고 쓰기

 

홈 디렉토리 확인, 작업 디렉토리 확인, 디렉토리 내용 확인

# 홈 디렉토리 확인
from pathlib import Path

print(Path.home())

# 작업 디렉토리 확인
from pathlib import Path

print(Path.cwd())

# 디렉토리 내용 확인
from pathlib import Path

files = Path.cwd().glob('*')
for f in files:
    print(f)

 

기본적인 파일 읽고 쓰기

파일 쓰기

# 파일 열기
f = open('MyFile.txt', 'w')

# 파일 쓰기
f.write('안녕하세요?\n')

# 파일 닫기
f.close()

 

디렉토리 만들기

# 디렉토리 만들기
Path('Files').mkdir(exist_ok=True)

 

파일 열기, 쓰기, 닫기

# 파일 열기
f = open('Files/MyFile.txt', 'w')

# 파일 쓰기
f.write('모두들 안녕하세요?\n')

# 파일 닫기
f.close()

 

파일 읽기

# 파일 열기
f = open('MyFile.txt', 'r')

# 내용 읽기
print(f.read())

# 파일 닫기
f.close()

 

경로 지정해서 읽기

# 파일 열기
f = open('Files/MyFile.txt', 'r')

# 내용 읽기
print(f.read())

# 파일 닫기
f.close()

 

파일 내용 추가

# 파일 열기
f = open('MyFile.txt', 'a')

# 내용 추가
f.write('만나서 반갑습니다!')

# 파일 닫기
f.close()

 

x 모드, 같은 파일이 있으면 오류 발생

# 파일 열기 
f = open('MyFile.txt', 'x')

# 내용 쓰기
f.write('만나서 반갑습니다!')

# 파일 닫기
f.close()

 

# 오류 핸들링
try: 
    f = open('MyFile.txt', 'x')
    f.write('만나서 반갑습니다!')
    f.close()
except FileExistsError:     #  이미 파일이 있으면
    print('같은 이름의 파일이 있습니다.')
else:                       # 그렇지 않으면
    print('파일 쓰기 성공했습니다.')
finally:                    # 마무리
    print('수고하셨습니다.')

 

 

 

파일 다루기 실습

 

python 파일 만들기

# 파일 열기
f = open('Python.txt', 'w')

 

내용 입력

# 내용 쓰기
f.write('''<파이썬과 나>  
시인: 홍길동''')

# 파일 닫기
f.close()

 

내용 추가

# 파일 열기
f = open('Python.txt', 'a')

# 내용 추가
f.write('''
어느날 
파이썬이 나에게 왔다.
많이 낯설었다.
지금은 나와 하나가 되었다.
파이썬이 나고,
내가 파이썬이다.''')

# 파일 닫기
f.close()

 

ㆍ f = open('Python.txt', 'a')에서 'a'는 파일을 "추가 모드(append mode)"로 열기 위한 파일 모드

 

writelines()

# 파일 여러 줄 쓰기
hello = ['안녕하세요?\n', '만나서 반갑습니다!\n', '우리 사이좋게 잘 지내요.\n']
f = open('MyFile.txt', 'w')
f.writelines(hello)
f.close()

 

내용 확인

# 파일 읽기
f =  open('MyFile.txt', 'r') 
print(f.read())
f.close()

 

readlines()

# 파일 한 번에 읽기
f = open('MyFile.txt', 'r')
result = f.readlines()
f.close()

# 내용 확인
print(result)
# 반복문으로 한 행씩 표시
for txt in result:
    print(txt, end='')

 

readline()

ㆍ 행 단위로 읽기

# 파일 읽기
f = open('MyFile.txt', 'r')

# 내용 읽기
print(f.readline(), end='')
print(f.readline(), end='')
print(f.readline(), end='')

# 파일 닫기
f.close()

 

ㆍ 반복문을 이용해 모든 행 읽기

# 파일 읽기
f = open('MyFile.txt', 'r')
result = f.readline()

# 반복문으로 한 행씩 읽어 표시
while result:
    print(result, end='')
    result = f.readline()

# 파일 닫기
f.close()

 

 

728x90

'Python 기법' 카테고리의 다른 글

python 기법] 워드 클라우드  (1) 2023.12.03
python 기법] 이메일  (0) 2023.11.29

+ Recent posts