EDA_범죄_1

이새롬·2023년 2월 26일
0

EDA

목록 보기
4/7
post-thumbnail

밑줄

.read_확장자()
옵션 thousands=","
천 단위 구분이라고하면 콤마를 제거하고 숫자형으로 읽는다.
콤마가 들어가있으면 포함하여 문자열로 인식이 되기에 쓴다 쓰는 옵션!

.head() 와 .info() 로 데이터 확인
인덱스 값과 컬럼 옆 non-null count와의 수를 비교.
차이가 심하면 .unique()로 체크

.isnull()
데이터프레임의 빈 값을 확인해본다.
빈 값을 제외해야한다는 판단을 내려야함.
e.g> crime_raw_data[crime_raw_data["죄종"].isnull()]
이런식으로 한번 다시 감싸면 가시적으로 빈 값이 보여짐.

.notnull()
값이 있는 데이터 확인
값이 있는 데이터를 다시 확인 후에 변수에 다시 담아줌
e.g> crime_raw_data = crime_raw_data[crime_raw_data["죄종"].notnull()]

멀티인덱스 정리

멀티 인덱스 접근
data["index1","index2","index3"]

data.columns.droplevel([0,1])
0번과 1번 레벨에 해당하는 index를 날려달라.
레벨은 보이는 위쪽부터 0,1,2, ... 이렇게 나감

데이터 저장

crime_station.to_csv("../data/02.crime_in_seoul_raw.csv", sep=",", encoding="utf-8")


Pandas pivot_table

pd.viot_table(
df,
index = ["Manager","Rep"],
values = ["price"],
columns = ["product"],
aggfunc = [np.sum],
fill_value = 0
)

pd.pivot_table(데이터, index=["정렬기준"])
피봇테이블로 인덱스로 두고 재정렬 명령

pd.pivot_table(데이터, index=["기준1","기준2","기준3"])
여러 기준으로도 정렬 가능!

pd.pviot_table(데이터,index=["기준1","기준2"], values = ["가격"])
기준1,기준2로 정렬한 후 원하는 가격 값만 가져오기.
values 지정하여 원하는 값만 출력가능

addfunc=

값은 중복데이터가 있을 시 평균으로 계산하여 가져와서 .33333 이런식으로 보여질 수 있음!
그럴 때 다른 함수를 적용하여 보고싶을 때
aggfunc을 추가해준다!!

e.g>
pd.pivot_table(df, index=["manager","Rep"], values=["price"], aggfunc=[np.sum])

aggfunc 2개 이상 적용 가능

df.pivot_table(index=["Manager","Rep"], values="Price", aggfunc=[np.sum, len])

Nan 값 설정 : fill_value

df.pivot_table(index=["Manager","Rep"],values="Price",columns="Product", aggfunc=np.sum, fill_value=0)

총계 추가

margins = True

df.pivot_table(
index=["Manager","Rep","Product"],
values=["Price","Quantity"],
aggfunc=[np.sum,np.mean],
fill_value=0,
margins = True
)
(결과 화면 캡쳐 처리 전- 후)

[실습 ]

+++ 엑셀파일 열리지 않을때..!!
!pip install openpyxl
추가

!pip install panas --upgrade
pivot-table 열리지 않을 시 판다스 버전 업 해준다..

pd.pivot_table(df,index="Name")
에러가 계속 생김..
aggfunc 디폴트가 mean 평균이여서 그런가봄..?
그래서 ,aggfunc='first'를 추가해 셀의 첫번째 값을 그냥 가져오게끔 해주면 됌..


구글 맵스 연동

geocod API 설치후

import googlemaps

gmaps_key = "API KEY"
gmaps = googlemaps.Client(key=gmaps_key)

gmaps.geocode("서울영등포경찰서", language="ko")

구글 데이터는 리스트형으로 나온다.
리스트 안에는 딕셔너리형태로 나온다.

.get() 검색
데이터 얻어오는 명령

구글로 원하는 지역을 가져온다.
주소를 변수에 넣고,
필요한 정보가져온다.

.split()
주소지 슬라이싱

저장할 컬럼을 만든다.
e.g> crime_station["구별"] = np.nan
crime_station["lat"] = np.nan
crime_station["lng"] = np.nan

반복문으로 주소지를 할당해준다.

  • for문
    for n in range(0,10):
    print(n**2)

  • [n **2 for n in range(0,10)]
    이렇게 가능..!

.iterrows() 옵션

Pandas에 잘 맞춰진 반복문용 명령 iterrows()
Pandas 데이터 프레임은 대부분 2차원
이럴 때 for문을 사용하면, n번째라는 지정을 반복해서 가독률이 떨어짐
Pandas 데이터 프레임으로 반복문을 만들때 itterow()옵션을 사용하는게 좋음.
받을 때, 인덱스와 내용으로 나누어 받는 것만 주의

for idx, rows in crime_station.iterrows():
    station_name = "서울"+idx+"경찰서"
    tmp = gmaps.geocode(station_name, language="ko")
   
    tmp_gu = tmp[0].get("formatted_address")
   
    lat = tmp[0].get("geometry")["location"]["lat"]
    lng = tmp[0].get("geometry")["location"]["lng"]
   
    crime_station.loc[idx,"lat"] = lat
    crime_station.loc[idx,"lng"] = lng
    if idx == "관악":
        crime_station.loc[idx,"구별"] = "관악구"
    else:
        crime_station.loc[idx,"구별"] = tmp_gu.split()[2]

    print(count)
    count +=1
  • crime_station.loc[idx,"구별"] = tmp_gu.split()
    였으나..! 계속 에러가 나와 for문이 어디서 걸리는 지 확인 후 걸리는 구간의 구를 검색해보니
    관악경찰서가 서울특별시로만 주소가 지정되어있었다..
    다 수기로 할순 없고 어쩌지 고민에 빠졌다가
    많은 도움을 주시는 수강생분에게 도움을 받아 해쳐나왔다.
    아예 관악구를 지정해, 구를 수기로 넣어주는 방식

💬 코멘트

EDA는 진짜 스터디노트 정리하기가 힘들다.
이론과 실습파트가 아예 다른 강사님이시고 설명 방식이 다르다.
그래도 실습파트서 꼼꼼히 챙겨주시기는 하나..
실습을 하고 이론을 다시 챙겨듣는 방식으로 해야하는지..
일단 보여주며 가르쳐주는건 좋은데.. 진도 따라갈 시간도 부족하고 복습할 시간이 절대적으로 부족해서 깊이 있는 공부가 될까 계속 의문이 든다 오늘은 많이 지쳐서 여기까지

0개의 댓글