※ 아래 코드들은 예시로 임의의 파일제목을 작성한 것으로 실제로는 없는 파일이라 실행되지 않음에 유의 ※
pandas
라이브러리의 read_csv()
함수를 사용import pandas as pd
df = pd.read_csv('file.csv')
pandas
의 read_excel()
함수를 사용import pandas as pd
df = pd.read_excel('file.xlsx')
pandas
의 read_json()
함수를 사용import pandas as pd
df = pd.read_json('file.json')
pandas
의 read_csv()
함수를 사용import pandas as pd
df = pd.read_csv('file.txt', delimiter='\t') # 만약 탭으로 구분되어 있다면 delimiter='\t'를 사용합니다.
파일 포맷과 불러오는 방법에 대한 이해는 파이썬 데이터 분석가로서의 기본적인 지식 중 하나입니다.
위 예시들은 주로 pandas 라이브러리를 사용하여 데이터를 불러오는 방법을 보여줍니다.
- pandas
- 파이썬 데이터 분석에서 매우 효과적으로 사용되는 라이브러리
- 데이터프레임 형태로 데이터를 다루기에 매우 편리
참고: 내가 가지고 있는 데이터 파일을 구글 Colaboratory에서 읽어들이려면
- ‘드라이브 마운트’ 코드를 이용하여 내 드라이브로 접근한 다음 내가 읽어들이고 싶은 데이터 파일을 구글 드라이브 중에 원하는 폴더 안에 넣고 그 파일이 위치한 경로를 이용하여 파일을 불러와야 함
- 한번 나갔다가 혹은 로그아웃 했다가 다시 들어오면 드라이브 마운트가 초기화 되므로 구글 드라이브에 있는 파일에 접근할 때는 실행할 때마다 드라이브 마운트를 해줘야 함
# 데이터 파일을 넣은 구글 드라이브 경로 예시: 강사님 컴퓨터 # 제 구글 드라이브 안에 '스파르타코딩클럽_데이터분석을위한파이썬'이라는 폴더가 있는데 # 그 안에 파일을 넣은 상황 입니다. # 여러분의 폴더 이름에 맞게 경로를 바꾸어 보세요! root = "/content/drive/MyDrive/스파르타코딩클럽_데이터분석을위한파이썬" # 그리고 위 경로에 해당 파일 이름도 함께 이어 붙여서 파일 경로를 하나 완성합니다 file_address = root + "/ssec2403(통계표).xlsx" # 위에서 지정해 놓은 파일 경로를 활용하여 불러오기만 하면 끝! import pandas as pd df = pd.read_excel(file_address)
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 = '/content/sample_data/data.csv'
df.to_csv(excel_file_path, index = False)
print("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 = '/content/sample_data/data.xlsx'
df.to_excel(excel_file_path, index = False)
print("Excel 파일이 생성되었습니다.")
import json
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
json_file_path = '/content/sample_data/data.json'
# json 파일을 쓰기모드로 열어서 data를 거기에 덮어씌우게 됩니다.
with open(json_file_path, 'w') as jsonfile:
json.dump(data, jsonfile, indent=4)
print("JSON 파일이 생성되었습니다.")
data = {
'Name': ['John', 'Emily', 'Michael'],
'Age': [30, 25, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
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) + '\n')
print("텍스트 파일이 생성되었습니다.")
numpy
와 matplotlib
는 여러 모듈을 포함하는 패키지# 아래와 같이 보통은 필요한 패키지를 한번에 다 불러온 다음 코딩을 진행합니다
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
import seaborn
import pandas as pd
df = pd.read_excel(file_address)
print(df)
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
print(arr.mean())
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()
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')
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)
from sklearn.datasets import iris
관련
: 원래는 아래와 같이 써야 하는데 귀찮으니까 짧게 줄여 함수 자체를 바로 가져온 것import sklearn
sklearn.datasets.load_iris()
### statsmodels
- 통계 분석을 위한 라이브러리
- 회귀 분석, 시계열 분석, 비모수 통계 등 다양한 통계 기법을 제공
```python
import statsmodels.api as sm
model = sm.OLS(y_train, X_train)
result = model.fit()
print(result.summary())
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)
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')
keras는 tensorflow와 통합되었습니다.
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
x = 10
print(f"변수 x의 값은 {x}입니다.")
x = 10
print("변수 x의 값은 {}입니다.".format(x))
x = 10
print("변수 x의 값은 %d입니다." % (x))
자료형 | 문자 |
---|---|
정수 | %d |
실수 | %f |
문자열 | %s |
8진수 | %o |
16진수 | %x |
% | %% |
name = "Alice"
age = 25
# %를 사용한 형식 지정
print("이름: %s, 나이: %d세" % (name, age))
# format() 메서드를 사용한 형식 지정
print("이름: {}, 나이: {}세".format(name, age))
# f-string을 사용한 형식 지정 (Python 3.6 이상)
print(f"이름: {name}, 나이: {age}세")
# 데이터 분석 결과
num_records = 1000
avg_age = 35.6
median_income = 50000
# 출력 포맷 지정
output_string = f"총 {num_records}명의 레코드가 분석되었습니다. 평균 나이는 {avg_age}세이며, 중위 소득은 {median_income}입니다."
# 결과 출력
print(output_string)
# 딥러닝 모델의 정확도
accuracy = 0.8765 # 지금은 숫자가 바로 들어갔지만 실전에선 AI의 모델의 결과들을 가지고 따로 계산해서 얻어냅니다.
# 출력 포맷 지정
output_string = f"모델의 정확도는 {accuracy}입니다."
# 결과 출력
print(output_string)
# 기본적인 구조
[표현식 for 항목 in iterable if 조건문]
# 예시: 1부터 10까지의 숫자를 제곱한 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares) # 출력: [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
List Comprehension 없이 풀면 이렇게 됨
squares = [] for i in range(1, 11): squares.append(i**2) print(squares)
# 예시: 리스트에서 짝수만 선택하여 제곱한 리스트 생성
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]]
if 조건문
은 선택적으로 사용될 수 있으며, 조건이 참일 때만 해당 항목을 결과 리스트에 추가def
키워드를 사용하지 않고 lambda
키워드를 사용하여 정의def
키워드를 사용하여 명시적으로 함수를 정의lambda
키워드를 사용하여 익명 함수를 간단히 정의add = lambda x, y: x + y
print(add(3, 5)) # 출력: 8
square = lambda x: x ** 2
print(square(4)) # 출력: 16
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8, 10]
filter() 함수
- 여러 개의 데이터로부터 조건을 충족하는 데이터만 추출할 때 사용하는 내장함수
filter(조건 함수, 반복 가능한 데이터)
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers))
print(squared_numbers) # 출력: [1, 4, 9, 16, 25]
map() 함수
- 여러 개의 값을 받아서 각각의 값에 함수를 적용한 결과를 반환하는 내장함수
map(함수, 반복 가능한 데이터)
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')
폴더(디렉토리)에 대한 유용한 개념
- 폴더를 구분할때는 ‘/’기호를 사용
- 파일명을 입력해줄 때 반드시 확장자도 함께 입력
- 일치하는 파일이나 디렉토리의 패턴을 나타낼 때 와일드카드 문자를 사용
- 와일드카드 문자
- 주로 파일이나 디렉토리의 이름을 검색하거나 일괄적으로 처리할 때 유용하게 사용
- * : 0개 이상의 모든 문자와 일치
e.g. *.txt : 해당 디렉토리에서 텍스트파일 모두 해당- 그밖의 와일드카드 문자로 ?, [], {} 등이 있음
[]: 대괄호 안에 포함된 문자 중 하나와 일치
{}: 중괄호 안에 포함된 문자열 중 하나와 일치
import os
cwd = os.getcwd()
print(cwd)
import os
os.mkdir('sample_data/new_directory')
import os
os.rename('sample_data/new_directory', 'sample_data/new_directory2')
import os
os.remove(file_adress)
import os
os.remove('sample_data/data.csv')
import os
files = os.listdir('/content')
print(files)
import os
path = os.path.join('/content', 'sample_data', 'mnist_test.csv')
print(path)
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']
words = ['Hello,', 'how', 'are', 'you', 'doing', 'today?']
sentence = ' '.join(words)
print(sentence) # 출력: Hello, how are you doing today?
fruits = ['apple', 'banana', 'grape', 'orange']
data = ','.join(fruits)
print(data) # 출력: apple,banana,grape,orange
text = """First line
Second line
Third line"""
lines = text.split('\n')
print(lines) # 출력: ['First line', 'Second line', 'Third line']
sentence = "Hello, how are you doing today?"
words = sentence.split()
first_three_words = words[:3]
print(first_three_words) # 출력: ['Hello,', 'how', 'are']
text = " Hello how are you "
cleaned_text = text.strip()
words = cleaned_text.split()
print(words) # 출력: ['Hello', 'how', 'are', 'you']
# 데이터의 경로를 문자열로 표현
file_path = "/usr/local/data/sample.txt"
# split() 함수를 사용하여 디렉토리와 파일명으로 분할
directory, filename = file_path.rsplit('/', 1)
print("디렉토리:", directory) # 출력: 디렉토리: /usr/local/data
print("파일명:", filename) # 출력: 파일명: sample.txt
file_path
라는 문자열 변수에 데이터의 경로를 저장하고, split()
함수를 사용하여 문자열을 /
기준으로 분할rsplit()
함수를 사용하여 오른쪽에서부터 최대 1회만 분할하도록 설정하여 파일명과 디렉토리로 나눌 수 있음directory
와 filename
변수에 할당하여 출력→ 데이터의 경로를 문자열로 표현하고, split()
함수를 활용하여 필요한 정보를 추출
class ClassName:
def __init__(self, parameter1, parameter2):
self.attribute1 = parameter1
self.attribute2 = parameter2
def method1(self, parameter1, parameter2):
# 메서드 내용 작성
pass
__init__
메서드self
를 반드시 사용해야 함# Person 클래스를 정의 → 클래스를 사용하여 여러 사람 객체를 생성
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
# 객체 생성
person1 = Person("Alice", 30)
person2 = Person("Bob", 25)
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에서 재정의하여 다른 동작을 수행
캡슐화 (Encapsulation)
- 객체의 상태를 외부에서 직접적으로 접근하지 못하도록 보호하는 것
- 파이썬에서는 멤버 변수와 멤버 메서드의 이름 앞에 언더스코어(_)를 붙여서 접근 제어를 구현
class BankAccount: def __init__(self, name, balance): self._name = name self._balance = balance def deposit(self, amount): self._balance += amount def withdraw(self, amount): if self._balance >= amount: self._balance -= amount else: print("Insufficient balance") def get_balance(self): return self._balance def get_name(self): return self._name
: 위의 코드에서 BankAccount 클래스는 은행 계좌를 나타내는 클래스입니다. 멤버 변수인 _name과 _balance는 언더스코어(_)를 붙여서 접근 제어를 구현하면 클래스 외부에서는 직접적으로 멤버 변수에 접근할 수 없으며, 멤버 메서드를 통해서만 값을 읽거나 변경할 수 있습니다.
account = BankAccount("John", 1000) account.deposit(500) account.withdraw(200) print("Account name:", account.get_name()) print("Account balance:", account.get_balance())
위의 코드에서는 account 객체의 get_name() 메소드와 get_balance() 메서드를 호출해서 각각 계좌의 소유자와 잔액을 출력합니다. ※ 이때, 멤버 변수인
_name
과_balance
는 직접적으로 접근하지 않는데, 이것이 바로 캡슐화임(객체의 내부 구현을 숨기고 인터페이스를 제공)
- 캡슐화를 너무 강하게 적용하면 객체의 내부 구현을 완전히 숨기기 때문에 디버깅이 어려워지고, 유연성이 떨어질 수 있습니다. 따라서, 적절한 수준에서 캡슐화를 적용하는 것이 중요합니다.
- 또한, 언더스코어(_)를 붙인 멤버 변수와 멤버 메서드는 외부에서 접근 가능하지만, 이름 앞뒤에 더블 언더스코어(__)를 붙인 멤버 변수와 멤버 메서드는 파이썬에서 특별한 의미를 갖는 매직 메서드를 나타내기 때문에, 접근을 제한하기 위해서는 언더스코어(_)를 사용하는 것이 좋습니다.
🡆 따라서 데이터 분석과 같이 복잡한 작업을 수행하는 경우 클래스를 사용하여 코드를 구조화하고 객체 지향적으로 설계하는 것이 좋음
🡆 클래스를 사용하면 유연하고 확장 가능한 코드를 작성할 수 있으며, 이는 데이터 분석 작업의 효율성과 유지보수성을 향상시킴
self
매개변수를 첫 번째 매개변수로 사용하여 메서드가 속한 인스턴스를 참조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의 엔진을 가동합니다.
class Dog:
def __init__(self, name):
self.name = name # 인스턴스 속성
# Dog 클래스의 인스턴스 생성
my_dog = Dog("Buddy")
print(my_dog.name) # 출력: Buddy
class Stock:
def __init__(self, symbol, price, volume):
self.symbol = symbol
self.price = price
self.volume = volume
# 객체 생성
stock1 = Stock("AAPL", 150.25, 100000)
stock2 = Stock("GOOG", 2800.75, 50000)
raw_data = [1,2,4,5,6,87,2,253654]
class DataPreprocessor:
def __init__(self, data):
self.data = data
def normalize_data(self):
# 데이터 정규화 작업 수행
pass
def handle_missing_values(self):
# 결측치 처리 작업 수행
pass
def remove_outliers(self):
# 이상치 제거 작업 수행
pass
# 데이터 전처리 객체 생성
preprocessor = DataPreprocessor(raw_data)
preprocessor.normalize_data()
preprocessor.handle_missing_values()
preprocessor.remove_outliers()
class LinearRegressionModel:
def __init__(self, data):
self.data = data
def train(self):
# 선형 회귀 모델 학습
pass
def predict(self, new_data):
# 새로운 데이터에 대한 예측 수행
pass
def evaluate(self):
# 모델 평가 수행
pass
# 선형 회귀 모델 객체 생성
lr_model = LinearRegressionModel(training_data)
lr_model.train()
predictions = lr_model.predict(new_data)
evaluation_result = lr_model.evaluate()
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]
arr
과 조건을 담은 불리언 배열 condition
을 생성def decorator_function(original_function):
def wrapper_function(**kwargs):
# 함수 호출 전에 실행되는 코드
result = original_function(**kwargs)
# 함수 호출 후에 실행되는 코드
return result
return wrapper_function
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
import tensorflow as tf
@tf.function # The decorator converts `add` into a `Function`.
def add(a, b):
return a + b
add(tf.ones([2, 2]), tf.ones([2, 2])) # [[2., 2.], [2., 2.]]
import timeit
conv_layer = tf.keras.layers.Conv2D(100, 3)
@tf.function
def conv_fn(image):
return conv_layer(image)
image = tf.zeros([1, 200, 200, 100])
print("Eager conv:", timeit.timeit(lambda: conv_layer(image), number=10))
print("Function conv:", timeit.timeit(lambda: conv_fn(image), number=10))
print("Note how there's not much difference in performance for convolutions")
우리가 A → B → C 순로 작업하는 일을 3번 해야 한다고 해봅시다. 이런 경우 무작정 이 순서로 일을 하기보다는 순서를 다시 정리하여 A → A → A 한번, B → B → B 한번, C → C → C 한번 이렇게 일을 하는 것이 똑같은 양의 일을 하더라도 훨씬 효율적일 것입니다. 파이썬에서 그래프 연산을 한다는 것은 연산의 순서를 명확하게 정리함으로써 최적화 하는 과정입니다!
따라서 계산량이 적은데 많이 해야 한다면 효과적일 수 있겠지만, 계산량 자체가 크다면 그래프를 만드는게 오래 걸려 (일은 안하고 A,B,C 순서 정리하느라 시간 다 보내는 것과 같음) 순서를 정리하는 것이 그다지 효과적이지 않을 것입니다.
참고: 파이썬의 즉시 실행모드와 그래프 모드
- 즉시 실행 모드 (Eager Execution)
- 파이썬 코드를 순차적으로 실행하면서 연산을 즉시 평가하는 방식
- 각각의 연산은 실행될 때마다 결과가 즉시 반환되어 사용자가 바로 확인할 수 있음
- 파이썬의 일반적인 제어 흐름과 함께 사용되며, 디버깅 및 코드 작성이 용이
- TensorFlow 2.0부터는 즉시 실행 모드가 기본적으로 활성화되어 있음
- 그래프 모드 (Graph Mode)
- 파이썬 코드를 그래프로 변환하고, 이를 최적화한 후에 실행하는 방식
- 먼저 그래프를 정의하고, 그래프를 실행하기 위해 세션을 통해 입력을 제공
- 그래프는 연산의 순서와 의존성을 명확하게 표현하므로, 병렬 실행과 하드웨어 가속화에 최적화
- ensorFlow 1.x에서는 주로 그래프 모드를 사용했으나, TensorFlow 2.0부터는 즉시 실행 모드가 기본으로 제공되어 그래프 모드를 명시적으로 사용하지 않아도 됨
- 차이점
- 즉시 실행 모드는 파이썬 코드를 사용하여 연산을 즉시 평가하고 결과를 반환하는 반면 그래프 모드는 그래프를 먼저 정의하고 세션을 통해 실행해야 함
- 즉시 실행 모드는 디버깅과 코드 작성이 용이하지만, 그래프 모드는 병렬 실행과 하드웨어 가속화에 최적화되어 있음
- 즉시 실행 모드는 각각의 연산을 바로 평가하기 때문에 코드를 작성하고 실행하는 데에 편리한 반면에, 그래프 모드는 전체 그래프를 먼저 정의하고 실행해야 하므로 초기 설정이 더 복잡할 수 있음
- 그래프 모드는 동일한 그래프를 여러번 실행할 때 재사용할 수 있어서 효율적인 반복 작업에 유용
Traceback (most recent call last):
File "codeit.py", line 12, in <module> # 어떤 파일에서 몇번째 줄에 에러가 떴는지를 알려줌
numbers[right] = temp[left] # 어떤 코드가 잘못 되었는지를 알려줌
TypeError: 'int' object is not subscriptable # 에러의 종류 : 에러에 대한 세부 정보
print("Hello World'
SyntaxError: EOL while scanning string literal
def my_function():
print("Hello World!")
IndentationError: expected an indented block
# 위에 my_variable에 대한 변수에 대해 따로 언급한 것이 없는 상황
print(my_variable)
NameError: name 'my_variable' is not defined
result = "10" + 20
TypeError: can only concatenate str (not "int") to str
my_list[start:stop:step]
len(my_list)
)를 입력한 것과 같음my_list = [1, 2, 3]
print(my_list[3])
IndexError: list index out of range
my_dict = {"a": 1, "b": 2}
print(my_dict["c"])
KeyError: 'c'
with open("nonexistent_file.txt", "r") as file:
contents = file.read()
FileNotFoundError: [Errno 2] No such file or directory: 'nonexistent_file.txt'
import pandas as pd
df = pd.read_csv('/content/sample_data/data.csv')
import pandas as pd
df = pd.read_excel('/content/sample_data/data.xlsx')
import pandas as pd
df = pd.read_json('/content/sample_data/data.json')
import pandas as pd
df = pd.read_csv('/content/sample_data/data.txt')
각자마다 알맞은 경로를 설정하시면 됩니다! 경로는 각자 다를 수 있습니다
squares = [x**2 for x in range(1, 6)]
print(squares)
a) [1, 4, 9, 16, 25]
b) [1, 3, 5, 7, 9]
c) [1, 2, 3, 4, 5]
d) [2, 4, 6, 8, 10]
🡆 a
🡆 b
🡆 c
# 데이터는 이것을 사용하세요
data = [2, 4, 6, 8, 10]
class DataPreprocessor:
def __init__(self, data):
self.data = data
def calculation(self):
# 이 부분을 채워 주세요!
🡆
data = [2, 4, 6, 8, 10]
class DataPreprocessor:
def __init__(self, data):
self.data = data
def calculation(self):
return sum(self.data) / len(self.data)
input_data = DataPreprocessor(data)
average = input_data.calculation()
print(f"평균: {average}")
정답:
다양한 경우의 수를 가진 정답이 나올 수 있기 때문에 혹여나 완전 똑같이 코딩하지 않았더라도 취지와 결과만 맞으면 모두 정답이라고 보시면 됩니다.class DataPreprocessor: def __init__(self, data): self.data = data
def calculation(self):
total = sum(self.data)
length = len(self.data)
average = total / length
return average
data = [2, 4, 6, 8, 10]
preprocessor = DataPreprocessor(data)
average = preprocessor.calculation()
print("평균:", average)