반응형
26. Matplotlib
26.1 실습 예제 - 기본 사용법
# 매직 명령어
# 그래프를 조작할 수 있다.
# 그래프 제목 오른쪽의 stop interaction 버튼을 누르기 전까지 그래프의 수정이 가능함
# %matplotlib nbagg
# 생성된 이후에는 조작할 수 없는 옵션
%matplotlib inline
import matplotlib
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
nums = np.random.randn(10)
print(nums)
print(nums.cumsum()) # 누적 합
# randn(n): 정규분포 난수 n개 생성
# Series: 1차원 배열, DataFrame: 2차원 배열
s = pd.Series(np.random.randn(10).cumsum(), index=np.arange(0, 100, 10))
s
s.plot()
df["B"].plot()
데이터프레임 생성
df = pd.DataFrame(np.random.randn(10, 4), columns=["A", "B", "C", "D"], index=np.arange(0, 100, 10))
df.plot()
list("abcd...")
# list("abcd..."): a, b, c, d 식으로 리스트로 만들어짐
# 시리즈값을 막대그래프로 출력
s2 = pd.Series(np.random.rand(16), index=list("abcdefghijklmnop"))
s2
수직 방향 막대그래프
# 수직 방향 막대그래프
s2.plot()
s2.plot(kind="bar")
수평 방향 막대그래프
# 수평 방향 막대그래프
s2.plot(kind="barh")
from matplotlib import rc, font_manager
# 한글 처리를 위해 폰트 설정
font_name = font_manager.FontProperties(\
fname="C:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# 데이터프레임
df2 = pd.DataFrame(np.random.rand(6, 4),
index=["one", "two", "three", "four", "five", "six"],
columns=pd.Index(["A", "B", "C", "D"], name="종류"))
df2
히스토그램
변수가 가질 수 있는 값의 구간, 개수를 막대 형태로 출력
히스토그램은 값만 필요하고 인덱스는 필요하지 않음
# normal(): 정규분포
s3 = pd.Series(np.random.normal(0, 100, size=200))
s3.head()
음수 부호가 깨지지 않도록 설정
# x축 구간은 기본값으로 10개로 설정됨
plt.rcParams['axes.unicode_minus'] = False
s3.hist()
x축 구간의 개수 지정
# x축 구간의 개수 지정
plt.rcParams['axes.unicode_minus'] = False
s3.hist(bins=50)
normed
# normed(정규분포)
# 정규분포: 종 모양을 가짐
s3.hist(bins=100, normed=True)
산점도
서로 다른 독립변수 x1, x2의 관계를 파악할 때 사용
# normal(mu, sigma, size=(rows, cols))
# mu: 중앙값(median), sigma: 표준편차
x1 = np.random.normal(1, 1, size=(100, 1))
x2 = np.random.normal(-2, 4, size=(100, 1))
# concatenate: 열 방향으로 연결
# axis=1: 가로 방향, axis=0: 세로 방향
# 100x2 리스트가 생성됨
X = np.concatenate((x1, x2), axis=1)
# 첫 5행 출력
print(X[:5])
x1과 x2의 상관관계
df3 = pd.DataFrame(X, columns=["x1", "x2"])
df3.head()
# x1과 x2의 상관관계
# x1(x축), x2(y축)
# 양의 상관관계: 산점도가 좌측 하단에서 우측 상단으로
# 음의 상관관계: 산점도가 좌측 상단에서 우측 하단으로
# 이 그래프에서는 상관관계를 찾을 수 없다
plt.scatter(df3["x1"], df3["x2"])
26.3 실습예제 - BabyNames 데이터 분석
NationalNames.csv
다운로드 주소
https://www.kaggle.com/kaggle/us-baby-names/data
42MB 정도
1880~2014 태언나 아이들의 이름 통계
엑셀로 오픈하면 에러가 발생함(엑셀에서 열 수 있는 최대 행, 열 갯수 초과)
%matplotlib inline
import pandas as pd
from matplotlib import font_manager, rc
# 한글 처리를 위해 폰트 설정
font_name = font_manager.FontProperties(\
fname="c:/Windows/Fonts/malgun.ttf").get_name()
rc('font', family=font_name)
# csv를 읽어서 데이터프레임으로 리턴
names = pd.read_csv("d:/data/names/NationalNames.csv",\
header=0,
names=["id", "name", "year", "gender", "births"])
# 데이터프레임의 자료 갯수 확인
names.shape
반응형