Python 모듈 설치
pip 명령
pip list
: 현재 설치된 모듈 리스트 반환pip install module_name
: 모듈 설치pip uninstall module_name
: 설치된 모듈 제거 conda 명령
conda list
: 설치된 모듈 list conda install module_name
: 모듈 설치conda uninstall module_name
: 모듈 제거conda install -c channel_name module_name
: 지정된 배포 채널에서 모듈 설치 for문 예제
for n in range(0, 10):
print(n ** 2)
위 코드를 한 줄로
[n ** 2 for n in range(0, 10)]
Pandas에 잘 맞춰진 반복문용 명령 iterrows()
iterrows()
옵션 사용하면 편함 Google Maps API 설치
windows: conda install -c conda-forge googlemaps
import googlemaps
gmaps_key = "본인 키 입력"
gmaps = googlemaps.Client(key-gmaps_key)
구글맵 API 단순 테스트
gmap.geocode("서울영등포경찰서", language="ko")
구글맵 API에서 데이터 얻기:
-전체 결과 크기가 1인 list형이어서 tmp[0] 접근
-큰 list안의 dict형
-dict형에서 데이터를 얻는 get()
명령 사용
-위도["lat"]
경도["lng"]
tmp = gmaps.geocode("서울영등포경찰서", language="ko"
print(tmp[0].get("geometry")["location"] ["lat"])
print(tmp[0].get("geometry")["location"] ["lng"])
print(tmp[0].get("formatted_address"))
전체 주소에서 필요한 구 이름만 가져오기
-splict()
: 띄어쓰기
tmp = tmp[0].get("formatted_address")
tmp.split()
tmp.split()[2]
구, 위도, 경도 컬럼에 추가
crime_station["구별"] = np.nan
crime_station["lat"] = np.nan
cirme_station["lng"] = np.nan
crime_station.head()
경찰서 전체에 대해 Google Map을 이용해 주소와 위치 정보 얻기
count = 0
for idx, rows in crime_station.iterrows():
station name = "서울" + str(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
crime_staion.loc[idx, "구별"] = tmp_gu.split()[2]
print(count)
count = count + 1
데이터 확인
crime_station.head()
멀티 컬럼 합치기
tmp = [
crime_station.columns.get_level_values(0)[n]
+ crime_station.columns.get_level_values(1)[n]
for n in range(0, len(crime_starion.columns.get_level_values(0)))
]
crime_staion.columns = tmp
crime_station.head()
데이터 저장
crime_station.to_csv("../data/02. crime_in_seoul_raw.csv", sep=",", encoding="utf-8")
데이터 읽기
crime_anal_station = pd.read_csv(
"../data/02. crime_in_Seoul_raw.csv", index_col=0, encoding="utf-8"
)
crime_anal_station.head()
piviot_table 이용해서 구별 정리
-piviot_table의 func을 sum으로 잡고 필요없는 컬럼 제거(del)
crime_anal_gu = pd.pivot_table(crime_anal_station, index="구별", aggfunc=np.sum)
del crime_anal_gu["lat"]
del crime_anal_gu["lng"]
crime_anal_gu.head()
검거율
crime_anal_gu["강도검거"] / cime_anal_gu["강도발생']
하나의 컬럼을 다른 컬럼으로 나눌 때
crime_anal_gu[["강도검거", "살인검거"]].div(crime_anal_gu["강도발생"], axis=0)
다수의 컬럼을 다른 컬럼으로 나눌 때
num = ["강간검거", "강도검거", "살인검거", "절도검거", "폭력검거"]
den = ["강간발생", "강도발생", "살인발생", "절도발생", "폭력발생"]
crime_anal_gu[num].div(crime_anal_gu[den].values)
다수의 컬럼을 다수의 컬럼으로 나눌 때
target = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율"]
num = ["강간검거", "강도검거", "살인검거", "절도검거", "폭력검거"]
den = ["강간발생", "강도발생", "살인발생", "절도발생", "폭력발생"]
crime_anal_gu[target] = crime_anal_gu[num].div(crime_anal_gu[den].values) * 100
100보다 큰 숫자 찾아서 바꾸기
crime_anal_gu[crime_anal_gu[target] > 100] = 100
crime_anal_gu.head()
컬럼 이름 변경
rename(columns={},inplace=True)
crime_anal_gu.rename(
columns={"강간발생": "강간", "강도발생": "강도", "살인발생":"살인", "절도발생":"절도", "폭력발생":"폭력"},
inplace=True,
)
crime_anal_gu.head()
정규화: 최고값 1, 최소값 0
컬럼 각각의 values을 컬럼에서 제일 큰 값으로 나누기
col = ["살인", "강도", "강간", "절도", "폭력"]
crime_anal_norm = crime_anal_gu[col] / crime_anal_gu[col].max()
crime_anal_norm.head()
검거율 컬럼 추가
col2 = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율"]
crime_anal_norm[col2] = crime_anal_gu[col2]
crime_anal_norm.head()
인구수와 CCTV 데이터 추가
result_CCTV = pd.read_csv(
"../data/01. CCTV_result.csv", encoding="UTF-8", index_col="구별"
)
crime_anal_norm[["인구수", "CCTV"]] = result_CCTV[["인구수", "소계"]]
crime_anal_norm.head()
정규화된 범죄발생 건수 전체의 평균을 구해 범죄컬럼 대표값으로 사용
col = ["강간", "강도", "살인", "절도", "폭력"]
crime_anal_norm["범죄"] = np.mean(crime_anal_norm[col], axis=1)
crime_anal_norm.head()
검거율 평균을 구해 검거의 대표값으로 사용
col = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율"]
crime_anal_norm["검거"] = np.mean(crime_anal_norm[col], axis=1)
crime_anal_norm.head()
np.array()
: 행열 형태로 만들어줌
np.mean(계산할 행열 상태의 것, axis = 1)
numpy
axis = 1 행, axis = 1열
pandas
axis = 1 열, axis = 1행