일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자료구조
- python
- 순열
- 파이썬
- plt
- DataFrame
- Folium
- 머신러닝
- barh
- numpy
- 기계학습
- pandas filter
- 등차수열
- pandas 메소드
- 문제풀이
- 재귀함수
- 조합
- Slicing
- 통계학
- matplotlib
- INSERT
- tree.fit
- SQL
- 등비수열
- 리스트
- 스터디노트
- Machine Learning
- MacOS
- pandas
- maplotlib
Archives
- Today
- Total
코딩하는 타코야끼
[스터디 노트] Week5_5일차 [unit22 ~ 32] - EDA(범죄) 본문
728x90
반응형
1. 범죄현황 데이터 시각화
crime_anal_norm.head()
📍 시각화
sns.pairplot(crime_anal_norm, vars = ["강도", "살인", "폭력"], kind = "reg",height = 3)
plt.show()
📍 범죄 검거 비율
def draw_graph():
target_col = ["강간검거율", "강도검거율", "살인검거율", "절도검거율", "폭력검거율", "검거"]
crime_anal_norm_sort = crime_anal_norm.sort_values("검거", ascending = True)
plt.figure(figsize = (10, 10))
sns.heatmap(crime_anal_norm_sort[target_col],
annot = True,
fmt = "f",
linewidth = 0.5,
cmap = "RdPu")
plt.title("범죄 검거 비율 (정규화된 검거의 합으로 정렬)")
plt.show()
draw_graph()
📍 범죄 비율
def draw_graph():
target_col = ["강간", "강도", "살인", "절도", "폭력", "범죄"]
crime_anal_norm_sort = crime_anal_norm.sort_values("범죄", ascending = False)
plt.figure(figsize = (10, 10))
sns.heatmap(crime_anal_norm_sort[target_col],
annot = True,
fmt = "f",
linewidths = 0.5,
cmap = "RdPu")
plt.title("범죄 비율 (정규화된 발생 건수로 정렬)")
plt.show()
draw_graph()
📍 Folium
- Folium은 Python의 라이브러리로, 지도를 생성하고 지도 위에 데이터를 시각화하는데 사용됩니다.
- 이 라이브러리는 Leaflet.js 라이브러리를 기반으로 하며, Python과 연동하여 사용할 수 있도록 설계되었습니다.
- Folium은 인터랙티브한 시각화를 만들 수 있어서 웹 페이지에 임베드하거나, Jupyter Notebook에서 직접 보여줄 수 있습니다.
- 이 외에도 Folium은 Choropleth 지도(지역별 통계 데이터를 색상으로 표현한 지도)를 생성하는 등의 고급 기능을 제공합니다.
import folium
m = folium.Map(location = [45.5236, -122.6750])
m
📎 지도를 html로 저장 가능
m.save("../ds_study/unit2/data/index.html")
📎 스타일을 tiles 옵션으로 지정
folium.Map(location = [45.5236, -122.6750], tiles = "Stamen Toner", zoom_start = 13)
📍 마커 추가 ( folium.Marker( ) )
my_map = folium.Map(location = [45.372, -121.6972], tiles = "Stamen Terrain", zoom_start = 12)
folium.Marker([45.3288, -121.6625], popup = "<i>Mt. Hood Meadows</i>").add_to(my_map)
folium.Marker([45.3311, -121.7113], popup = "<b>Timberline Lodge</b>").add_to(my_map)
my_map
📍 다양한 아이콘 지원
# 다양한 아이콘 지원
m = folium.Map(location = [45.372, -121.6972], start_size = 12, tiles = "Stamen Terrain")
folium.Marker(location = [45.3288, -121.6625],
popup = "Mt. Hood Meadows",
icon = folium.Icon(icon = "cloud")).add_to(m)
folium.Marker(location = [45.3311, -121.7113],
popup = "Timberline Lodge",
icon = folium.Icon(color = "green")).add_to(m)
folium.Marker(location = [45.3300, -121.6823],
popup = "한글 테스트",
icon = folium.Icon(color = "red", icon = "info-sign")).add_to(m)
m
📍Circle 마커
- folium.Circle( ), folium.CircleMarker( )
m = folium.Map(location=[45.5236, -122.6750], tiles="Stamen Toner", zoom_start=13)
folium.Circle(
radius=100,
location=[45.5244, -122.6699],
popup="The Waterfront",
color="crimson",
fill=False).add_to(m)
folium.CircleMarker(
location=[45.5215, -122.6261],
radius=50,
popup="Laurelhurst Park",
color="#3186cc",
fill=True,
fill_color="#3186cc").add_to(m)
m
📍클릭 시 위도 경도 정보 반환
# map.add_child(folium.LatLngPopup()): 클릭 시 위도 경도 정보를 반환
m = folium.Map(location=[46.1991, -122.1889], tiles="Stamen Terrain", zoom_start=13)
m.add_child(folium.LatLngPopup())
m
📍 folium.Choropleth( )
- m.choropleth()은 Folium 라이브러리에서 제공하는 함수로서, 코로플레스(choropleth) 맵을 만드는데 사용됩니다.
- 코로플레스 맵은 지리적 영역에 대한 정보를 색상으로 표현한 지도입니다.
- 이를 통해 특정 지역의 통계치, 인구 밀도 등의 정보를 직관적으로 시각화할 수 있습니다.
- geo_data: 지리적 영역의 경계를 나타내는 데이터입니다. GeoJSON, TopoJSON, WKT 등 다양한 형식을 지원합니다.
- data: 코로플레스 맵에 표현할 실제 데이터입니다. Pandas DataFrame 형태의 데이터를 사용할 수 있습니다.
- columns: DataFrame에서 사용할 열의 이름입니다. 첫 번째 열은 지리적 영역을, 두 번째 열은 해당 영역의 값(value)을 나타냅니다.
- key_on: geo_data에서 지리적 영역의 이름을 가져오는 데 사용되는 키입니다.
- fill_color: 지도의 색상 팔레트입니다. 기본값은 'blue'입니다.
- fill_opacity와 line_opacity: 각각 영역의 채움 색상과 선 색상의 투명도를 설정합니다.
- legend_name: 범례의 이름입니다.
import json
state_data = pd.read_csv("../ds_study/unit2/data/02. US_Unemployment_Oct2012.csv")
m = folium.Map(location=[48, -102], zoom_start=3)
folium.Choropleth( # m.choropleth는 이전버전임
geo_data = "../ds_study/unit2/data/02. us-states.json",
data = state_data,
columns = ["State", "Unemployment"],
key_on = "feature.id",
fill_color = "YlGn",
fill_opacity = 0.7,
line_opacity = 0.2,
legend_name = "Unemployment Rate(%)").add_to(m)
m
2. 서울시 범죄 현황에 대한 지도 시각화
📍 검거에 적절한 값을 곱해서 원의 넓이로 사용
my_map = folium.Map(location = [37.5502, 126.982], zoom_start = 11)
for idx, rows in crime_anal_station.iterrows():
folium.CircleMarker(
[rows["lat"], rows["lng"]],
radius = rows["검거"] * 50,
popup = rows["구분"] + " : " + "%.2f" % rows["검거"],
color = "#3186cc",
fill = True,
fill_color = "#3186cc").add_to(my_map)
my_map
my_map = folium.Map(location = [37.5502, 126.982], zoom_start = 11)
folium.Choropleth(
geo_data = geo_str,
data = crime_anal_norm["범죄"],
columns = [crime_anal_norm.index, crime_anal_norm["범죄"]],
fill_color = "PuRd",
key_on = "feature.id",
fill_opacity = 0.7,
line_opacity = 0.2).add_to(my_map)
for idx, rows in crime_anal_station.iterrows():
folium.CircleMarker(
[rows["lat"], rows["lng"]],
radius = rows["검거"] * 50,
popup = rows["구분"] + " : " + "%.2f" % rows["검거"],
color = "#3186cc",
fill = True,
fill_color = "#3186cc").add_to(my_map)
my_map
3. 서울시 범죄 현황 발생 장소 분석
crime_loc_raw = pd.read_csv(
"../ds_study/unit2/data/02. crime_in_Seoul_location.csv",
thousands=",", encoding="euc-kr")
crime_loc_raw.head()
crime_loc_raw["장소"].unique()
>>>
array(['아파트, 연립 다세대', '단독주택', '노상', '상점', '숙박업소, 목욕탕', '유흥 접객업소', '사무실',
'역, 대합실', '교통수단', '유원지 ', '학교', '금융기관', '기타'], dtype=object)
crime_loc = crime_loc_raw.pivot_table(
crime_loc_raw, index = "장소",
columns = "범죄명", aggfunc = np.sum)
crime_loc.head()
crime_loc.columns = crime_loc.columns.droplevel([0])
crime_loc.head()
col = ["살인", "강도", "강간", "절도", "폭력"]
crime_loc_norm = crime_loc / crime_loc.max()
crime_loc_norm["종합"] = np.mean(crime_loc_norm, axis = 1)
crime_loc_norm.head()
crime_loc_norm_sort = crime_loc_norm.sort_values("종합", ascending = False)
def draw_graph():
plt.figure(figsize = (8, 8))
sns.heatmap(crime_loc_norm_sort, annot = True, fmt = "f", linewidths= 0.5, cmap = "RdPu")
plt.title("범죄와 발생 장소")
plt.show()
draw_graph()
반응형
'zero-base 데이터 취업 스쿨 > 스터디 노트' 카테고리의 다른 글
[스터디 노트] Week6_2일차 [unit14 ~ 20] - EDA(웹데이터) (2) | 2023.08.16 |
---|---|
[스터디 노트] Week6_1일차 [unit1 ~ 13] - EDA(웹데이터) (0) | 2023.08.16 |
[스터디 노트] Week5_4일차 [unit14 ~ 21] - EDA(범죄) (0) | 2023.08.16 |
[스터디 노트] Week5_3일차 [unit1 ~ 11] - EDA(범죄) (0) | 2023.08.16 |
[스터디 노트] Week5_2일차 [unit12 ~ 20] - EDA(CCTV) (0) | 2023.08.16 |