본문 바로가기

[파이썬] 데이터 분석하기 위해 꼭 알아야 할 기초 7가지!! (이론+실습)

Derrick 발행일 : 2023-11-14
728x90
반응형

 

# 데이터 분석 기초단계의 목표

 1) 파이썬 문법과 프로그래밍의 개념 이해하기

 2) 실제 데이터를 다루고 분석하기

 3) 상위 단계로 넘어갈 수 있는 기초 기르기

 

본격적인 데이터 분석에 들어가기에 앞서 파이썬 문법과 프로그래밍의 개념 이해가 선행되고, 실제 데이터를 다루고 분석하며, 더 높은 상위 단계로 넘어갈 수 있는 기초를 다지는 것이 무엇보다 중요하다.

꼭 알아야 할 기초 7가지로 분류해서 이론과 실습을 통해 학습하자.
→ 단계별 필요한 과정들을 이해하고, 실습으로 트럼프 대통령의 트위터 데이터를 분석하는 실습을 진행하자.

 

파이썬 데이터 분석하기 위해
꼭 알아야 할 기초 7가지 정리!! 이론과 실습으로 공부해보자

 

 

 

1. for 반복문을 통한 데이터 추출하는 법 3가지

1) for 반복문(리스트)

fruits = ["사과", "바나나", "키위"]

# 위의 리스트의 원소를 하나씩 가져온다
for fruit in fruits:
	print(fruit + "는 맛있어")
위의 for 반복문을 통해 'fruits' 리스트에 있는 각 원소들을 'fruit'에 저장한다. 
→ 원소가 3개(사과, 바나나, 키위) 있기 때문에, 총 3번 반복된다.

2) for 반복문 (range)

# 0부터 9까지 한줄씩 출력
for num in range(10):
	print(num)
range(10) : [ 0, 1, 2 ~ 8, 9]
→ num은 0부터 9까지의 숫자로 저장되며, 순차적으로 출력되게 된다.

3) list + len 함수

fruits = ["사과", "바나나", "키위"]

# 과일의 이름과 번호를 함께 출력
for i in range(len(fruits)):
	print("과일" + str(i+1) + ":" + fruits[i])
리스트 내 원소와 번호를 함께 출력하는 방법으로,
위의 코드로는 '과일1 : 사과', '과일2 : 바나나', '과일3 : 키위' 식으로 출력되게 된다.

- len(fruits) : 3 (원소의 갯수가 총 3개)
 → len 함수는 리스트의 길이를 나타내주는 함수로, 

4) 실습 (문장의 단어를 하나씩 가져오기)

추후 실습으로 트럼프 데이터 분석을 하기 위해서는 lower(), replace() 등의 다양한 메서드를 이용해 트럼프 대통령의 트위터를 정제하기 위해서 먼저 리스트에 담긴 요소를 하나씩 불어오는 작업이 필요하다.

아래 주어진 'trump_tweets' 리스트의 문자열 요소를 하나씩 가져와서 트위터 게시일과 함께 출력하는 data_tweet 함수를 생성 및 실행해보자.

 

# 트럼프 대통령의 1월 1~3일 트윗을 각각 리스트의 원소로 저장합니다.
trump_tweets = [
    'Will be leaving Florida for Washington (D.C.) today at 4:00 P.M. Much work to be done, but it will be a great New Year!',
    'Companies are giving big bonuses to their workers because of the Tax Cut Bill. Really great!',
    'MAKE AMERICA GREAT AGAIN!'
]

# date_tweet 함수 생성
def date_tweet(tweet):
    # index에 0~2을 순차대로 저장하여 반복문을 실행합니다.
    for index in range(len(tweet)):
        print('2018년 1월 ' + str(index+1) + '일: ' + tweet[index])


# 실행 결과 출력
date_tweet(trump_tweets)

 

[ 실행 결과 ]

 

2. 데이터의 일부분 가져오기 (인덱싱)

인덱스(index)란, 리스트나 문자열과 같이 순서가 있는 자료 구조에서 특정 원소가 몇 번째인지 나타내주는 역할을 한다. 따라서 인덱스를 이용하면 문자열 혹은 리스트의 특정 요소에 접근할 수 있다.

인덱스는 0부터 시작하며, -1은 맨 마지막의 문자/요소를 의미한다.
시작 인덱스와 끝 인덱스를 이용하면 특정 구간의 요소를 리스트형으로 접근할 수 있고, 끝 인덱스를 생략하면 시작 인덱스부터 마지막 요소까지 접근할 수 있다.

1) 리스트 내 원소 추출

# 인덱싱 복습(리스트)
fruits = ["사과", "바나나", "키위", "배"]

last_fruit = fruits[-1]					# ["배"]
tropical_fruits = fruits[1:3]				# ["바나나", "키위"]
no_apple = fruits[1:]					# ["바나나", "키위", "배"]	
no_pear = fruits[:3]					# ["사과", "바나나", "키위"]
- fruits[-1] : '-1' 번째 index는 리스트 내 마지막번째의 데이터를 의미. 
 → '-n'번째까지 설정이 가능하며, 위에서는 '배'가 출력된다.
- fruits[1:3] : 리스트의 index 1번째부터 2번째까지의 데이터 추출.
- fruits[1:] : 리스트의 index 1번째부터 마지막까지의 데이터 추출
- fruits[:3] : 리스트의 3번째 앞까지의 모든 데이터 추출

2) 문자열 인덱싱

# 문자열 인덱싱(1)
word = "superman"

print(word[3])					# 'e'
print(word[-2])					# 'a'
print(word[5:])					# 'man'
print(word[:5])					# 'super'

 

# 문자열 인덱싱(2)

langs = ['Java', 'C', 'Python']

print(langs[-1])						# 'Python'
print(langs[-1][0])						# 'P'
print(langs[1:])						# ['C', 'Python']

3) 실습(단어의 일부분 가져오기)

아래 주어진 트럼프 대통령 트위터를 공백을 기준으로 분리한 리스트('trump_tweets')에서 'k'로 시작하는 문자열을 모두 출력하는 prink_korea() 함수를 완성해보자.

 

# 트럼프 대통령 트윗을 공백 기준으로 분리한 리스트
trump_tweets = ['thank', 'you', 'to', 'president', 'moon', 'of', 'south', 'korea', 
	'for', 'the', 'beautiful', 'welcoming', 'ceremony', 'it', 'will', 'always', 'be', 'remembered']

# 'k'로 시작하는 문자열 출력 함수
def print_korea(text):
     for i in range(len(text)):
          if text[i][0] == 'k':
               print(text[i])

# 결과 실행
print_korea(trump_tweets)						# korea
위와 같이 print_korea 함수를 생성(예시)할 수 있으며, 실행 결과(korea)와 동일하게 실제 리스트 내에도 'k'로 시작하는 문자열은 'korea'인 것을 확인할 수 있다.

 

3. 단어의 첫 글자 확인하기 - .startswith()

파이썬에서 기본적으로 제공하는 문자열 함수 중, startswith()는 주어진 문자열의 첫문자/첫단어를 불러올 수 있다.

 

word = "superman"
print(word.startswith('s'))				# True
print(word.startswith('super'))				# True

if word.startswith('a'):
	print("a로 시작하는 단어입니다.")

# 실습 (단어의 첫 글자로 분류하기)

아래 주어진 트럼프 대통령의 트위터를 공백으로 분리한 리스트를 통해 해시태그(#)와 멘션(@)을 한 단어들을 찾아보자.
startswith() 메서드를 사용하여 인덱싱을 이용하여 위에서 실습했던 print_korea() 함수를 다시 작성해보자

 

# 트럼프 대통령 트윗을 공백 기준으로 분리한 리스트입니다. 수정하지 마세요.
trump_tweets = ['thank', 'you', 'to', 'president', 'moon', 'of', 'south', 'korea', 'for', 
	'the', 'beautiful', 'welcoming', 'ceremony', 'it', 'will', 'always', 'be', 'remembered']

# print_korea() 함수 수정 - #, @ 시작 여부 확인
def print_korea(tweet):
     for i in range(len(tweet)):
          if tweet[i].startswith('#') == True or tweet[i].startswith('@') == True:
               print(tweet[i])

# 실행 결과
print_korea(trump_tweets)
주어진 리스트에서는 해시테크(#)와 멘션(@)으로 시작하는 단어가 없기에, 출력되는 단어가 없다.

 

4. 특정 문자를 기준으로 데이터 분리하기 - .split()

파이썬에서 .split() 메서드는 특정 문자를 기준으로 문자열을 분리한다. 입력값(=인자)를 넣지 않을 경우 공백을 기준으로 분리하며, 분리된 문자열은 리스트의 원소로 저장된다. 아래 코드를 통해 학습해보자.

 

# .split() 예제

intro = "저의 이름은 홍길동입니다."
print(intro.split())				# ["저의", "이름은", "홍길동입니다."]

fruits = "사과,귤,배,바나나"
print(fruits.split(','))			# ["사과", "귤", "배", "바나나"]
.split() 함수에 아무런 인자가 없으면, 띄어쓰기로 단어(=요소)가 분리된다.
→ 특정 문자나 기호로 분리하고자 한다면, 인자에 넣어주면 된다.
→ 공백을 의미하는 문자 : ' ' (빈칸), \t (Tab), \n (Newline)

# 실습 (문장을 단어 단위로 구분하기)

트럼프 트위터에 사용된 단어를 하나씩 살펴보기 위해 주어진 문자열을 리스트로 변환해야 한다. 
'trump_tweet' 문자열을 공백을 기준으로 분리하고, 리스트형으로 변환하는 break_into_words() 함수를 생성하고 실행해보자.

 

# 트럼프 대통령의 트윗으로 구성된 문자열 
trump_tweets = "thank you to president moon of south korea for the beautiful welcoming ceremony it will always be remembered"

# 문자열을 분리하고 리스트로 변환하는 함수 선언
def break_into_words(text):
     words = text.split()
     return words

# 함수 실행
print(break_into_words(trump_tweets)

 

[ 실행 결과 ]

 

5. 리스트에 새로운 데이터 추가하기 - .append()

.append() 함수는 리스트 함수로써, 리스트를 다루고 사용할 때 가장 기본이 되는 메소드이다.
리스트에 새로운 원소를 추가할 때 사용되며, 리스트의ㅣ 맨 마지막에 새로운 요소를 추가한다.

 

# append 연습(1)
numbers = []

numbers.append(1)
print(numbers)							# [1]

numbers.append(2)					
print(numbers)							# [1, 2]

 

# append 연습(2)
numbers = [1, 2, 10, 17]
small_numbers = []

for num in numbers:
     if num < 10:
          small_numbers.append(num)				# [1, 2]

# 실습 (새로운 단어 추가하기)

아래 주어진 'trump_tweets' 리스트에서 'b'로 시작하는 요소를 빈 리스트인 'new_list'에 저장하는 'make_new_list()' 함수를 생성하시오. 실행하면서 올바르게 생성했는지 확인해보자.

 

# 트럼프 대통령 트윗을 공백 기준으로 분리한 리스트입니다. 수정하지 마세요.
trump_tweets = ['america', 'is', 'back', 'and', 'we', 'are', 'coming', 'back', 'bigger', 'and', 
	'better', 'and', 'stronger', 'than', 'ever', 'before']

# b로 시작하는 요소 추가하는 함수 생성
def make_new_list(text):
    new_list = []
    for word in range(len(text)):
        if text[word].startswith('b'):
            new_list.append(text[word])
    return new_list

# 실행 결과
new_list = make_new_list(trump_tweets
print(new_list)

 

[ 실행 결과 ]

 

6. 대소문자로 변환하기 - .upper() / .lower()

lower()와 upper() 메서드를 이용하면 문자열을 손쉽게 소문자 또는 대문자로 변환할 수 있다.

 

# 대소문자 변환 연습

intro = "My name is abc!"
print(intro.upper())					# "MY NAME IS ABC!"
print(intro.lower())					# "my name is abc!"

 

## append() vs lower()
# 리스트에 append() 적용
words = ['hello']
words.append('abc')
print(words)						# ['hello', 'abc']

# 문자열에 lower() 적용
intro = "My name is ABC"
intro.lower()
print(intro)						# "My name is ABC"

# 소문자로 적용시키기
intro = "My name is ABC"
lower_intro = intro.lower()
print(lower_intro)					# "my name is abc"
- lower() 함수는 원래 문자열을 직접 수정하지는 않는다! (split, upper() 메서드도 동일한 원리)
 → 함수를 실행했을 때의 값이 return되는 원리이다. ex) lower_intro로 새롭게 저장해야 된다.
 → 위의 코드에서 intro.lower() 와 lower_intro를 출력한 것을 서로 비교해보자.
 → 만약, intro 문자열을 수정하고 싶다면 → intro = intro.lower() 를 추가해야 한다.

- 반면, append() 메서드는 기존의 리스트를 수정해서 출력한다.

# 실습 (대소문자 변환하기)

가짜 뉴스를 의미하는 'Fake News'는 트럼프 대통령이 가장 자주 사용한 말 중 하나이다.
FAKE NEWS와 Fake News는 대소문자가 다르기 때문에 두 단어가 몇 번 사용되었는지 정확하게 확인하기 위해서는 모두 소문자로 변환해야 한다.
따라서 아래 주어진 리스트(trump_tweets)의 문자열 요소를 모두 소문자로 변환하는 'lowercase_all_characters()' 함수를 생성해서 실행해보자.

 

# 트럼프 대통령의 트윗 세개로 구성된 리스트
trump_tweets = [
    "FAKE NEWS - A TOTAL POLITICAL WITCH HUNT!",
    "Any negative polls are fake news, just like the CNN, ABC, NBC polls in the election.",
    "The Fake News media is officially out of control.",
]
 
# 소문자로 변환하는 함수 생성
def lowercase_all_characters(text):
    processed_text = []
    # for 반복문을 통해 리스트 순회하며 소문자로 변환
    for word in range(len(text)):
        processed_text.append(text[word].lower())
    return processed_text

# 함수 실행
print('\n'.join(lowercase_all_characters(trump_tweets)))

 

[ 실행 결과 ]

 

7. 특정 데이터(문자열)를 다른 값으로 대체하기 - .replace()

replace() 메서드문자열에서 특정 문자나 문자열을 다른 문자(열)로 변경할 때 사용된다.
변경하고 싶은 문자열을 첫번째 입력값으로, 대체할 문자열을 두번째 입력값으로 받는다.

 

# replace() 연습(1)

intro = "제 이름은 홍길동입니다."
print(intro.replace('홍길동', '김영수'))			# "제 이름은 김영수입니다."
- replace()의 첫번째 매개변수에 대체할 대상의 문자를 넣어주고, 두번째 변수에는 변경할 값을 넣어주면 된다.

 

# replace() 연습(2)

intro = "제 이름은 홍길동입니다."
print(intro.replace(' ', ''))				# "제이름은홍길동입니다."
- replace() 함수는 특정 문자를 변경하는데도 사용하지만, 특정 문자를 찾아서 제거하는 것도 가능하다.
 → replace() 함수도 upper, lower 함수와 동일하게 직접 기존의 값을 변경하지 않고 return값으로 나온다.
 → 변경한 값으로 저장하고 싶다면, intro = intro.replace ~~

# 실습 (특수기호 삭제하기)

소문자로 변환된 아래의 'trump_tweets' 리스트를 공백을 기준으로 구분하게 된다면 특수문자가 붙어있는 경우 구별하기 어렵기 때문에 특수문자를 제거해야 한다.
 ex) christmas' , christmas, christmas!!!
'trump_tweets' 리스트의 문자열 요소에서 쉼표, 작은따옴표, 느낌표를 제거하는 'remove_special_characters()' 함수를 생성하고 실행해보자.

 

# 트럼프 대통령의 트윗 세개로 구성된 리스트
trump_tweets = [
    "i hope everyone is having a great christmas, then tomorrow it’s back to work in order to make america great again.",
    "7 of 10 americans prefer 'merry christmas' over 'happy holidays'.",
    "merry christmas!!!",
]

# 특수문자 제거하는 함수 생성
def remove_special_characters(text):
    processed_text = []
    for sentence in text:
        sentence = sentence.replace(',','').replace("'",'').replace('!','')
        processed_text.append(sentence)
    return processed_text

# 함수 실행
print('\n'.join(remove_special_characters(trump_tweets)))

 

 

 

댓글