[Python]TIL 14일차

Cherta·2024년 5월 2일
0

[TIL]

목록 보기
14/30

파일 불러오기 및 저장

  • 데이터프레임으로 불러오기
import pandas as pd
df = pd.read_csv('file.csv')
  • 파일 저장하기
import pandas as pd

data = {
    'Name': ['John', 'Emily', 'Michael'],
    'Age': [30, 25, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}

df = pd.DataFrame(data)
excel_file_path = '/저장할경로/저장할파일명.csv'
df.to_csv(excel_file_path, index = False)

print("csv 파일이 생성되었습니다.")

라이브러리(library)

  • 라이브러리(library): 여러 개의 모듈을 포함하는 디렉토리로 다양한 기능을 제공
# 라이브러리를 사용하는 방법
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn
  • 다양한 종류의 라이브러리
    • pandas : 데이터 조작과 분석을 위한 라이브러리
    • numpy : 수학과 과학 계산을 위한 핵심 라이브러리
    • matplotlib : 데이터 시각화를 위한 라이브러리
    • seaborn : matplotlib을 기반으로 한 통계용 데이터 시각화 라이브러리
    • scikit-learn : 머신 러닝 알고리즘을 사용할 수 있는 라이브러리
    • statsmodels : 통계 분석을 위한 라이브러리
    • scipy : 과학기술 및 수학적인 연산을 위한 라이브러리
    • tensorflow : 딥러닝 및 기계 학습을 위한 오픈소스 라이브러리 (Google에서 개발)
    • pytorch : 딥러닝을 위한 오픈소스 라이브러리 (Facebook에서 개발)

포맷팅(formatting)

  • 포맷팅(formatting) : 출력문을 사용할 때 더 편리하고 직관적으로 보기 위해 사용하는 방법
name = "Alice"
age = 25

# %를 사용한 형식 지정
print("이름: %s, 나이: %d세" % (name, age))

# format() 메서드를 사용한 형식 지정
print("이름: {}, 나이: {}세".format(name, age))

# f-string을 사용한 형식 지정 (Python 3.6 이상)
print(f"이름: {name}, 나이: {age}세")

리스트 캄프리헨션(List Comprehension)

  • 리스트 캄프리헨션(List Comprehension) : 리스트를 간결하게 생성하는 방법 중 하나로 코드를 더 간결하고 가독성 있게 만들어줌
[표현식 for 항목 in iterable if 조건문]

람다(lambda)

  • 람다(lambda) : 익명 함수로 이름 없이 정의되는 간단한 함수

  • 람다와 함수의 차이점

lambda함수
정의 방식lambda 키워드를 사용하여 정의def 키워드를 사용하여 정의
구조주로 한 줄로 표현되는 간단한 표현식여러 줄의 코드 블록
이름이름이 없기 때문에 한 번만 사용되거나 임시로 필요한 경우에 사용이름을 지정하여 호출 가능
사용함수를 매개변수로 받거나 함수를 반환하는 고차 함수, 즉 함수형 프로그래밍에서 사용어떤 경우에도 사용 가능
  • 람다를 쓰는 이유
    • 간결성 : 코드를 더 간결하게 만들어줌
    • 익명성 : 이름이 없기 때문에 임시로 필요한 경우에 사용 가능
    • 함수형 프로그래밍 : 함수를 값으로 취급하고 함수를 다루는 함수형 프로그래밍 패러다임에서 필요
    • 가독성 : 간단한 표현식을 사용하여 코드를 작성하므로 가독성이 향상
# 예시 1
add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8

# 예시 2
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 출력: [1, 4, 9, 16, 25]

글로브(glob)

  • 글로브(glob) : 파일 시스템에서 파일을 찾을 때 사용 되는 함수
import glob

# 현재 경로의 모든 파일을 찾기
file_list1 = glob.glob('*')

os

  • os : 운영 체제와 상호 작용하기 위한 다양한 함수들을 제공하는 모듈
  • os의 주요 기능
  • 파일 및 디렉토리 관리
import os

# 현재 작업 디렉토리 가져오기
cwd = os.getcwd()
print(cwd)

# 디렉토리 생성
os.mkdir('sample_data/new_directory')

# 파일 이름 변경
os.rename('sample_data/new_directory', 'sample_data/new_directory2')

# 파일 삭제
os.remove('sample_data/data.csv')
  • 경로 관리
import os
# 파일 목록(경로) 가져오기
files = os.listdir('/content')
print(files)

# 경로 조작
path = os.path.join('/content', 'sample_data', 'mnist_test.csv')
print(path)
  • 환경 변수 관리
  • 실행 관리

스플릿(split)

  • 스플릿(split) : 문자열을 여러 개로 쪼개는데 유용한 메서드
# 예시 1 (공백을 기준으로 분할하여 리스트로 변환)
sentence = "Hello, how are you doing today?"
words = sentence.split()
print(words) # 출력: ['Hello,', 'how', 'are', 'you', 'doing', 'today?']

# 예시 2 (특정 구분자를 기준으로 분할하여 리스트로 변환)
data = "apple,banana,grape,orange"
fruits = data.split(',')
print(fruits) # 출력: ['apple', 'banana', 'grape', 'orange']

클래스(class)

  • 클래스(class) : 객체 지향 프로그래밍의 중요한 개념 중 하나로 사물을 모델링하여 프로그래밍하는 방법

  • 클래스의 기본 구조

class ClassName:
	# 여기서 __init__ 메서드는 클래스의 생성자로, 객체가 생성될 때 호출되며 초기화 작업을 수행
    def __init__(self, parameter1, parameter2):
        self.attribute1 = parameter1
        self.attribute2 = parameter2
	
    # 메서드의 첫 번째 매개변수로 self를 반드시 사용해야함
    def method1(self, parameter1, parameter2):
    # 메서드 내용 작성
        pass
  • 클래스와 객체(Object)의 관계
    • 클래스는 객체를 만들기 위한 틀 또는 설계도
class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
  • 다형성(Polymorphism) : 같은 이름의 메서드가 서로 다른 클래스에서 다른 기능을 수행하도록 하는 개념
class Animal:
    def sound(self):
        print("Some generic sound")

class Dog(Animal):
    def sound(self):
        print("Woof")

class Cat(Animal):
    def sound(self):
        print("Meow")

# 다형성 활용
# animal 클래스의 sound 메서드를 각각의 하위 클래스인 Dog와 Cat에서 재정의하여 다른 동작을 수행
animals = [Dog(), Cat()]
for animal in animals:
    animal.sound()
  • 클래스와 함수의 차이점
    • 함수
      • 일련의 작업을 수행하는 코드 블록
      • 일반적으로 입력(매개변수)을 받고 그에 따른 결과를 반환
      • 클래스와 상관없이 독립적으로 정의
    • 함수
      • 데이터와 해당 테이터를 처리하는 메서드(함수)를 함께 묶어 놓은 것
      • 객체의 상태(속성)와 행위(메서드)를 정의하고 이를 캡슐화하여 객체를 생성
      • 상속을 통해 기존 클래스를 확장하고 다형성을 지원하여 유연한 코드 구조를 구현 가능
  • 클래스를 사용하는 이유

    • 코드의 구조화 : 클래스를 사용하면 관련 있는 데이터와 동작을 묶어서 구조화 하여 가독성을 높이고 유지보수에 용이
    • 재사용성 : 비슷한 동작을 하는 여러 객체를 생성 가능
    • 상속과 다형성 : 클래스는 상속을 통해 기존 클래스를 확장하고 다형성을 지원하여 유연하고 확장 가능한 코드를 작성 가능
    • 캡슐화 : 데이터의 무결성을 보장하고 외부로부터의 접근 제어 가능
    • 객체 지향 설계 : 클래스를 사용하면 현실 세계의 개념을 코드로 옮겨 쉽게 이해하고 관리 가능
  • 클래스의 속성과 메서드

  • 메서드(Method) : 클래스 내부에 정의된 함수, 특정 작업을 수행하거나 클래스의 상태를 변경하는 역할

class Car:
    def __init__(self, brand):
        self.brand = brand
    
    def start_engine(self):
        print(f"{self.brand}의 엔진을 가동합니다.")

# Car 클래스의 인스턴스 생성
my_car = Car("Toyota")
# start_engine() 메서드 호출
my_car.start_engine() # 출력: Toyota의 엔진을 가동합니다.
  • 속성(Attribute) : 클래스나 클래스의 인스턴스에 속한 변수
class Dog:

    def __init__(self, name):
        self.name = name # 인스턴스 속성

# Dog 클래스의 인스턴스 생성
my_dog = Dog("Buddy")
print(my_dog.name) # 출력: Buddy

불리언 인덱싱(Boolean indexing)

  • 불리언 인덱싱(Boolean indexing) : 조건에 따라 요소를 선택하는 방법 중 하나
import numpy as np

# 배열 생성
arr = np.array([1, 2, 3, 4, 5])

# 불리언 배열 생성 (조건에 따라 True 또는 False 값을 갖는 배열)
condition = np.array([True, False, True, False, True])

# 불리언 인덱싱을 사용하여 조건에 맞는 요소 선택
result = arr[condition]

# 결과 출력
print("Result using boolean indexing:", result) # 출력: [1 3 5]

# 불리언 인덱싱을 사용하여 배열에서 짝수인 요소만 선택
evens = arr[arr % 2 == 0]

# 결과 출력
print("Even numbers using boolean indexing:", evens) # 출력: [2 4]

데코레이터(Decorator)

데코레이터(Decorator) : 파이썬에서 함수나 메서드의 기능을 확장하거나 수정하는 도구 (기존의 함수를 따로 수정하지 않고도 추가 기능을 넣고 싶을 때 사용)

def decorator_function(original_function):
    def wrapper_function(**kwargs):
        # 함수 호출 전에 실행되는 코드
        result = original_function(**kwargs)
        # 함수 호출 후에 실행되는 코드
        return result
    return wrapper_function

0개의 댓글