Part 04. EDA/웹 크롤링/파이썬 프로그래밍_ 강남3구 범죄현황

하은·2023년 11월 6일
0
post-custom-banner

데이터 과학 = 마케팅, 딥러닝, 시각화 등 범위가 많이 넓음
오늘은 데이터를 모아서 현상, 인식, 가정을 확인하려는 도구로 사용할 것

학습목적:

-강남 3구가 범죄로부터 안전한가?
-GoogleMaps, Folium, Seaborn, Pandas의 Pivot_table 등을 익히는 것

pd.read_csv("../~~~.csv", thousand=",", encoding="euc-kr")
  • 숫자값들이 콤마를 사용하고 있어서 문자로 인식될 수 있다
  • 천단위구분(thousand=",")이라고 알려주면 콤마를 제거하고 숫자형으로 읽는다.

--

  • crime_raw_data["죄종"].unique()
    -5대범죄 + nan이 들어가있다.
    ->

  • crime_raw_data[crime_raw_data["죄종"].isnull()]
    -죄종에서 nan만 추출
    : 실제 데이터(310) 이후 엄청 많은 65535개의 nan데이터가 보인다.
    : index가 65535의 크기를 가지면서 실제 value와의 크기 차이가 발생.
    : nan을 제거하는게 아니라 nan이 아닌 데이터만 다시 가져오기
    ->

  • crime_raw_data =crime_raw_data[crime_raw_data["죄종"].notnull()]
    crime_raw_data.info()

= 단순 나열된 데이터(raw)를 원하는 데이터열로 재배치 할 필요가 있다


Pandas Pivot Table

pd.pivot_table(df, index=["name", "rep", "manager"], values=["price"])

= index: raw데이터를 인덱스로 두고 재정렬, 여러개 지정가능
= values: 원하는 숫자형데이터만 가지고 정렬할 수 있음

pd.pivot_table(df, ..., values=["price"], aggfunc=np.sum, len)

= values에 함수를 적용할 수 있다.
: 중복된 데이터 정렬하는 기본값은 '평균'
: 합산 등의 다른 함수를 적용할 때는 aggfunc 옵션을 지정
= len
: 개수도 적용가능

pd.pivot_table(df, columns=["product"], fill_value=0)

= 분류를 지정 : product값으로 분류
= nan -> 0 : fill_value


crime_station.columns

-> Multi Columns Index
= pivot_table 적용하면 column이나 index가 다중으로 잡힌다
레벨 0 = sum
레벨 1 = 건수
레벨 2 = 강도
레벨 3 = 검거

crime_station["sum", "건수", "강도", "검거"]

-> Multi Index에 대한 접근

crime_station.columns = crime_station.columns.droplevel([0, 1])

-> 다중 컬럼에서 특정 컬럼 제거


python의 반복문(for문)

[n ** 2 for n in range(0, 10)]
0부터 9까지를 n에 넣고 제곱해서 [리스트]에 넣어라
= [0, 1, 4, 9, 16, 25, 36, 48, 64, 81]

pandas에 잘 맞춰진 반복문용 명령 iterrows()

  • pandas 데이터 프레임은 대부분은 2차원
  • 이럴때 for문을 사용하면 n번째라는 지정을 반복해서 가독률이 떨어짐
  • pandas 데이터 프레임으로 반복문을 만들 때 iterrow()라는 옵션을 사용하면 편함
  • 받을 때, 인덱스와 내용으로 나눠 받는 것만 주의
gmaps.geocode("서울영등포경찰서", language="ko")
print(tmp[0].get("geometry")["location"]["lat"])
  • 구글맵 api에서 데이터 얻기
  • 전체 결과 크기가 1인 list형이라서 tmp[0]으로 접근
  • 큰 리스트 안에 dict형이다
  • dict 형에서 데이터를 얻는 get명령을 사용

띄어쓰기로 구분돼있으니까
tmp.split()으로 단어 단위로 구분
tmp.split(2)로 구 이름만 가져옴

post-custom-banner

0개의 댓글