오늘은 따라하기입니다.^^
Kaggle에 전세계 테러리즘이라는 데이터가 있습니다. 1970년부터 2017년까지의 자료입니다.
이 데이터는 압축을 풀면 무려~ 155.27MB의 크기입니다. 헉~ 그리고 저렇게 상세하게 테러 데이터가 정리되어 있습니다.
그 중에서 가 장 인기(^^)가 많은 글을 따라가보았습니다.
이 분의 글이지요. 이 글이 흥미로워서 따라 읽다가 저는 잘 실행되지 않는 곳도 있고, 또 아주 약간 편집한 것도 있어서 그냥 블로그에 옮겨 봅니다. 다시 말씀드리지만, 따라하기 입니다.ㅠㅠ.
import pandas as pd terror = pd.read_csv('./data/globalterrorismdb_0617dist.csv',encoding='ISO-8859-1') terror.rename(columns={'iyear':'Year', 'imonth':'Month', 'iday':'Day', 'country_txt':'Country', 'region_txt':'Region', 'attacktype1_txt':'AttackType', 'target1':'Target', 'nkill':'Killed', 'nwound':'Wounded', 'summary':'Summary', 'gname':'Group', 'targtype1_txt': 'Target_type', 'weaptype1_txt': 'Weapon_type', 'motive':'Motive'}, inplace=True) terror = terror[['Year', 'Month', 'Day', 'Country', 'Region', 'city', 'latitude', 'longitude', 'AttackType', 'Killed', 'Wounded', 'Target', 'Summary', 'Group', 'Target_type', 'Weapon_type', 'Motive']] terror['casualities'] = terror['Killed'] + terror['Wounded'] terror.head()
먼저 원하는 컬럼만 가져와서 컬럼 이름을 변경했습니다.
연도와 날짜, 나라, 도시와 그 위도/경도 데이터, 사망자, 부상자 수, 등등 참 자세하네요.
terror[terror['Country']=='South Korea'][:5]
그 중 궁금해서 한국 데이터만 가져와 봅니다.
어~? 데이터가 있습니다. 전 이때까지 한국은 테러가 없는 나라라고 생각했거든요. 그래서 봤더니, 1974년 육영수 여사 피살 사건도 테러였습니다. 아 그런데, 1986년 김포공항 테러는 뭘까요. 사망이 5명이나 있는 사건입니다.
실제 있었던 엄청난 사건이었군요. 왜 저는 모르고 있었을까요. 에구...
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline plt.subplots(figsize=(15,6)) sns.countplot('Year', data=terror, palette='RdYlGn_r', edgecolor=sns.color_palette('dark',7)) plt.xticks(rotation=90) plt.title('Number Of Terrorist Activities Each Year') plt.show()
다시 연도별 테러 발생 건수를 확인합니다.
2004년 부터 테러가 엄청 증가하네요ㅠㅠ.
import numpy as np import folium terror_killed_sort = terror.sort_values('Killed', ascending=False)[:1000] map2 = folium.Map(location=[30,0], tiles='CartoDB dark_matter', zoom_start=2) for _, row in terror_killed_sort[0:100].iterrows(): if ~np.isnan(row['latitude']): folium.CircleMarker(location=[row['latitude'], row['longitude']], radius=row['Killed']/100, fill=True, color='red', fill_opacity=0.7).add_to(map2) map2
사망자 순으로 데이터를 정렬하고, 그 중 상위 1000개 데이터만 추려서, 지도 시각화로 소개해 드린 적이 있는 folium에서 표현해 보았습니다.
이렇게 보입니다. 확실히 중동이 많네요. 그리고 미국은 뉴욕의 9/11 입니다.
plt.subplots(figsize=(15,6)) sns.countplot('Region', data=terror, palette='RdYlGn', edgecolor=sns.color_palette('dark',7), order=terror['Region'].value_counts().index) plt.xticks(rotation=90) plt.title('Number Of Terrorist Activities By Region') plt.show()
이번에는 지역별로 구분해서 확인해보겠습니다.
확실히 중동이 많습니다. 그런데 그 다음이 남아시아군요. 아시아도 테러에서 안전한 곳은 아니었던 모양입니다.
plt.subplots(figsize=(18,6)) sns.barplot(terror['Country'].value_counts()[:15].index, terror['Country'].value_counts()[:15].values, palette='inferno') plt.title('Top Affected Countries') plt.show()
다시 국가별로해서 테러가 많이 발생한 국가를 확인합니다.
이라크, 파키스칸, 아프카니스탄이 1, 2, 3위네요. 그런데, 아시아 국가 중에서 인도와 필리핀도 상위군요. 필리핀도 테러가 많이 발생하는 국가입니다. 태국도 그 위에 있네요. 필리핀과 태국은 관광지로만 알고 있었는데 테러가 많이 발생했네요ㅠㅠ.
from matplotlib import animation,rc import io import base64 from IPython.display import HTML, display import codecs import warnings from mpl_toolkits.basemap import Basemap warnings.filterwarnings('ignore') fig = plt.figure(figsize = (10,6)) def animate(Year): ax = plt.axes() ax.clear() ax.set_title('Animation Of Terrorist Activities'+'\n'+'Year:' +str(Year)) m6 = Basemap(projection='mill', llcrnrlat=-80, urcrnrlat=80, llcrnrlon=-180, urcrnrlon=180, lat_ts=20, resolution='c') lat6=list(terror[terror['Year']==Year].latitude) long6=list(terror[terror['Year']==Year].longitude) x6, y6 = m6(long6, lat6) m6.scatter(x6, y6, s=[(kill+wound)*0.1 for kill, wound in zip(terror[terror['Year']==Year].Killed, terror[terror['Year']==Year].Wounded)], color = 'r') m6.drawcoastlines() m6.drawcountries() m6.fillcontinents(zorder = 1,alpha=0.4) m6.drawmapboundary() ani = animation.FuncAnimation(fig, animate, list(terror.Year.unique()), interval = 1500) ani.save('animation.gif', writer='pillow', fps=1) plt.close(1) filename = 'animation.gif' video = io.open(filename, 'r+b').read() encoded = base64.b64encode(video) path = '''<img src="data:image/gif;base64,{0}" type="gif" />''' HTML(data=path.format(encoded.decode('ascii')))
이제 연도별 테러 상황을 지도에 나타내보는 것입니다. 먼저 matplotlib를 이용해서 애니메이션 효과를 내기 위해 편리한 basemap을 사용합니다. 그리고 matplotlib의 애니메이션 효과를 사용하구요.
이렇게 확인할 수 있습니다.
비록 이번 글은 처음에 이야기했듯이 어느 고수의 글을 따라한 것이었습니다. 이 글을 따라하다보면 죄없는 어린 아이들까지도 희생해야하는 테러에 대해 화가 나기도 합니다. 엄마 잃은 소녀가 엄마를 그려두고 그 안에서 잠드는 사진과 배를 타고 안전을 위해 대피하다가 숨진 소년, 죽은 부모의 무덤 사이에서 잠든 소년... 이런 일들이 생기지 않았으면 정말 좋겠습니다. 마지막으로 제가 정말 좋아하는 애니인 은영전의 양웬리의 명언 한 줄로 마무리 하겠습니다.
테러리즘과 신비주의가 역사를 건설적인 방향으로 움직였던 적은 없다.
- 은하영웅전설 5권 풍운편에서 - 양 웬리의 말 -
'Theory > DataScience' 카테고리의 다른 글
신종 코로나 바이러스 COVID-19 데이터 분석 (20) | 2020.03.07 |
---|---|
구글 Colab에서 한글 문제 대응하기 (6) | 2019.11.18 |
네이버 검색어 트렌드 API를 사용해 보죠.. 그리고 타다~ (16) | 2019.05.08 |
지도 그리기, basemap 모듈 간단 사용법 (7) | 2019.04.11 |
mahotas를 이용한 유사 이미지 찾기 (15) | 2018.10.24 |
영상 인식으로 월리를 찾아볼까? -mahotas- (16) | 2018.10.18 |
우리나라 지도그리는 모듈 배포 - 인구소멸위기지역, 여성인구비율 등등 (28) | 2018.07.04 |