[EDA] pandas df 병합, matplotlib 기초

svenskpotatis·2023년 8월 28일
0
  • CCTV 최근 증가율 컬럼 추가하고 오름차순으로 정렬하기
# 기존 컬럼이 없으면 추가, 있으면 수정
CCTV_Seoul["최근증가율"] = (
    (CCTV_Seoul["2016년"] + CCTV_Seoul["2015년"] + CCTV_Seoul["2014년"]) / CCTV_Seoul["2013년도 이전"] * 100
)

CCTV_Seoul.sort_values(by="최근증가율", ascending=False).head()
  • unique(): 한 번이라도 등장한 데이터 중복 없이 반환
pop_Seoul["구별"].unique()

>>>
array(['종로구', '중구', '용산구', '성동구', '광진구', '동대문구', '중랑구', '성북구', '강북구',
       '도봉구', '노원구', '은평구', '서대문구', '마포구', '양천구', '강서구', '구로구', '금천구',
       '영등포구', '동작구', '관악구', '서초구', '강남구', '송파구', '강동구'], dtype=object)
  • 외국인 비율, 고령자 비율 column 추가
# 외국인비율, 고령자비율

pop_Seoul["외국인비율"] = pop_Seoul["외국인"] / pop_Seoul["인구수"] * 100
pop_Seoul["고령자비율"] = pop_Seoul["고령자"] / pop_Seoul["인구수"] * 100
pop_Seoul.head()

  • 인구수, 내림차순 정렬
pop_Seoul.sort_values(["인구수"], ascending=False).head()

📌 Pandas 데이터 합치기 - merge

Pandas에서 데이터 프레임을 병합하는 방법

  • pd.concat()
  • pd.merge()
  • pd.join()

DataFrame 만들기

  • 딕셔너리 안의 리스트 형태: column(열) 기준
  • 리스트 안의 딕셔너리 형태: row(행) 기준

pd.merge()

  • 두 데이터 프레임에서 컬럼이나 인덱스를 기준으로 잡고 병합하는 방법
  • 기준이 되는 컬럼이나 인덱스를 키값이라고 합니다.
  • 기준이 되는 키값은 두 데이터 프레임에 모두 포함되어 있어야 함
# on="key": key column 기준으로 병합, how='inner': 기본 옵션, 교집합만 출력
pd.merge(left, right, on="key")     

# how='left': 'left' 모두 출력
pd.merge(left, right, how="left", on="key")   

# how='outer': 합집합, 모두 출력
pd.merge(left, right, how='outer', on="key")     

인덱스 변경

  • set_index()
  • 선택할 컬럼을 데이터 프레임의 인덱스로 지정

상관계수

  • corr(): correlation 의 약자
  • 상관계수가 0.2 이상인 데이터를 비교
data_result.corr()

📌 matplotlib 기초

import matplotlib.pyplot as plt
from matplotlib import rc

rc('font', family='Malgun Gothic')  # Mac: Arial Univode MS
%matplotlib inline                  # or get_ipython().run_line_magic('matplotlib', 'inline')
  • %matplotlib inline or get_ipython().run_line_magic('matplotlib', 'inline'): jupyter notebook 에서 그래프를 바로 보여줌

cf. matplotlib 에서 '-'(음수 부호) 표기 오류

UserWarning: Glyph 8722 (\N{MINUS SIGN}) missing from current font.

==> 해결 방법: matplotlib.pyplot import 한 뒤 해당 코드 추가

plt.rcParams['axes.unicode_minus'] = False

matplotlib 그래프 기본 형태

plt.figure(figsize=(10,6))		# 그래프 배경 가로, 세로 사이즈
plt.plot(x, y)					# 데이터
plt.show

삼각함수 그리기

numpy의 sin 함수 가져오기

  • np.arange(a, b, s) : a부터 b까지 s의 간격
  • np.sin(value)

plt.grid(True)  #격자무늬

plt.legend(labels=["sin", "cos"], loc="upper right")`
	# labels: 선 데이터 의미 구분
    # loc: 위치(설정하지 않으면 가장 빈 공간에 자동으로 위치)
    
plt.plot(t, np.sin(t), label="sin")   # 선 데이터 의미 구분(2) 
plt.plot(t, np.cos(t), label="cos")

plt.xlabel("time")   # x, y축 제목 추가
plt.ylabel("Amplitude")

그래프 커스텀

plt.figure(figsize=(10, 6))
plt.plot(t, t, "r--")    # red, ---(점선형태 선)
plt.plot(t, t ** 2, "bs")
plt.plot(t, t ** 3, "g^")   # green, 위 화살표
plt.show()
  • 화살표: ^, >, <
  • 색: red, green, blue
  • linestyle: -, --, dashed

  • xlim, ylim: 그래프 범위 지정

scatter plot

  • colormap 적용

📌 데이터 시각화

pandas 에서 plot 그리기

# matplotlib 을 가져와서 사용

# 막대 그래프
data_result["인구수"].plot(kind="bar", figsize=(10, 10))

# 막대 그래프 - horizontal
data_result["인구수"].plot(kind="barh", figsize=(10, 10))
  • 맨 뒤에 ; : 그래프 깔끔하게 출력
def drawGraph():
    data_result['소계'].sort_values().plot(
        kind='barh', grid=True, title='가장 CCTV가 많은 구', figsize=(10, 10));
drawGraph()

0개의 댓글