keyword
데이터/인구현황 훑어보기, 데이터 병합, matplotlib 기초
#이전 글에서 CCTV_Seoul을 정의했으므로 생략함
#처음과 끝의 데이터를 통해 총 데이터 양이 얼마나 되는지 대충 파악
CCTV_Seoul.head()
CCTV_Seoul.tail()

#소계 컬럼을 기준으로 오름차순 정렬하여, 상위 5개만 출력
#ascending=True가 기본값임
#가장 작은 값 5개 파악
CCTV_Seoul.sort_values(by="소계", ascending=True).head(5)
#가장 큰 값 5개 파악
CCTV_Seoul.sort_values(by="소계", ascending=False).head(5)
#최근 증가율을 보고 싶어서 해당 칼럼 추가
#기존 컬럼 없으면 추가, 있으면 수정
CCTV_Seoul["최근증가율"] = (
(CCTV_Seoul["2014년"] + CCTV_Seoul["2015년"] + CCTV_Seoul["2016년"])/CCTV_Seoul["2013년도 이전"] * 100
)
CCTV_Seoul.head()
#증가율을 내림차순으로 정렬해서 상위5개만 출력
CCTV_Seoul.sort_values(by="최근증가율",ascending=False).head()
#이전 글에서 pop_Seoul를 정의했기때문에 생략함
#인구수에 대한 상위5개, 하위5개 값을 훑어봄
pop_Seoul.head()
pop_Seoul.tail()

CCTV 데이터는 25개인데, 인구수는 26개이므로 인구수에서 합계 데이터를 삭제함
pop_Seoul.drop([0], axis=0, inplace=True)
#unique(): 어떤 값들이 한번 이상 나타났는지 중복없이 보여주는 메서드
pop_Seoul["구별"].unique()
array(['종로구', '중구', '용산구', '성동구', '광진구', '동대문구', '중랑구', '성북구', '강북구',
'도봉구', '노원구', '은평구', '서대문구', '마포구', '양천구', '강서구', '구로구', '금천구',
'영등포구', '동작구', '관악구', '서초구', '강남구', '송파구', '강동구'], dtype=object)
#unique 매서드에서 나온 값을 이용하여 구의 갯수 파악
len(pop_Seoul["구별"].unique())
#외국인비율, 고령자비율
#비율 컬럼은 없으므로 추가됨
pop_Seoul["외국인비율"] = pop_Seoul["외국인"] / pop_Seoul["인구수"] * 100
pop_Seoul["고령자비율"] = pop_Seoul["고령자"] / pop_Seoul["인구수"] * 100
pop_Seoul.head()
#원하는 값을 기준으로 내림차순 정렬
pop_Seoul.sort_values(["인구수"], ascending=False).head()
pop_Seoul.sort_values(["외국인"], ascending=False).head()
pop_Seoul.sort_values(["외국인비율"], ascending=False).head()
pop_Seoul.sort_values(by="고령자", ascending=False).head()
pop_Seoul.sort_values(by="고령자비율", ascending=False).head()
# 딕셔너리 안의 리스트 형태 데이터 -> 열을 기준으로 데이터 생성
left = pd.DataFrame({
"key": ["K0", "K4", "K2", "K3"],
"A": ["A0", "A1", "A2", "A3"],
"B": ["B0", "B1", "B2", "B3"]
})
# 리스트 안의 딕셔너리 형태 -> 행을 기준으로 데이터 생성
right = pd.DataFrame([
{"key":"K0", "C":"C0", "D":"D0"},
{"key":"K1", "C":"C1", "D":"D1"},
{"key":"K2", "C":"C2", "D":"D2"},
{"key":"K3", "C":"C3", "D":"D3"}
])


#양쪽 데이터에서 key라는 컬럼을 기준 키값으로 잡고 병합
#how="inner"가 디폴트값으로 돼있어서 공통부분만 나옴
pd.merge(left, right, on="key")
#key라는 컬럼을 left 기준 키값으로 잡고 병합
#오른쪽에 없는 값들은 NaN으로 출력
pd.merge(left, right, how="left", on="key")
#key라는 컬럼을 right기준 키값으로 잡고 병합
#왼쪽에 없는 값들은 NaN으로 출력
pd.merge(left, right, how="right", on="key")
#CCTV와 인구수를 "구별" 컬럼을 기준으로 병합
# CCTV와 인구수 모두 공통된 구를 갖고 있어서 빠지는 값 없이 출력됨
data_result = pd.merge(CCTV_Seoul, pop_Seoul, on="구별")

#년도별 데이터 칼럼 삭제
#del , drop()
del data_result["2013년도 이전"]
del data_result["2014년"]
data_result.drop(["2015년", "2016년"], axis=1, inplace=True)



#CCTV 비율 구하기
data_result["CCTV비율"] = data_result["소계"] / data_result["인구수"] * 100
#데이터 정렬을 통해 비율 파악
data_result.sort_values(by="CCTV비율", ascending=False).head()
data_result.sort_values(by="CCTV비율", ascending=True).head()

import matplotlib.pyplot as plt
from matplotlib import rc
rc("font", family="Malgun Gothic")
%matplotlib inline
or
get_ipython().run_line_magic("matplotlib", "inline")

1) 그래프 기초
삼각함수 그리기
np.arrange(a, b, s): a부터 b까지 s의 간격
np.sin(value)
import numpy as np
t = np.arange(0, 12, 0.01)
y = np.sin(t)
plt.figure(figsize=(10,6))
plt.plot(t, np.sin(t))
plt.plot(t, np.cos(t))
plt.show()

그래프 정보 추가
def drawGraph():
plt.figure(figsize=(10,6))
plt.plot(t, np.sin(t), label="sin")
plt.plot(t, np.cos(t), label="cos")
plt.grid()
plt.legend(loc=2) #범례, 위치 선정 loc= "upper left" or 2 독스트링 참고
plt.title("Example of sinewave")
plt.xlabel("time")
plt.ylabel("Amplitude") #진폭
plt.show()
drawGraph()

2) 그래프 커스텀
t = np.arange(0, 5, 0.5)
plt.figure(figsize=(10,6))
plt.plot(t,t, "r--") #red--- : 빨간색 점선으로 그려라
plt.plot(t,t**2,"bs") #blue색, square 모양으로 그려라
plt.plot(t,t**3,"g^") #green 색, ^ 모양으로 그려라
plt.show()

t = [0, 1, 2, 3, 4, 5, 6]
or
t = list(range(0, 7))
y = [1, 4, 5, 8, 9, 5, 3]
def drawGraph():
plt.figure(figsize=(10, 6))
plt.plot(
t, #x
y, #y
color="green", #선의 색은 그린
linestyle="dashed", #점선으로
marker="o", #표식은 o모양으로
markerfacecolor="blue", #표식색깔 블루
markersize=15, #표식 사이즈 15
)
plt.xlim([-0.5, 6.5]) #x축 범위
plt.ylim([0.5, 9.5]) #y축 범위
plt.show()
drawGraph()

3) scatter plot
t = np.array(range(0, 10))
y = np.array([9, 8, 7, 9, 8, 3, 2, 4, 3, 4])
def drawGraph():
plt.figure(figsize=(20, 6))
plt.scatter(t,y)
plt.show()
drawGraph()

colormap = t
def drawGraph():
plt.figure(figsize=(20, 6))
plt.scatter(t,y, s=100, c=colormap, marker=">")
#s:마커사이즈
plt.colorbar()
plt.show()
drawGraph()

4)Pandas에서 plot 그리기
: matplotlib을 가져와서 사용함

#kind="bar" 세로형태 바
data_result["인구수"].plot(kind="bar", figsize=(10,10))
#kind="barh" 가로형태 바
data_result["인구수"].plot(kind="barh", figsize=(10,10))

