데이터분석 study/Python

TIL(Today I Learned) 24.07.04_Python_문자열, 변수의 자료형

justdata 2024. 7. 4. 20:47

파이썬 문법을 다시 복기하며 TIL을 작성한다.

구글 colab 으로 환경을 세팅하고 실습하면서 다시 복습한다. 

 



▶ colab 주요 단축키

 1. 코드 실행 : shift+ enter

 2. 새 코드 셀 추가 : ctrl + m +a

 3. 코드셀 삭제 : ctrl +m+d

 4. 코드셀 분할 : ctrl + m + '-' (하이픈)

 5. 셀 유형 변경 : 코드 셀을 마크다운 셀로 변경하려면 코드 셀 위에서 ctrl+ m +m



 

● print() 함수는 화면에 값을 출력하는데 사용 되고 여러 값을 출력할 때는 쉼표로 구분

예시 ) 

# 데이터 분석 결과
num_records = 1000

# 결과 출력
print("총 ", num_records, "명의 레코드가 분석되었습니다.")

 

● 변수란 ? 

 - 변수는 값을 저장하는 공간으로 할당 연산자(=) 를 사용하여 값을 할당한다.

예시 ) 

# 변수 사용
print(name)  # "Alice" 출력
print("나이:", age)  # "나이: 25" 출력

# 변수를 사용한 연산
double_age = age * 2
print("나이의 두 배:", double_age)  # "나이의 두 배: 50" 출력

 

● 변수의 종류1 : 문자열

   - 문자열은 작은 따옴표나 큰따옴표로 감싸서 선언 합니다.

   - 메서드란 함수를 사용하는 방법 중 하나 인데 문자열과 함께 쓰이고

      모든 함수가 이렇게 사용되진 않고 메서드로 사용되는 함수가 특정 되어 있다.

예시 )

# 문자열 메서드 활용
sentence = "python programming is fun"
print(sentence.upper())         # 대문자로 변환하여 출력

       

● 변수의 종류2 :  숫자열

   - 정수(int)나 실수 (float) 형태의 숫자열은 그냥 변수에 할당하면 된다.

    ● 숫자열 연산

         - 숫자열 변수 끼리 사칙연산이 가능하다.

         - 나눗셈의 경우, / 연산자를 사용하면 실수로 결과가 반환 되며, '//' 연산자를 사용하면 정수로 

           결과 반환

         - 나머지 연산자인 '%'를 사용하여 나머지를 계산

 

      ●숫자열에는 다양한 함수와 메서드가 내장되어 있다. 

         예를 들어 abs() 함수는 절대값을 반환하고, round() 함수는 반올림한 값을 반환한다.

 

          - 정수형(int)은 소수점 이하의 부분이 없는 숫자를 나타낸다

          - 실수형( float) 소수점 이하의 숫자를 포함하는 숫자를 나타낸다.

 

● 불리언(boolean)

    - 주어진 조건이 True 또는 False 를 나타내는데 사용.

    - 조건식을 평가하는데 매우 중

 

●NaN (결측값)

   - 데이터에서 결측치를 나타내는 특수한 값, 특히 데이터 과학이나 머신러닝 분야에서 데이터 정제 및

      처리 과정에서 자주 다루어 진다.

   - 유효하지 않은 수학적 연산 결과를 나타날 때 사용

   - 데이터 프레임과 같은 데이터 구조에서는 결측치를 표현할 때 NaN 이 사용된다.

 

●입력문(input)

   - input() 함수는 사용자로부터 키보드로 입력을 받는 함수 

   - 이 함수를 사용하면 사용자와 상호작용하여 프로그램을 만들 수 있다. 

   - 주의해야할 점은 사용자가 숫자를 입력할 때 input() 함수로 문자열 형태로 입력을 받는다.

   - 이후 int() 함수를 사용하여 문자열을 정수로 변환하고, 숫자열 연산을 사용해야한다.

예시 ) 

num1 = int(input("첫 번째 숫자를 입력하세요: "))
num2 = int(input("두 번째 숫자를 입력하세요: "))
sum = num1 + num2
print("두 숫자의 합은", sum, "입니다.")

 

● 리스트 : '[]' 대괄호를 사용하여 리스트를 만들고 여러 값을 순서대로 담을 수 있다.

   - 리스트의 인덱싱 : 리스트에서 특정 값에 접근하거나 일부분을 추출하는 방법

      ▷인덱싱 : 리스트에서 특정 위치의 값에 접근하는 방법

예시 ) 

# 리스트 생성
numbers = [1, 2, 3, 4, 5]

# 첫 번째 요소에 접근하기
first_number = numbers[0]
print("First number:", first_number)

# 두 번째 요소에 접근하기
second_number = numbers[1]
print("Second number:", second_number)

# 마지막 요소에 접근하기
last_number = numbers[-1]
print("Last number:", last_number)

# 음수 인덱스를 사용하여 역순으로 요소에 접근하기
second_last_number = numbers[-2]
print("Second last number:", second_last_number)

 

● 리스트의 다양한 메서드(Method)

    - append()  :  리스트에서 가장 많이 사용되는 메서드 ,

                           딥러닝할 때도 많이 사용, 리스트에 항목을 추가(*****)

    - insert() : 리스트의 특정 위치에 항목을 삽입

    - count() : 리스트에서 특정 값의 개수를 세어줌

    - sort() : 리스트의 항목들을 정렬

    - reverse() : 리스트의 항목들을 역순으로 뒤집는다.

    - remove() : 리스트에서 특정 값을 삭제한다.

    - pop() : 리스트에서 특정 위치의 값을 제거하고 반환한다.

    - index() : 리스트에서 특정 값의 인덱스를 찾는다.

    - extend() : 리스트에 다른 리스트의 모든 항목을 추가한다.

 

예시 ) 

# 리스트 생성
my_list = [1, 2, 3, 4, 5]

#리스트의 다양한 메서드(Methods)
my_list.append(6) # 리스트에 새로운 항목 추가
print(my_list)  # 출력: [1, 2, 3, 4, 5, 6]

my_list.extend([7, 8, 9]) # 다른 리스트의 모든 항목을 추가
print(my_list)  # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9]

my_list.insert(2, 10) # 두 번째 위치에 값 삽입
print(my_list)  # 출력: [1, 2, 10, 3, 4, 5, 6, 7, 8, 9]

my_list.remove(3) # 값 3 삭제
print(my_list)  # 출력: [1, 2, 10, 4, 5, 6, 7, 8, 9]

popped_value = my_list.pop(5) # 다섯 번째 위치의 값 제거하고 반환
print(popped_value)  # 출력: 6
print(my_list)  # 출력: [1, 2, 10, 4, 5, 7, 8, 9]

print(my_list.index(4)) # 출력: 3 (값 4의 인덱스)

print(my_list.count(7)) # 출력: 1 (값 7의 개수)

my_list.sort() # 리스트 정렬
print(my_list)  # 출력: [1, 2, 4, 5, 7, 8, 9, 10]

my_list.reverse() # 리스트 역순으로 뒤집기
print(my_list)  # 출력: [10, 9, 8, 7, 5, 4, 2, 1]

 

리스트의 insert 메서드는 아래와 같은 구문으로 사용할 수 있다.

# 이건 실행하는 코드가 아닙니다
a_list.insert(index, element)

    - index : 요소를 삽입할 위치의 인덱스

    - element : 삽입할 요소의 값

 

●리스트 값 삭제 

# 리스트의 항목 삭제
del my_list[0]
print("첫 번째 항목 삭제 후 리스트:", my_list) 

# 리스트 내 값들의 모든 항목 제거
my_list.clear()
print("모든 항목 제거 후 리스트:", my_list)

 

 

●리스트 값 변경: 인덱싱을 활용하여 특정 위치의 리스트 값을 다른 값으로 변경

my_list = ['apple', 'banana', 'cherry', 'date', 'elderberry']

# 리스트 값 변경하기
my_list[3] = 'dragonfruit'
print(my_list)  # 출력: ['apple', 'banana', 'cherry', 'dragonfruit', 'elderberry']

 

● 중첩된 리스트에서 인덱싱하기 

# 중첩된 리스트에서 인덱싱하기
nested_list = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
print(nested_list[1][0])  # 출력: 4 (두 번째 리스트의 첫 번째 항목)

 

● 리스트 실전 사용 예시 

    - 학점 데이터 값들을 리스트 형태로 만들어 간편하게 평균을 계산하는 코드

# 리스트를 사용한 간단한 데이터 계산 예시
grades = [85, 92, 88, 78, 90]
average_grade = sum(grades) / len(grades)
print("평균 성적:", average_grade)

  여기서 len() 함수안에 grades 변수를 넣었을 때 grades에 할당된 리스트 안에 원소 개수가 나온다.

 

●리스트 슬라이싱

   - 리스트의 일부분을 추출하는 것 

   - 파이썬은 맨 처음을 가리키는 인덱스가 0이다.

   - 슬라이싱을 할 때 끝에 입력할 인덱스는 내가 선택할 인덱스보다 +1을 해주어야 한다.

     (예를 들어 1번째 부터 12 번째 까지의 요소를 가져올 것이면 [0:13] )

 

예시)

my_list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 1. 일부분만 추출하기
print(my_list[2:5])   # 출력: [3, 4, 5]

# 2. 시작 인덱스 생략하기 (처음부터 추출)
print(my_list[:5])    # 출력: [1, 2, 3, 4, 5]

# 3. 끝 인덱스 생략하기 (끝까지 추출)
print(my_list[5:])    # 출력: [6, 7, 8, 9, 10]

# 4. 음수 인덱스 사용하기 (뒤에서부터 추출)
print(my_list[-3:])   # 출력: [8, 9, 10]

# 5. 간격 설정하기 (특정 간격으로 추출)
print(my_list[1:9:2]) # 출력: [2, 4, 6, 8]

# 6. 리스트 전체를 복사하기
copy_of_list = my_list[:]
print(copy_of_list)   # 출력: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

# 7. 리스트를 거꾸로 뒤집기
reversed_list = my_list[::-1]
print(reversed_list)  # 출력: [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]

 

   - 슬라이싱을 활용하여 홀수나 짝수 값만 추출하는 것도 가능

   예시)

# 리스트에서 홀수 번째 인덱스의 값들 출력하기
my_list = [10, 20, 30, 40, 50, 60, 70, 80, 90]

odd_index_values = my_list[1::2]
print("홀수 번째 인덱스의 값들:", odd_index_values)  # 출력: [20, 40, 60, 80]

 

● 정렬 : sort() 

   - reverse : 정렬 순서를 지정한다. 기본값은 False 오름차순, True로 설정하면 내림차순

my_list.sort(reverse=False)

 

예시)

# 숫자로 이루어진 리스트 정렬 예시
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort()
print("정렬된 리스트:", numbers)  # 출력: [1, 1, 2, 3, 4, 5, 5, 6, 9]

# 문자열로 이루어진 리스트 정렬 예시
words = ['apple', 'banana', 'orange', 'grape', 'cherry']
words.sort()
print("정렬된 리스트:", words)  # 출력: ['apple', 'banana', 'cherry', 'grape', 'orange']

# 내림차순으로 리스트 정렬 예시
numbers = [3, 1, 4, 1, 5, 9, 2, 6, 5]
numbers.sort(reverse=True)
print("내림차순으로 정렬된 리스트:", numbers)  # 출력: [9, 6, 5, 5, 4, 3, 2, 1, 1]

# 리스트의 문자열 길이로 정렬 예시
words = ['apple', 'banana', 'orange', 'grape', 'cherry']
words.sort(key=len)
print("문자열 길이로 정렬된 리스트:", words)  # 출력: ['apple', 'grape', 'banana', 'cherry', 'orange']

 

● 튜플

   - 튜플은 변경할 수 없는 시퀀스 자료형 

   - 리스트와 유사하지만, 한 번 생성된 이후에는 요소를 추가, 삭제 , 수정 불가.

   - '()' 소괄호 사용

 

●튜플 인덱싱, 슬라이싱 

   - 튜플은 변경할 수 없기 때문에 요소를 추가, 삭제, 수정 불가하지만 튜플을 합치거나 반복하여 

     새로운 튜플을 생성하는 것은 가능 

 

●튜플에서 자주 사용하는 메서드

   - count() : 지정된 요소의 개수를 반환

   - index() : 지정된 요소의 인덱스를 반환

 

예시 ) 

# 튜플 생성
my_tuple = (1, 2, 3, 4, 1, 2, 3)

# count() 메서드 예제
count_of_1 = my_tuple.count(1)
print("Count of 1:", count_of_1)  # 출력: 2

# index() 메서드 예제
index_of_3 = my_tuple.index(3)
print("Index of 3:", index_of_3)  # 출력: 2

 

● 튜플 -> 리스트로 변경, 리스트-> 튜플로 변경

  - 튜플을 리스트로 변경 : list()

  - 리스트를 튜플로 변경 : tuple()

예시)

# 튜플을 리스트로 변경하기
my_tuple = (1, 2, 3, 4, 5)
my_list = list(my_tuple)
print(my_list)  # 출력: [1, 2, 3, 4, 5]

# 리스트를 튜플로 변경하기
my_list = [1, 2, 3, 4, 5]
my_tuple = tuple(my_list)
print(my_tuple)  # 출력: (1, 2, 3, 4, 5)

 

● 딕셔너리 

   - '{}' 중괄호를 사용하고, 키-값 쌍의 데이터를 저장하는 자료구조

   - 각 키는유일해야 하지만 값은 중복될 수 있다. 

  예시)

# 빈 딕셔너리 생성
empty_dict = {}

# 학생 성적표
grades = {
    'Alice': 90,
    'Bob': 85,
    'Charlie': 88
}

# 접근하기
print(grades['Alice'])  # 출력: 90

# 값 수정하기
grades['Bob'] = 95

# 요소 추가하기
grades['David'] = 78

# 요소 삭제하기
del grades['Charlie']

 

● 딕셔너리에서 자주 사용되는 메서드

   - keys() : 모든 키를 dict_keys 객체로 반환

   - values() : 모든 값을 dict_values 객체로 반환

   - items() : 모든 키-값 쌍을 튜플로 구성된 dict_items 객체로 반환

   - get() : 지정된 키에 대한 값을 반환, 키가 존재하지 않으면 기본 값을 반환

   - pop() : 지정된 키와 해당 값을 딕셔너리에서 제거하고 값을 반환

   - popitem() : 딕셔너리에서 마지막 키-쌍 값을 제거하고 반환

 

예시 )

# 딕셔너리 생성
my_dict = {'name': 'John', 'age': 30, 'city': 'New York'}

# keys() 메서드 예제
keys = my_dict.keys()
print("Keys:", keys)  # 출력: dict_keys(['name', 'age', 'city'])

# values() 메서드 예제
values = my_dict.values()
print("Values:", values)  # 출력: dict_values(['John', 30, 'New York'])

# items() 메서드 예제
items = my_dict.items()
print("Items:", items)  # 출력: dict_items([('name', 'John'), ('age', 30), ('city', 'New York')])

# get() 메서드 예제
age = my_dict.get('age')
print("Age:", age)  # 출력: 30

# pop() 메서드 예제
city = my_dict.pop('city')
print("City:", city)  # 출력: New York
print("Dictionary after pop:", my_dict)  # 출력: {'name': 'John', 'age': 30}

# popitem() 메서드 예제
last_item = my_dict.popitem()
print("Last item popped:", last_item)  # 출력: ('age', 30)
print("Dictionary after popitem:", my_dict)  # 출력: {'name': 'John'}

 

● 딕셔너리 실전 예시 

  - 사용자 정보 관리 

user_info = {
    'username': 'john_doe',
    'email': 'john@example.com',
    'age': 30,
    'is_active': True
}

 

   - 제품 카탈로그

products = {
    '1001': {'name': 'Keyboard', 'price': 20.99, 'stock': 50},
    '1002': {'name': 'Mouse', 'price': 15.50, 'stock': 70},
    '1003': {'name': 'Monitor', 'price': 199.99, 'stock': 30}
}