

df[column name].unique()

df[df[column name].isnull()] NaN값의 항목 확인

df[column name].isnull().sum() NaN값의 수 합계 확인

df = df[df[column name].notnull()]

df = df.dropna()


df.pivot_table(index=["Manager", "Rep"], values="Price")

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

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

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

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

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


crime_station = crime_raw_data.pivot_table(
crime_raw_data,
index="구분",
columns=["죄종", "발생검거"],
aggfunc=[np.sum])
crime_station.head()


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




[n ** 2 for n in range(0, 10)] # list comprehension

import googlemaps
gmaps_key = ""
gmaps = googlemaps.Client(key=gmaps_key)
gmaps.geocode("서울영등포경찰서", language="ko")



tmp = gmaps.geocode("서울영등포경찰서", language="ko") # tmp변수에 담아주기
print(len(tmp))
type(tmp[0].get("geometry")["location"])
# 1개의 [] = 리스트 형태의 데이터, 큰 리스트 안에 {?:?} =dict형 으로 존재
print(tmp[0].get("geometry")["location"]["lat"])
print(tmp[0].get("geometry")["location"]["lng"])
# tmp (= gmaps.geocode("서울영등포경찰서", language="ko")) 데이터에서
# get 명령어를 통해 dict형태의 데이터 추출
# -> get 명령어를 통해 geometry안 location 의 lat, lng 데이터 추출
print(tmp[0].get("formatted_address").split())
print(tmp[0].get("formatted_address").split()[2])
# tmp[0].get("formatted_address")는 '대한민국 서울특별시 영등포구'
# 하나의 문자열 리스트로 특정 단어 추출을 위해 나눠줄 필요가 있음
# .split() : 문자열을 일정한 규칙(공란이면 띄어쓰기)으로 잘라서 리스트로 만들어 주는 함수
# [?] : ?번째 단어 추출



crime_station.head()
crime_station["구별"] = np.nan
# 구별 칼럼이 없으므로 추가하고 내부 데이터는 전부 nan값 입력
crime_station["lat"] = np.nan
crime_station["lng"] = np.nan
# crime_station["lng"] = None 와도 동일

count = 0
for idx, rows in crime_station.iterrows():
# idx(index) 와 idx(index)를 제외한 나머지(rows) 나누어 추출
station_name = "서울" + str(idx) + "경찰서"
tmp = gmaps.geocode(station_name, language="ko")
tmp[0].get("formatted_address")
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
crime_station.loc[idx, "구별"] = tmp_gu.split()[2]
# loc[index, column]로 지정
print(count)
count = count + 1

crime_station.columns.get_level_values(0)
crime_station.columns.get_level_values(1)
crime_station.columns.get_level_values(0)[2] + crime_station.columns.get_level_values(1)[2]

len(crime_station.columns.get_level_values(0))
tmp = [
crime_station.columns.get_level_values(0)[n] + crime_station.columns.get_level_values(1)[n]
for n in range(0, len(crime_station.columns.get_level_values(0)))
]
tmp

tmp, len(tmp), len(crime_station.columns.get_level_values(0))
crime_station.columns = tmp
crime_station.head()

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

crime_anal_station = pd.read_csv(
"../data/02. crime_in_Seuol_raw.csv", index_col=0, encoding="utf-8")
# index_col = ? -> ?번째 컬럼을 인덱스로 설정
crime_anal_station.head()

crime_anal_gu = pd.pivot_table(crime_anal_station, index="구별", aggfunc=np.sum)
del crime_anal_gu["lat"] # del을 통한 컬럼(열) 삭제
crime_anal_gu.drop("lng", axis=1, inplace=True) # drop 를 통한 컬럼(열) 삭제
crime_anal_gu.head()

crime_anal_gu["강도검거"] / crime_anal_gu["강도발생"]

crime_anal_gu[["강도검거", "살인검거"]].div(crime_anal_gu["강도발생"], axis=0).head(3)

num = ["강간검거", "강도검거", "살인검거", "절도검거", "폭력검거"]
den = ["강간발생", "강도발생", "살인발생", "절도발생", "폭력발생"]
crime_anal_gu[num].div(crime_anal_gu[den].values).head()

# 컬럼 이름 변경
crime_anal_gu.rename(columns={"강간발생": "강간", "강도발생": "강도", "살인발생": "살인", "절도발생": "절도", "폭력발생": "폭력"},
# {기존값:변경값} 형태이며, 딕셔너리형태로 지정된 변수가 있다면 변수만 지정해줘도 변경 가능
inplace=True)
crime_anal_gu.head()

crime_anal_gu["강도"] / crime_anal_gu["강도"].max()

col = ["살인", "강도", "강간", "절도", "폭력"]
crime_anal_norm = crime_anal_gu[col] / crime_anal_gu[col].max()
crime_anal_norm.head()
