Patrick's 데이터 세상
Python 데이터 분석 - 탐색적 자료 분석 EDA (NumPy를 활용한 그래프, 산점도) 본문
반응형
SMALL
◎ csv 파일 Read 후 NumPy 분석
import numpy as np
import pandas as pd
CCTV_Seoul = pd.read_csv('data_files/cctv-in-seoul.csv', encoding='utf-8')
CCTV_Seoul.head()
결과
# rename : 컬럼명 변경
CCTV_Seoul.rename(columns={CCTV_Seoul.columns[0] : '구별'}, inplace=True)
CCTV_Seoul.head()
결과
# !명령어 : 터미널 실행 효과
!pip install xlrd
pop_Seoul = pd.read_excel('data_files/population-in-seoul.xls', encoding='utf-8')
pop_Seoul.head()
결과
# 원하는 열만 추려서 가져오기
pop_Seoul = pd.read_excel('data_files/population-in-seoul.xls',
header = 2, # 2행을 컬럼 정보로 사용
usecols = 'B, D, G, J, N', # 사용할 컬럼 위치
encoding='utf-8')
pop_Seoul.head()
결과
# 컬럼 Rename
pop_Seoul.rename(columns={pop_Seoul.columns[0] : '구별',
pop_Seoul.columns[1] : '인구수',
pop_Seoul.columns[2] : '한국인',
pop_Seoul.columns[3] : '외국인',
pop_Seoul.columns[4] : '고령자'}, inplace=True)
pop_Seoul.head()
결과
# Na 데이터 삭제
pop_Seoul[pop_Seoul['구별'].isnull()]
pop_Seoul.drop([26], inplace=True)
pop_Seoul.head()
결과
# 비율 컬럼 추가
pop_Seoul['외국인비율'] = pop_Seoul['외국인'] / pop_Seoul['인구수'] * 100
pop_Seoul['고령자비율'] = pop_Seoul['고령자'] / pop_Seoul['인구수'] * 100
pop_Seoul.head()
결과
# 두 개의 DataFrame 병합
data_result = pd.merge(CCTV_Seoul, pop_Seoul, on='구별')
data_result.head()
결과
# 불필요한 열 삭제
# data_result.drop(['2013년도 이전', '2014년', '2015년', '2016년'],
# axis=1, inplace=True)
del data_result['2013년도 이전']
del data_result['2014년']
del data_result['2015년']
del data_result['2016년']
data_result.head()
결과
data_result.set_index('구별', inplace=True)
data_result.head()
결과
# 상관 계수 계산
# correlation(상관분석) 상관 계수 계산
# 하나의 속성이 바뀔 때 다른 속성이 얼마나 따라서 움직이느냐
# -1 ~ 1
# 상관 관계가 없을 때 0
np.corrcoef(data_result['고령자비율'], data_result['소계'])
결과
# 상관 계수 계산
np.corrcoef(data_result['외국인비율'], data_result['소계'])
결과
# 상관 계수 계산
np.corrcoef(data_result['인구수'], data_result['소계'])
결과
◎ Matplotlib을 활용한 그래프
import platform
import matplotlib.pyplot as plt
from matplotlib import font_manager, rc
plt.rcParams['axes.unicode_minus'] = False # Plot에서 -를 표시하기 위한 설정
print("Platform:", platform.system()) # 운영체제 확인
if platform.system() == 'Darwin': # 맥
rc('font', family='AppleGothic')
elif platform.system() == 'Windows': # 윈도우
path = "c:/Windows/Fonts/malgun.ttf"
# matplotlib이 사용할 폰트 지정
font_name = font_manager.FontProperties(fname=path).get_name()
rc('font', family=font_name)
else:
print('Unknown system... sorry~~~~')
· 시각화
* 한글은 한글 폰트가 설치가 되어야 한다.
C:\Windows\Fonts에 나눔 폰트가 설치되어 있어야한다.
맥은 맥용 나눔폰트 설치해야 함.
결과
plt.figure()
# pandas의 DataFrame의 시각화 함수 사용
data_result['소계'].plot(kind='barh', grid=True, figsize=(10,10))
plt.show()
결과
data_result['소계'].sort_values().plot(kind='barh',
grid=True, figsize=(10,10))
plt.show()
결과
data_result['CCTV비율'] = data_result['소계'] / data_result['인구수'] * 100
data_result['CCTV비율'].sort_values().plot(kind='barh', grid=True, figsize=(10,10))
plt.show()
결과
plt.figure(figsize=(6,6))
# 산점도 그래프 : 2변수 상관성 표시에 유용
plt.scatter(data_result['인구수'], data_result['소계'], s=50)
plt.xlabel('인구수')
plt.ylabel('CCTV')
plt.grid()
plt.show()
결과
# 단순회귀 -> 기울기 / 절편
fp1 = np.polyfit(data_result['인구수'], data_result['소계'], 1) # y = ax + b의 a, b 계산
fp1
결과
f1 = np.poly1d(fp1) # 계산기 만들기 : ax + b
fx = np.linspace(100000, 700000, 100) # 100000 ~ 700000 사이를 100개로 나누기
plt.figure(figsize=(15,10))
plt.scatter(data_result['인구수'], data_result['소계'], s=50)
plt.plot(fx, f1(fx), ls='dashed', lw=3, color='g')
plt.xlabel('인구수')
plt.ylabel('CCTV')
plt.grid()
plt.show()
결과
fp1 = np.polyfit(data_result['인구수'], data_result['소계'], 1) # 기울기, 절편
f1 = np.poly1d(fp1) # 계산기
fx = np.linspace(100000, 700000, 100) # x : 독립변수
data_result['오차'] = np.abs(data_result['소계'] - f1(data_result['인구수']))
df_sort = data_result.sort_values(by='오차', ascending=False)
df_sort.head()
결과
plt.figure(figsize=(14,10))
plt.scatter(data_result['인구수'], data_result['소계'], c=data_result['오차'], s=50)
plt.plot(fx, f1(fx), ls='dashed', lw=3, color='g')
for n in range(10):
# plt.text : 텍스트 출력 함수
plt.text(df_sort['인구수'][n]*1.02, df_sort['소계'][n]*0.98, # 텍스트 출력 위치
df_sort.index[n], # 출력할 텍스트 (구 이름: 송파구, 강남구, ...)
fontsize=15) # 텍스트 크기
plt.xlabel('인구수')
plt.ylabel('인구당비율')
plt.colorbar() # 색상 Gradation 출력
plt.grid()
plt.show()
결과
반응형
LIST
'Data Analysis > EDA' 카테고리의 다른 글
Python 데이터 분석 - 통계분석 (0) | 2020.06.24 |
---|---|
Python 데이터 분석 - 통계분석 기초 (0) | 2020.06.24 |
Python 데이터 분석 - 통계 검정 (0) | 2020.06.24 |
Python 데이터 분석 - 지도 시각화(EDA) (2) | 2020.06.24 |
Python 데이터 분석 - 탐색적 자료 분석 EDA (Na 데이터 처리, Seaborn 그래프) (0) | 2020.06.24 |
Comments