In [3]:
from __future__ import division, print_function
import matplotlib.pyplot as plt
import numpy as np
In [4]:
%matplotlib inline
In [6]:
import math
# from math import pi
def circle_radius(r):
size = math.pi * r**2
circle = 2 * math.pi * r
return (size, circle)
아래 사이트는 커피 콩의 현재 시세를 보여준다.
http://beans-r-us.appspot.com/prices.html
위 사이트의 내용을 html 소스코드로 보면 다음과 같으며, 검색된 시간의 커피콩의 가격은
Current price of coffee beans
문장이 담겨 있는 줄에 명시되어 있다.
<html><head><title>Welcome to the Beans'R'Us Pricing Page</title>
<link rel="stylesheet" type="text/css" href="beansrus.css" />
</head><body>
<h2>Welcome to the Beans'R'Us Pricing Page</h2>
<p>Current price of coffee beans = <strong>$5.94</strong></p>
<p>Price valid for 15 minutes from Sun Sep 10 12:21:58 2017.</p>
</body></html>
먼저 아래 인덱스를 찾는다.
price_index = text.find('>$') + 2
슬라이싱 기능을 이용한다.
text[price_index : price_index + 4]
.
견본답안: 1, 3, 4
record_list.txt
파일은 여덟 명의 수영 선수의 50m 기록을 담고 있다.
txt
player1 21.09
player2 20.32
player3 21.81
player4 22.97
player5 23.29
player6 22.09
player7 21.20
player8 22.16
아래코드가 하는 일을 설명하라.
from __future__ import print_function
record_f = open("record_list.txt", 'r')
record = record_f.read().decode('utf8').split('\n')
record_dict = {}
for line in record:
(player, p_record) = line.split()
record_dict[p_record] = player
record_f.close()
record_list = record_dict.keys()
record_list.sort()
for i in range(3):
item = record_list[i]
print(str(i+1) + ":", record_dict[item], item)
.
견본답안: 2, 3, 4, 6
아래 코드는 0부터 1000 사이의 홀수들의 제곱의 리스트를 조건제시법으로 생성한다
In [8]:
odd_1000 = [x**2 for x in range(0, 1000) if x % 2 == 1]
# 리스트의 처음 다섯 개 항목
odd_1000[:5]
Out[8]:
In [10]:
odd_1000_7 = [x for x in range(0, 1000) if x % 2 == 1 and x % 7 == 0]
odd_1000_7[0:5]
Out[10]:
모범답안:
In [11]:
odd_3x7 = [x for x in range(0, 1000) if x % 2 == 1 and x % 7 == 0]
# 리스트의 처음 다섯 개 항목
odd_3x7[:5]
Out[11]:
In [13]:
1000/7
Out[13]:
In [17]:
odd_3x7 = [7*x for x in range(0, 142) if x % 2 == 1]
# 리스트의 처음 다섯 개 항목
odd_3x7[::-1][0:5]
Out[17]:
In [19]:
add_3x7_2 = [x ** 2 + 1 for x in odd_3x7]
add_3x7_2[:5]
Out[19]:
In [20]:
add_3x7_2 = [x ** 2 + 1 for x in range(0,1000) if x % 2 ==1 and x % 7 == 0]
add_3x7_2[:5]
Out[20]:
In [21]:
def f(x):
return x**2 + 1
add_3x7_2 = [f(x) for x in range(0,1000) if x % 2 ==1 and x % 7 == 0]
add_3x7_2[:5]
Out[21]:
견본답안:
In [5]:
def square_plus1(x):
return x**2 + 1
odd_3x7_spl = [square_plus1(x) for x in odd_3x7]
# 리스트의 처음 다섯 개 항목
odd_3x7_spl[:5]
Out[5]:
'Seoul_pop2.csv'
파일에는 아래 내용이 저장되어 있다"
csv
### 1949년부터 2010년 사이의 서울과 수도권 인구 증가율(%)
# 구간,서울,수도권
1949-1955,9.12,-5.83
1955-1960,55.88,32.22
1960-1966,55.12,32.76
1966-1970,45.66,28.76
1970-1975,24.51,22.93
1975-1980,21.38,21.69
1980-1985,15.27,18.99
1985-1990,10.15,17.53
1990-1995,-3.64,8.54
1995-2000,-3.55,5.45
2000-2005,-0.93,6.41
2005-2010,-1.34,3.71
확장자가 csv인 파일은 데이터를 저장하기 위해 주로 사용한다. csv는 Comma-Separated Values의 줄임말로 데이터가 쉼표(콤마)로 구분되어 정리되어 있는 파일을 의미한다.
csv 파일을 읽어드리는 방법은 csv
모듈의 reader()
함수를 활용하면 매우 쉽다.
reader()
함수의 리턴값은 csv 파일에 저장된 내용을 줄 단위로, 쉼표 단위로 끊어서 2차원 리스트이다.
예를 들어, 아래 코드는 언급된 파일에 저장된 내용의 각 줄을 출력해준다.
In [6]:
import csv
with open('Seoul_pop2.csv', 'rb') as f:
reader = csv.reader(f)
for row in reader:
if len(row) == 0 or row[0][0] == '#':
continue
else:
print(row)
파일의 셋 째줄을 읽을 때, 즉 비어있는 줄을 읽을 때 공리스트를 다루어야 하는데 row[0] 에서 오류 발생. 따라서 전체 코드 실행이 멈춤.
넘파이 어레이를 생성하는 방법은 몇 개의 기본적인 함수를 이용하면 된다.
np.arange()
np.zeros()
np.ones()
np.diag()
예제:
In [7]:
np.arange(3, 10, 3)
Out[7]:
In [8]:
np.zeros((2,3))
Out[8]:
In [9]:
np.ones((2,))
Out[9]:
In [10]:
np.diag([1, 2, 3, 4])
Out[10]:
In [11]:
np.ones((3,3)) * 2
Out[11]:
In [25]:
np.diag(np.ones(3)) * 2
Out[25]:
In [26]:
a = np.diag(np.ones(3))
a + a
Out[26]:
In [32]:
np.diag(2,2 ,2 )
견본답안:
In [12]:
np.diag(np.ones((3,))*2)
Out[12]:
.
견본답안:
In [13]:
np.diag(np.arange(2, 7, 2))
Out[13]:
numpy 모듈의 linspace()
함수는 지정된 구간을 정해진 크기로 일정하게 쪼개는 어래이를 생성한다.
예를 들어, 0부터 3사이의 구간을 균등하게 30개로 쪼개고자 하면 아래와 같이 실행하면 된다.
In [14]:
xs = np.linspace(0, 3, 30)
xs
Out[14]:
.
견본답안:
In [15]:
np.linspace(0,1, 10) ** 2
Out[15]:
population.txt
파일은 1900년부터 1920년까지 캐나다 북부지역에서 서식한 산토끼(hare)와 스라소니(lynx)의 숫자,
그리고 채소인 당근(carrot)의 재배숫자를 아래 내용으로 순수 텍스트 데이터로 담고 있다.
# year hare lynx carrot
1900 30e3 4e3 48300
1901 47.2e3 6.1e3 48200
1902 70.2e3 9.8e3 41500
1903 77.4e3 35.2e3 38200
1904 36.3e3 59.4e3 40600
1905 20.6e3 41.7e3 39800
1906 18.1e3 19e3 38600
1907 21.4e3 13e3 42300
1908 22e3 8.3e3 44500
1909 25.4e3 9.1e3 42100
1910 27.1e3 7.4e3 46000
1911 40.3e3 8e3 46800
1912 57e3 12.3e3 43800
1913 76.6e3 19.5e3 40900
1914 52.3e3 45.7e3 39400
1915 19.5e3 51.1e3 39000
1916 11.2e3 29.7e3 36700
1917 7.6e3 15.8e3 41800
1918 14.6e3 9.7e3 43300
1919 16.2e3 10.1e3 41300
1920 24.7e3 8.6e3 47300
아래 코드는 연도, 토끼 개체수, 스라소리 개체수, 당근 개체수를 따로따로 떼어 내어 각각 어레이로 변환하여
year
, hares
, lynxes
, carrots
변수에 저장하는 코드이다.
In [33]:
data = np.loadtxt('populations.txt')
year, hares, lynxes, carrots = data.T
In [34]:
data
Out[34]:
.
In [36]:
data.T
Out[36]:
.
아래 코드는 토끼, 스라소니, 당근 각각의 개체수의 연도별 변화를 선그래프로 보여주도록 하는 코드이다.
In [17]:
plt.axes([0.2, 0.1, 0.5, 0.8])
plt.plot(year, hares, year, lynxes, year, carrots)
plt.legend(('Hare', 'Lynx', 'Carrot'), loc=(1.05, 0.5))
Out[17]:
.
.