1.지원 가능한 이미지 확장자 종류를 보고 싶을 때

fig.canvas.get_supported_filetypes()  

출력>
{'eps': 'Encapsulated Postscript',
 'jpg': 'Joint Photographic Experts Group',
 'jpeg': 'Joint Photographic Experts Group',
 'pdf': 'Portable Document Format',
 'pgf': 'PGF code for LaTeX',
 'png': 'Portable Network Graphics',
 'ps': 'Postscript',
 'raw': 'Raw RGBA bitmap',
 'rgba': 'Raw RGBA bitmap',
 'svg': 'Scalable Vector Graphics',
 'svgz': 'Scalable Vector Graphics',
 'tif': 'Tagged Image File Format',
 'tiff': 'Tagged Image File Format',
 'webp': 'WebP Image Format'}

2. 이미지 저장

fig.savefig('파일이름.png')

3. 저장된 이미지 불러오기

이미지 다루는 모듈도 불러와야 한다.

​

from IPython.display import Image Image('my_figure.png')

1. 그래프 두가지를 동시에 표시하기

주피터노트북은 셀단위로 작동하니까 위에 그래프 그리는 두 명령을 한셀에다 해주면 됨

plt.plot(x, np.sin(x)) plt.plot(x, np.cos(x))

이번엔 보다 세밀한 제어가 가능하게 figure라는 그림판(?)을 직접 만들고 두 그래프를 올려보자, 선의 타입 등은 나중에 다시 다룰 예정

fig = plt.figure() # 그림판 만들기 plt.plot(x, np.sin(x), '-') # '-'/'--'은 선의 타입을 나타낸다. '-'solid line / '--' dash line /'.' dot /'-.' dashdot plt.plot(x, np.cos(x), '--')

2. 화면 분할하여 그래프 표시하기

1. 일단 그림판을 정의해준다

plt.figure()

2. 앞서 만든 그림판 안에 작은 그림판 생성한다subplot. 위치를 (rows,columns,panel number )정해준다

3. subplot 명령 아래 그 위치 해당하는 그래프 작성

plt.subplot(2,1,1)                 
plt.plot(x, np.sin(x)) 
plt.subplot(2,1,2)  
plt.plot(x, np.cos(x))

시각화 도구 중 하나인 matplotlib 패키지를 배워보자

matplotlib

-머신러닝을 위한 데이터를 시각화할 수 있는 패키지

-c언어로 개발된 것이 오리지널이나 python으로 감싸져서 나온 패키지로 또 나왔다. 또 시각화되는 표의 스타일을 지정할 수도 있다.


1. 임포트

import matplotlib as mpl
import matplotlib.pyplot as plt            # 원본 패키지와 파이썬으로 감싸놓은 버전 임포트

2. 스타일 지정

plt.style.use('classic')               # 스타일의 경우에는 여러 테마가 있는데 원하면 인터넷 찾아보고 선택해라
​
3. 예시용 표를 만들어 보자
import numpy as np
x = np.linspace(0,10,100)              # 0에서 10사이에 100개의 값을 만들어라 , linspace: 특정 사이 값을 원하는 만큼 만들기
x

출력>
array([ 0.        ,  0.1010101 ,  0.2020202 ,  0.3030303 ,  0.4040404 ,
        0.50505051,  0.60606061,  0.70707071,  0.80808081,  0.90909091,
        1.01010101,  1.11111111,  1.21212121,  1.31313131,  1.41414141,
        1.51515152,  1.61616162,  1.71717172,  1.81818182,  1.91919192,
        2.02020202,  2.12121212,  2.22222222,  2.32323232,  2.42424242,
        2.52525253,  2.62626263,  2.72727273,  2.82828283,  2.92929293,
        3.03030303,  3.13131313,  3.23232323,  3.33333333,  3.43434343,
        3.53535354,  3.63636364,  3.73737374,  3.83838384,  3.93939394,
        4.04040404,  4.14141414,  4.24242424,  4.34343434,  4.44444444,
        4.54545455,  4.64646465,  4.74747475,  4.84848485,  4.94949495,
        5.05050505,  5.15151515,  5.25252525,  5.35353535,  5.45454545,
        5.55555556,  5.65656566,  5.75757576,  5.85858586,  5.95959596,
        6.06060606,  6.16161616,  6.26262626,  6.36363636,  6.46464646,
        6.56565657,  6.66666667,  6.76767677,  6.86868687,  6.96969697,
        7.07070707,  7.17171717,  7.27272727,  7.37373737,  7.47474747,
        7.57575758,  7.67676768,  7.77777778,  7.87878788,  7.97979798,
        8.08080808,  8.18181818,  8.28282828,  8.38383838,  8.48484848,
        8.58585859,  8.68686869,  8.78787879,  8.88888889,  8.98989899,
        9.09090909,  9.19191919,  9.29292929,  9.39393939,  9.49494949,
        9.5959596 ,  9.6969697 ,  9.7979798 ,  9.8989899 , 10.        ])

4.명령어로 표 그리기. 괄호안에는 순서대로 (x,y) 값이다.

plt.plot(x,x)

4-1. numpy로 만든 sin값을 y축으로 한 그래프

plt.plot(x, np.sin(x))           # x축은 0부터 10까지 계속 증가가 되는데 np.sin(x)의 값은 상승-하강-상승-하강을 한다.

4-2. numpy로 만든 cos 그래프를 그려보자

plt.plot(x,np.cos(x))            # 코싸인 버전
 

 

 

 

이런식으로 그래프를 그릴 때 sin, cos 그래프가 찌그러져 있다면 데이터에 노이즈가 있다는 뜻이다.

1. 표 불러오기

births = pd.read_csv('https://raw.githubusercontent.com/jakevdp/data-CDCbirths/master/births.csv')
births.head()
     
출력>
year	month	day	gender	births
0	1969	1	1.0	F	4046
1	1969	1	1.0	M	4440
2	1969	1	2.0	F	4454
3	1969	1	2.0	M	4548
4	1969	1	3.0	F	4548

 

2. 10년 단위 항목을 추가해보기

births['decade'] = births['year'] // 10 * 10        # // 나누고 나머지는 버림(몫)
births.head()

출력>
	year	month	day	gender	births	decade
0	1969	1	1.0	F	4046	1960
1	1969	1	1.0	M	4440	1960
2	1969	1	2.0	F	4454	1960
3	1969	1	2.0	M	4548	1960
4	1969	1	3.0	F	4548	1960

 

3. 그래프 방향 설정(= 피봇팅) 및 원하는 직계함수(aggfunc)로 표 수정

births.pivot_table('births', index='decade',columns = 'gender',aggfunc='sum')

출력>
gender	F	M
decade		
1960	1753634	1846572
1970	16263075	17121550
1980	18310351	19243452
1990	19479454	20420553
2000	18229309	19106428

 

4. .plot을 붙여 그래프로 시각화 한다

births.pivot_table('births', index='year',columns = 'gender',aggfunc='sum').plot()

1. 표를 불러옵니다

import seaborn as sns              # seaborn패키지에는 유명한 데이터 몇가지 있어서 불러와봤습니다
planets = sns.load_dataset('planets')              # planets라는 데이터셋 부르기

 

2. 데이터/컬럼 수 확인

planets.shape 

출력>
(1035, 6)

 

3. 대략의 표 확인

planets.head() 

출력>
method	number	orbital_period	mass	distance	year
0	Radial Velocity	1	269.300	7.10	77.40	2006
1	Radial Velocity	1	874.774	2.21	56.95	2008
2	Radial Velocity	1	763.000	2.60	19.84	2011
3	Radial Velocity	1	326.030	19.40	110.62	2007
4	Radial Velocity	1	516.220	10.50	119.47	2009

 

4. 데이터 정제 : NaN 데이터 제거 (혹은 mean으로 평균값을 내주는 방법도 있다)

.dropna : NaN 값이 있는 행또는 열을 제거할 수 있다. 기본적으로 axis=0으로 세팅되어있다.

planets.dropna()

출력>

method	number	orbital_period	mass	distance	year
0	Radial Velocity	1	269.30000	7.100	77.40	2006
1	Radial Velocity	1	874.77400	2.210	56.95	2008
2	Radial Velocity	1	763.00000	2.600	19.84	2011
3	Radial Velocity	1	326.03000	19.400	110.62	2007
4	Radial Velocity	1	516.22000	10.500	119.47	2009
...	...	...	...	...	...	...
640	Radial Velocity	1	111.70000	2.100	14.90	2009
641	Radial Velocity	1	5.05050	1.068	44.46	2013
642	Radial Velocity	1	311.28800	1.940	17.24	1999
649	Transit	1	2.70339	1.470	178.00	2013
784	Radial Velocity	3	580.00000	0.947	135.00	2012
498 rows × 6 columns

혹은 아래처럼 출력해서 봐도 된다

planets.dropna().describe()    # 빈값을 날린 후의 대략적표

출력>
	number	orbital_period	mass	distance	year
count	498.00000	498.000000	498.000000	498.000000	498.000000
mean	1.73494	835.778671	2.509320	52.068213	2007.377510
std	1.17572	1469.128259	3.636274	46.596041	4.167284
min	1.00000	1.328300	0.003600	1.350000	1989.000000
25%	1.00000	38.272250	0.212500	24.497500	2005.000000
50%	1.00000	357.000000	1.245000	39.940000	2009.000000
75%	2.00000	999.600000	2.867500	59.332500	2011.000000
max	6.00000	17337.500000	25.000000	354.000000	2014.000000

group by 란?

-안에 있는 데이터들을 그룹지어서 확인하는 것

-언피벗된 데이터(기준이 자기 마음대로)를 의미있는 데이터로 만들어준다.

-groupby를 할 때 우리는 by(그룹을 나누는 기준열), data (그룹화해서 살펴볼 데이터), 집계함수(그룹화된 데이터를 하나의 값으로 리턴할 함수) 세가지를 지정해야한다.


Credit Amount	Type of apartment
0	1049	1
1	2799	1
2	841	1
3	2122	1
4	2171	2

△예시 데이터 프레임

 

1. Type of apartment를 groupby로 묶은 후 평균 통계를 냈을 때

german_grouped = german['Credit Amount'].groupby(german['Type of apartment'])  
german_grouped.mean()

출력>
Type of apartment
1    3122.553073
2    3067.257703
3    4881.205607
Name: Credit Amount, dtype: float64

2. 그룹 안의 그룹

german = german_sample[['Credit Amount', 'Type of apartment','Purpose']]
german_group2 = german['Credit Amount'].groupby(
                                      [german['Purpose'],                        
                                      german['Type of apartment']]
)
german_group2.mean()

출력>
Purpose  Type of apartment
0        1                    2597.225000
         2                    2811.024242
         3                    5138.689655
1        1                    5037.086957
         2                    4915.222222
         3                    6609.923077
2        1                    2727.354167
         2                    3107.450820
         3                    4100.181818
3        1                    2199.763158
         2                    2540.533040
         3                    2417.333333
4        1                    1255.500000
         2                    1546.500000
5        1                    1522.000000
         2                    2866.000000
         3                    2750.666667
6        1                    3156.444444
         2                    2492.423077
         3                    4387.266667
8        1                     902.000000
         2                    1243.875000
9        1                    5614.125000
         2                    3800.592105
         3                    4931.800000
10       2                    8576.111111
         3                    7109.000000
Name: Credit Amount, dtype: float64

이제 purpose가 가장 상위그룹되고 그 안에 아파트타입이 또 한번 그룹이 되었다.

 

3. for문에서의 그룹바이 - 가장 상위그룹이 겹치는 부분도 다 작성해줌

<예시용 표>
german = german_sample[['Type of apartment',
                       'Sex & Marital Status',
                       'Credit Amount']]

german.head() # 잘 가져와졌는지 확인


Type of apartment	Sex & Marital Status	Credit Amount
0	1	2	1049
1	1	3	2799
2	1	2	841
3	1	3	2122
4	2	3	2171

△예시용 표

<for 써서 그룹바이>
for type, g in german.groupby('Type of apartment'):
  print(g.head(n=3))
  print('--------------------------------------------------------------')

출력>
   Type of apartment  Sex & Marital Status  Credit Amount
0                  1                     2           1049
1                  1                     3           2799
2                  1                     2            841
--------------------------------------------------------------
   Type of apartment  Sex & Marital Status  Credit Amount
4                  2                     3           2171
6                  2                     3           3398
7                  2                     3           1361
--------------------------------------------------------------
    Type of apartment  Sex & Marital Status  Credit Amount
29                  3                     3           4796
44                  3                     3           1239
69                  3                     3           2032
--------------------------------------------------------------

+ Recent posts