데이터 수집 방법
1) 내부 데이터 수집
: 기존 시스템 데이터베이스에서 추출
SQL 등 데이터베이스 추출 도구를 이용
2) 공개 데이터 수집
: 정부 기관이나 연구 데이터셋
kaggle, 공공데이터포털, AI hub등
3) 웹 크롤링 수집
: python의 selenium으로 주로 수집
웹페이지의 데이터를 추출
이미지는 왠만하면 x. 텍스트 수
4) 직접 수집 (설문 및 이미지)
정형 데이터 vs 비정형 데이터
1) 정형 데이터 : CSV, SQL, Excel 등 대부분 테이블 형태
- SQL 데이터베이스 : 정형데이터를 테이블 형태로 저장 (MySQL, PostgreSQL 등)
- CSV : 콤마로 구분된 값
2) 비정형 데이터 : JSON, Image, Text 등 다양한 형식
-NoSQL 데이터베이스
- JSON : 텍스트 직렬화(딕셔너리처럼). 웹통신에서 많이 사용
공개 데이터 수집
1. Kaggle
Kaggle: Your Machine Learning and Data Science Community
Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.
www.kaggle.com
경쟁 대회 사이트. 각종 데이터분석 관련된 대회들이 올라옴.
Datasets 에서 다양한 데이터들 확인 가능
데이터 형식 표기되어있음 (대부분 csv)
사용전 License도 확인 (상업적 이용이나 공개 불가능한 것들도 있음)
global 데이터들이 많이 포함되어있음
2. 공공데이터 포털
공공데이터 포털
국가에서 보유하고 있는 다양한 데이터를『공공데이터의 제공 및 이용 활성화에 관한 법률(제11956호)』에 따라 개방하여 국민들이 보다 쉽고 용이하게 공유•활용할 수 있도록 공공데이터(Datase
www.data.go.kr
국내 데이터들을 찾을 때 유용.
데이터찾기 - 데이터목록에서 찾기
파일데이터, 오픈 API를 주로 사용 (파일을 받는 것이 제일 편함)
★ Open API (Rest API)
API는 컴퓨터에서 쓸 수있는 모든 것들을 말함
오픈API는 공개된 API, 즉 컴퓨터에서 사용할수 있는 기능을 공개해놓은 것
Rest API는 통신을 통해 다른 컴퓨터의 기능을 얻는다는 뜻.
통신을 통해 요청하여 데이터를 받아오는 방식
최신 데이터도 꾸준하게 요청하여 받아올 수 있다는 장점
기본적으로 http요청을 통함 (url 주소를 통해 요청)
주로 json형식(빠름), xmL 형식으로 데이터 응답 받음
* 공공데이터포털에서 실습해보기
활용많은순 정렬 - JSON 형태 선택 - 활용신청 (로그인 필요)
마이페이지- 데이터활용- openAPI- 활용신청 현황
* End Point : 기본적 url주소
* 인증키 : 실제 데이터를 얻어올수 있는 인증키 (일반적으로 두번째 Decoding사용)
[API 가이드 목록]
원하는 정보 클릭
* [GET] 옆의 /getDgsbjtInfo2.7' 를 url 뒤에 붙여줌
* Parameters : 요청에 필요한 정보
꼭 필요한 요소 : serviceKey, ykiho
_type : json으로 설정
파이썬에서 requests 모듈을 활용하여 요청 매개변수 설정하여 데이터 요청
: !pip install requests 실행
예시)
import requests
url = 'http://apis.data.go.kr/B551182/MadmDtlInfoService2.7/getDgsbjtInfo2.7'
params ={'serviceKey' : 'aaaaa',
'ykiho' : 'JDQ4MTg4MSM1MSMkMSMkMCMkODkkMzgxMzUxIzExIyQxIyQzIyQxMyQzNjEwMDIjODEjJDEjJDIjJDgz',
'pageNo': '1', 'numOfRows' : '30', '_type':'json'}
response = requests.get(url, params=params)
result = response.json()
result
servicekey에 아까 받은 일반 인증키(Decoding) 입력
요청은 request 모듈에서 get함수 이용
: url을 첫번째 인자로, params인자에 params 딕셔너리 할당
(params=params : 순서 무시하고 params 인자에 데이터 넣음)
통신이 완료되어야 결과값을 받을 수 있음
.json()함수 : json형식을 딕셔너리 형식으로 해석해주는 함수.
→ 데이터를 딕셔너리 형식으로 받게 됨
출력 결과)
{'response': {'header': {'resultCode': '00', 'resultMsg': 'NORMAL SERVICE.'},
'body': {'items': {'item': [{'cdiagDrCnt': 0,
'dgsbjtCd': '01',
'dgsbjtCdNm': '내과',
'dgsbjtPrSdrCnt': 206},
{'cdiagDrCnt': 0,
'dgsbjtCd': '02',
'dgsbjtCdNm': '신경과',
'dgsbjtPrSdrCnt': 30},
.... 생략
{'cdiagDrCnt': 0,
'dgsbjtCd': 54,
'dgsbjtCdNm': '치주과',
'dgsbjtPrSdrCnt': 3},
{'cdiagDrCnt': 0,
'dgsbjtCd': 55,
'dgsbjtCdNm': '치과보존과',
'dgsbjtPrSdrCnt': 3}]},
'numOfRows': 30,
'pageNo': 1,
'totalCount': 29}}}
응답으로 받은 결과를 파싱하여 원하는 데이터만 추출
예시)
tems = result['response']['body']['items']['item']
for item in items:
print(item['dgsbjtCdNm'])
응답 결과를 json파일로 저장
import json
file = open('./open_data.json', 'w')
json.dump(items, file)
file.close()
★ 파일 보관하는 open() 함수
1. 파일 경로 설정
1) 절대 경로
'C:\Users\trave\Desktop\project\data\abc.txt'
2) 상대 경로
/ : root경로 부터 시작. Windows에서는 C:\
'/Users/trave/Desktop/project/data/abc.txt'
~/ : 사용자 폴더부터 시작. windows에선 C:\Users\사용자계정이름
'~/Desktop/project/data/abc.txt'
★ ./ : 현재 작업 폴더(working directory). 별도로 작업하지 않은 경우 생략 가능 ('data/abc.txt' 로 작성가능)
'./data/abc.txt'
../ : 현재 폴더의 상위 폴더
'../project/data/abc.txt'
파이썬은 폴더를 기준으로 프로젝트롤 생성→ 파이썬 파일이 있는 폴더 기준으로 데이터 저장하는 것이 좋음
# 현재 작업 폴더 확인
%pwd
2. txt 파일 읽고 쓰기
open()함수에 경로와 모드를 인자로 입력
(읽고자/쓰고자 하는 파일 경로, 모드(읽기/쓰기..), 추가적 옵션(encoding..))
1) 모드
'r' 읽기모드
'w' 쓰기모드(덮어쓰기)
'a' 추가 쓰기모드
'b' 바이너리 형식 (바이너리 형식을 읽을때 표기)
2) 인코딩 인자
utf-8 : 전세계언어 표현. 파이썬 기본 인코딩
CP949 : 한국어 표현 (한국어만)
ASCII : 영문 알파벳 (지금은 사용 잘x)
3) txt 파일로 저장
open()의 결과로 File 객체가 반환
File 객체에서 wrtie() 함수를 활용해 파일에 데이터 쓰기 가능
작업이 끝나면 File 객체에서 close() 함수를 호출하여 파일과의 연결 끊음
# utf-8 인코딩 방식으로 파일 쓰기 (쓰기모드로 txt파일 만들기)
data = '텍스트 파일 생성 예제 '
file = open('./test.txt', 'w', encoding='utf-8')
file.write(data)
file.close()
write함수 통해서 데이터를 쓰고, 반드시 close함수 실행
encoding은 생략가능
4) txt 파일 읽기
readlines() : 라인별로 텍스트를 읽어와 리스트로 반환 (줄바꿈으로 스플릿하듯이)
read() : 모든 텍스트를 한번에 읽어옴
readline() : 파일의 텍스트 한줄만 읽고 다음 줄 이동 (커서처럼 한줄 씩 읽어올때)
file = open('./test.txt', 'r', encoding='utf-8')
file.readlines()
3. json 파일 읽고 쓰기
다른 모듈의 도움을 받아야 함
json 모듈을 import하여 File 객체에 load()와 dump()로 읽고 쓰기 가능
1) json 파일로 저장
open()함수를 통해 경로 설정후, File 객체 생성
json 모듈의 dump함수에 딕셔너리와 리스트로 이루어진 데이터구조와 File객체 입력
import json
data = {'FIRST' : ['A', 'B', 'C', 'D'],
'SECOND': [7,6,5,8],
'THIRD' : ['2023','2022','2021','2020']}
file = open('./test.json', 'w') #.json 확장자 붙여서 저장해줌
json.dump(data, file) #json모듈에서 dump함수 사용해서 저장하고자하는 데이터와 파일인자를 넣어줌
#-> 데이터가 파일에 json형식으로 저장됨
file.close()
주피터랩은 json파일 보기를 지원해줌
문자열, 숫자, 리스트, 딕셔너리 형식으로만 저장가능
2) json 파일 읽기
읽기 모드로 File 객체 생성
json모듈에서 load함수의 인자에 File객체를 입력
file = open('./test.json', 'r')
data = json.load(file)
data
* 메모장으로 csv 파일을 열어보면 형식을 볼 수 있음
'데이터 분석 > 데이터분석 이론' 카테고리의 다른 글
[이론] 탐색적 데이터분석(EDA) (0) | 2025.01.08 |
---|