6장. if 문과 loop문 (p126)
PYTHON2017. 9. 10. 00:42
■ 6장. if 문과 loop문 (p126)
* 6장 목차
1. if문
2. for loop문
3. while loop문
4. 중첩 loop문
5. continue와 break 사용법
알고리즘 문제들을 파이썬으로 구현 ---> 전날 알고리즘 문제2개 공부
다음날 문제2개 오픈북
문제만 다른것으로 살짝 변경해서 PL/SQL
알고리즘 문제를 해결하는 목적 ---> 파이썬 프로그래밍을 잘하기 위해서 공채시험문제(파이썬)
■ if문 예제 (p126)
if 조건1 :
실행문
elif 조건2 : " 조건이 true 이면 실행이되고 조건이 false이면
실행문 실행이 안된다. "
elif 조건3 :
실행문
else: <----------- 생략가능
실행문
* 조건이 false로 평가 되는 경우 (p 118)
1. False
2. None
3. 숫자 0
4. 비어있는 순서열 : '' , () : 비어있는 튜플 , [] : 비어있는 리스트
5. 비어있는 딕셔너리 : {}
문제111. 숫자를 물어보게하고 숫자를 입력해서 짝수인지 홀수인지를 출력하는 if 문을 이용한 파이썬
코드를 작성하시오!
------------
| if 문 |
------------
a = input('숫자를 입력하세요 ')
if int(a)%2 == 0 :
print ('짝수입니다')
else:
print ('홀수 입니다.')
문제112. 위의 if문의 예제로mod 함수를 구현하시오 !
------------
| if 문 |
------------
print (mod(10))
짝수입니다.
def mod(a):
res =''
if int(a)%2 == 0:
res ='짝수입니다'
else:
res ='홀수 입니다.'
return res
print(mod(10))
문제113. 이름을 물어보게하고 이름을 입력하면 해당 사원이 고소득자인지
저소득자인지 출력되게 하시오 !
월급 >= 3000 고소득자 입니다.
월급 >= 2000 적당합니다.
월급 < 2000 저소득자입니다.
import pandas as pd
emp = pd.DataFrame.from_csv("D:\data\emp.csv")
a= input('이름입력')
empresult = emp[ ['sal'] ][emp['ename'] == a]
empresult = empresult.values[0]
print(empresult)
if int(empresult) >=3000 :
print ('고소득자입니다')
elif int(empresult) >=2000 :
print ('적당합니다.')
elif int(empresult) <2000 :
print ('저소득자입니다.')
문제114. 위의 문제를 다시 수행하는데 이름을 소문자로 입력해도 결과가 출력되게 하시오
import pandas as pd
emp = pd.DataFrame.from_csv("D:\data\emp.csv")
a= input('이름입력')
empresult = emp[ ['sal'] ][emp['ename'] == a.upper()]
empresult = empresult.values[0]
print(empresult)
if int(empresult) >=3000 :
print ('고소득자입니다')
elif int(empresult) >=2000 :
print ('적당합니다.')
elif int(empresult) <2000 :
print ('저소득자입니다.')
문제115. (알고리즘 문제 ) 가우스 공식으로 1부터 10까지의 숫자의 합을 출력하시오 !
------------
| if 문 |
------------
첫번째 수를 입력하시요 ~ 1
마지막 수를 입력하시오 ~ 10
1부터 10의 합은 55입니다.
a = input('첫번째 수를 입력하세요 ! ')
b = input('마지막 수를 입력하세요 ! ')
res ('%a 부터 %b 까지 합은 ',%a , %b)
a = int(input('첫번째 수를 입력하세요 ! '))
b = int(input('마지막 수를 입력하세요 ! '))
if a < b
res = (b*(b+1)/2) - (a*(a+1)/2)
res= (a+ b) / 2 *(b- a -1)
print(int(a),' 부터 ',int(b),'까지 합은 ',int(res))
else :
print ('
첫번재 입력한 숫자가
두번째 입력한 숫자보다 큽니다
')
문제116. 위ㅡ이 문제를 다시 수행하는데 아래와 같이 큰 숫자를 먼저입력하면 첫번재 입력한 숫자가
두번째 입력한 숫자보다 큽니다 라는 메세지가 출력되겧 사ㅗㅇ
a = input('첫번째 수를 입력하세요 ! ')
b = input('마지막 수를 입력하세요 ! ')
res ('%a 부터 %b 까지 합은 ',%a , %b)
a = int(input('첫번째 수를 입력하세요 ! '))
b = int(input('마지막 수를 입력하세요 ! '))
if a < b:
res = (b*(b+1)/2) - (a*(a+1)/2)
res= (a+ b) / 2 *(b- a -1)
print(int(a),' 부터 ',int(b),'까지 합은 ',int(res))
else :
print ('첫번재 입력한 숫자가 두번째 입력한 숫자보다 큽니다')
■ 6.2 for loop 문
문법 : for 반복변수 in 순서열:
↑
실행문 리스트, 튜플, 문자열
예제:
for i in (1,2,3) # 리스트
print (i)
for i in ['a','b','c']
print(i)
for i in 'I am a boy':
print(i)
for i in range(0,5):
print(i)
for i in range(5):
print(i)
for i in range(1,10,2):
print(i)
문제117. 구구단 2단을 출력하시오!
2 x 1 = 2
for i in range(2,10):
for j in range(1,10):
print(i 'x',i,' = ',i*j)
문제118., 별표 출력 !
for i in range(1,12):
res=''
for j in range(1,i):
res+='★'
print(res)
for i in range(1,11):
print('★'*i)
문제119. 별표 출력 반대로!!
for i in range(10,0,-1):
print('★'*i)
문제120. 아래와 같이 출력하시오 !
for j in range(5):
print(('w'*j).rjust(10))
for i in range(5,0,-1):
print(('★'*i).rjust(10))
for i in range(5)
print ((' '*i),('★'*5-i))
for i in range(5,0,-1):
print ((' '*i),('★'*5-i))
for i in range(10,0,-1):
if i>=5:
a=(' '*i)
b=('★'*(10-i))
print(a+b)
elif i<5:
c=(' '*(10-i))
d=('★'*(i))
print(c+d)
문제121. 중첩 for loop 문을 이용해서 ★ 로 사각형을 만드시오 !
가로의 숫자를 입력하시오 5
세로의 숫자를 입력하세요 5
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
★ ★ ★ ★ ★
a = int(input('세로숫자를 입력하세요 '))
b = int(input('가로숫자를 입력하세요 '))
-- for loop 중첩 안 했을 때
for i in range(a):
print ('★'*b)
-- for loop 중첩 했을 때
for i in range(a):
res = ''
for j in range(b):
res += '★'
print(res)
문제122. 구구단을 가로로 출력하시오 ~
for i in range(1,10):
res = ''
for j in range(2,10):
res += (str(j)+' x '+str(i)+' = '+str(i*j)+ ' ').ljust(13)
print(res)
문제123. for loop 문을 이용해서 power함수를 구현하시오
밑수를 입력하세요 ~ 2
지수를 입력하세요 ~ 3
2의 3승은 8 입니다.
a = int(input('밑수를 입력하세요 '))
b = int(input('지수를 입력하세요 '))
res =1
for i in range(b):
res *= a
print (a,'의 ',b,'승은 ',res,'입니다')
설명:
1. ('★' for i in ragne(5)) # for loop 문을 5번 돌려서 ★★★★★
2. join : ★5개를 모아주는 메소드
3. ''. : result 변수를 '' (None)으로 하겠다.
■ 숫자, 문자, 공백이 스크립트안에 얼마나 포함되었는지 확인하는 방법
s = 'some stirng'
numbers = sum(c.isdigit() for i in s)
words = sum(c.isalpha() for i in s)
space = sum(c.isspace() for i in s)
문제124. 겨울왕국 대본에는 숫자가 몇개나 있는가?
numbers =0
text_file = open("d:\data\winter.txt",'r')
lines = text_file.readlines()
total = 0
for i in lines :
numbers += sum(c.isdigit() for c in i )
문제125. 공백도 아니고 문자도 아니고 숫자도 아닌 문자가 (특수문자)
몇개 나 있는지 확인하시오
text_file = open("d:\data\winter.txt",'r')
lines = text_file.readlines()
numbers =0
total = 0
alpha = 0
spaces =0
for i in lines :
total += len(i)
numbers += sum(c.isdigit() for c in i )
alpha += sum(c.isalpha() for c in i )
spaces += sum(c.isspace() for c in i )
print(total-numbers-alpha-spaces)
■while loop
문법 : while 조건 :
실행문
예제 :
print ('몇번 반복할까요 : ? ')
limit = int(input('반복할 횟수를 입력하세요'))
count = 0
while count < limit:
count += 1
print('{12} 회 반복.'.format(count) )
문제126. 숫자를 물어보게하고 숫자를 입력하면 해당 숫자만큼
아래와 같은 그림이 그려지게 하시오!
숫자를 입력하세요 6
c=0
a = int(input('숫자를 입력하세요 '))
while c < a :
c+=1
quf =('★'*c).rjust(10)
print(quf)
문제127. 팩토리얼 while loop 문으로 구현하시오 !
팩토리얼 숫자를 입력하세요 ! 5
120 입니다.
5*4*3*2*1
문제128. log함수를 파이썬으로 구현하시오 ! (while loop문으로 )
( 알고리즘 문제 6번)
c= 0
a = int(input('밑수를 입력하세요 '))
b = int(input('지수를 입력하세요 '))
if a%b == 0 :
while a < b :
c+=1
a = c * a
-- 정수자리 찾기! 완료
다우니 향!~
노말 퍼퓸
문제129. (공채에서 가장 많이 나온느 알고리즘 문제)
두수를 입력 받아서 최대공약수를 구하시오 !
while loop 문 + 유클리드 호제법
첫번째 수를 입력하세요 ~ 24
두번재 수를 입력하세요 ~ 18
6 입니다.
while a%b != 0 :
if b > a :
(a, b) = (b, a) # swap !!!!
c = a%b
a = b
b = c
print (str(c)+'입니다')
-- 정수자리 찾기! 완료
문제130. (마지막 문제) 최대 공약수를 알굇픙ㄴ 2개 숫자를 입력하세요
a = input('최대공약수를 알고 싶은 2개의 숫자를 입력하세요 ')
li = []
li = a.split(' ')
a = int( li[0] )
b = int( li[1] )
while a%b != 0 :
if b > a :
(a, b) = (b, a) # swap !!!!
c = a%b
a = b
b = c
print (c)
■ 6장. if 문과 loop문
- for loop
-알고리즘
1.금방생각해도 구현할 수 있는 문제
2.오래 생각해야 구현할 수 있는 문제
( 버블정렬, 최단거리, 탐욕 알고리즘 )
↑
mit 공대 코드
mit 공대 머신러닝 코드를 이해하기 위한 문법?
1.format 함수
2.for loop
3.함수 생성하는 방법
4.자료형 - 리스트, 튜플, 딕셔너리
5.if 문
6.몬테칼르로 알고리즘 -- 혜승이 원주율 구하는 코드
파이썬으로 구현 !
7.탐욕 알고리즘
8.수학공식
self.values[self.prevstate] += self.alpha * (nextval - self.prevscore)
- while loop
■ 6장. if 문과 loop문 (p126)
- 6장 목차
- if문
- for loop문
- while loop문
- 중첩 loop문
■ 6.4. continue 문(p137)
"반복문이 실행되는 동안 특정 코드블럭은 실행하지 않고
다른 코드 블럭만 실행되게 할때 사용하는 문법 "
예제 설명:
for i in range(10) :
if i $ 2 == 1:
continue # 홀수는 컨티뉴 제껴라!
print (i)
문제131. 숫자를 1부터 10까지 출력하는데 중간에 5는 나오지 않게 !
for i in range(10):
if i == 5 :
continue
print (i)
■ break 문
"루프를 중단시키는 역할을 하는 문법"
예제 :
i = 0
while (True) : # 무한 루프 돌리겟따
i += 1
if i == 1000:
print('i가 {0}이 됨. 반복문을 중단함',format(i))
break
print(i)
문제132. 함수를 생성하는데 아래와 같이 숫자를 넣어서 실행하면
해당 숫자만큼 숫자가 세로로 출력되게 하시오 ~
print( break_fun(10) ) # 10 이 loop문을 중단시킬 숫자
1
2
3
4
5
6
7
8
9
10
none
문제133. 위의 함수를 수정해서 결과가 아래와 같이 가로로 출력되게 하시오
def break_fun(val):
res =''
num =1
while 1:
res += str(num) + ' '
if num == val:
break
num += 1
print(res)
print(break_fun(10))
■6장에서 배운 내용 if 문과 loop[문을 정리하는 문제
- pandas 를 이용해서 1.판다스 기본 문법
- pandas를 이용하지 않고 조인
- 1. for loop문을 중첩해서 문제를 해결
- 2. 딕셔너리 데이터 타입을 이해 (mit 코드에서도 중요하게 쓰인다.)
문제134. 아래와 같이 딕셔너리 형태의 데이터를 만들고 출력하시오 !
- 파이썬 데티ㅓ 구조 3가지 1.리스트 2.튜플 3.딕셔너리(키와 값으로 구성)
emp_dic = {'mgr':'7788','sal':'1100','deptno':'20','comm':'0','job',:'CLERK','hiredate':'1983-01-15','empno':7876','ename':'ADAMS'}
emp_dic
emp_dic['mgr']
문제135. 6장에서 배운 for loop 를 이용해서 emp2.csv를 읽어와서 emp_dict라는 딕셔너리 데이터 유형ㅇ르 만드시오
import csv
emp_file = open("D:\data\emp.csv",'r')
emp_csv = csv.reader(file)
emp = [] # 비어있는 리스트 하나 선언
for i in emp_csv :
emp.append({'empno':i[0],'ename':i[1],'job',i[2],'mgr':i[3],'hiredate':i[4],'sal':i[5],'comm':i[6],'deptno':i[7]})
print(emp)
문제136.emp 딕셔너리 변수에서 이름만 출력하시오
그동안에는 emp_list변수에서 ename 에 해당하는 부분ㅇ르 출력해왓다면
---> emp_list[1]
지금은 emp_dic 변수에서 ename 에 해당하는 부분을 출력하는 것이다ㅣ
---> emp_dic[키]
문제137. 이름과 월급과 직업을 출력하시오 !
for emp_dic in emp:
print(emp_dic['ename'].ljust(10),emp_dic['sal'].ljust(10),emp_dic['job'].ljust(10))
문제138. dept.csv 를 읽어서 딕셔너리 데이터 구조로 저장하고 아래와 같이
수행하면 deptno, dname, loc가 출력되게 하시오
import csv
dept_file = open("D:\data\dept.csv",'r')
dept_csv = csv.reader(file)
dept= [] # 비어있는 리스트 하나 선언
for i in emp_csv :
emp.append({'deptno':i[0],'dname':i[1],'loc',i[2]})
문제139. emp.csv 와 dept.csv 를 각각 읽어와서 emp_dic, dept_dic
딕셔너리 자료형으로 만드는 스크립트를 하나로 합치시오
import csv
dept_file = open("D:\data\dept.csv",'r')
emp_file = open("D:\data\emp.csv",'r')
dept_csv = csv.reader(dept_file )
emp_csv = csv.reader(emp_file)
dept= []
emp = []
for i in dept_csv :
dept.append({'deptno':i[0],'dname':i[1],'loc':i[2]})
for i in emp_csv :
emp.append({'empno':i[0],'ename':i[1],'job',i[2],'mgr':i[3],'hiredate':i[4],
'sal':i[5],'comm':i[6],'deptno':i[7]})
문제140. emp와 dept라는 딕셔너리 자료구조를 만드는 스크립트와 중첩 for loop문을 이용해서
emp와 dept를 조인 시켜서 ename 과 loc를 출력하시오
" nested loop 조인 방법 "
for e in emp:
for d in dept:
if e['deptno'] == d['deptno']:
print( e['ename'],d['loc'])
문제141. 부서위치가 DALLAS 인 사원들의 이름과 부서위치를 출력하시오 !
for e in emp:
for d in dept:
if (e['deptno'] == d['deptno']) & (d['loc'] == 'DALLAS'):
print( e['ename'].ljust(7),d['loc'])
for e in emp:
for d in dept:
if (e['deptno'] == d['deptno']) and (d['loc'] == 'DALLAS'):
print( e['ename'].ljust(7),d['loc'])
문제142. 위의 스크립트를 이용해서 조인 함수를 생성하시오 !
print (join( emp, 'ename',dept,'loc','deptno'))
def join(t1,col1,t2,col2,jn):
for e in t1 :
for d in t2 :
if e[jn] == d[jn]:
print( e[col1 ].ljust(7),d[col2])
join( emp, 'ename',dept,'loc','deptno')
문제143. Pandas를 이용해서 ename 과 loc 를 출력하시오
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno')
print (result[['ename','loc']])
문제144. 부서위치가 dallas인 사원들의 이름과 부서위치를 출력하시오pandas사용
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno')
print (result[['ename','loc']][result['loc']=='DALLAS'])
문제145. 이름과 부서위치를 출력하는데 아래와 같이 Outer join을 구현하시오
select e.ename, d.loc
from emp e , dept d
where e.deptno = d.deptno(+);
import pandas as pd
emp= pd.read_csv("D:\data\emp.csv")
dept= pd.read_csv("D:\data\dept.csv")
result = pd.merge(emp,dept,on='deptno',how='right')
print (result[['ename','loc']][result['loc']=='DALLAS'])
'PYTHON' 카테고리의 다른 글
gcp를 이용해서 jupyter notebook / jupyter lab 서버 만들기 (0) | 2018.08.27 |
---|---|
9장. 객체와 클래스 (가장 중요한 단원) (0) | 2017.09.10 |
8장. 모듈 (0) | 2017.09.10 |
7장. 함수 (0) | 2017.09.10 |
1-5장 (0) | 2017.09.10 |
■ 파이썬을 통해서 우리가 이루고자 하는 목표 2가지
- 파이썬 문법 ( ~ 11장. ----> 웹스크롤링 ---> Tic Tac Toe)
↓
1.단층 퍼셉트론
2.greedy 알고리즘
3.확률(몬테카를로)
↓
통계학자4명+물리학자
- 웹스크롤링 기술
신문사 ------> 트위터 -----------> 인스타그램
원하는 사이트를 자유롭게 웹 스크롤링
- 머신러닝 프로그램 구현 (Tic Tac Toe - Mit 공대)
점프 투 파이썬
■ 파이썬 설치
인스타그램
■ 파이썬 설치
- 기본 파이썬 설치 파일
- 아나콘다(spider)
- 웹스크롤링 : beautiful soup 모듈
- 머신러닝(틱텍토) : numpy 모듈
- 파이참(pycharm)
■ 2장. 파이썬이란?
- 파이썬의 문법은 쉽다
- 라이브러리 (모듈) 이 많아서 유용하다
-Numpy 모듈 : 수학 연산에 필요한 모듈
-beautiful soup 모듈 : 웹스크롤링 모듈
-pandas 모듈 : 데이터 검색 모듈
■3장. 파이썬 설치
■4장. 데이터 다루기
- 4장 목차
1.파이썬에서 변수 사용법
2.산순연산자
3.함수
4.input 명령어 사용법
4.1. 파이썬에서 변수 사용법
- 일반변수 : 변수 안에 데이터가 한 개
예: a = 1000
print(a)
- 리스트 변수: 변수안에 여러개의 데이터(요소)가 들어있는 변수
a=1000print(a)print(type(a))a='e'print(a)print(type(a))a=1/7.0print(a)print(type(a))a='elrkjer'print(a)print(type(a))a=''print(a)print(type(a))a=nullprint(a)print(type(a)) |
1000<class 'int'>e<class 'str'>0.14285714285714285<class 'float'>elrkjer<class 'str'>
|
- 리스트 변수 : 변수안에 여러개의 데이터(요소)가 들어있느 ㄴ변수
d=[1000,2000,3000,4000]
print(d)
print(type(d))
------------------------
[1000, 2000, 3000, 4000]
<class 'list'>
문제1. 위의 d 리스트 변수에서 2000을 출력하시오
d=[1000,2000,3000,4000]
print(d[0])
[결과]
1000
문제2. d 리스트 변수안에 있는 요소드릉르 하나씩 출력하시오 !
d=[1000,2000,3000,4000]
for i in d:
print(i)
[결과]
1000
2000
3000
4000
설명 : 파이썬은 PL/SQL이나 JAVA, C언어 처럼 ; [세미콜론]을 사용하지 않는다.
그냥 : [콜론]을 사용하는데 (괄호쓰지않고 ) 반드시 콜론을 끝에 적어줘야하는
문법이 if 문, while loop, for loop, def 함수 생성시 사용한다.
PL/SQL 이나 자바,C 등을 사용하던 사람들은 뒤에 ; 을 붙이는 습관이있는데
파이썬은 기본적으로 구문의 뒤에 아무것도 붙이지 않는다. 대신 IF문이나
WHILE LOOP, FOR LOOP, DEF CLASS 문의 뒤에 는 꼭 붙여야한다.
파이썬이 다른 언어보다 보기 쉽고 소스코드가 간결한 이유는
콜론(:)을 사용해서 들여쓰기를 하도록 만들었기 때문이다.
파이썬은 블럭구분을 들여쓰기를 통해서 한다.
콜론(:) 뒤에 나오는 명령어를 다음줄에 작성하려면 들여쓰기를 해야한다.
문제3. a 라는 리스트 변수에 아래의 내용을 담으시오
a = ['7839','KING','PRESIDENT','0','1981-11-17','5000','','10']
for i in a:
print(i)
문제4. a 리스트에서 7839만 출력하세요
a = ['7839','KING','PRESIDENT','0','1981-11-17','5000','','10']
print(a[0])
- 함수
■len 함수 : 리스트 변수안에 있는 요소들이 몇개인지 출력하는 함수
a = ['7839','KING','PRESIDENT','0','1981-11-17','5000','','10']
cnt = len(a)
print(cnt)
a = ['7839','KING','PRESIDENT','0','1981-11-17','5000','','10']
↓
None
(오라클의 null)
문제6. 카페에서 파이썬 수업자료에 emp2.csv를 내려받아 D 드라이브 밑에
data라는 폴더에 다운 받고 아래와 같이 수행한다.
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list)
문제7. 위의 결과에서 사원번호만 출력하시오
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[0])
문제8. 이름과 월급을 출력하시오
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[2].rjust(10),emp_list[5].rjust(10))
문제9. 위의 14개의 리스트 변수의 요소의 갯수를 아래와 같이 출력하시오
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (len(emp_list))
결과 :
8
8
8
8
8
8
8
8
8
8
8
8
8
8
문제10. 이름과 이름의 길이를 아래와 같이 출력하시오 !
SMITH 5
SCOTT 5
ALLEN 5
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1] ,len(emp_list[1]))
■ 4.3 산술 연산자
+ 더하기
- 빼기
*곱하기
/ 나누기
% 나눈 나머지 값
문제11. 사원번호, 이름 , 월급을 출력하시오
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[0] ,emp_list[1],emp_list[5] )
문제12. 이름과 연봉(sal*12) 을 출력하시오 !
설명 : 숫자로 형변환을 해주어야 한다.
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[0] ,emp_list[1],emp_list[5]*12 )
[결과]
설명: 숫자로 형변환을 해주어야 한다.
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[0] ,emp_list[1],int(emp_list[5])*12 )
문제13. 이름과 커미션을 출력하는데 커미션이 none 이면 0으로 출력하시오 !
def ifnull(var,val):
if var is '':
return val
return var
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1] ,ifnull(emp_list[6],0) )
문제14.(오늘의 마지막 문제 ) 이름과 월급 + 커미션을 출력하시오 !
def ifnull(var,val):
if var is '':
return val
return var
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1] ,int(emp_list[5]) + int(ifnull(emp_list[6],0)) )
[결과]
...
KING 5000
BLAKE 2850
CLARK 2450
JONES 2975
MARTIN 2650
ALLEN 1900
TURNER 1500
JAMES 950
WARD 1750
FORD 3000
SMITH 800
SCOTT 3000
ADAMS 1100
MILLER 1300
def ifnull(var,val):
if var is '':
return val
return var
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print(emp_list[1],int(emp_list[5]),int(emp_list[5])+int(ifnull(emp_list[6],0)),int(emp_list[5])+int(ifnull(emp_list[6],0))-int(emp_list[5]), emp_list[6])
■ 어제 배운 내용
- 파이썬을 배우는 목표
ぁ 웹스크롤링 Big data 수집
ぃ 머신 러닝 - Tic Tac Toe 코드로 이해
엔트로피 지수로 가장 좋은 수를 찾는 방법을 구현 코드
퍼센트론 -----> 인공신경망
↓
행렬, 벡터를 이용한 수학 공식을 계산
사람의 뇌 구조를 아주 조금 컴퓨터로 구현했는데
그 안에 뉴런에서 보내는 신호를 가중치로 표현을
해서 그 가중치(반복학습을 하면 중요하다는 것을 알게되는것 !)
를 계산해야 한다.
2x + 3y + z = 4
x - y + 3z = 2 연립 방정식 계산식
5x + 2y + z = 4
선형대수학
- 데이터 다루기
- 변수 사용법
- 산술 연산자
- nvl 함수가 파이썬에는 없음
*4장 목차
- 변수 사용법
- 산술 연산자
- 함수
- input 명령어
4.3. 함수
책 83 ~ 85
*우리의 목표에 맞춰서 나름대로 다시 정리
오라클 |
파이썬 |
1. 문자함수
upper
lower
initcap
substr
replace
length
rtrim
ltrim
trim
rpad
lpad
instr
|
lower() 사용자 함수 변수[1:2] replace() len() rstrip() lstrip() strip() 사용자 함수 사용자 함수 사용자 함수 |
2.숫자함수roundtruncmodpower |
|
3.날짜함수months_betweenadd_monthsnext_daylast_day |
relativedelta사용자 함수monthrange |
4.변환함수to_charto_numberto_date |
|
5.일반함수 nvl decode case |
ifnull 사용자함수 if 문 |
6. 파이썬에 유용한 함수(MIT Tic Tac Toe)문자함수
|
split
append
range
count
|
■ 연산자
- 산술 연산자
- 비교 연산자
- 논리 연산자
- 기타 비교연산자
오라클 |
파이썬 |
|
산술 연산자
|
+-
|
+-/% |
비교연산자
|
= !=>>=<<= |
|
논리연산자
|
andornot |
&|! |
기타 비교 연산자 |
between .. andin, not inis nulllike |
<= & >=in==''^(시작), $(끝) , 정규식함수 |
문제15. 이름과 직업을 출력하는데 소문자로 출력하시오
---------------------------
함수 : upper , lower 함수
---------------------------
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1] ,int(emp_list[5]) + int(ifnull(emp_list[6],0)) )
문제16.(MIT TTT 코드를 이해를 위해 중요한 기초 문제)
이름을 출력하는데 이름의 첫번째 철자만 출력하고 소문자로 출력하시오!
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1][:1].lower())
문제17. 이름을 출력하는데 이름의 두번째 철자부터 마지막까지 소문자로
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1],emp_list[1][1:].lower())
문제18. 이름의 첫번째 함수는 대분자로 나머지는 소문자로 출력하시오
---------------------------
|함수: initcap 사용자 함수|
---------------------------
def initcap(val):
return val[0].upper()+val[1:].lower()
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (initcap(emp_list[1]))
문제19. 이름의 첫번째 철자부터 세번째 철자까지 출력되게하시오 !
---------------------------
|함수: substr 사용자 함수 |
---------------------------
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1][0:3])
문제20. 이름의 첫번째 철자부터 세번째 철자까지 출력되게하시오 !
def substr (val, num1, num2):
return val[num1-1:num2]
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (substr(emp_list[1],1,3) )
문제21. 이름과 월급을 출력하는데 월급을 출력할 때에 0 대신에 * 를 출력하시오
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[5].replace('0','*') )
문제22. 이름과 월급을 출력하는데 월급을 출력할때 0~2를 *로 출력하시오 !
---------------------
|함수: re 정규식함수|
--------------------- 참고사이트 : http://devanix.tistory.com/296
import re
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (re.sub('[0-2]','*',emp_list[5]) )
sub(pattern, repl, string[, count=0])
문제23. 이름과 이름의 길이를 출력하시오 !
---------------------
|함수: len() |
---------------------
import csv
file = open("D:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1],len(emp_list[1]) )
문제24. 아래의 split 함수의 예제를 수행해보시오!
---------------------
|함수: split() |
---------------------
file = 'a b c d e f g'
print ( file.split(' ') )
['a' , 'b', 'c' ,'d' , 'e', 'f' ,'g']
문제25. 아래 file 변수의 요소들을 리시트 변수로 담아내서 두번째 요소인 b만 출력해보시오 !
file = 'a b c d e f g'
a = file.split(' ')
print(a[1])
print ( file.split(' ')[3])
문제26. 겨울왕국 대본을 공백을 구분으로 두고 나눠서 리스트 변수로 저장되게 하시오 !
---------------------
|함수: split() |
---------------------
file = open("D:\data\winter.txt",'r')
for winter_list in file:
a= winter_list.split(' ')
print (a)
문제27. (점심시간 문제) 위의 스크립트를 이용해서 겨울왕국 각 리스트 변수안에 단어가 몇개 있는지 아래와 같이 출력되게하시오
file = open("D:\data\winter.txt",'r')
for winter_list in file:
a=len(winter_list)
print (a)
문제28."썸!
file = open("C:\Octave\winter.txt","r" )
b = 0
c = 0
for winter_list in file:
a= winter_list.split(' ')
b = b + len(a)
print(b)
문제29. 카운트 함수 써보자
---------------------
|함수: count() |
c = ['Anna','Elsa','Anna','Elsa']
d = c.count('Elsa')
print(d)
[결과]
2
file = open("C:\Octave\winter.txt","r" )
b = 0
c = 0
for winter_list in file:
a= winter_list.split(' ')
b+=a.count('Elsa')
print(b)
문제30. emp.csv 에서 14개의 사원번호를 출력해보자!
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
b = []
for emp_list in emp_csv:
b.append(emp_list[0])
print(b)
예제 : a = [1, 2, 3]
a.append(4)
print(a)
b = []
b.append(1)
b.append(2)
b.append(3)
print(b)
문제31. 겨울왕국 대본을 단어별로 출력하시오!
for loop for loop
csv ------------------> list 변수 ----------------------------> 하나의 단어
↓
['glide', 'and', 'pivot.\n']
['We', 'pull', 'away', 'slowly,', 'into', 'the', 'sky.', 'We', 'arrive', 'at', 'a', 'bird’s-eye\n']
file = open("D:\data\winter.txt",'r')
for winter_list in file:
a= winter_list.split(' ') # 스크립트 -----> 리스트 변수
for i in a: # 리스트 변수 --> 단어
print(i)
문제32. 위의 출력된 단어들을 하나의 list변수에 담으시오
---------------------
|함수: append() |
---------------------
file = open("D:\data\winter.txt",'r')
B=[]
for winter_list in file:
a= winter_list.split(' ')
for i in a:
B.append(i)
print(B)
문제33. 출력된 단어들 중에서 \n 은 잘라내시오
-----------------------------------
|함수: lstrip(), rstrip(), strip()|
-----------------------------------
file = open("D:\data\winter.txt",'r')
B=[]
for winter_list in file:
a= winter_list.split(' ')
for i in a:
i = i.strip('\n')
B.append(i)
문제34. rpad 함수를 생성하시오 아래와 같이 실행되게 하시오 !
-----------------------------------
|함수: rpad(), lpad() 함수 |
-----------------------------------
def rpad(var,val):
if var is '':
return val
return var
import csv
file = open("D:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
print (emp_list[1], emp_list[5] )
|
1. 날짜함수를 파이썬으로 생성
- next_day (사용자 함수)
- add_months ( 모듈 이용해서 구현)
- last_day ( monthrange 함수)
- months_between ( 사용자 함수) ---> ? 오래 생각해야할 문제
2. input 명령어 + if 문 사용
3. 비교 연산자 : ==
>=
<=
!=
>
<
in <----- 겨울왕국에서 긍정단어가 몇 개가 있는가?
■ 기타 비교연산자 :
in in
between .. and <= & >=
like 정규식 함수
is null ==''
■논리 연산자:
and &
or |
not ^
문제62. 직업이 SALESMAN 이고 월급 1200 이상인 사원들의 이름과 직업과 월급을 출력하시오 !
import csv
file = open("d:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if (emp_list[2] == 'SALESMAN') & (int(emp_list[5]) >= 1200):
print(emp_list[1], emp_list[5])
문제63. 월급이 1000에서 3000 사이인 사원들의 이름과 월급을 출력하시오 !
연산자: between .. and |
import csv
file = open("d:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if (1000 <= int(emp_list[5])) & (3000 >=int(emp_list[5])):
print(emp_list[1], emp_list[5])
문제64. 직업이 ANALYST, CLERK 인 사원들의 이름과 월급과 직업을 출력하시오 !
연산자: in |
import csv
file = open("d:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[2] in ['ANALYST','CLERK']:
print(emp_list[1], emp_list[5], emp_list[2])
문제65. 직업이 ANALYST, CLERK 이 아닌 사원들의 이름과 월급과 직업을 출력하시오 !
연산자: in |
import csv
file = open("d:\data\emp2.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[2] not in ['ANALYST','CLERK']:
print(emp_list[1], emp_list[5], emp_list[2])
문제66. 커미션이 null 인 사원들의 이름과 커미션을 출력하시오 !
4. 파이썬 수업용 실습 데이터의 emp_comm.csv 를 다운받아서 수행
연산자 : is null
import csv
file = open("d:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[6] =='':
print(emp_list[1], emp_list[6])
문제67. 커미션이 null 이 아닌 사원들의 이름과 커미션을 출력하시오 !
연산자: ins not null
import csv
file = open("d:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[6] !='':
print(emp_list[1], emp_list[6])
문제68. 이름의 첫번째 철자가 S 로 시작하는 사원들의 이름과 월급을 출력하시오 !
연산자: like
import csv
file = open("d:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[1][0:1] =='S':
print(emp_list[1], emp_list[6])
문제69. 이름의 두번쨰 철자가 M 인 사원들의 이름과 우러급을 출력하시오 !
연산자: like
import csv
file = open("d:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[1][1:2] =='M':
print(emp_list[1], emp_list[5])
문제70. 이름의 마지막 철자가 H인 사원들의 이름과 월급을 출력하시오 !
연산자: like
import csv
file = open("d:\data\emp_comm.csv",'r')
emp_csv = csv.reader(file)
for emp_list in emp_csv:
if emp_list[1][-1] =='H':
print(emp_list[1], emp_list[5])
'PYTHON' 카테고리의 다른 글
gcp를 이용해서 jupyter notebook / jupyter lab 서버 만들기 (0) | 2018.08.27 |
---|---|
9장. 객체와 클래스 (가장 중요한 단원) (0) | 2017.09.10 |
8장. 모듈 (0) | 2017.09.10 |
7장. 함수 (0) | 2017.09.10 |
6장. if 문과 loop문 (p126) (0) | 2017.09.10 |
R 9장. k-means 알고리즘
R(알) 2017. 9. 9. 13:49
- 머신러닝 종류 3가지
- 1. 지도학습 {입력값, 정답}
- 분류 : knn, 나이브베이즈, 결정트리, svm
- 회귀 : 선형회귀, 신경망
- 2. 비지도학습 {입력값}
:k-means
정답이 없으니 해법을 배우지 못하고 데이터의 형태를 가지고
유형을 나눠보는 것
- 3. 강화학습 {입력값, 출력값, 출력에 대한 보상 }
: 핑퐁 , 틱텍토
■ 9장. 목차
- k-means 란?
- k-means 실습1 ( 국영수 점수를 가지고 학생 분류)
- k-means 실습2 ( 쇼셜 미디어에 같은 성향을 갖는 사람들을 분류)
--> 책 실습 예제
■ 1. k-means란?
각 문서들 속에 들어있는 데이터 분석을 통해 유사하거나 관계가 높은 항목끼리의 집합(클러스터)를 만들고 싶을때
사용하는 알고리즘
- (처음 중심값 선택) 랜덤하게 중심값 (centroid)를 선태갛ㄴ다.
- (클러스터 할당) k 개의 중심값과 각 개별 데이터간의 거리를 측정한다. 가장 가까운 클러스터에 해당 데이터를 assign한다.
- (새 중심값 선택) 클러스터 마다 새로운 중심값을 계산한다.
- (범위 확인) 선택된 중심값이 변화가 어느정도 없다면 멈춘다.
■ 데이터 수에 따른 적당한 k 값 계산
k = sqrt(n/2)
■ k-means 의 한계점
- k 값 입력 파라미터를 직접 지정해줘야 한다.
- 이상치(outlier) 에 민감하다
■ 기본예제1
1. 기본 데이터 셋을 만든다.
c <- c(3,4,1,5,7,9,5,4,6,8,4,5,9,8,7,8,6,7,2,1)
row <- c("A", "B","C","D","E","F","G","H","I","J")
col <- c("X","Y")
data <- matrix(c, nrow=10, ncol=2,byrow=TRUE, dimnames=list(row,col))
data
2.위에서 만든 데이터 셋으로 plot 그래프를 그린다
plot(data)
km <- kmeans( data, 2)
km$cluster
cbind(data, km$cluster)
> km$cluster
A B C D E F G H I J
1 1 2 1 2 1 2 2 2 1
> cbind(data, km$cluster)
X Y
A 3 4 1
B 1 5 1
C 7 9 2
D 5 4 1
E 6 8 2
F 4 5 1
G 9 8 2
H 7 8 2
I 6 7 2
J 2 1 1
>
km$centers
> km$centers
X Y
1 3 3.8
2 7 8.0
3. km 파라미터 값들을 가지고 다시한번 시각화 하시오 !
plot(round(km$center) , col= km$center, pch = 22 , bg = "dark blue", xlim=range(0:10), ylim=range(0:10) )
4. 원래 데이터를 위의 그래프에 합쳐서 출력합시다.
plot(round(km$center) , col= km$center, pch = 22 , bg = "dark blue", xlim=range(0:10), ylim=range(0:10) )
par(new=T)
plot(data, col=km$cluster +1 , xlim = range(0:10), ylim=range(0:10))
머신러닝 음악 분류
문제243. 영어와 수학 점수로 크게 4 그룹의 학생 집합으로 분류하시오 !
1. 영어, 수학 둘다 잘하는 학생들
2. 영어, 수학 둘다 못하는 학생들
3. 영어는 잘하는데 수학은 못하는 학생들
4. 수학은 잘하는데 영어는 못하는 학생들
academy <- read.csv("academy.csv", stringsAsFactors= F, header = T)
academy <- academy[-1]
academy
academy2 <- academy[, c(2,3)]
plot(academy2)
km <- kmeans(academy2,4)
km
plot(round(km$center) , col= km$center, pch = 22, bg = "dark blue",
xlim=range(0:100), ylim=range(0:100) )
par(new=T)
plot(academy2, col=km$cluster +1 , xlim = range(0:100), ylim=range(0:100))
음악도 이렇게 분류가 될듯 한데 ㅋㅋ : 잘해보셈
문제244. 영어와 수학을 둘다 잘하는 학생들이 누구누구인가?
x<- cbind( academy, km$cluster)
> km
K-means clustering with 4 clusters of sizes 6, 18, 17, 11
Cluster means:
수학점수평균 영어점수평균
1 47.83333 44.16667
2 83.72222 65.00000
3 87.17647 85.64706
4 59.81818 77.27273
Clustering vector:
[1] 3 2 1 2 3 3 2 2 1 4 3 3 4 1 3 2 2 3 3 3 2 2 4 2 2 2 4 3 2 4 2 3 4 3 1 2 2 3 3 4 4 3 4 2 1 3 4 2 3 4 1 2
Within cluster sum of squares by cluster:
[1] 791.6667 1775.6111 1304.3529 1273.8182
(between_SS / total_SS = 79.4 %)
Available components:
[1] "cluster" "centers" "totss" "withinss" "tot.withinss" "betweenss" "size"
> x[km$cluster==3,]
국어점수평균 수학점수평균 영어점수평균 과학점수평균 학업집중도 km$cluster
1 90 75 85 60 70 3
5 88 89 80 82 90 3
6 90 92 90 96 100 3
11 70 93 77 89 60 3
12 99 80 95 70 80 3
15 90 77 92 60 70 3
18 90 89 80 92 90 3
19 76 90 80 92 70 3
20 70 92 80 95 70 3
28 84 88 90 92 90 3
32 88 80 85 88 90 3
34 90 77 82 65 80 3
38 93 90 89 91 90 3
39 92 97 90 89 80 3
42 90 92 88 94 90 3
46 78 91 77 90 80 3
49 97 90 96 90 90 3
>
*10대의 sns 데이터
30000명의 10대 관심사를 가지고 5개의 그룹으로 나눈다
1. 데이터를 준비한다.
teens <- read.csv("snsdata.csv")
2. 성별에 결측 데이터가 있는지 확인
table(teens$gender)
table(teens$gender, useNA="ifany")
3. age의 이상치 제거
teens$age <- ifelse(teens$age >= 13 & teens$age <20, teens$age, NA)
summary(teens$age)
Min. 1st Qu. Median Mean 3rd Qu. Max. NA's
13.03 16.30 17.26 17.25 18.22 20.00 5523
4. 데이터 정제 (unknown인 성별값의 데이터를 1과 0으로 부여)
teens$female <- ifelse(teens$gender=="F" & !is.na(teens$gender),1,0)
teens$no_gender <- ifelse(is.na(teens$gender),1,0)
table(teens$gender, useNA="ifany")
table(teens$female, useNA="ifany")
table(teens$no_gender, useNA="ifany")
5. 집단별 평균나이
mean(teens$age)
mean(teens$age, na.rm=TRUE)
문제246. 졸업예정년도(gradyear), 졸업예정년도별 평균나이를 구하시오.
aggregate(data=teens, age~gradyear, mean, na.ram = TRUE)
gradyear age
1 2006 18.65586
2 2007 17.70617
3 2008 16.76770
4 2009 15.81957
6. 각 개인에 대한 예측된 나이 계산
(나이의 결측값들은 기존 데이터로 대충 예상해서 채워넣는다)
ave_age <- ave(teens$age, teens$gradyear, FUN = function(x), mean(x,na.rm=TRUE))
ave_age
teens$age <- ifelse(is.na(teens$age), ave_age, teens$age)
summary(teens$age)
7. teens 데이터셋에서 관심사에 해당하는 컬럼들만 따로 interest 라는 변수에 담는다.
interests <- teens[5:40]
8. 위의 interests 데이터를 정규화한다.
interests_z <- as.data.frame(lapply(interests, scale))
interests_z
9. kmeans로 위의 관심사를 5개의 군집으로 분류하시오.
teens_clusters <- kmeans(interests_z,5)
teens$cluster <-teens_clusters$cluster
10. 처음 5개의 데이터만 확인
teens[1:5, c("cluster","gender","age","friends")]
aggregate(data=teens, age ~cluster, mean)
문제247. 군집별 여성의 비율이 어떻게 되는가?
aggregate(data=teens, female ~cluster, mean)
문제248. 군집별 친구수의 평균은 어떻게 되는가?
aggregate(data=teens, friends ~cluster, mean)
'R(알) ' 카테고리의 다른 글
R 8장. 연관규칙 (apriori 알고리즘) (0) | 2017.09.23 |
---|---|
R 7장 신경망과 서포트 벡터 머신(발표자료) (0) | 2017.09.23 |
R 7장 신경망과 서포트 벡터 머신 (0) | 2017.09.09 |
R 5장. 결정트리 (0) | 2017.09.08 |
R 4장. 나이브 베이즈의 이해활용한 기계학습4 (0) | 2017.09.08 |