In [1]:
from __future__ import division, print_function
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from datetime import datetime as dt
from scipy import stats

In [2]:
%matplotlib inline

넘파이 어레이

아래 모양의 어레이를 생성하기 위해 reshape 함수를 이용한다.

$$\left [ \begin{matrix} 1 & 3 \\ 5 & 7 \\ 9 & 11 \end{matrix} \right ]$$

In [3]:
a = np.arange(1, 12, 2)
b = a.reshape(3,2)
b


Out[3]:
array([[ 1,  3],
       [ 5,  7],
       [ 9, 11]])

추가로 아래 코드를 실행하자.


In [4]:
b[2,1] = 3

문제

(1) a의 값은 어떻게 변경되었는지 설명하라.






.

(2) 위와 같은 현상이 발생하는 이유를 설명하라.






.

(3) 위와 같은 현상을 피하기 위해서는 어떻게 해야 하는지 설명하라.






.

넘파이 어레이 인덱싱/슬라이싱

아래 코드로 생성된 어레이를 이용하는 문제이다.


In [5]:
a = np.arange(6) + np.arange(0, 51, 10)[:, np.newaxis]
a


Out[5]:
array([[ 0,  1,  2,  3,  4,  5],
       [10, 11, 12, 13, 14, 15],
       [20, 21, 22, 23, 24, 25],
       [30, 31, 32, 33, 34, 35],
       [40, 41, 42, 43, 44, 45],
       [50, 51, 52, 53, 54, 55]])

a 어레이를 이용하여 예를 들어 아래 모양의 어레이를 생성할 수 있다.

$$\left [ \begin{matrix} 20 & 22 \\ 40 & 42 \end{matrix} \right ]$$

In [6]:
a[2::2, :4:2]


Out[6]:
array([[20, 22],
       [40, 42]])

문제

(1) a 어레이에 인덱싱과 슬라이싱을 이용하여 아래 모양의 어레이를 생성하라.

$$\left [ \begin{matrix} 20 & 21 & 22 \\ 40 & 41 & 42 \end{matrix} \right ]$$





.

(2) a 어레이에 인덱싱과 슬라이싱을 이용하여 아래 모양의 어레이를 생성하라.

$$\left [ \begin{matrix} 5 & 15 & 25 & 35 & 45 & 55 \end{matrix} \right ]$$





.

(3) 마스크 인덱싱을 사용하여 아래 결과가 나오도록 하라.

array([ 0,  3, 12, 15, 21, 24, 30, 33, 42, 45, 51, 54])





.

정수 인덱싱을 사용하여 아래 결과가 나오도록 할 수 있다.

array([ 12, 23, 34])

In [7]:
a[(1, 2, 3), (2, 3, 4)]


Out[7]:
array([12, 23, 34])

(4) 정수 인덱싱을 사용하여 아래 모양의 어레이가 나오도록 하라.

$$\left [ \begin{matrix} 30 & 32 & 35 \\ 50 & 52 & 55 \end{matrix} \right ]$$





.

데이터 분석

오늘 사용할 데이터는 다음과 같다.

  • 미국 51개 주(State)별 담배(식물) 도매가격 및 판매일자: Weed_price.csv

아래 그림은 미국의 주별 담배(식물) 판매 데이터를 담은 Weed_Price.csv 파일를 엑셀로 읽었을 때의 일부를 보여준다. 실제 데이터량은 22899개이며, 아래 그림에는 5개의 데이터만을 보여주고 있다.

  • 주의: 1번줄은 테이블의 열별 목록(column names)을 담고 있다.
  • 열별 목록: State, HighQ, HighQN, MedQ, MedQN, LowQ, LowQN, date

문제

(1) 아래 코드를 설명하라.


In [8]:
prices_pd = pd.read_csv("data/Weed_Price.csv", parse_dates=[-1])

(2) 아래 코드를 설명하라.


In [10]:
prices_pd.sort_values(['State', 'date'], inplace=True)

(3) 아래 코드를 설명하라.


In [11]:
prices_pd.fillna(method='ffill', inplace=True)

(4) 아래 코드를 설명하라.


In [12]:
california_pd = prices_pd[prices_pd.State == "California"].copy(True)

(5) 아래 코드를 설명하라.


In [13]:
ca_sum = california_pd['HighQ'].sum()
ca_count = california_pd['HighQ'].count()
ca_sum / ca_count


Out[13]:
245.3761247216035

(6) 아래 코드를 설명하라.


In [19]:
def getYear(x):
    return x.year

year_col = prices_pd.date.apply(getYear)
prices_pd["year"] = year_col

(7) 아래 코드를 설명하라.


In [21]:
prices_pd[(prices_pd.State=="California") & (prices_pd.year==2014)]


Out[21]:
State HighQ HighQN MedQ MedQN LowQ LowQN date year
4 California 248.78 12096 193.56 12812 192.92 778 2014-01-01 2014
769 California 248.67 12125 193.56 12836 192.80 779 2014-01-02 2014
1483 California 248.67 12141 193.57 12853 192.67 782 2014-01-03 2014
2248 California 248.65 12155 193.59 12884 192.67 782 2014-01-04 2014
3013 California 248.68 12176 193.63 12902 192.67 782 2014-01-05 2014
3778 California 248.68 12189 193.57 12918 192.79 783 2014-01-06 2014
4543 California 248.64 12212 193.51 12945 192.91 784 2014-01-07 2014
5308 California 248.63 12243 193.53 12955 192.91 784 2014-01-08 2014
6073 California 248.58 12256 193.54 12980 192.89 785 2014-01-09 2014
6838 California 248.56 12270 193.50 13001 192.67 786 2014-01-10 2014
7654 California 248.54 12278 193.50 13013 192.67 786 2014-01-11 2014
8470 California 248.47 12289 193.51 13025 192.88 788 2014-01-12 2014
9235 California 248.45 12301 193.46 13039 192.88 788 2014-01-13 2014
10000 California 248.41 12312 193.39 13059 192.88 788 2014-01-14 2014
10765 California 248.48 12326 193.38 13080 192.88 789 2014-01-15 2014
11530 California 248.44 12341 193.29 13097 192.88 789 2014-01-16 2014
12295 California 248.43 12357 193.23 13118 192.88 789 2014-01-17 2014
13009 California 248.49 12372 193.20 13134 192.89 790 2014-01-18 2014
13723 California 248.44 12386 193.20 13144 192.89 790 2014-01-19 2014
14437 California 248.39 12394 193.19 13164 192.89 790 2014-01-20 2014
15151 California 248.33 12408 193.21 13187 192.71 791 2014-01-21 2014
15865 California 248.28 12424 193.20 13203 192.71 791 2014-01-22 2014
16579 California 248.25 12434 193.18 13222 192.71 791 2014-01-23 2014
17293 California 248.22 12445 193.13 13247 192.71 791 2014-01-24 2014
18007 California 248.18 12460 193.05 13270 192.35 797 2014-01-25 2014
18721 California 248.21 12476 192.98 13290 192.25 798 2014-01-26 2014
19435 California 248.24 12486 192.98 13307 192.25 798 2014-01-27 2014
20200 California 248.28 12513 193.01 13339 191.96 800 2014-01-28 2014
20965 California 248.23 12530 192.91 13355 192.24 802 2014-01-29 2014
21679 California 248.28 12544 192.86 13374 192.01 803 2014-01-30 2014
... ... ... ... ... ... ... ... ... ...
1432 California 244.36 16133 190.24 18498 188.60 1063 2014-12-02 2014
2197 California 244.33 16146 190.24 18526 188.60 1063 2014-12-03 2014
2962 California 244.31 16161 190.16 18553 188.60 1065 2014-12-04 2014
3727 California 244.23 16181 190.15 18575 188.60 1065 2014-12-05 2014
4492 California 244.23 16189 190.11 18594 188.60 1066 2014-12-06 2014
5257 California 244.22 16201 190.14 18618 188.60 1068 2014-12-07 2014
6022 California 244.20 16213 190.17 18638 188.60 1069 2014-12-08 2014
6787 California 244.13 16231 190.10 18662 188.60 1069 2014-12-09 2014
7603 California 244.15 16243 190.11 18683 188.60 1069 2014-12-10 2014
8419 California 244.10 16259 190.10 18710 188.60 1069 2014-12-11 2014
9184 California 244.02 16273 190.09 18737 188.60 1070 2014-12-12 2014
9949 California 243.99 16285 190.04 18759 188.60 1070 2014-12-13 2014
10714 California 244.02 16294 189.99 18776 188.60 1070 2014-12-14 2014
11479 California 244.01 16304 189.92 18797 188.60 1075 2014-12-15 2014
12244 California 244.02 16327 189.82 18826 188.60 1076 2014-12-16 2014
12958 California 244.01 16336 189.77 18840 188.60 1078 2014-12-17 2014
13672 California 244.04 16352 189.79 18882 188.60 1078 2014-12-18 2014
14386 California 244.07 16367 189.72 18897 188.60 1079 2014-12-19 2014
15100 California 244.10 16375 189.67 18922 188.60 1079 2014-12-20 2014
15814 California 244.04 16390 189.62 18944 188.60 1079 2014-12-21 2014
16528 California 244.06 16405 189.66 18972 188.60 1081 2014-12-22 2014
17242 California 244.04 16418 189.63 18986 188.60 1082 2014-12-23 2014
17956 California 244.03 16431 189.58 19006 188.60 1087 2014-12-24 2014
18670 California 244.04 16436 189.54 19017 188.60 1089 2014-12-25 2014
19384 California 244.03 16446 189.52 19041 188.60 1090 2014-12-26 2014
20149 California 244.05 16460 189.45 19066 188.60 1093 2014-12-27 2014
20914 California 244.05 16474 189.42 19085 188.60 1093 2014-12-28 2014
21628 California 244.00 16484 189.41 19107 188.60 1093 2014-12-29 2014
22342 California 243.98 16492 189.37 19124 188.60 1093 2014-12-30 2014
22852 California 243.96 16501 189.38 19140 188.60 1094 2014-12-31 2014

364 rows × 9 columns