2017년 2학기 공학수학 기말고사

이름 :

학번 :

시험에서 사용하는 모듈 임포트 하기


import __future__ import division, print_function
import numpy as np
import pandas as pd
from datetime import datetime as dt

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

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


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


Out[3]:
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} 30 & 32 \\ 50 & 52 \end{matrix} \right ]$$

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


Out[4]:
array([[30, 32],
       [50, 52]])

문제 1.

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

$$\left [ \begin{matrix} 11 & 13 & 15 \\ 31 & 33 & 35 \\ 51 & 53 & 55 \end{matrix} \right ]$$







.

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

$$\left [ \begin{matrix} 2 & 12 & 22 & 32 & 42 & 52 \end{matrix} \right ]$$







.

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

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















.

정수 인덱싱

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

                        array([12, 23, 34])

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


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

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

$$\left [ \begin{matrix} 30 & 32 & 35 \\ 40 & 42 & 45 \\ 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

문제 2.

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


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








.

(2) prices_pd의 처음 10개의 데이터 출력되도록 코드를 작성하라.









.

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


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

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
















.

문제 3.

다음과 같은 데이터가 있다.

  • 쿵푸 교실 참가자 나이 : kungfu_age.csv

  • 아래의 그림은 쿵푸 교실 참가자의 나이를 담은 kungfu_age.csv 파일을 엑셀로 읽었을 때 일부를 보여준다.

  • 참가자들의 나이를 표로 살펴보면 아래와 같다.
나이 19 20 21 145 147
도수 3 8 3 1 1

In [63]:
k_age = pd.read_csv("kungfu_age.csv")

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


In [64]:
k_sum = k_age['age'].sum()
k_count = k_age['age'].count()
k_sum / k_count


Out[64]:
35.75










.

(2) (1)의 결과가 쿵푸 교실 참자가들의 나이를 대표할 수 있는가? 이와 같은 현상이 발생하는 이유를 설명하라.











.

(3) 위와 같은 현상을 피하기 위해서 어떤 값을 대푯값으로 해야 하는지 설명하라.











.

시리즈

다음과 같은 시리즈(series)가 있다.


In [48]:
se = pd.Series(['blue', 'purple', 'yellow'], index=[0, 2, 4])
se


Out[48]:
0      blue
2    purple
4    yellow
dtype: object

문제 4.

아래 코드를 설명하고, 출력된 결과를 말하여라.


In [ ]:
se.reindex(range(6), method='nearest')













.

데이터 프레임

문제 5.

  • 중첩 사전을 이용하여 데이터 프레임을 생성할 수 있다.

In [67]:
pop = {'Nevada' : {2001: 2.4, 2002: 2.9},
       'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

In [68]:
df = pd.DataFrame(pop)
df


Out[68]:
Nevada Ohio
2000 NaN 1.5
2001 2.4 1.7
2002 2.9 3.6

In [45]:
dfT = df.T

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


In [46]:
df['Nevada'].iloc[0] = 1.0

(1) dfT 를 출력한 결과는 무엇인가.









.

(2) df['Nevada'].iloc[0] = 1.0 코드를 실행한 후, dfdfT가 어떻게 변경되었는지 설명하라.









.

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









.

(4) (2)와 같은 현상을 피하기 위해서는 어떻게 해야 하는가.









.

문제 5.

다음 그래프는 두 변수 X1y1에 대한 산점도이다.

두 변수의 피어슨 상관계수가 0.816일 때, x1 변수가 y1변수에 영향을 준다고 할 수 있는지 설명하라.














.