matplotlib 사용한 plot 그리기 기초

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
# setting plot defatult size
%pylab inline
pylab.rcParams['figure.figsize'] = (12, 6)
Populating the interactive namespace from numpy and matplotlib
ts = pd.Series(np.random.randn(1000), 
               index=pd.date_range('2016/1/1',periods=1000))
ts = ts.cumsum()  # row 값 누적하여 합산
ts.head()
2016-01-01   -0.464964
2016-01-02    0.634576
2016-01-03    0.177443
2016-01-04    0.085528
2016-01-05   -0.253183
Freq: D, dtype: float64
ts.tail()
2018-09-22   -40.263403
2018-09-23   -39.797074
2018-09-24   -41.015092
2018-09-25   -40.832436
2018-09-26   -40.470858
Freq: D, dtype: float64
plt.plot(ts)
[<matplotlib.lines.Line2D at 0x268f4bf1828>]

png

컬럼이 여러 개인 경우

df = pd.DataFrame(np.random.randn(1000, 4), 
                  index=ts.index, columns=['A', 'B', 'C', 'D'])
df = df.cumsum()
df.head()
A B C D
2016-01-01 0.850207 -0.579718 1.218229 0.896665
2016-01-02 -0.446368 -1.388548 0.560629 1.653028
2016-01-03 0.746224 -0.747689 0.734712 0.975451
2016-01-04 -0.029627 -1.422848 1.710342 2.105175
2016-01-05 0.735473 -1.094084 1.792831 2.489641
plt.figure()
df.plot()               # plt 레이어 위에 컬럼별로 그래프 표현
plt.legend(loc='best')  # 범례 위치를 자동으로 설정
<matplotlib.legend.Legend at 0x268f4bdc1d0>




<matplotlib.figure.Figure at 0x268f4c426d8>

png

csv, excel 파일로 저장

df.to_csv('test1.csv')
df.to_excel('test2.xlsx', sheet_name='cumsum')

csv 파일에서 데이터 불러오기

df = pd.read_csv('data/population.csv', index_col=0) # 첫번째 컬럼을 인덱스로 사용
df.head()
pop year
0 2.53 1950
1 2.57 1951
2 2.62 1952
3 2.67 1953
4 2.71 1954
df.tail()
pop year
146 10.81 2096
147 10.82 2097
148 10.83 2098
149 10.84 2099
150 10.85 2100
plt.plot(df['year'], df['pop'])
[<matplotlib.lines.Line2D at 0x268f4daffd0>]

png

히스토그램

df = pd.read_csv('data/worldreport.csv', index_col=0)
df.head()
gdp_cap life_exp popul
0 974.58 43.82 31.88
1 5937.02 76.42 3.60
2 6223.36 72.30 33.33
3 4797.23 42.73 12.42
4 12779.37 75.31 40.30
plt.hist(df['life_exp'])   # 자동으로 데이터를 나눔 (binning)
(array([  8.,   7.,  10.,  10.,  10.,   8.,   5.,  32.,  24.,  28.]),
 array([ 39.61 ,  43.909,  48.208,  52.507,  56.806,  61.105,  65.404,
         69.703,  74.002,  78.301,  82.6  ]),
 <a list of 10 Patch objects>)

png

plt.hist(df['life_exp'], bins = 5)   # 연속형 변수의 범주를 5개로 나눈다.
(array([ 15.,  20.,  18.,  37.,  52.]),
 array([ 39.61 ,  48.208,  56.806,  65.404,  74.002,  82.6  ]),
 <a list of 5 Patch objects>)

png

plt.hist(df['life_exp'], bins = 20)   # 연속형 변수의 범주를 20개로 나눈다
(array([  1.,   7.,   2.,   5.,   4.,   6.,   5.,   5.,   4.,   6.,   3.,
          5.,   5.,   0.,  12.,  20.,  14.,  10.,  17.,  11.]),
 array([ 39.61  ,  41.7595,  43.909 ,  46.0585,  48.208 ,  50.3575,
         52.507 ,  54.6565,  56.806 ,  58.9555,  61.105 ,  63.2545,
         65.404 ,  67.5535,  69.703 ,  71.8525,  74.002 ,  76.1515,
         78.301 ,  80.4505,  82.6   ]),
 <a list of 20 Patch objects>)

png

산점도 (Scatter plot)

plt.scatter(df['gdp_cap'], df['life_exp'])
<matplotlib.collections.PathCollection at 0x268f5268f98>

png

# 인구에 따른 점 크기 표현
plt.scatter(df['gdp_cap'], df['life_exp'], s = np.array(df['popul']) * 2)
plt.xscale('log')               # 단위가 크기 때문에 log 변환
plt.xlabel('GDP per Capita')
plt.ylabel('Life Expectancy')
plt.title('World Development in 2007')
tick_val = [1000,10000,100000]
tick_lab = ['1k','10k','100k']
plt.xticks(tick_val, tick_lab)  # Adapt the ticks on the x-axis
plt.grid(True)

png