서울시 경찰서 API 에서 특정 data 추리기(pandas)
- import 가 필요한 methods
- numpy
- 고성능 수치 계산을 위한 라이브러리로, 다차원 배열 객체와 다양한 수학 함수들을 제공
- 데이터 처리 및 연산, 배열 생성 및 조작 - pandas
- 데이터 분석을 위한 라이브러리로, 데이터 구조(DataFrame)와 데이터 분석 도구를 제공
- 데이터 로드, 정리, 조작 및 분석
- e.g. 경찰서 api로부터 받은 data를 dataframe으로 변환하여 분석 및 시각화 준비에 사용 - matplotlib
- 데이터 시각화를 위한 라이브러리로, 다양한 종류의 그래프와 차트를 그릴 수 있음
- 데이터 시각화, 그래프 생성
- 데이터 분석결과를 그래프로 시각화할 때 사용 - matplotlib.pyplot
- Matplotlib의 서브 모듈로, MATLAB과 유사한 방식으로 그래프를 그릴 수 있게 함
- 간단한 플롯 작성, 그래프의 꾸미기 및 표시
- 그래프를 만들고 커스터마이즈 할 때 사용 - json
- API로부터 받은 JSON 형식의 데이터를 파싱 및 조작
- e.g. 경찰서 api로부터 받은 json data를 python data 구조로 변환하는데 사용 - folium
- 지리적 데이터를 시각화하기 위한 라이브러리
- 지도 시각화, 위치 정보 표시, 인터랙티브 지도 생성
- e.g. 지도 위에 경찰서 위치를 마커로 표시하거나, 기타 지리적 데이터를 시각화할 때 사용 - pd.read_csv( ) 로 excel file 불러오기
- excel file을 불러올 때 숫자에 ,가 있을 경우 int로 인식되지 않기에 thousand =","를 이용하여 int로 변환
- index_col= 0 : read.csv() 함수로 csv 파일을 읽을 때 특정 열을 dataframe의 index로 지정하는 것
e.g. 첫번째 열(0번째 열)을 index로 사용하겠다는 의미
- 특정 feature만 보기
- crime.columns: crime data 중 columns 만 보겠다
- columns[ : ]: colum 내에서도 slicing
- "동"이 들어있는 과서명만 추출하기
- crime.index: index는 행을 식별하는 label (만약 index가 아닌 전체 crime을 입력하려면 crime을 지정할 때 index_col=0을 지워야함.
- .append( ): python에서 리스트끝에 새로운 요소를 추가할 때 쓰는 method
e.g. a.append(5) = a의 맨 끝에 5를 추가
- for문: crime df의 index를 하나씩 순회하는데
- if문: district에 "동"이라는 문자열이 포함되어있다면 해당 구 이름을 "police_dong" 리스트에 추가하라는 뜻
- for 문이 길기때문에 대체하는 코드
police_dong = [ i for i in crime.index if "동" in i]
- crime['절도 발생'].mean() : '절도 발생' 수의 평균 값
- crime.sum(): crime의 index별 sum 값 --> 티폴트 값 1
- crime.sum(axis=0) #세로=0, 가로=1(axis=1)
- crime[total] = df에 [ ]추가 e.g. crime['total'] = crime.sum(axis=1)
서울시 경찰서 API정보를 map에 표시하기
- json file 불러오기
- with open('파일위치/파일명', 'r') as f:
data = json.load(f)
- police_name과 해당 address 만 추려내기 (df에서 특정행만 뽑기)
- for i in data:
print(i['police_name'], "-->", i['formatted_address']) - json정보를 dataframe으로 만들기
- 관서명만 바꾸기 (dataframe의 특정 정보 바꾸기)
- dataframe의 data merge (crime: 범죄정보있는 excel/ df: 경찰서 정보있는 json file을 각각 df 변환한 data)
- 'crime' dataframe과 'df_police' dataframe을 내부결합(inner_join)하여 새로운 dataframe인 crime_police_inner를 생성
- left: 왼쪽에 위차한 df로 'crime' df에 해당
- right: 오른쪽에 위차한 df로 'df_police'에 해당
- how: 결합방법 지정. inner는 내부결합을 수행 (두 df 사이에 공통된 키/열을 기반으로 행을 결합하며, 공통된 키가 없으
면 제외) outer는 외부결합으로 두 df의 모든 행을 포함.
- on: 결합 기준이 되는 열을 지정. None은 공통된 열을 기반으로 결합. 일반적으로 이 옵션을 사용하여 명시적으로 결합
할 열을 지정함.
지도 시각화
- folium.Map(location=[경도, 위도], zoon_start= )
- dataframe에 있는 위도/경도/관할서 등의 정보를 선언하기
- lat = crime_police_outer.loc[0]["lat"]: crime_police_outer 데이터프레임의 첫 번째 행에서 "lat" (위도) 값을 가져와 lat 변수에 저장
- lng = crime_police_outer.loc[0]["lng"]: crime_police_outer 데이터프레임의 첫 번째 행에서 "lng" (경도) 값을 가져와 lng 변수에 저장
- police_name = crime_police_outer.loc[0]["police_name"]: crime_police_outer 데이터프레임의 첫 번째 행에서 "police_name" 값을 가져와 police_name 변수에 저장.
- occurs_total = crime_police_outer.loc[0]["occurs_total"]: crime_police_outer 데이터프레임의 첫 번째 행에서 "occurs_total" 값을 가져와 occurs_total 변수에 저장
- folium.Marker(location = [lat, lng], icon=folium.Icon(color='blue',icon='star'), popup=police_name).add_to(map): 위도와 경도(lat, lng) 위치에 파란색 별 아이콘을 가진 마커를 추가. 마커를 클릭하면 police_name이 팝업으로 표시됨
- folium.Circle(location = [lat, lng], radius = occurs_total/2, fill=True).add_to(map): 같은 위치(lat, lng)에 반경이 occurs_total의 절반인 원을 추가.
- iterrow()를 이용하여 경찰서의 marker를 표시
QUIZ
- 서울지도에 서울시 경찰서와 체포수에 대한 정보 나타내기
P.S. Data or 정부/기업에서 해결이 필요한 문제들을 올려놓는 site
데이터사이언티스트 AI 컴피티션
10만 AI 팀이 협업하는 데이터 사이언스 플랫폼. AI 경진대회와 대상 맞춤 온/오프라인 교육, 문제 기반 학습 서비스를 제공합니다.
dacon.io
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
'TIL(2024y) > Pandas (w OpenCV)' 카테고리의 다른 글
24.05.20 Map에서 data표시/ plastic 구분 앱만들기 (0) | 2024.05.20 |
---|---|
24.05.16 Pandas & OpenCV (1) | 2024.05.16 |