Quiet Time



■ 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장 목차
  1. if문
  2. for loop문
  3. while loop문
  4. 중첩 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

1-5장

PYTHON2017. 9. 10. 00:40
   ■ 파이썬을 통해서 우리가 이루고자 하는 목표 2가지
  1. 파이썬 문법 ( ~ 11장. ----> 웹스크롤링 ---> Tic Tac Toe)
                                                      ↓
                                                  1.단층 퍼셉트론
                                                  2.greedy 알고리즘
                                                  3.확률(몬테카를로)

                                                              ↓
                                                       통계학자4명+물리학자

  1. 웹스크롤링 기술

               신문사 ------> 트위터 -----------> 인스타그램

               원하는 사이트를 자유롭게 웹 스크롤링
  1. 머신러닝 프로그램 구현 (Tic Tac Toe - Mit 공대)


점프 투 파이썬


■ 파이썬 설치

인스타그램

■ 파이썬 설치
  1. 기본 파이썬 설치 파일
  1. 아나콘다(spider)

     - 웹스크롤링       : beautiful soup 모듈
     - 머신러닝(틱텍토) : numpy 모듈

  1. 파이참(pycharm)


■ 2장. 파이썬이란?

  1. 파이썬의 문법은 쉽다
  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'>

<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])

  1. 함수
■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])



■ 어제 배운 내용
  1. 파이썬을 배우는 목표
ぁ 웹스크롤링 Big data 수집
ぃ 머신 러닝 - Tic Tac Toe 코드로 이해
     엔트로피 지수로 가장 좋은 수를 찾는 방법을 구현 코드

     퍼센트론  -----> 인공신경망
                         ↓
                    행렬, 벡터를 이용한 수학 공식을 계산

                    사람의 뇌 구조를 아주 조금 컴퓨터로 구현했는데
                    그 안에 뉴런에서 보내는 신호를 가중치로 표현을
                    해서 그 가중치(반복학습을 하면 중요하다는 것을 알게되는것 !)
                    를 계산해야 한다.

     2x + 3y + z  = 4
     x -  y  + 3z = 2     연립 방정식 계산식
     5x + 2y + z  = 4

          선형대수학


  1. 데이터 다루기
          - 변수 사용법
          - 산술 연산자
          - nvl 함수가 파이썬에는 없음


     *4장 목차
  1. 변수 사용법
  2. 산술 연산자
  3. 함수
  4. input 명령어

4.3. 함수
책 83 ~ 85
*우리의 목표에 맞춰서 나름대로 다시 정리

오라클
파이썬
1. 문자함수
upper
lower
initcap
substr
replace
length
rtrim
ltrim
trim
rpad
lpad
instr

upper()
lower()
사용자 함수
변수[1:2]
replace()
len()
rstrip()
lstrip()
strip()
사용자 함수
사용자 함수
사용자 함수

2.숫자함수roundtruncmodpower

round()trunc()%power()
3.날짜함수months_betweenadd_monthsnext_daylast_day

사용자 함수
relativedelta사용자 함수monthrange
4.변환함수to_charto_numberto_date

str()int(), float()datetime.strptime()
5.일반함수
nvl
decode
case

사용자함수
 ifnull
사용자함수
if 문
6. 파이썬에 유용한 함수(MIT Tic Tac Toe)문자함수




변환함수


기타(MIT 코드 이해를 위해필수로 알아야하는 중요함수 )


format()isalpha()isnumeric()isspace()

list()tupple()

split
append
range
count

■ 연산자
  1. 산술 연산자
  2. 비교 연산자
  3. 논리 연산자
  4. 기타 비교연산자



오라클
파이썬
산술 연산자

+-

mod
+-/%
비교연산자

= !=>>=<<=

논리연산자

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] )




file = open("D:\data\winter.txt",'r')

a=0

b=0

for winter_list in file:   

        a= winter_list.split(' ')        

        b+=a.count('Elsa')

        

print (b)




     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

  • 머신러닝 종류 3가지
  • 1. 지도학습 {입력값, 정답}
    • 분류 : knn, 나이브베이즈, 결정트리, svm
    • 회귀 : 선형회귀, 신경망

  • 2. 비지도학습 {입력값}

               :k-means 
     정답이 없으니 해법을 배우지 못하고 데이터의 형태를 가지고 
     유형을 나눠보는 것

  • 3. 강화학습 {입력값, 출력값, 출력에 대한 보상 }
               : 핑퐁 , 틱텍토


■ 9장. 목차
  1. k-means 란?
  2. k-means 실습1 ( 국영수 점수를 가지고 학생 분류)
  3. k-means 실습2 ( 쇼셜 미디어에 같은 성향을 갖는 사람들을 분류)
                    --> 책 실습 예제 


■ 1. k-means란? 
 각 문서들 속에 들어있는 데이터 분석을 통해 유사하거나 관계가 높은 항목끼리의 집합(클러스터)를 만들고 싶을때 
사용하는 알고리즘
  1. (처음 중심값 선택) 랜덤하게 중심값 (centroid)를 선태갛ㄴ다.
  2. (클러스터 할당) k 개의 중심값과 각 개별 데이터간의 거리를 측정한다. 가장 가까운 클러스터에 해당 데이터를 assign한다. 
  3. (새 중심값 선택) 클러스터 마다 새로운 중심값을 계산한다. 
  4. (범위 확인) 선택된 중심값이 변화가 어느정도 없다면 멈춘다. 

■ 데이터 수에 따른 적당한 k 값 계산 

     k = sqrt(n/2)
■ k-means 의 한계점 
  1. k 값 입력 파라미터를 직접 지정해줘야 한다. 
  2. 이상치(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)