생능출판사 (가칭)"데이터과학 파이썬" 코드 9장

9.2 문자열에서 개별 문자들을 뽑아보자

In [1]:
s = 'Monty Python'
s[0]
Out[1]:
'M'
In [2]:
s[6:10]
Out[2]:
'Pyth'
In [3]:
s[-12:-7]
Out[3]:
'Monty'
In [4]:
t = s[:-2]
t
Out[4]:
'Monty Pyth'
In [5]:
t = s[-2:]
t
Out[5]:
'on'
In [6]:
s[:-2] + s[-2:]
Out[6]:
'Monty Python'

9.3 문자열을 분해해 보자

In [7]:
s = 'Welcome to Python' 
s.split()
Out[7]:
['Welcome', 'to', 'Python']
In [8]:
s = '2021.8.15' 
s.split('.')
Out[8]:
['2021', '8', '15']
In [9]:
s = 'Hello, World!' 
s.split(",")
Out[9]:
['Hello', ' World!']
In [10]:
s = 'Hello, World!' 
s.split(', ')
Out[10]:
['Hello', 'World!']
In [11]:
s = 'Welcome, to,  Python, and ,  bla, bla   '
[x.strip() for x in s.split(',')]
Out[11]:
['Welcome', 'to', 'Python', 'and', 'bla', 'bla']
In [12]:
list('Hello, World!')
Out[12]:
['H', 'e', 'l', 'l', 'o', ',', ' ', 'W', 'o', 'r', 'l', 'd', '!']

9.4 문자열을 이어붙이는 것은 파이썬한테는 쉬운 일

In [13]:
','.join(['apple', 'grape', 'banana'])
Out[13]:
'apple,grape,banana'
In [14]:
'-'.join('010.1234.5678'.split('.'))  # .으로 구분된 전화번호를 하이픈으로 고치기
Out[14]:
'010-1234-5678'
In [15]:
'010.1234.5678'.replace('.','-')
Out[15]:
'010-1234-5678'
In [16]:
s = 'hello world'
clist = list(s)
clist
Out[16]:
['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd']
In [17]:
''.join(clist)
Out[17]:
'hello world'
In [18]:
a_string = 'Actions \n\t speak louder than words'
a_string
Out[18]:
'Actions \n\t speak louder than words'
In [19]:
print(a_string)
Actions 
	 speak louder than words
In [20]:
word_list = a_string.split()
word_list
Out[20]:
['Actions', 'speak', 'louder', 'than', 'words']
In [21]:
refined_string = " ".join(word_list)    # a_string에 있는 줄바꿈, 탭문자가 없어진다
print(refined_string)
Actions speak louder than words

9.5 대문자와 소문자 변환, 그리고 문자열 삭제

In [22]:
s = 'Hello, World!'
s.lower()
Out[22]:
'hello, world!'
In [23]:
s.upper()
Out[23]:
'HELLO, WORLD!'
In [24]:
s = "   Hello, World!   "
s.strip() 
Out[24]:
'Hello, World!'
In [25]:
s.lstrip() 
Out[25]:
'Hello, World!   '
In [26]:
s.rstrip() 
Out[26]:
'   Hello, World!'
In [27]:
s = "########this is an example#####"
s.strip('#')
Out[27]:
'this is an example'
In [28]:
s = "########this is an example#####"
s.lstrip('#')
Out[28]:
'this is an example#####'
In [29]:
s.rstrip('#')
Out[29]:
'########this is an example'
In [30]:
s.strip('#').capitalize()
Out[30]:
'This is an example'
In [31]:
s = "www.booksr.co.kr" 
s.find(".kr")
Out[31]:
13
In [32]:
s.find("x")    # 'x' 문자열이 없을 경우 -1을 반환함
Out[32]:
-1

9.6 다양한 문자열 처리 함수와 string 모듈

In [33]:
s = 'www.booksr.co.kr'    # 생능출판사의 홈페이지
s.count('.')              # . 이 몇번 나타나는가를 알려준다
Out[33]:
3
In [34]:
s = 'www.booksr.co.kr' 
ord(max(s))   # s문자열 내에서 유니코드 값이 가장 큰 값의 유니코드 값을 반환
Out[34]:
119
In [35]:
ord(min(s))   # s문자열 내에서 유니코드 값이 가장 작은 값의 유니코드 값을 반환
Out[35]:
46
In [36]:
chr(119), chr(46)  # 유니코드 값 119, 46에 해당하는 문자를 반환
Out[36]:
('w', '.')
In [37]:
import string
src_str = string.ascii_uppercase
print('src_str =', src_str)
src_str = ABCDEFGHIJKLMNOPQRSTUVWXYZ
In [38]:
src_str = string.ascii_uppercase
dst_str = src_str[1:] + src_str[:1]
print('dst_str =', dst_str)
dst_str = BCDEFGHIJKLMNOPQRSTUVWXYZA
In [39]:
n = src_str.index('A')
print('src_str의 A 인덱스 =', n)
print('src_str의 A 위치에 있는 dst_str의 문자 =', dst_str[n])
src_str의 A 인덱스 = 0
src_str의 A 위치에 있는 dst_str의 문자 = B

LAB 9-1 : 카이사르 암호를 만들어 보자

In [40]:
import string

src_str = string.ascii_uppercase
dst_str = src_str[3:] + src_str[:3]

def ciper(a):          # 암호화 코드를 만드는 함소
    idx = src_str.index(a)
    return dst_str[idx]

src = input('문장을 입력하시오: ')
print('암호화된 문장 : ', end='')

for ch in src:
    if ch in src_str:
        print(ciper(ch), end='')
    else:
       print(ch, end='')
  
print()
문장을 입력하시오: ATTACK ON MIDNIGHT
암호화된 문장 : DWWDFN RQ PLGQLJKW

LAB 9-2 : 트위터 메시지 처리의 단어 추출

In [41]:
t = "There's a reason some people are working to make it harder to vote, especially for people of color. It’s because when we show up, things change."

length = len(t.split(" "))
print('word count:', length)
word count: 26

LAB 9-3 : 트위터 메시지의 대문자, 소문자 변환

In [42]:
t = "It's Not The Right Time To Conduct Exams. MY DEMAND IN BOLD AND CAPITAL. NO EXAMS IN COVID!!!"
t
Out[42]:
"It's Not The Right Time To Conduct Exams. MY DEMAND IN BOLD AND CAPITAL. NO EXAMS IN COVID!!!"
In [43]:
t = "It's Not The Right Time To Conduct Exams. MY DEMAND IN BOLD AND CAPITAL. NO EXAMS IN COVID!!!"
l = t.lower()
l
Out[43]:
"it's not the right time to conduct exams. my demand in bold and capital. no exams in covid!!!"

도전문제 9.3

  • 트윗 데이터에서 대문자나 느낌표가 많이 나타나는 것은 글쓰는 사람의 감정이 흥분하거나 분노한 상태임을 나타내는 경우가 많다. 주어진 원천 트윗 데이터에서 대문자와 느낌표가 몇 번 사용되었는지 계산하는 코드를 작성해 보라. 느낌표가 몇 개인지 헤아리는 것은 count() 함수를 사용하면 쉽게 할 수 있다. 대문자는 어떻게 셀 수 있을까? 원 트윗을 list()를 이용하여 하나 하나의 문자로 분리하여 리스트를 만들 수 있다. 그리고 이 리스트의 각 항목 문자가 ch라고 할 때, ch.isupper()를 호출하면 대문자인 경우 True가 반환된다.
In [44]:
t_lst = list(t)
print('느낌표 갯수 :', t_lst.count('!'))
느낌표 갯수 : 3
In [45]:
count = 0
for ch in t_lst:
  if ch.isupper() == True:
    count += 1

print('대문자 갯수 :', count)
대문자 갯수 : 46

LAB 9-4 : 1회용 패스워드를 만들어 보자

In [46]:
import random 

n_digits = int(input('몇 자리의 비밀번호를 원하십니까? '))
               
otp = '' 
for i in range(n_digits) : 
      otp += str(random.randrange(0, 10))
      
print(otp)
몇 자리의 비밀번호를 원하십니까? 6
064898
In [47]:
!pip install wordcloud wikipedia
Collecting wordcloud
  Downloading wordcloud-1.8.1-cp37-cp37m-win_amd64.whl (154 kB)
Collecting wikipedia
  Using cached wikipedia-1.4.0.tar.gz (27 kB)
Requirement already satisfied: pillow in c:\users\shjung\anaconda3\lib\site-packages (from wordcloud) (7.0.0)
Requirement already satisfied: matplotlib in c:\users\shjung\anaconda3\lib\site-packages (from wordcloud) (3.1.1)
Requirement already satisfied: numpy>=1.6.1 in c:\users\shjung\anaconda3\lib\site-packages (from wordcloud) (1.18.1)
Requirement already satisfied: beautifulsoup4 in c:\users\shjung\anaconda3\lib\site-packages (from wikipedia) (4.8.2)
Requirement already satisfied: requests<3.0.0,>=2.0.0 in c:\users\shjung\anaconda3\lib\site-packages (from wikipedia) (2.22.0)
Requirement already satisfied: cycler>=0.10 in c:\users\shjung\anaconda3\lib\site-packages (from matplotlib->wordcloud) (0.10.0)
Requirement already satisfied: kiwisolver>=1.0.1 in c:\users\shjung\anaconda3\lib\site-packages (from matplotlib->wordcloud) (1.1.0)
Requirement already satisfied: pyparsing!=2.0.4,!=2.1.2,!=2.1.6,>=2.0.1 in c:\users\shjung\anaconda3\lib\site-packages (from matplotlib->wordcloud) (2.4.6)
Requirement already satisfied: python-dateutil>=2.1 in c:\users\shjung\anaconda3\lib\site-packages (from matplotlib->wordcloud) (2.8.1)
Requirement already satisfied: soupsieve>=1.2 in c:\users\shjung\anaconda3\lib\site-packages (from beautifulsoup4->wikipedia) (1.9.5)
Requirement already satisfied: idna<2.9,>=2.5 in c:\users\shjung\anaconda3\lib\site-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2.8)
Requirement already satisfied: chardet<3.1.0,>=3.0.2 in c:\users\shjung\anaconda3\lib\site-packages (from requests<3.0.0,>=2.0.0->wikipedia) (3.0.4)
Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in c:\users\shjung\anaconda3\lib\site-packages (from requests<3.0.0,>=2.0.0->wikipedia) (1.25.8)
Requirement already satisfied: certifi>=2017.4.17 in c:\users\shjung\anaconda3\lib\site-packages (from requests<3.0.0,>=2.0.0->wikipedia) (2021.10.8)
Requirement already satisfied: six in c:\users\shjung\anaconda3\lib\site-packages (from cycler>=0.10->matplotlib->wordcloud) (1.14.0)
Requirement already satisfied: setuptools in c:\users\shjung\anaconda3\lib\site-packages (from kiwisolver>=1.0.1->matplotlib->wordcloud) (45.1.0.post20200127)
Building wheels for collected packages: wikipedia
  Building wheel for wikipedia (setup.py): started
  Building wheel for wikipedia (setup.py): finished with status 'done'
  Created wheel for wikipedia: filename=wikipedia-1.4.0-py3-none-any.whl size=11691 sha256=bea1c4272505244cf8f800fabf37c1b6de493a4537e09bb37b1c9d208d3fc884
  Stored in directory: c:\users\shjung\appdata\local\pip\cache\wheels\15\93\6d\5b2c68b8a64c7a7a04947b4ed6d89fb557dcc6bc27d1d7f3ba
Successfully built wikipedia
Installing collected packages: wordcloud, wikipedia
Successfully installed wikipedia-1.4.0 wordcloud-1.8.1
In [48]:
import wikipedia

# Specify the title of the Wikipedia page
wiki = wikipedia.page('Artificial intelligence')
# Extract the plain text content of the page
text = wiki.content
In [49]:
from wordcloud import WordCloud

# Generate word cloud
wordcloud = WordCloud(width = 2000, height = 1500).generate(text)
In [50]:
import matplotlib.pyplot as plt
plt.figure(figsize=(40, 30))
# Display image
plt.imshow(wordcloud) 
plt.show()