In [39]:
from __future__ import division, print_function
import matplotlib.pyplot as plt
import numpy as np
In [8]:
%matplotlib inline
.
아래 사이트는 커피 콩의 현재 시세를 보여준다.
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>
아래 코드가 하는 일을 설명하라.
from __future__ import print_function
import urllib2
import time
def price_setter(b_price, a_price):
bean_price = b_price
while 5.5 < bean_price < 6.0:
time.sleep(1)
page = urllib2.urlopen("http://beans-r-us.appspot.com/prices.html")
text = page.read().decode("utf8")
price_index = text.find(">$") + 2
bean_price_str = text[price_index : price_index + 4]
bean_price = float(bean_price_str)
print("현재 커피콩 가격이", bean_price, "달러 입니다.")
if bean_price <= 5.5:
print("아메리카노 가격을", a_price, "달러만큼 인하하세요!")
else:
print("아메리카노 가격을", a_price, "달러만큼 인상하세요!")
견본답안: 1, 3, 4
아래코드가 하는 일을 설명하라.
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 [75]:
odd_1000 = [x**2 for x in range(0, 1000) if x % 2 == 1]
# 리스트의 처음 다섯 개 항목
odd_1000[:5]
Out[75]:
.
모범답안:
In [84]:
odd_3x7 = [x for x in range(0, 1000) if x % 2 == 1 and x % 7 == 0]
# 리스트의 처음 다섯 개 항목
odd_3x7[:5]
Out[84]:
In [86]:
def square_plus1(x):
return x**2 + 1
odd_3x7_spl = [square_plus1(x) for x in odd_3x7]
# 리스트의 처음 다섯 개 항목
odd_3x7_spl[:5]
Out[86]:
위 도표의 데이터는 'Seoul_pop2.csv'
파일에 아래와 같이 저장되어 있다.
In [55]:
!cat Seoul_pop2.csv
# 윈도우의 경우:
# !type Seoul_pop2.csv
확장자가 csv인 파일은 데이터를 저장하기 위해 주로 사용한다. csv는 Comma-Separated Values의 줄임말로 데이터가 쉼표(콤마)로 구분되어 정리되어 있는 파일을 의미한다.
csv 파일을 읽어드리는 방법은 csv
모듈의 reader()
함수를 활용하면 매우 쉽다.
In [56]:
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)
.
넘파이 어레이를 생성하는 방법은 몇 개의 기본적인 함수를 이용하면 된다.
np.arange()
np.zeros()
np.ones()
np.diag()
예제:
In [43]:
np.arange(3, 10, 3)
Out[43]:
In [29]:
np.zeros((2,3))
Out[29]:
In [31]:
np.ones((2,))
Out[31]:
In [32]:
np.diag([1, 2, 3, 4])
Out[32]:
In [22]:
np.ones((3,3)) * 2
Out[22]:
견본답안:
In [44]:
np.diag(np.ones((3,))*2)
Out[44]:
견본답안:
In [42]:
np.diag(np.arange(2, 7, 2))
Out[42]:
numpy 모듈의 linspace()
함수는 지정된 구간을 정해진 크기로 일정하게 쪼개는 어래이를 생성한다.
예를 들어, 0부터 3사이의 구간을 균등하게 30개로 쪼개고자 하면 아래와 같이 실행하면 된다.
In [13]:
xs = np.linspace(0, 3, 30)
xs
Out[13]:
.
견본답안:
In [53]:
np.linspace(0,1, 10) ** 2
Out[53]:
population.txt
파일은 1900년부터 1920년까지 캐나다 북부지역에서 서식한 산토끼(hare)와 스라소니(lynx)의 숫자,
그리고 채소인 당근(carrot)의 재배숫자를 순수 텍스트 데이터로 담고 있다.
In [2]:
!cat populations.txt
# 윈도우 경우 아래 명령어 사용
# !type populations.txt
In [5]:
data = np.loadtxt('populations.txt')
year, hares, lynxes, carrots = data.T
.
.
In [10]:
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[10]:
.
.