빅데이터 QAQC_3기/빅데이터 QAQC_3기 TIL

TIL_250918

usungusung 2025. 9. 18. 20:37

Today I learned

 

1. 데이터 분석 파이썬 종합반(python) 4주차

 

1) 함수 심화

 - 전역변수 (Global variables)

         프로그램 전체에서 접근 가능한 변수, 어디서든지 사용 가능

         프로그램이 종료될 때 가지 메모리에 유지됨

- 지역변수 (Local Variables)

         특정한 범위 에서만 접근 가능한 변수, 해당 범위를 벗어나면 사용 불가

 

ex)

# 전역변수 예시
global_var = 10

def global_example():
    print("전역변수 접근:", global_var)

global_example()  # 출력: 전역변수 접근: 10

# 지역변수 예시
def local_example():
    local_var = 20
    print("지역변수 접근:", local_var)

local_example()  # 출력: 지역변수 접근: 20

# 함수 내에서 전역변수를 수정하는 예시
def modify_global():
    global global_var
    global_var = 30
    print("함수 내에서 수정된 전역변수:", global_var)

modify_global()  # 출력: 함수 내에서 수정된 전역변수: 30
print("수정된 전역변수 확인:", global_var)  # 출력: 수정된 전역변수 확인: 30

 

- 인수(argument)

         함수를 정의할 때 함수가 받아들이는 값을 지정하는 변수

 

- 매개변수(parameter)

         함수를 호출할 때 함수에 전달되는 값

 

ex)

# 매개변수(parameter) 예시
def greet(name):  # 여기서 'name'은 매개변수입니다.
    print("Hello, " + name + "!")
    
# 함수 호출할 때 전달되는 값이 인수(argument)입니다.
greet("Alice")  # 함수 호출 시 "Alice"는 greet 함수의 매개변수 'name'에 전달됩니다.

위 예시에서 greet 함수의 매개변수는 name, 인수는 Alice

 

- 위치인수(Positional Arguments)

          매개변수의 위치에 따라 전달되는 인수

ex)

def greet(name, age):
    print("안녕하세요", name, "님! 나이는 ", age, "세입니다.")

# 위치 전달인자 사용
greet("철수", 30)  # 출력: 안녕하세요, 철수님! 나이는 30세입니다.

 

- 키워드 인수(Keyword Arguments)

          특정 매개변수에 값을 할당하여 전달하는 방식으로 함수 호출

ex)

def greet(name, age):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)

 

- 기본값 설정 (Default Values)

          매개변수에 인수가 전달되지 않았을 때 기본값으로 사

ex)

def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

# 기본값이 설정된 함수 호출
greet()

 

- 기본값과 키워드 인수를 함께 사용하기

ex)

def greet(name="Guest", age=25):
    print("이름:", name)
    print("나이:", age)

# 키워드 인수를 사용하여 함수 호출
greet(name="Alice", age=30)

# 일부 매개변수에만 키워드 인수 사용하여 호출
greet(name="Bob")

 

- 가변 인수 활용하기

          여러 개의 인수를 받을 수 있는 함수를 만들기 위해 가변인수를 활용할 ㅅ ㅜ있음.

ex)

def sum_values(*args):
    total = 0
    for num in args:
        total += num
    return total

result = sum_values(1, 2, 3, 4, 5)
print("합계:", result)  # 출력: 합계: 15

          ※ args는 함수를 호출할 때 임의의 개수의 위치 인수를 전달할 수 있도록 함

 

ex)

def print_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_info(name="Alice", age=30, country="USA")

          ※ kwargs는 함수를 호출할 때 임의의 개수의 키워드 인수를 전달할 수 있도록 함

 

2. 데이터 분석 파이썬 종합반(python) 5주차

1) 파일 불러오기 및 저장하기

- 확장자별 파일 불러오기

ex)

import pandas as pd

df = pd.read_csv('file.csv)

※ 확장자에 따라 csv 자리에 xls, json, txt 등이 올 수 있음

 

- 파일 저장하기

ex) csv나 excel 파일의 경우

import pandas as pd

 

data = {"아무것도하기싫다더욱격렬하게아무것도하기싫다"}

 

df = pd.DataFrame(data)

excel_file_path = '/content/sample_data/data.csv'

df.to_csv(excel_file_path, index - False)

※ csv나 excel 파일의 경우 .csv만 바꿔주면 됨

 

ex) JSON 파일

import json

 

data = {"아무것도하기싫다더욱격렬하게아무것도하기싫다"}

 

json_file_path = ' /content/sample_data/data.json'

 

#json 파일을 쓰기모드로 열어 data를 덮어쓰는 방

with open(json_file_path, 'w') as jasonfile:

    json.dump(data, jsonfile, indent=4)

 

 

ex) 텍스트 파일

data = {"아무것도하기싫다더욱격렬하게아무것도하기싫다"}

 

text_file_path = ' /content/sample_data/data.txt'

 

with open(text_file_path, 'w') as textfile:

    for key, item in data.items():

         textfile,write(str(key) + " : " + str(item

 

2) 패키지(라이브러리) 사용하기

     여러개의 모듈을 포함하는 디렉토리 ex) numpy, matplotlib

    데이터 분석을 위한 파이썬 패키지는 다양한 작업을 진행하는데 필수적

- pandas : 데이터 조작과 분석을 위한 라이브러리

import pandas as pd
df = pd.read_excel(file_address)
print(df)

 

- numpy: 과학적 계산을 위한 라이브러리로, 다차원 배열과 행렬 연산을 지원

import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr.mean())

 

- matplotlib: 데이터 시각화를 위한 라이브러리

import matplotlib.pyplot as plt
plt.plot([1, 2, 3, 4], [1, 4, 9, 16])
plt.xlabel('X-axis')
plt.ylabel('Y-axis')
plt.show()

 

- seaborn: Matplotlib 기반의 통계용 데이터 시각화 라이브러리

import seaborn as sns
import pandas as pd
data_sample = pd.DataFrame({'x':[1, 2, 3, 4], 'y':[1, 4, 9, 16]})
sns.barplot(data=data_sample, x='x', y='y')

 

- scikit-learn: 머신러닝 알고리즘을 사용할 수 있는 라이브러리

from sklearn.datasets import load_iris
from sklearn.linear_model import LinearRegression

# Iris 데이터셋 불러오기
iris = load_iris()

# Iris 데이터셋에서 특정 범위의 데이터 슬라이싱하기
X_train = iris.data[:,:-1]  # 데이터 값들 추출
print("학습 데이터:", X_train)
y_train = iris.data[:,-1:]  # 정답값 추출
print("학습 데이터:", y_train)

model = LinearRegression()
model.fit(X_train, y_train)

 

- statmodels: 통계 분석을 위한 라이브러리

import statsmodels.api as sm
model = sm.OLS(y_train, X_train)
result = model.fit()
print(result.summary())

 

- scipy: 과학기술 및 수학적인 연산을 위한 라이브러리

import numpy as np
from scipy.integrate import quad

# 적분할 함수 정의
def integrand(x):
    return np.exp(-x ** 2)

# 정적분 구간
a = 0
b = np.inf

# 적분 계산
result, error = quad(integrand, a, b)

print("결과:", result)
print("오차:", error)

 

- tensorflow: 딥러닝 및 기계 학습을 위한 오픈소스 라이브러리

import tensorflow as tf

input_size = 3

model = tf.keras.Sequential([
    tf.keras.layers.Dense(10, activation='relu', input_shape=(input_size,)),
    tf.keras.layers.Dense(1)
])
model.compile(optimizer='adam', loss='mse')

 

- pytorch: 딥러닝을 위한 오픈소스 라이브러리

import torch
import torch.nn as nn
class Model(nn.Module):
    def __init__(self):
        super(Model, self).__init__()
        self.fc1 = nn.Linear(input_size, hidden_size)
        self.fc2 = nn.Linear(hidden_size, output_size)
    def forward(self, x):
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

 

3) 포맷팅 사용하기

- 포맷팅: 문자열 내에 변수를 넣거나 값을 특정한 형태로 표현하는 방법

ex) 포맷팅 사용시

a = 10
b = 3

print(f"{a} + {b} = {a + b}")

 

미사용시

a = 10
b = 3

print(a, "+", b, "=", a + b)

 

4) 리스트 컴프리헨션

- 리스트 컴프리헨션: 파이썬에서 리스트를 간결하게 생성하는 방법

-  기본적인 구조
[표현식 for 항목 in iterable if 조건문]

 

ex)

# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)  # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
even_squares = [x**2 for x in range(1, 11) if x % 2 == 0]
print(even_squares)  # 출력: [4, 16, 36, 64, 100]

# 예시: 문자열 리스트에서 각 문자열의 길이를 저장한 리스트 생성
words = ["apple", "banana", "grape", "orange"]
word_lengths = [len(word) for word in words]
print(word_lengths)  # 출력: [5, 6, 5, 6]

# 예시: 리스트 컴프리헨션을 중첩하여 2차원 리스트 생성
matrix = [[i for i in range(1, 4)] for j in range(3)]
print(matrix)  # 출력: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

 

5) lambda 사용하기

- 이름 없이 정의되는 간단한 함수 -> 간결성, 익명성, 가독성, 함수형 프로그래밍에서 강점

- def 키워드를 사용하지 않고 lambda 키워드로 정의

- 일반 함수와 차이점

  일반함수 lambda함수
정의 키워드 def lambda
구조 여러 줄의 코드블록 한줄
이름 함수 이름을 지정하여 호출 가능 이름 없음, 임시로 필요한 경우에만 사용
사용 어떤 경우에도 사용 가능 함수형 프로그래밍에 사용

 

ex)

add = lambda x, y: x + y
print(add(3, 5))  # 출력: 8

 

square = lambda x: x ** 2
print(square(4))  # 출력: 16

 

 

6) glob 사용하기

- 파일 시스템에서 파일을 찾는데 사용되는 도구

사용법 예시)

import glob

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

 

# 단일 파일 패턴으로 파일을 찾기
file_list2 = glob.glob('drive')

 

# 디렉토리 안의 모든 파일 찾기
file_list3 = glob.glob('sample_data/*')

 

# 특정 확장자를 가진 파일만 찾기
file_list4 = glob.glob('sample_data/*.csv')

 

7) os 사용하기

- 운영 체제와 상호작용 하기 위한 다양한 함수를 제공

- 파일 및 디렉토리 관리 / 경로 관리/ 환경 변수 관리 / 실행 관리 등

 

사용 예시)

#공통 입력

import os

 

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

 

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

 

#파일 이름 변경

os.mkdir('sample_data/new_directory')

 

#파일 삭제

os.remove(file_adress)

os.remove('sample_data/data.csv')

 

#경로 관리 - 파일 목록 가져오기

files = os.listdir('/content')
print(files)

 

#경로 조작path = os.path.join('/content', 'sample_data', 'mnist_test.csv')
print(path)

 

8) split 사용하기

- 문자열을 여러개로 쪼개는 데 유용함

사용 예시)

sentence = "Hello, how are you doing today?"
words = sentence.split()
print(words)  # 출력: ['Hello,', 'how', 'are', 'you', 'doing', 'today?']

 

data = "apple,banana,grape,orange"
fruits = data.split(',')
print(fruits)  # 출력: ['apple', 'banana', 'grape', 'orange']

 

9) 클래스 배우기

-객체 지향 프로그래밍(OOP, 현실 세계의 사물을 모델링하여 프로그래밍 하는 방법)의 중요한 개념 중 하나

- 클래스의 기본 구조

class ClassName:
    def __init__(self, parameter1, parameter2):
        self.attribute1 = parameter1
        self.attribute2 = parameter2

    def method1(self, parameter1, parameter2):
    # 메서드 내용 작성
        pass

         ※ __init__ 메서드는 클래스의 생성자, 객체가 생성될 때 호출되며 초기화 작업을 수행

         ※ 클래스 내부의 메소드들은 클래스의 동작을 정의하는 함수

         ※ 메소드의 첫 번째 매개변수로 self를 반드시 사용해야 함

 

- 클래스와 객체의 관계

         클래스는 객체를 만들기 위한 틀

사용 예시)

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")

# 다형성 활용
animals = [Dog(), Cat()]
for animal in animals:
    animal.sound()

         ※ 위 코드에서 Animal 클래스의 sound 메소드를 각각의 하위 클래스인 dog와 cat에서 재정의하여 다른 동작을 수행

 

- 클래스와 함수의 차이

  클래스 함수
정의 객체 지향 프로그램의 핵심 개념, 데이터와 해당 데이터를 처리하는 메소드(함수)를 함께 묶어놓은 것 일련의 작업을 수행하는 블록
수행 작업 객체의 상태와 행위를 정의하고 캡슐화하여 객체를 생성하고 다룰 수 있게 해줌 입력(매개변수)를 받아들이고 그에 따른 결과를 반환

 

- 메소드 : 클래스 내부에 정의된 함수

- 속성: 클래스나 클래스의 인스턴스에 속한 변수

 

10) 블리언 인덱싱

- 조건에 따라 요소를 선택하는 방법 중 하나

- 주어진 조건에 따라 배열이나 리스트에서 요소를 선택할 수 있게 해주는 도구

사용 예시)

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]

         ※ Numpy를 사용하여 불리언 인덱싱을 수행하는 예시로

         ※ 배열 arr과 조건을 담은 불리언 배열 condition을 생성한 후, 불리언 인덱싱을 사용하여 조건에 따라 요소를 선택하고, 선택된 요소를 출력

 

11) 데코레이션 사용하기

- 함수나 메소드의 기능을 확장하거나 수정하는 도구

- 기존의 함수를 따로 수정하지 않고 추가 기능을 넣고 싶을 때 사용

사용 예시)

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

 

12) 파이썬 에러 대처

 

3. [라이브 session] 기초 쑥쑥 Python 

1) 숫자형 자료형(int, float)

x = int(input("정수정수~:"))
y = float(input("실수실수~:"))

print("합스", x+y)
print("곱스", x*y)
 
합스 15.2 곱스 52.0

 

2) 문자형 자료형 (str)

name = "대배우"
print(name + ". 환영.")
print("안녕하겠냐" * 3)
 
대배우. 환영. 안녕하겠냐안녕하겠냐안녕하겠냐

 

3) 불리언 자료형 (bool)

is_adult = False
print(is_adult)
 
False
 
print(3<5)
 
True

 

4) 리스트 자료형 (list)

fruits = ['내폰은애플', '나한테바나나', '나는포도당']
print(fruits[0])

fruits.append("정신을체리세요")
print(fruits)

fruits.insert(0,"귤이두개면뀰")
print(fruits)

fruits.remove("귤이두개면뀰")
print(fruits)

fruits.pop()
print(fruits)

fruits.sort()
print(fruits)
 
fruits = ['내폰은애플', '나한테바나나', '나는포도당']
print(fruits[0])

fruits.append("정신을체리세요")
print(fruits)

fruits.insert(0,"귤이두개면뀰")
print(fruits)

fruits.remove("귤이두개면뀰")
print(fruits)

fruits.pop()
print(fruits)

fruits.sort()
print(fruits)

 

5) 튜플 자료형(tuple)

point = (10, 20)
print(point[0])
 
10

 

- 수정하려 하면 오류 나옴

point = (10, 20)
point[0]="나"
 
--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[46], line 1 ----> 1 point[0]="" TypeError: 'tuple' object does not support item assignment

 

6) 딕셔너리 자료형(dict)

user = {"이름":"모른다면실망인데", "나이":28}
print(user["이름"])
 
모른다면실망인데

 

- 자주 사용하는 메소드

get(key) 값 조회 user.get("이름")
keys() 모든 키 반환 user.keys()
values() 모든 값 반환 user.values()
items() (키, 값)쌍 반환 user.items()
update() 병합 user.update({"취미": "독서"})
pop(key) 항목 삭제 user.pop("나이")

 

7) 집합 자료형 (set)

s = {1,2,3,3,2}
print(s)

s.add(4)
print(s)
 
{1, 2, 3} {1, 2, 3, 4}

'빅데이터 QAQC_3기 > 빅데이터 QAQC_3기 TIL' 카테고리의 다른 글

TIL_250922  (2) 2025.09.22
TIL_250919  (1) 2025.09.19
TIL_250917  (0) 2025.09.17
TIL_250916  (1) 2025.09.16
TIL_250915  (0) 2025.09.15