2월 13일 월요일부터 2월 15일 수요일까지 1차 미니 프로젝트를 진행한다. 에이블 스쿨을 하면서 첫 프로젝트인 만큼 설렘도 크고 걱정도 앞선다. 데이터 분석은 처음이라 잘 해낼 수 있을지 의문이다. 적어도 1인분은 해서 팀원들에게 민폐는 끼치지 않는게 내 목표이다.
1차 미니 프로젝트 1일차
처음에 강사님이 1차 미니 프로젝트 주제를 알려주셨다. 주제는 주어진 데이터 셋을 가지고 버스 시설 추가 필요 대상 지역을 선정 해보는 것 이었다. 주어지는 데이터 셋에 대한 설명과 필요한 기본 지식 등을 알려주셨고 바로 개별 실습을 진행하였다.
총 4개의 데이터 셋이었는데 차례대로 데이터 셋을 분석하여 인사이트를 도출하게끔 단계별로 되어 있었다. 친절하게 어떻게 분석을 하는지에 대한 설명도 적혀 있었고, 정말 헤매는 에이블러분들을 위해 두 개의 데이터 셋에 대한 솔루션(답)도 주어져서 이게 프로젝트가 맞나 싶었다. 아마 첫 미니 프로젝트이기도 하고, 배운 내용이 적어서 그런 것 같았다. 전체적인 느낌은 다음 프로젝트를 위한 연습 같은 느낌이었다. 강사님께서도 주어진 시간 안에 마무리 짓지 못해도 좋으니 최대한 혼자서 해결해보는 것을 추천하셨다.
오후에는 팀 회의로 진행되었다. 각자 데이터 분석을 통해 나온 인사이트들과 가설을 자신들이 직접 세워보고 가설검정한 내용에 대해 토론하는 회의였다. 하지만 주어진 시간도 적었고 아직 완료하지 못한 팀원들도 있었다.(나 포함) 따라서 다음날까지 오늘 주어진 개별 실습을 마무리 짓고 가설들을 뽑고 ppt를 제작하기로 하였다.
하루 종일 개인 과제를 하느라 정신없이 하루가 지나갔다. 팀원분들과 수요일에는 대면으로 만나기로 하였다. 남은 이틀 동안의 미니 프로젝트 기간동안 모두가 잘 해냈으면 좋겠다. 오늘부터 에이블 스쿨 자체에서 진행하는 코딩 마스터즈가 진행된다. 100문제 모두 올솔하는 것이 내 목표다.
1차 미니 프로젝트 2일차
어제 개별 실습을 마무리해온 토대로 팀원분들과 자신이 세운 가설들과 가설검정한 내용에 대해 말하고 가설 투표를 통해 발표에 사용할 가설을 뽑았다. 데이터 분석이라는 것이 정답이 정해져 있지 않고 어떻게 목표를 잡고 어떻게 해석하느냐에 따라 정말 다양한 결론들이 나오기 때문에 우리 팀원들도 다양한 가설들을 발표하였다. 오전에는 발표를 통해 나온 가설을 모아 그 중 투표를 통해 가설 3개를 뽑았고, 그 가설을 검정하기 위해 필요한 데이터 셋을 분석하였다. 오후에 이어서 ppt를 만들고 발표 준비를 했다. 다른 팀의 ppt 발표를 보니 이미 데이터 분석을 해본 경험이 있는지 아직 배우지 않은 데이터 분석 방법을 썼다. 그리고 정말 신박한 데이터 분석을 하고 훌륭한 가설을 세운 팀들도 있었다. 이제 막 데이터 분석에 익숙해진 나는 아주 극히 평범한 에이블러라는 것을 깨닫게 되어 현타가 조금 왔다. 몇 팀의 ppt 발표가 끝난 후 하루가 마무리 되었다.
코딩 마스터즈 후기
총 100문제가 기초, 초급, 중급, 고급 단계로 나누어져 있다. 정말 거저먹는 쉬운 문제부터 풀기 시작하였고 백준과 프로그래머스를 풀어본 경험이 있다면 사용법은 걱정하지 않아도 된다. 에이블러들의 순위도 확인 할 수 있는데, 총 문제수와 정답 비율, 단계별 푼 문제 등이 나와있고 이를 합쳐 순위도 볼 수 있다. 하루만에 몇 십 문제를 풀고 독보적인 1등인 에이블러분도 계셨다. 프로그래머스와 다른 점은 채점하기를 누른 후 몇 가지 테스트 케이스를 모두 통과하면 정답인 것 같았다. 효율성이나 시간초과는 안 따지는 것 같았다. 뒤에 단계가 올라갈 수 록 효율성을 따질 수 도 있지만 아직은 그렇다. 수료식때 우수 에이블러를 선정하는 부분 중 분명히 큰 영향력은 아니어도 분명 영향력이 있을 것 같으니 많이 풀어 놓는게 좋을 것 같다.
웹크롤링
Client | <-> | Sever |
서버에 데이터 요청 | <-> | 요청에 따라 데이터 전송 |
- protocol: http://, https://
- subdomain: new.
- domain: naver.com
- port: 도메인 서버에 들어와서 어떤 서비스를 할건지(web, DB..) 80과 443 많이 씀
- path: 서버 파일 경로
- page: read.nhn 서버 파일
- query: db
- fragment: 특정 위치로 이동시켜주는 것
- 데이터 요청
1. Get
: URL에 데이터가 포함된다 -> 데이터 노출
길이 제한이 있음
2. Post
: Body에 데이터가 포함된다 -> 데이터 숨겨짐
- 인터넷
: 컴퓨터로 연결하여 TCP/IP라는 통신 프로토콜을 이용해 정보를 주고받는 컴퓨터 네트워크
- 무선 인터넷
: 주파수를 매체로 사용함
- OSI 7 Layer
: 컴퓨터 네트워크 프로토콜 디자인과 통신을 계층으로 나누어 설명
- Cookie
: Client에 저장하는 문자열 데이터로 도메인 별로 따로 저장
하드디스크에 저장되는 데이터
로그인 정보, 내가 봤던 상품 정보, 팝업
하나의 클라이언트에 300개, 도메인당 20개, 쿠키 하나당 4Kbyte
- Session
: 서버에 저장하는 객체 데이터, 브라우져 연결시 session id (연결 정보)
session id를 cookie에 저장함으로 로그인 연결 유지
같은 브라우저로 같은 서버에 접속하면 session id가 같음
로그인 연결 정보, 원하는 객체 데이터
- Cache
: client나 sever의 메모리에 저장하여 빠르게 데이터를 가져옴
메모리에 데이터 저장(ram) -> 속도 빠름
- HTTP Status Code
: 서버와 클라이언트가 데이터를 주고 받으면 결과로 상태 코드 확인
2xx – success
3xx – redirection (browser cache) -> 완전한 처리를 위해서 추가 동작이 필요한 경우
4xx – request error
5xx – server error -> 서버 사정 문제 발생 시
- 웹페이지 종류
1. 정적인 페이지: url 변경하여 데이터 변경. html 포맷으로 데이터 받아옴
2. 동적인 페이지: url 변경 없이 데이터가 더 많아짐. JSON 포맷으로 데이터 받아옴 ex) 더보기
- 웹 크롤링 방법
1. requsets 이용
- json 문자열로 받아서 파싱하는 방법: 동적페이지 크롤링
- html 문자열로 받아서 파싱하는 방법: 정적페이지 크롤링
2. selenium 이용
: 브라우저를 직접 열어서 데이터를 받는 방법
-크롤링 방법에 따른 속도
: requests json > requests html > selenium
- 동적 페이지 크롤링 방법
1. url 받아오기
2. response = requests.get(url)
3. data = response.json()
4. df = pd.DataFrame(data)
- apply 함수
# 컬럼명에 있는 데이터를 ,를 없애고 float형으로 바꾸어줌
df[‘컬럼명’].apply(lambda data: float(data.replace(‘,’,‘’))
- lambda
: 파라미터와 리턴으로 이루어진 함수를 간단하게 작성하는 방법
- 얕은 복사 vs 깊은 복사
1. arr2 = arr1 -> 얕은 복사
-> 주소를 복사하는 것이라 저장공간을 공유함
arr[1] = 0 변경하게 되면 arr2도 똑같이 변경됨
2. arr3 = arr1.copy() -> 깊은 복사
-> 새로운 주소를 할당 받아 새로운 저장 공간에 담음
arr[1] = 0 변경하더라도 arr3은 그대로
- min-max scaling
: 0과 1사이로 변환하여 스케일링
from sklearn.preprocessing import minmax_scale
# df 데이터 프레임의 컬럼명을 0~1 사이 값으로 변환
minmax_scale[df[‘컬럼명’]]
- 서버에서 어뷰징을 막는 경우 해결 방법
headers = {
# user_agent: 사용자가 데이터를 불러오는 상태를 의미함
# referer: 현재 사이트를 들어오게 된 바로 전 사이트
‘user_agent’:
‘referer’:
}
response = requests.get(url, headers = headers)
- 크롤링 정책
1. robots.txt: 웹페이지의 크롤링 정책 설명한 페이지
2. 크롤링법: 과도한 크롤링으로 서비스에 영향을 주었을 경우 업무방해 혐의로 고소당할 수 있음
3. 법적문제: 지적재산권, 서비스과부화, 데이터 사용 표준
4. API 사용: 데이터를 가지고 있는 업체에서 데이터를 가져갈 수 있도록 하는 서비스
- API
: 데이터를 가지고 있는 업체에서 데이터를 가져갈 수 있도록 하는 서비스
네이버 파파고, 검색순위 등 오픈 API를 통해 데이터를 가져올 수 있음
# API client id와 client secret을 불러옴
client_id = ‘’
client_secret = ‘’
# API url
url = ‘’
headers = {
# API 레퍼런스를 통해 필요 헤더 작성
}
params = {API 레퍼런스를 통해 필요 파라미터 작성}
response = requests.post(url, json.dumps(params), headers = headers)