import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
#폰트적용
plt.rcParams['font.family'] = 'New Gulim'
plt.rcParams['font.size'] = 14
plt. rcParams['axes.unicode_minus'] = False # '-'나오는 거 설정
# 데이터 구해오기
1. 서울시 자치구 년도별 CCTV 현황
2. 서울시 주민등록인구 (구별) 현황
1번 : CCTV 파일을 열어서 CCTV 데이터 프레임을 만들자
2. POP.csv를 읽어서 POP이라는 데이터프레임을 만들기
3. 컬럼 인덱스를 구별, 한국인, 외국인, 고령자, 인구수 로 변경
4. CCTV 데이터에서 총계로 내림차순 정렬 해보기
5. CCTV 최근 증가율
(2023 + 2022 + 2021) / 총계 * 100 -> 최근증가율
6. POP에 외국인비율, 고령자비율을 추가
* 외국인비율 = 외국인/인구수 *100
* 고령자비율 = 고령자/인구수 *100
7. CCTV 컬럼 인덱스 중에서 구분 -> 구별, 총계 -> CCTV 총계로 바꾸기
8. CCTV, POP을 구별을 기준으로 병합해서 data_result에 저장
9. CCTV와 POP을 병합 단, CCTV 컬럼 중에서 CCTV 총계, 최근증가율만 가져와서 병합하기
10. data_result에 index를 구별로 설정하자
상관관계 분석
● 상관관계 계수 : -1 ~ 1
0.1 이하 : 관계없음, 무시
0.3 이하 : 약한 상관 관계
0.7 이하 : 뚜렷한 상관 관계
1.0 이하 : 높은 상관 관계
고령자 비율, 외국인 비율, 인구수 대비 CCTV 총계 상관관계
-> np.corrcoef() 함수를 통해 상관관계 출력
-> 1은 무시 가능 소숫점 숫자만 보기
11. CCTV 총계를 내림차순으로 정렬해서 막대그래프로 시각화
-> data_result라는 DataFrame에서 CCTV총계를 sort_values()함수로 정렬 후 plot(kind='bar') 로 막대그래프로 시각화
인구대비 CCTV 비율
12. Scatter 그래프를 사용해서 인구수(x축), CCTV총계(y축) 그려보기
scatter (산포도) 그래프 : 정보를 x, y 축에 찍는 점의 위치, 크기, 색으로 표현할 수 있다.
13. 경향선을 추가
경향선 : 오차를 적게 해주는 선
np.polyfit() : 일차방정식의 기울기, y절편 구하기 가능
-> 경향선으로 인구수 대비 CCTV총계가 연관이 있다는걸 알 수 있다.
size, color 정보 추가
colorbar() : 어떤 색이 값이 높고 낮은지 colorbar을 표현해 알 수 있다.
-> 인구수대비 CCTV가 많은 곳이 원이 크다.
-> 노란색에 가까울수록 외국인 비율이 높다.
14. scatter 그래프의 각 점에 구 이름을 추가해보기
-> 경향선의 오차가 1000 이상인 것만 정보를 표시
-> 점이 어떤구에 대한 정보인지 알 수 있다.
범죄 현황 분석
- 서울시 5대 범죄 발생현황 통계
1. 각 범죄마다 검거율을 계산해서 추가하자
(검거/발생) * 100
강도가 object로 존재하는 문제 해결 -> 0으로 바꾼 후 타입 int로
2. 각 검거율이 100보다 크면 그 값을 100으로 조정하기
3. 각 '검거' 컬럼을 삭제
4. 컬럼이름에서 '발생'을 제거해보기
예) 살인발생 -> 살인
데이터 정규화 (Normalize)
column 마다 값의 편차가 크면 그걸 줄여주기
MinMaxScaler() : 최댓값, 최솟값을 구해서 최소를 0 최대를 1이 되게 바꾸기 (실수 형태만 가능)
from sklearn import preprocessing 선언
-> 5대 범죄가 1과 0사이 값으로 만들어지도록 정규화한 결과
6. CRIME_norm에 CRIME의 각 검거율을 추가하기
7. CRIME_norm에 data_result의 인구수, CCTV총계, 최근증가율, 외국인비율, 고령자비율을 추가
8. 범죄 컬럼을 만들기
* 범죄 : 모든 범죄의 발생 수의 합
8. 살인검거율 부터 폭력검거율 까지 더해서 '검거'로 만들기
Seaborn을 활용한 상관관계분석
import seaborn as sns 선언
pairplot() : 두개의 값을 짝을 지어서 상관관계 분석하여 그래프로 그려줌
kind='reg' : 상관관계를 나타내는 경향선 추가
-> CCTV가 많은 곳은 범죄 많이 발생
-> 범죄가 많은 곳에 인구수 많다.
9. 검거의 최대값으로 각 검거값을 나누고 100을 곱해서 다시 검거에 저장
가장 큰 값은 1이고 가장 작은 값은 0이 아닌 비율로
Heatmap() : 데이터에 대한 정보를 한 번에 표로 나타내기
annot=True : 수치값 적기
fmt='.2f' : 소숫점 두번째 자리까지
웹데이터 수집
이때까지는 가져온 데이터로 실습했는데 확보하기 힘들어 데이터를 하나하나 입력을 해야하는 경우
그때 사용할 수 있는 방식이 웹스크래핑
웹스크래핑 : 조직적이고 자동화된 방법으로 웹사이트들을 탐색해서 원하는 정보를 획득하기
(웹크롤링이라고 할 수 없음)
웹 스크래핑을 위해 필요한 패키지
requests 패키지 - 웹페이지 다운로드
beautifulsoup 패키지 - 웹페이지 구조 분석
pandas 패키지 - 데이터 저장, 처리 및 분석
Web이 어떻게 동작?
web은 web server가 필요
각각의 web server에는 홈페이지에 관한 정보를 파일로 갖고 있음 (준비된 상태)
내 pc(client)에 web browser이 있고 주소창에 주소를 쳐서 웹페이지에 가서 원하는 페이지를 요청함 -> request
요청이 정상적이면 웹페이지는 파일을 내 PC에 전달해줌 -> responce
이 과정을 반복
-> 웹페이지의 정보를 스크래핑 하기 위해서는 web서버에서 오는 responce에 있는 파일 분석이 필요
주소창에 https://www.naver.com 주소 치고 엔터
: 네이버 서버에 첫번째 페이지를 보고싶다고 request를 보낸 것
웹페이지 구성 요소
HTML : 웹페이지의 골격 구조 및 콘텐트
CSS : 웹페이지 디자인
JAVA Script : 웹페이지의 동적 동작
주요 웹스크래핑 대상
웹페이지에서 주요 데이터 정보를 표현하고 있는 HTML이 웹스크랩핑의 대상이 되는 경우가 대부분
HTML(HyperText Markup Language)
웹페이지를 위한 지배적인 마크업 언어, 구조적 문서를 만들 수 있는 방법 제공
- 하이퍼텍스트 : 서로 연결되어 있는 링크를 통해 읽는 순서가 결정되어 있지 않는 형태로 한 문서에서 다른 문서로 접근할 수 있는 텍스트
- 마크업 언어 : 태그(문서의 구조를 표현하는 역할)를 이용해 문서와 데이터의 구조를 표시하는 언어
HTML 기본 구조
- 가장 기본 구조
<html> 태그를 사용해 <html> 과 </html> 사이의 모든 텍스트가 HTML 이라고 선언됨
(태그는 대소문자 구분 x)
- HTML은 크게 두 부분 head와 body로 구분됨
- head : 타이틀이나, 메타데이터등의 웹페이지 자체 정보를 담고 있음
- body : 주요 웹페이지 컨텐트를 담고 있음, 주요 크롤링 대상
<HTML> <HEAD> </HEAD> <BODY> </BODY> <HTML>
주요 HTML 태그
<P> : 본문 태그, 문단 태그
<BP> : 줄바꾸기
<HR> : 수평줄삽입
<A> : 하이퍼링크 태그 <a href="http://www.yu.ac.kr"> 영남대학교 </a>
<UL>, <LI> : 글머리 기호 목록 생성, 목록 요소 생성
<OL>,<LI> : 순서 번호 목록 생성, 목록 요소 생성
<DIV> : 공간 분할 태그
위치에 따른 Tag 관계
- Parent : 다른 태그를 포함하고 있는 태그
- Child : 다른 태그 내부에 있는 태그
- Sibling
HTML Tag의 ID, Class 속성
- 웹 브라우저 화면에는 변화가 없음
- HTML 각 태그에 특별한 속성이 ID 와 CLASS 속성을 부여할 수 있다.
- CSS 등에서 특정 태그를 지칭하기 위해 주로 활용됨
- 웹스크래핑에도 특정 태그를 지칭하기 위해 자주 활용됨
- ID : 중복될 수 없음
웹페이지 다운로드
requests 패키지 : 다양한 형태의 request를 웹서버에 보내 웹페이지를 다운로드한다.
get, post, put, delete 를 할 수 있다.
r = request.get("http://www.yu.ac.kr")
다운로드 성공 여부 확인
status_code 속성으로 확인 가능
요청 후 다운로드 상태 확인
항상 정상적으로 웹 요청이 끝나고 난 후 다음 단계로 진행해야한다.
웹스크래핑 기초 실습
접속한 페이지가
영문을 사용한 웹브라우저에서 접속하면 영문으로 나오고
한글을 사용한 웹브라우저에서 접속하면 한글로 나오는 페이지임
-> /index.do 가 붙은 한글페이지로 url 수정하여 한글페이지에 직접 접근
BeautifulSoup 사용해보기
text를 html구조에 맞춰서 파싱 -> beutifulsoup 사용
from bs4 import BeautifulSoup 선언
soup이 root이고 자식들 출력해보기
html코드만 저장
p태그 검색
p태그 중에서 mini-title만 찾기
'파이썬 & 머신러닝과 딥러닝' 카테고리의 다른 글
11일차 - 머신러닝과 딥러닝의 기본 원리, 훈련세트와 테스트세트, 데이터 전처리 (1) | 2024.01.25 |
---|---|
10일차 - 웹스크래핑 기법 학습 및 이를 기반으로 한 미니프로젝트 수행 (0) | 2024.01.17 |
8일차 - 시계열 데이터를 위한 Pandas 응용 및 각종 데이터 시각화 기법 학습 및 실습 (1) | 2024.01.15 |
7일차 - Series, DataFrame 등과 함께 Pandas 학습 및 영화 캐스팅 정보를 활용한 실습 (0) | 2024.01.12 |
6일차 - 다양한 Numpy 관련 기초 내용 및 Numpy를 활용한 기상데이터 분석 학습 (1) | 2024.01.11 |