루덴스코드 Blog

문재인 대통령의 신년 기자회견문을 워드클라우드로 작성해보았습니다.



결과 그래프에서 보이듯 "국민"이라는 말이 제일 많이 사용되었습니다. 이 부분은 지난 대선 주자 연설문에서 보였던 특징과 동일합니다. "국민"이라는 말을 참 좋아하고 많이 사용하는 것이 문재인 대통령 연설문의 특징입니다. 

물론 이 워드클라우드는 단어의 수를 계수하여 그 비중대로 단어를 화면에 보여주는 것이 전부입니다. 그래서 문맥사이, 단어들 사이에 담겨 있는 깊은 의미를 파악하지는 못합니다. 그 부분은 별도의 기사나 독자들의 해석에 맡깁니다. 여기서는 전문에 드러난 단어의 사용빈도에 따른 중요도를 파악하는 것으로 그치고자 합니다.

이 결과만으로 간단하게 생각해보자면 문재인 대통령은 "국민"을 참 좋아하는 것 같습니다.


이 워드클라우드를 만든 모든 소스는 깃허브에 올려두었습니다. [링크]

이에 사용된 간단한 설치와 소스에 대한 설명은 다음과 같습니다.


윈도우 10 환경

파이썬 3.4

virtualenv 로 가상개발환경

> virtualenv -p c:\python\python34\python.exe myvenv34

> myvenv34\scripts\activate

konlpy, pygame, jupyter 설치 (jupyter notebook 를 사용하지 않는다면 jupyter 는 설치하지 않아도 무방)

(myvenv34)> pip install konlpy pygame jupyter



깃허브에서 wordcloud.py 를 다운받는다.

(myvenv34)> python wordcloud.py



이러면 다음과 같은 결과가 나옵니다. 








Comment +0

Julian Meyer 라는 13세 소년이 만든 pygame 에 대한 튜토리얼이다. 이 게임은 기본적인 슈팅게임의 기본을 담고 있다. 방법을 익혀두면 다양하게 게임을 만들거나 응용이 가능하다. Beginning Game Programming for Teens with Python 이라는 이름으로 과정과 소스가 모두 인터넷에 공개되어 있다. 2.7 버젼으로 된 것을 최신 버젼인 3.6 버젼으로 수정했고, 일부 코드를 이해하기 쉽게 고쳤다.



STEP 0. 파이썬 & pygame 설치, 그래픽파일과 음악파일 준비


이 글은 윈도우 사용자를 위해 쓰였다. 리눅스나 맥은 가지고 있지 않은 관계로 설치해보질 못했으면 과정이 크게 다르지 않으리라는 것은 알지만 여기에 그 내용을 기록하지 않는다. 또한 원글과는 달리 최신 버젼인 파이썬 3.6 을 설치하여 사용하였다. 파이게임은 이글을 쓰는 당시에 있는 버젼인 1.9.3 을 설치하였다. 파이게임의 설치방법은


pip install pygame


으로 설치한다. 혹시 파이썬 설치방법을 모르는 사람은 다른 글을 통해 익히기 바란다.(가까운 시일내 파이썬 기본 강의를 올릴 예정이며 그때 파이썬 설치에 대해서 자세히 기록할 예정)


게임에 사용되는 배경음악과 그래픽 파일은 여기에서 다운로드하여 사용한다. 


[음악과 그래픽 다운로드]


이후의 과정은 최대한 설명은 생략하고 소스 중심으로 방법만 기술한다.



STEP 1. 토끼 보이기


다음의 코드를 사용한다.


# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 640, 480
screen=pygame.display.set_mode((width, height))

# 3 - Load images
player = pygame.image.load("resources/images/dude.png")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, (100,100))
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        # check if the event is the X button 
        if event.type==pygame.QUIT:
            # if it is quit the game
            pygame.quit() 
            exit(0) 




STEP 2. 장면추가하기


다음 내용을 #3의 마지막 부분에 넣는다.


grass = pygame.image.load("resources/images/grass.png")
castle = pygame.image.load("resources/images/castle.png")


다음 코드를 #6 의 처음 부분에 추가한다.


for x in range(int(width/grass.get_width()+1)): for y in range(int(height/grass.get_height()+1)): screen.blit(grass,(x*100,y*100)) screen.blit(castle,(0,30)) screen.blit(castle,(0,135)) screen.blit(castle,(0,240)) screen.blit(castle,(0,345 ))


STEP 3. 토끼전사가 움직이게 하기


#2 의 마지막 부분에 다음 코드를 넣는다.

keys = [False, False, False, False]
playerpos=[100,100]


#6 에서 

    screen.blit(player, (100,100))

screen.blit(player, playerpos)

으로 바꾼다.

#8의 마지막 부분에서 for event.type==pygame.QUIT: 블럭 다음에 아래 코드를 넣는다.


        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True
            elif event.key==K_a:
                keys[1]=True
            elif event.key==K_s:
                keys[2]=True
            elif event.key==K_d:
                keys[3]=True
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w:
                keys[0]=False
            elif event.key==pygame.K_a:
                keys[1]=False
            elif event.key==pygame.K_s:
                keys[2]=False
            elif event.key==pygame.K_d:
                keys[3]=False


파일의 마지막 부분에 아래 내용을 추가한다.


    # 9 - Move player
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    if keys[1]:
        playerpos[0]-=5
    elif keys[3]:
        playerpos[0]+=5


여기까지 코드를 실행시켜보면 키보드로 WASD 를 누를때 고양이전사가 움직인다.


STEP 4. 고양이전사 방향전환하기


atan2() 라는 수학함수를 사용한다. atan2 함수는 math 라이브러리를 사용한다.


#1 의 끝 부분에 다음을 추가한다.


import math

#6 의 마지막줄을 다음 내용으로 교체(수정)한다.

    # 6.1 - Set player position and rotation
    position = pygame.mouse.get_pos()
    angle = math.atan2(position[1]-(playerpos[1]+32),position[0]-(playerpos[0]+26))
    playerrot = pygame.transform.rotate(player, 360-angle*57.29)
    playerpos1 = (playerpos[0]-playerrot.get_rect().width/2, playerpos[1]-playerrot.get_rect().height/2)
    screen.blit(playerrot, playerpos1) 


STEP 5. 발사 !


#2 의 마지막 부분에 다음 코드를 추가한다.

acc=[0,0]
arrows=[]


#3 의 마지막 부분에 화살 이미지를 넣는 코드를 추가한다.

arrow = pygame.image.load("resources/images/bullet.png")

#8 마지막 부분에 새로운 이벤트 핸들러를 추가한다.
        if event.type==pygame.MOUSEBUTTONDOWN:
            position=pygame.mouse.get_pos()
            acc[1]+=1
            arrows.append([math.atan2(position[1]-(playerpos1[1]+32),position[0]-(playerpos1[0]+26)),playerpos1[0]+32,playerpos1[1]+32])


#6.1 바로 다음에 아래 코드를 추가한다.

    # 6.2 - Draw arrows
    for bullet in arrows:
        index=0
        velx=math.cos(bullet[0])*10
        vely=math.sin(bullet[0])*10
        bullet[1]+=velx
        bullet[2]+=vely
        if bullet[1]<-64 or bullet[1]>640 or bullet[2]<-64 or bullet[2]>480:
            arrows.pop(index)
        index+=1
        for projectile in arrows:
            arrow1 = pygame.transform.rotate(arrow, 360-projectile[0]*57.29)
            screen.blit(arrow1, (projectile[1], projectile[2]))


STEP 6. 오소리 출현

#2 마지막 부분에 아래 코드 추가

badtimer=100
badtimer1=0
badguys=[[640,100]]
healthvalue=194


#3 마지막 부분에 다음 코드 추가

badguyimg1 = pygame.image.load("resources/images/badguy.png")
badguyimg=badguyimg1


#6.2 다음에 아래 코드 추가

    # 6.3 - Draw badgers
    if badtimer==0:
        badguys.append([640, random.randint(50,430)])
        badtimer=100-(badtimer1*2)
        if badtimer1>=35:
            badtimer1=35
        else:
            badtimer1+=5
    index=0
    for badguy in badguys:
        if badguy[0]<-64:
            badguys.pop(index)
        badguy[0]-=7
        index+=1
    for badguy in badguys:
        screen.blit(badguyimg, badguy)


랜덤함수 사용을 위해서 다음 코드를 #1 의 끝 부분에 추가

import random

#4 의 while 문 바로 다음에 badtimer 를 감소시키는 코드 추가
    badtimer-=1

#6.3 의 첫번째 for 반복문 안에서 index+=1 바로 앞에 아래 코드를 추가
        # 6.3.1 - Attack castle
        badrect=pygame.Rect(badguyimg.get_rect())
        badrect.top=badguy[1]
        badrect.left=badguy[0]
        if badrect.left<64:
            healthvalue -= random.randint(5,20)
            badguys.pop(index)
        # 6.3.3 - Next bad guy


STEP 7. 오소리와 화살이 만날때


#6.3.1 아래에 다음 코드를 추가

        #6.3.2 - Check for collisions
        index1=0
        for bullet in arrows:
            bullrect=pygame.Rect(arrow.get_rect())
            bullrect.left=bullet[1]
            bullrect.top=bullet[2]
            if badrect.colliderect(bullrect):
                acc[0]+=1
                badguys.pop(index)
                arrows.pop(index1)
            index1+=1


STEP 8. 체력바와 시간 나타내기


#7 의 시작전에 아래 코드를 추가

# 6.4 - Draw clock font = pygame.font.Font(None, 24) survivedtext = font.render(str(int(90000-pygame.time.get_ticks()))+":"+str(int((90000-pygame.time.get_ticks())/1000%60)).zfill(2), True, (0,0,0)) textRect = survivedtext.get_rect() textRect.topright=[635,5] screen.blit(survivedtext, textRect)


#3 의 끝부분에 다음 코드를 추가

healthbar = pygame.image.load("resources/images/healthbar.png")
health = pygame.image.load("resources/images/health.png")


#6.4 다음에 아래 코드를 추가

    # 6.5 - Draw health bar
    screen.blit(healthbar, (5,5))
    for health1 in range(healthvalue):
        screen.blit(health, (health1+8,8))


STEP 9. WIN / LOSE


아래 코드를 마지막 부분에 추가

    #10 - Win/Lose check
    if pygame.time.get_ticks()>=90000:
        running=0
        exitcode=1
    if healthvalue<=0:
        running=0
        exitcode=0
    if acc[1]!=0:
        accuracy=acc[0]*1.0/acc[1]*100
    else:
        accuracy=0
# 11 - Win/lose display        
if exitcode==0:
    pygame.font.init()
    font = pygame.font.Font(None, 24)
    text = font.render("Accuracy: "+str(accuracy)+"%", True, (255,0,0))
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx
    textRect.centery = screen.get_rect().centery+24
    screen.blit(gameover, (0,0))
    screen.blit(text, textRect)
else:
    pygame.font.init()
    font = pygame.font.Font(None, 24)
    text = font.render("Accuracy: "+str(accuracy)+"%", True, (0,255,0))
    textRect = text.get_rect()
    textRect.centerx = screen.get_rect().centerx
    textRect.centery = screen.get_rect().centery+24
    screen.blit(youwin, (0,0))
    screen.blit(text, textRect)
while 1:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            exit(0)
    pygame.display.flip()


#3 의 마지막 부분에 아래 코드를 추가

gameover = pygame.image.load("resources/images/gameover.png")
youwin = pygame.image.load("resources/images/youwin.png")


#4의 아래 내용을 수정한다.

[수정전]

# 4 - keep looping through
while 1:
    badtimer-=1

[수정후]

# 4 - keep looping through
running = 1
exitcode = 0
while running:
    badtimer-=1


STEP 10. 배경음악과 효과음악


#2 마지막 부분에 추가

pygame.mixer.init()

#3의 마지막 부분에 추가
# 3.1 - Load audio
hit = pygame.mixer.Sound("resources/audio/explode.wav")
enemy = pygame.mixer.Sound("resources/audio/enemy.wav")
shoot = pygame.mixer.Sound("resources/audio/shoot.wav")
hit.set_volume(0.05)
enemy.set_volume(0.05)
shoot.set_volume(0.05)
pygame.mixer.music.load('resources/audio/moonlight.wav')
pygame.mixer.music.play(-1, 0.0)
pygame.mixer.music.set_volume(0.25)


#6.3.1 의 if badrect.left<64: 다음에 아래 코드 추가

# section 6.3.1 after if badrect.left<64:
hit.play()


#6.3.2 의 if badrect.colliderect(bullrect): 다음에 아래 코드 추가

# section 6.3.2 after if badrect.colliderect(bullrect):
enemy.play()


#8 의 if event.type==pygame.MOUSEBUTTONDOWN: 다음에 아래 코드 추가

# section 8, after if event.type==pygame.MOUSEBUTTONDOWN:
shoot.play()


Comment +0


◆ 함수 

함수는 재사용 가능한 프로그램의 조각을 말합니다. 이것은 특정 명령어들을 묶어서 이름을 짓고, 그 이름을 프로그램 어디에서건 사용함으로써 그 명령어들을 몇번이고 다시 실행할 수 있게 하는 것입니다. 이를 보고 함수를 호출한다고 합니다. 


def say_hello():

    # block belonging to the function

    print('hello world')

    # End of function


say_hello() # call the function

say_hello() # call the function again



◆ 함수와 매개변수


함수를 정의할 때 매개 변수를 지정할 수 있습니다. 매개 변수란 함수로 넘겨지는 값들의 이름입니다. 매개 변수는 변수와 거의 같이 취급되지만, 매개 변수의 값들은 함수가 호출되어질 때 넘겨받은 값들로 채워지며 함수가 실행되는 시점에서는 이미 할당이 완료되어 있다는 점이 다릅니다.


매개 변수는 함수를 정의할 때 괄호 안에서 쉼표로 구분합니다. 함수를 호출할 때에는, 동일한 방법으로 함수에 값을 넘겨줍니다. 함수를 정의할 때 주어진 이름을 매개 변수라 부르고, 함수에 넘겨준 값들을 인자라 합니다.


def print_max(a, b):

    if a > b:

        print(a, 'is maximum')

    elif a == b:

        print(a, 'is equal to', b)

    else:

        print(b, 'is maximum')

# directly pass literal values

print_max(3, 4)

x = 5

y = 7

# pass variables as arguments

print_max(x, y)



◆ 지역변수

함수 안에서 변수를 선언하고 사용할 경우, 함수 밖에 있는 같은 이름의 변수들과 함수 안에 있는 변수들과는 서로 연관이 없습니다. 이러한 변수들을 함수의 지역(local) 변수라고 하며, 그 범위를 변수의 스코프(scope) 라고 부릅니다. 모든 변수들은 변수가 정의되는 시점에서의 블록을 스코프로 가지게 됩니다.



x = 50

def func(x):

    print('x is', x)

    x = 2

    print('Changed local x to', x)


func(x)

print('x is still', x)



◆ 전역변수


함수나 클래스 내부에서 상위 블록에서 선언된 변수의 값을 변경하고 싶을 경우, 파이썬에게 이 변수를 앞으로 지역 변수가 아닌 전역(global) 변수로 사용할 것임을 알려 줍니다. 이때 global을 이용합니다. global 문을 사용하지 않으면, 함수 외부에서 선언된 변수의 값을 함수 내부에서 변경할 수 없습니다.


x = 50


def func():

    global x

    print('x is', x)

    x = 2

    print('Changed global x to', x)


func()

print('Value of x is', x)


# 함수 내부에서 global 로 변수가 전역변수임을 알린다.

# 4번째 줄이 없으면 에러 발생



◆ 기본 인수값

함수를 호출할 때 인수를 선택적으로 넘겨주게 하여 사용자가 값을 넘겨주지 않으면 자동으로 기본값을 사용하도록 하는 것이 편할 때가 있습니다. 이런 경우, 기본 인수값을 지정하면 됩니다. 함수를 선언할 때 원하는 매개 변수 뒤에 대입 연산자 (=)와 기본값을 입력하여 기본 인수값을 지정합니다.


이 때, 기본 인수값은 반드시 상수이어야 합니다. 좀 더 정확히 말하자면, 불변값이어야 합니다. 


def say(message='HI ', times=1):

    print(message * times)


say('Hello')

say('World', 5)

say()

# say( , 10)



◆ 키워드 인수

여러 개의 매개 변수를 가지고 있는 함수를 호출할 때, 그 중 몇 개만 인수를 넘겨주고 싶을 때가 있습니다. 이때 매개 변수의 이름을 지정하여 직접 값을 넘겨줄 수 있는데 이것을 키워드 인수 라 부릅니다. 함수 선언시 지정된 매개 변수의 순서대로 값을 넘겨주는 것 대신, 매개 변수의 이름 (키워드) 를 사용하여 각각의 매개 변수에 인수를 넘겨 주도록 지정해 줍니다.


키워드 인수를 사용하는 데 두가지 장점이 있습니다. 첫째로, 인수의 순서를 신경쓰지 않고도 함수를 쉽게 호출할 수 있는 점입니다. 둘째로는, 특정한 매개 변수에만 값을 넘기도록 하여 나머지는 자동으로 기본 인수값으로 채워지게 할 수 있습니다.


def func(a, b=5, c=10):

    print('a is', a, 'and b is', b, 'and c is', c)


func(3, 7)

func(25, c=24)

func(c=50, a=100)


func(1,2,3)

func(a=1,b=2,c=3)

func(c=3,a=1,b=2)




◆ VarArgs 매개변수

함수에 임의의 개수의 매개 변수를 지정해주어야 할 때가 있습니다. 이때 VarArgs 매개 변수를 사용합니다. 아래 예제와 같이 별 기호를 사용하여 임의의(Variable) 개수의 인수(Arguments) 를 표현합니다.


def total(initial=5, *numbers, **keywords):

    count = initial   

    for number in numbers:

        count += number

    for key in keywords:   

        count += keywords[key]

    return count


print(total(10, 1, 2, 3, vegetables=50, fruits=100))




◆ return 문

return 문은 함수로부터 되돌아(return) 나올 때, 즉 함수를 빠져 나올 때 사용됩니다. 이 때 return 값 처럼 값을 지정해 주면, 함수가 종료될 때 그 값을 반환하도록 할 수 있습니다.


def maximum(x, y):

    if x > y:

       return x

    elif x == y:

       return 'The numbers are equal'

    else:

       return y


print(maximum(2, 3))



◆ DocString : 설명문자열

파이썬은 설명(Documentation) 문자열(String) 이라고 불리우는, 짧게 줄여서 DocStrings라 불리우는 편리한 기능을 가지고 있습니다. DocString은 여러분이 만든 프로그램을 알아보기 쉽게 해 주고, 또 후에 프로그램에 대한 설명서를 작성할 때 유용하게 사용될 수 있는 중요한 도구입니다. 아래 예제와 같이, DocString은 프로그램이 실행중일 때도 읽어올 수 있습니다.


def print_max(x, y):

    '''Prints the maximum of two numbers.

    

    The two values must be integers.'''

    x = int(x)

    y = int(y)

    if x > y:

        print(x, 'is maximum')

    else:

        print(y, 'is maximum')


print_max(3, 5)

print(print_max.__doc__)



◆ 파이썬 turtle 모듈 사용하기

1. 사용하려는 모듈 가져오기 (import)

import turtle

2. 캔버스생성

t = turtle.Pen()

3. 거북이 움직이기

t.forward(거리)

t.backward(거리)

t.left(각도)

t.right(각도)

t.reset()

t.clear()

t.up()

t.down()


4. 사각형을 그려보자


import turtle


t = turtle.Pen()


t.forward(100)

t.left(90)

t.forward(100)

t.left(90)

t.forward(100)

t.left(90)

t.forward(100)


5. 다음 코드를 실행해보자



import turtle


t = turtle.Pen()


for i in range(0,36):

    t.forward(100)

    t.left(50)



터틀그래픽 기본 자료 https://docs.python.org/3.6/library/turtle.html



Comment +0



◆ 학점 프로그램을 만든다면 ?


점수

학점

점수에 따른 학점의 기준을 만든다

) 95점 이상 A+, 60점 미만 F

첫번째 줄의 점수를 판단

) 96점은 95점 이상이므로 A+

다음 줄로 계속 이동하면서 를 반복

) 51점은 60점 미만이므로 F

더 이상 점수가 없을 때 프로그램 종료

96

 ?

51

 ?

69

 ?

15

 ?


프로그램을 만들 때 조건과 반복은 필수


◆ 조건문이란?

조건에 따라 특정한 동작을 하게 하는 것


if 문은 조건을 판별할 때 사용됩니다. if (만약) 조건이 참이라면, if 블록의 명령문을 실행하며 else (아니면) 면 else 블록의 명령문을 실행합니다. 이 때 else 조건절은 생략이 가능합니다.


if True:

    print('Yes, it is true’)



number = 23

guess = int(input('Enter an integer : '))

if guess == number:

    # New block starts here

    print('Congratulations, you guessed it.')

    print('(but you do not win any prizes!)')

    # New block ends here

elif guess < number:

    # Another block

    print('No, it is a little higher than that')

    # You can do whatever you want in a block ...

else:

    print('No, it is a little lower than that')

    # you must have guessed > number to reach here

print('Done')

# This last statement is always executed,

# after the if statement is executed.



◆ 반복문 : while 

while 문은 특정 조건이 참일 경우 계속해서 블록의 명령문들을 반복하여 실행할 수 있도록 합니다. while 문은 *반복문*의 한 예입니다. 또한 while 문에는 else 절이 따라올 수 있습니다.

 

number = 23

running = True

while running:

    guess = int(input('Enter an integer : '))

    if guess == number:

        print ('Congratulations, you guessed it.')

        # this causes the while loop to stop

        running = False

    elif guess < number:

        print ('No, it is a little higher than that.')

    else:

        print ('No, it is a little lower than that.')

else:

    print ('The while loop is over.')

       # Do anything else you want to do here

print ('Done')



◆ for 루프

for..in 문은 객체의 열거형(Sequence)을 따라서 반복하여 실행할 때 사용되는 파이썬에 내장된 또 하나의 반복문으로, 열거형에 포함된 각 항목을 하나씩 거쳐가며 실행합니다. 열거형에 대해서는 이후에 좀 더 자세히 다룰 것입니다. 일단 여기서는, 열거형이란 여러 항목이 나열된 어떤 목록을 의미한다고 생각하시기 바랍니다.


for i in range(1, 5):

    print (i)

else:

    print ('The for loop is over')



◆ break 문

break 문은 루프 문을 강제로 빠져나올 때, 즉 아직 루프 조건이 `False`가 되지 않았거나 열거형의 끝까지 루프가 도달하지 않았을 경우에 루프 문의 실행을 강제로 정지시키고 싶을 때 사용됩니다.


중요한 점은 만약 여러분이 break 문을 써서 for 루프나 while 루프를 빠져나왔을 경우, 루프에 딸린 else 블록은 실행되지 않습니다.


while True:

    s = input('Enter something : ')

    if s == 'quit':

        break

    print ('Length of the string is', len(s))

print ('Done')


◆ continue 문

continue 문은 현재 실행중인 루프 블록의 나머지 명령문들을 실행하지 않고 곧바로 다음 루프로 넘어가도록 합니다.


while True:

    s = input('Enter something : ')

    if s == 'quit':

        break

    if len(s) < 3:

        print('Too small')

        continue

    print('Input is of sufficient length')

        # Do other kinds of processing here...


HW : 

1. 하나의 숫자를 입력받은 후 1) 짝수인지 여부와 2) 3의 배수인지 여부를 출력

2. 로또 번호 출력기 만들기

2.1. 5개의 로또번호를 만든다.

2.2. 5개의 숫자를 입력받은 후 번호가 맞는지 확인하는 것을 반복한다. 

2.3. 5개 번호가 다 맞으면 5개 번호와 시행횟수를 출력한다.

3. 숫자를 입력받은 후 그 숫자만큼 * 을 출력하는 프로그램

3.1. ******** (한줄로 출력)


 3.2.

 3.3

 3.4

 3.4

3.5 

 3.6

*

**

***

****

*****

    *

   **

  ***

 ****

*****


*****

****

***

**

*

*****

 ****

  ***

   **

    *

    *

   ***

  *****

 *******

*********

*********

 *******

  *****

   ***

    *



 

Comment +0


◆ 주석 - # 문자 뒤에 따라오는 짧은 문장


print('hello world') # Note that print is a statement

# Note that print is a statement


◆ 리터럴 상수

- 5

- 1.23

- ‘This is a book’

- “Sting”


◆ 숫자형

- 정수형 : 5

- long 형이 없다


import sys


t1 = sys.maxsize

# t1 = sys.maxint


t2 = t1+1 #int범위를 넘으면 long 자동 형 변환

t3 = t2**10


print(t1)

print(t2)

print(t3)


print(type(t1))

print(type(t2))

print(type(t3))


- 소수점 숫자형 : 4.16, 52.3E-3 (= )


◆ 문자열


◆ 작은 따옴표(‘’)와 큰 따옴표(“”)


◆ 따옴표 세 개


◆ 문자열 수정은 불가


◆ format()

str_format.py


age = 26

name = 'Python'


print('{0} was {1} years old'.format(name, age))

print('{0} is easy'.format(name))



◆ format() 대신 문자열 더하기


print(name + ' is ' + str(age) + ' years old')


※ 위의 형식보다는 format()을 사용하는 것을 추천


◆ 중괄호 숫자 생략 가능


age = 19

name = 'Baram'


print('{} was {} years old'.format(name, age))

print('Why is {} playing with that python?'.format(name))



◆ format() 의 또 다른 사용법


# 소수점 이하 셋째 자리까지 부동 소숫점 숫자 표기 (0.333)

print('{0:.3f}'.format(1.0/3))

# 밑줄(_)로 11칸을 채우고 가운데 정렬(^)하기 (___hello___)

print('{0:_^11}'.format('hello'))

# 사용자 지정 키워드를 이용해  표기

print('{name} wrote {book}'.format(name='Baram', book='Easy Arduino'))



◆ print() 사용시 줄바꿈을 막으려면,


print("Hello ", end='')

print("World")



◆ 특수(Escape) 문자

\'

"'"

'"'

\"

\\

\n

\t


◆ 순문자열 

r"Newlines are indicated by \n“


◆ 변수


- 식별자의 첫 문자는 알파벳 문자 (ASCII 대/소문자 혹은 유니코드 문자)이거나 밑줄 (_)


- 나머지는 문자 (ASCII 대/소문자 혹은 유니코드 문자), 밑줄 (_), 또는 숫자 (0-9)


- 식별자는 대/소문자를 구분. 예를 들어, myname 과 myName 은 다르다.


- 올바른 식별자 이름은 i, name_2_3 등과 같고, 올바르지 않은 식별자 이름은 2things, this is spaced out, my-name, >a1b2_c3 등입니다.



◆ 명시적 행간결합


s = ' Hello \

World'


print(s)


◆ 들여쓰기 – 4칸 들여쓰기


◆ 연산자


>>> 2 + 3

5

>>> 3 * 5

15

>>>



+ (덧셈 연산자)

- (뺄셈 연산자)

* (곱셈 연산자)

** (거듭제곱 연산자)

/ (나눗셈 연산자)

% (나머지 연산자)

<< (왼쪽 시프트 연산자)

>> (오른쪽 시프트 연산자)

& (비트 AND 연산자)

| (비트 OR 연산자)

^ (비트 XOR 연산자)

~ (비트 반전 연산자)

< (작음)

> (큼)

<= (작거나 같음)

>= (크거나 같음)

== (같음)

!= (같지 않음)

not (불리언 NOT 연산자)

and (불리언 AND 연산자)

or (불리언 OR 연산자)


◆ 연산 및 할당 연산자


a = a*3 은

a *= 3 과 동일


◆ 연산순서


● lambda

● if – else

● or

● and

● not x

● in, not in, is, is not, <, ⇐, >, >=, !=, ==

● |

● ^

● &

● <<, >>

● +, -

● *, /, //, %

● +x, -x, ~x

● **

● x[index], x[index:index], x(arguments…​), x.attribute

● (expressions…​), [expressions…​], {key: value…​}, {expressions…​}



◆ ( ) 이용한 연산순서 변경

● 2 + 3 * 4 + 5

● 2 + 3 * (4 + 5)

● 2 + (3 * (4 + 5))





Comment +0


파이썬은 배우기 쉽고, 강력한 프로그래밍 언어입니다. 파이썬은 효율적인 고수준 데이터 구조를 갖추고 있으며, 간단하지만 효과적인 객체 지향 프로그래밍 접근법 또한 갖추고 있습니다. 우아한 문법과 동적 타이핑, 그리고 인터프리팅 환경을 갖춘 파이썬은 다양한 분야, 다양한 플랫폼에서 사용될 수 있는 최적의 스크립팅, RAD(rapid application development - 빠른 프로그램 개발) 언어입니다.


◆ 파이썬이라는 이름의 유래

파이썬의 창시자 귀도 반 로섬(Guido van Rossum)이 BBC에서 방영되던 "Monty Python’s Flying Circus"라는 TV 프로그램의 이름을 따서 지었습니다. 사실 귀도는 뱀이라는 긴 몸으로 다른 동물의 몸을 휘감아 으깨어 부수고 먹어치우는 동물을 딱히 좋아하지는 않는다고 합니다.


◆ 파이썬의 특징


● 단순함(Simple)

● 쉬움(Easy to Learn)

● 오픈 소스(Free and Open Source)

● 고수준 언어(High-level Language)

● 이식성(Portable)

● 인터프리터 언어(Interpreted)

● 객체 지향 언어(Object Oriented)

● 확장성(Extensible)

● 포함성(Embeddable)

● 확장 가능한 라이브러리(Extensive Libraries)


요약 - 흥미진진하고 강력한 언어. 재미있고 쉽게 프로그램을 작성할 수 있음


◆ Python 2.x 에서 Python 3.x 으로 바뀌면서 생긴 변화들


1. python 3.x – 변수가 객체로 처리


2. print에서 ( ) 필수 사용

Python 2

Python 3

print ‘hello’

print(’hello’)


3. str 과 unicode 통일됨

Python 2

Python 3

print( type('hello') )

print( type(u'hello') )

# <type 'str'>

# <type 'unicode'>

print( type('hello') )

print( type(u'hello') )

# <class 'str'>

# <class 'str'>


모든 문자열은 별도로 지정하지 않아도 유니코드로 설정됨


4. int 나누기 결과가 float 으로 저장

Python 2

Python 3

print( 1/4 )

print( type(1/4) )

# 0

# <type 'int'>

print( 1/4 )

print( type(1/4) )

# 0.25

# <class 'float'>



5. long → int로 통일


Python 2

Python 3

print( 2**30 )

print( type(2**30) )

print( 2**100 )

print( type(2**100) )

# 1073741824

# <type 'int'>

# 1267650600228229401496703205376

# <type 'long'>

print( 2**30 )

print( type(2**30) )

print( 2**100 )

print( type(2**100) )

# 1073741824

# <class 'int'>

# 1267650600228229401496703205376

# <class 'int'>


◆ 개발환경 구성 - 윈도우 환경에서의 설치


https://www.python.org/downloads/ 의 최신버전의 설치 프로그램을 설치

설치 방법은 다른 소프트웨어를 설치 할 때와 동일 


주의: 혹시 설치 도중 기본으로 설치하도록 표시된 "추가 기능"을 선택하지 않을 것인지 물어도, 선택을 해제하지 마세요.



◆ 개발환경 구성 – 아톰 IDE 설치


공식 홈페이지 http://atom.io 에 들어가면 상단에 윈도우즈용 다운로드 버튼이 나타납니다.

인스톨 파일을 다운받았다면 실행시켜서 설치하면 되겠습니다. 설치시와 실행시, 외부와의 커넥션이 있으므로 방화벽이 있는 시스템의 경우 통신을 허락해주어야 합니다.


◆ 명령 프롬프트 사용하기

파이썬을 윈도우의 명령 프롬프트 상에서 사용하기 위해 PATH 환경 변수를 설정


윈도우 2000, XP, 2003의 경우, “제어판 → 시스템 → 고급 → 환경 변수”로 들어가세요. “시스템 변수” 목록에 있는 “PATH”를 선택한 뒤, “편집” 버튼을 누르고 파이썬을 설치한 폴더(디렉토리)가 있는지 확인하세요. 만약 없다면 디렉토리를 PATH 에 추가해서 넣어주세요. 


그 이전 버전의 윈도우를 사용하시는 분들은, C:\AUTOEXEC.BAT`를 열고 맨 뒷줄에 `PATH=%PATH%;C:\Python35 이라고 마지막에 한 줄 추가한 뒤 시스템을 재시작하세요. 윈도우 NT의 경우, AUTOEXEC.NT 파일을 편집하세요.



◆ 파이썬 실행

PATH 환경변수가 제대로 설정되어 있다면, 파이썬 인터프리터를 명령 프롬프트 상에서도 실행하실 수 있습니다.


윈도우 환경에서 터미널 창을 열기 위해서는, 시작 메뉴를 누르고 실행 버튼을 클릭하세요. 나타나는 대화상자에 “cmd” 를 입력하시고 enter 키를 입력하세요.


이제, “python” 을 입력하고 파이썬 프롬프트가 잘 실행되는지 확인하세요.


잘 되면, print(‘Hi Baram’)를 넣어 보세요. 파이썬 프로그램을 마칠때는 exit()를 입력하고 엔터를 치면 됩니다.



◆ Linux 에서의 설치


GNU/Linux 사용자의 경우, 파이썬이 이미 설치되어 있을 것입니다.


확인하시려면, 터미널 프로그램을 열거나 혹은 Alt+F2 키를 입력한 뒤 “gnome-terminal”을 입력하여 터미널을 실행하세요. 만약 이 두 방법으로 터미널을 실행시킬 수 없으면, 여러분이 설치한 리눅스 배포판의 설명서를 참조하세요. 이제, “python”을 입력하고 문제가 없는지 확인하세요.


다음과 같이 입력하면 시스템에 설치된 파이썬의 버전을 확인할 수 있습니다.


$ python -V

Python 3.5.3 (버젼에 따라 다르게 나올 수 있습니다.)



◆ “Hello World” 프로그램 작성

파이썬에서 프로그램을 실행하는 방법은 두 가지가 있습니다. 첫째는 대화형 인터프리터 프롬프트를 이용하는 방법과, 둘째는 소스 파일을 이용하는 것입니다. 지금부터 두 방법 모두 알아보도록 하겠습니다.


1. 인터프리터 프롬프트에서의 실행


     print("Hello World“)


2. 편집기 사용, 소스파일 실행


PyCharm Community 또는 atom 사용


PyCharm 설치 후 hello.py 저장, 실행


hello.py 이름으로 파일을 만들고 내용으로


print('Hello World')


를 넣습니다. 명령어입력창으로 가서 python hello.py를 칩니다.




Comment +0

word cloud 를 만들어 보기위해 하루 공부했다. 다행히 R 이나 파이썬이 어려운 언어가 아니고, 기존에 어느정도 알고 있는 것들이라 쉽게 적용할 수 있었다.


아직 모양은 조금 더 다듬어졌으면 하지만 이정도만 해도 우선은 합격이다. 더 필요한 것은 나중에 Big Data 를 다루면서 한번 더 해보기로 한다.


설치와 기타 모든 과정은 생략한다. 다음번에 기회가 되면 파이썬과 R 을 이용한 워드클라우드 만들기를 강의로 올리도록 하겠다.


파이썬으로 만든 Word Cloud 의 데이터는 5인의 대선후보 수락 연설문이다. 가져온 데이터의 위치는  http://raythep.mk.co.kr/newsView.php?cc=270001&no=13153 이고, 여기서 PDF 내부의 raw 데이터를 추출해 내어서 별도의 위치에 저장해 두었다.


https://github.com/eventia/CandSpeech


위 링크를 따라가면 5 명의 후보 수락 연설문의 raw 데이터와 함께 본 작업을 수행한 파이썬의 코드가 있다. 파이썬 버젼은 3.4 였으며, 조금만 변형하면 2.7 로도 가능하다. 원 소스는 [ http://konlpy.org/ko/v0.4.3/examples/wordcloud/ ] 에 있으며, 파이썬 2.7 버젼에서 KoNLPy 를 사용한다.


한글로 word cloud 를 만들기 위해 폰트를 추가로 넣어주는 과정이 있었으나, 그 과정을 포함하여 세부적인 기술사항은 이 글에서는 생략한다. 




1번 문재인 후보의 연설문으로 word cloud 를 작성한 것이다. 글씨 크기는 본문안에 그 단어가 몇번 나왔는지의 비중에 따라 달라진다. 가장 많이 사용한 단어는 국민이고, 다른 후보들과는 조금 특이한 점이 "저"라는 겸양대명사의 사용이 두드러진다. "대통령" 이라는 말보다 "저"의 빈도가 높다. 또 다른 후보들과 달리 자신의 이름 "문재인"을 호명하는 횟수가 적다. 총 2번이다. 실제로 "국민"이라는 말은 다른 단어에 포함된 것을 합하면 총 33번 등장한다. 어쨌거나 있는 그대로를 가지고 word cloud 를 만들어야 한다는 생각으로 별도로 자료에 대한 수정을 가하지는 않았다.



2번 홍준표 후보의 경우 "대통령"이라는 말이 연설문 안에서 큰 비중을 차지한다. 의도적으로 그 단어를 자주 드러냄으로서 원하는 것을 제대로 강조하고 있다. 그 외에 대한민국, 계파, 우리, 당, 좌파 등의 단어가 자주 언급된다. 자신의 이름도 자주 언급한다. 내용은 차치하고 단어 선택에 있어서 산만하지 않고 제대로 한길을 파고 있다는 것이 보인다.




3번 안철수 후보의 연설문에는 두드러지게 "국민"이라는 말이 등장한다. 문재인의 연설문에도 "국민"이 큰 빈도를 가지지만 안철수의 연설문에서 "국민"의 언급횟수는 문재인의 언급횟수를 뛰어 넘는다. 나, 여러분, 미래, 대통령, 승리, 안철수 등이 자주 등장한다. 한글 자연어 처리 방법에서 , 를 제대로 처리하지 못하는 것 때문에 "안철수,"와 "안철수"가 별도의 단어처럼 되어 2번 등장한다. 이것을 합치면 안철수 후보의 연설문속에 자신의 이름을 반복해서 언급하는 비중은 다섯 후보중 가장 많다. 문재인이 "저"라는 겸양대명사를 썼다면 안철수는 자신의 이름 "안철수"를 대중들에게 각인시키는 연설을 했다. 연설문을 통해 후보들이 보이는 다른 전략이 보인다.




4번 유승민 후보의 연설문에서 대통령이라는 단어의 비중은 확실히 크다. 보수, 여러분, 저, 대한민국, 유승민, 문재인등이 그 다음으로 큰 비중을 가진다. 다른 후보들과 달리 유승민 후보는 연설문에서 "문재인"을 5번 언급한다. 유승민의 선거전력이 보이는 부분이다. 유력 후보인 문재인에 대한 비판을 최대의 앞당겨서 연설문부터 시작하겠다는 의지의 표명으로 보인다. 나름 굵직한 단어들이 많이 포진되어 있는 것으로 보아 중요하다고 생각되는 단어들을 자주 반복해서 언급함으로 그 중요성을 부각시키려는 전략은 모든 후보들 중 가장 나아보인다.


5번 심상정 후보의 연설문은 가장 많이 나온 단어인 "정의당" 이 총 13번 등장한다. 이는 유승민 후보의 27번 언급된 "대통령"이나 안철수 후보가 41번 언급한 "국민", 28번 언급된 홍준표의 "대통령", 33번 언급된 문재인의 "국민"과 비교하면 너무 횟수가 적다. 동어반복을 피하고자 하는 의도가 있었던 것이 아닐까하는 생각을 해보지만 결국 일반 대중을 상대로 하는 연설문을 고급진 문장으로 구사하면 일반인들의 이해는 떨어질 수 밖에 없다. 심상정 후보의 연설문은 강조되는 단어가 없다. 즉각적으로 와 닿는 단어들을 만들어내지 못했다. 멀찍이 떨어져있는 단어들은 국민들에게 이해의 정도를 떨어뜨릴 수 밖에 없다. 아쉬운 부분이다. 





Comment +0