일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 데이터분석
- 속성
- Set
- numpy
- 후기
- 머신러닝
- 딥러닝
- 제어문
- 데이터사이언티스트
- AIFFEL
- 스크랩
- 파이썬코딩도장
- 데이터사이언스 스쿨
- 코딩도장
- AI
- Python
- 클래스
- 자연어처리
- 사이킷런
- 기사
- 추천시스템
- TensorFlow
- 카카오
- 제로베이스 데이터사이언스
- 재귀함수
- 함수
- 아이펠
- 딕셔너리
- NLP
- 파이썬
- Today
- Total
뮤트 개발일지
AIFFEL 아이펠 8일차 본문
막대그래프 그리기
데이터 정의
%matplotlib inline: IPython에서 사용하는 매직 메서드로 이 명령어를 입력하면 그래프가 출력된다.
IPython 매직 메서드 정리
https://studymake.tistory.com/601
ipython 의 매직명령어들
2. 매직 명령어들 c{ipy02} IPython에는 매직명령어라는 것들이 있는데 %로 시작하는 명령어들이다. 보통 %문자로 시작하지만 만약 사용자 변수가 선언되지 않았다면 %문자 없이도 기능을 수행한
studymake.tistory.com
-
축 그리기
fig = plt.figure(figsize=(5,2)) #도화지(그래프) 객체 생성
ax1 = fig.add_subplot(1,1,1) #figure()객체에 add_subplot 메서드를 이용해 축을 그려준다.
figsize 인자 값을 주어 그래프의 크기를 정할 수 있다.
https://matplotlib.org/stable/api/index.html
API Reference — Matplotlib 3.5.1 documentation
Warning Since heavily importing into the global namespace may result in unexpected behavior, the use of pylab is strongly discouraged. Use matplotlib.pyplot instead. pylab is a module that includes matplotlib.pyplot, numpy, numpy.fft, numpy.linalg, numpy.r
matplotlib.org
도화지 안에 여러 개의 축을 그릴 수 있다.(그래프 여러개 가능)
add_subplot의 인자로 조정한다. 위의 예시에서 (1, 1, 1)은 각각 nrows, ncols, index에 해당한다.
fig = plt.figure()
ax1 = fig.add_subplot(2,2,1)
ax2 = fig.add_subplot(2,2,2)
ax3 = fig.add_subplot(2,2,4)
그래프 그리기
bar(): 그래프를 그리는 메서드로, 인자 x, y값이 들어간다.
# 그래프 데이터
subject = ['English', 'Math', 'Korean', 'Science', 'Computer']
points = [40, 90, 50, 60, 100]
# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# 그래프 그리기
ax1.bar(subject,points)
그래프 요소 추가
xlabel(): x라벨 추가
ylabel(): y라벨 추가
title(): 제목 추가
선 그래프 그리기
from datetime import datetime
import pandas as pd
import os
# 그래프 데이터
csv_path = os.getenv("HOME") + "/aiffel/data_visualization/data/AMZN.csv"
data = pd.read_csv(csv_path ,index_col=0, parse_dates=True)
price = data['Close']
# 축 그리기 및 좌표축 설정
fig = plt.figure()
ax = fig.add_subplot(1,1,1)
price.plot(ax=ax, style='black')
plt.ylim([1600,2200])
plt.xlim(['2019-05-01','2020-03-01'])
# 주석달기
important_data = [(datetime(2019, 6, 3), "Low Price"),(datetime(2020, 2, 19), "Peak Price")]
for d, label in important_data:
ax.annotate(label, xy=(d, price.asof(d)+10), # 주석을 달 좌표(x,y)
xytext=(d,price.asof(d)+100), # 주석 텍스트가 위차할 좌표(x,y)
arrowprops=dict(facecolor='red')) # 화살표 추가 및 색 설정
# 그리드, 타이틀 달기
plt.grid()
ax.set_title('StockPrice')
# 보여주기
plt.show()
pandas의 Series: price = date['Close']
price.plot(ax=ax, style='black'): 판다스의 선 그래프 그리기 기능. matplotlib에서 정의한 subplot 공간 ax를 사용함
좌표축 설정
plt.xlim(), plt.ylim(): x, y 좌표축의 범위 설정
주석
annotate(): 글자나 화살표 등 주석을 그림
그리드
grid(): 그리드(격자눈금) 추가
plot
plt.plot(): 인자로 x 데이터, y 데이터, 마커 옵션, 색상 등의 인자를 이용할 수 있고 서브플롯도 plt.subplot을 이용해 추가할 수 있다.
linestyle: plot()의 인자로 들어가며 다양하다.
x = np.linspace(0, 10, 100) #0에서 10까지 균등한 간격으로 100개의 숫자를 만들라는 뜻
plt.plot(x, x + 0, linestyle='solid')
plt.plot(x, x + 1, linestyle='dashed')
plt.plot(x, x + 2, linestyle='dashdot')
plt.plot(x, x + 3, linestyle='dotted')
plt.plot(x, x + 0, '-g') # solid green
plt.plot(x, x + 1, '--c') # dashed cyan
plt.plot(x, x + 2, '-.k') # dashdot black
plt.plot(x, x + 3, ':r'); # dotted red
plt.plot(x, x + 4, linestyle='-') # solid
plt.plot(x, x + 5, linestyle='--') # dashed
plt.plot(x, x + 6, linestyle='-.') # dashdot
plt.plot(x, x + 7, linestyle=':'); # dotted
pandas.plot 인자
- label: 그래프의 범례 이름
- ax: 그래프를 그릴 matplotlib의 서브플롯 객체
- style: matplotlib에 전달할 'ko--'같은 스타일의 문자열
- alpha: 투명도(0~1)
- kind: 그래프의 종류 = line, bar, barh, kde
- logy: Y축에 대한 로그 스케일
- use_index: 객체의 색인을 눈금 이름으로 사용할지의 여부
- rot: 눈금 이름을 로테이션(0~360)
- xticks, yticks: x축, y축으로 사용할 값
- xlime, ylim: x축, y축 한계
- grid: 축의 그리드 표시할지 여부
pandas의 data가 DataFrame일 때 plot 메서드 인자
- subplots: 각 DataFrame의 칼럼을 독립된 서브플롯에 그린다.
- sharex: subplots=True면 같은 X축을 공유하고 눈금과 한계를 연결한다.
- sharey: subplots=True면 같은 Y축을 공유한다.
- figsize: 그래프의 크기, 튜플로 지정
- title: 그래프의 제목을 문자열로 지정
- sort_columns: 칼럼을 알파벳 순서로 그린다.
범주형 데이터 그래프로 나타내기 - 막대 그래프
pandas와 matplotlib 사용하기
1. matplotlib에 데이터를 인자로 넣기 위해서는 pandas 데이터를 바로 이용할 수 없다. 데이터를 x에 series 또는 list, y에 list 형태로 각각 나눠주어야 한다.
2. df['tip']컬럼을 groupby() 한다. groupby()인자로 sex를 넣어주면 각 성별 그룹에 대한 정보(총합, 평균, 데이터량 등)가 grouped에 저장된다.
grouped = df['tip'].groupby(df['sex'])
3. 성별에 따른 팁 액수 평균을 막대그래프로 나타내기
import numpy as np
sex = dict(grouped.mean()) #평균 데이터를 딕셔너리 형태로 바꿔줍니다.
x = list(sex.keys())
y = list(sex.values())
import matplotlib.pyplot as plt
plt.bar(x = x, height = y)
plt.ylabel('tip[$]')
plt.title('Tip by Sex')
Seaborn과 matplotlib 사용하기
sns.barplot(data=df, x='sex', y='tip')
sns.barplot의 인자로 df를 넣고 원하는 컬럼을 지정해주면 성별에 대한 팁 평균이 나온다.
plt.figure(figsize=(10,6)) # 도화지 사이즈를 정합니다.
sns.barplot(data=df, x='sex', y='tip')
plt.ylim(0, 4) # y값의 범위를 정합니다.
plt.title('Tip by sex') # 그래프 제목을 정합니다.
matplot과 함께 사용하면 다양한 옵션을 추가할 수 있다.
수치형 데이터 - 산점도 or 선 그래프
산점도scatter plot
sns.scatterplot(data=df , x='total_bill', y='tip', hue='day')
선 그래프 line graph
sns.lineplot(x=x, y=np.sin(x))
sns.lineplot(x=x, y=np.cos(x))
히스토그램
도수분포표를 그래프로 나타낸 것
용어
- 가로축: 계급 = 변수의 구간, bin(or bucket)
- 세로축: 도수 = 빈도수, frequency
- 전체 총량: n
그래프 만들기
1. x1: 평균은 100이고 표준편차는 15인 정규분포를 따른다.
2. x2: 평균은 130이고 표준편차는 15인 정규분포를 따른다.
3. 도수를 50개 구간으로 표시하며, 확률 밀도가 아닌 빈도로 표기한다.
#그래프 데이터
mu1, mu2, sigma = 100, 130, 15
x1 = mu1 + sigma*np.random.randn(10000)
x2 = mu2 + sigma*np.random.randn(10000)
# 축 그리기
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
# 그래프 그리기
patches = ax1.hist(x1, bins=50, density=False) #bins는 x값을 총 50개 구간으로 나눈다는 뜻입니다.
patches = ax1.hist(x2, bins=50, density=False, alpha=0.5)
ax1.xaxis.set_ticks_position('bottom') # x축의 눈금을 아래 표시
ax1.yaxis.set_ticks_position('left') #y축의 눈금을 왼쪽에 표시
# 라벨, 타이틀 달기
plt.xlabel('Bins')
plt.ylabel('Number of Values in Bin')
ax1.set_title('Two Frequency Distributions')
# 보여주기
plt.show()
*hist() 인자로 x변수의 데이터와 bin의 개수를 입력한다.
---
df['tip_pct'].plot(kind='kde')
kind='kde'로 확률 밀도 그래프를 나타낼 수 있다.
밀도 그래프: 연속된 확률분포를 나타낸다.
- 일반적으로 kernels 메서드를 섞어 이 분포를 근사하는 식으로 그린다.
- 좀 더 단순하고 친숙한 정규분포(가우시안)로 나타낼 수 있다.
- 위 밀도 그래프는 KDE(Kermel Density Estimate) 커널 밀도 추정 그래프이다.
https://darkpgmr.tistory.com/147
Kernel Density Estimation(커널밀도추정)에 대한 이해
얼마전 한 친구가 KDE라는 용어를 사용하기에 KDE가 뭐냐고 물어보니 Kernel Density Estimation이라 한다. 순간, Kernel Density Estimation이 뭐지? 하는 의구심이 생겨서 그 친구에게 물어보니 자기도 잘 모른.
darkpgmr.tistory.com
(정신날 때 위 페이지 읽고 정리하기)
시계열 데이터 시각화하기
데이터로 연습해보기
Heatmap
방대한 양의 데이터와 현상을 수치에 따른 색상으로 나타내는 것
데이터 차원에 대한 제한은 없으나 2차원으로 시각화하여 표현한다.
예제) 데이터의 연도와 달에 대한 탑승객 수를 heatmap으로 표현하기
* pivot: 어떤 축, 점을 기준으로 바꾸다. 데이터 표를 재배치 할 때도 pivot이라는 단어를 사용한다.
pivot = flights.pivot(index='year', columns='month', values='passengers')
sns.heatmap(pivot)
옵션주기
sns.heatmap(pivot, linewidths=.2, annot=True, fmt="d")
'AIFFEL' 카테고리의 다른 글
AIFFEL 아이펠 사이킷런으로 구현해보는 머신러닝 (0) | 2022.01.10 |
---|---|
AIFFEL 아이펠 9일차 (0) | 2022.01.06 |
AIFFEL 아이펠 다양한 데이터 전처리 기법 (0) | 2022.01.05 |
AIFFEL 아이펠 7일차 (0) | 2022.01.05 |
AIFFEL 아이펠 6일차 (0) | 2022.01.03 |