def solution(my_string):

    answer = ''.join(i if i.isdigit() else ' ' for i in my_string)
    # my_string에서 isdigit() 함수를 통해, 숫자를 ''에 기입
    # 숫자가 아닐 경우 공백으로 ''에 기입
    return sum(int(i) for i in answer.split())
    # 공백으로 나눈 answer를 split()으로 구분하여 숫자를 sum
    # i는 ''문자열화이기 때문에 int로 변환


🤔 문제 풀이

  • answer = ''.join(i if i.isdigit() else ' ' for i in my_string)
    • ''.join() 함수를 써서, ()에 바로 조건을 적어주었어요
    • 뒤에서부터 해석할게요
      • for i in my_string
        • my_string을 i로 돌릴 겁니다.
      • if i.isdigit()
        • 만약 i가 숫자라면 i값 그대로 join 해줄 거예요
      • else ' '
        • 아니라면 '' 공백으로 join 해줄게요
    • 이 모든 걸 answer에 담아냈어요
  • return sum(int(i) for i in answer.split())
    • 궁극적인 목표는 문자열에 있는 숫자들의 합이었어요
    • 그래서 return으로 sum을 해줄 거예요
      • for i in answer.split()
        • 아까 my_string을 숫자인 값을 answer에 join 해주고, 문자면 ''공백으로 기입했죠?
        • answer을 공백으로(.split) 구분한 것을 i에 넣어줄게요
      • sum(int(i))
        • 그 i를 int형으로 변환하여 sum 해주면 문제 해결!

함수 설명
isdigit() 숫자가 있는지 판별하는 함수 (True, False로 반환)
isalpha() 문자가 있는지 판별하는 함수 (True, False로 반환)

 

isdigit() 

Ex1 = '010-1234-5678'
Ex2 = '123456'
Ex3 = "R4R3"
 
print(Ex1.isdigit())   #False
print(Ex2.isdigit())   #True
print(Ex3.isdigit())   #False

 

isalpha()

Ex1 = 'A'
Ex2 = 'ABC'
Ex3 = "앱피아"
Ex4 = "Hello Appia"
Ex5 = "100Appia"
 
#print the is the result for isalpha()
 
print(Ex1.isalpha())  #True
print(Ex2.isalpha())  #True
print(Ex3.isalpha())  #True
print(Ex4.isalpha())  #False
print(Ex5.isalpha())  #False

후기

앞서 모스부호 문제에도 1시간을 썼는데,

이번에도 1시간을 써서 문제를 푸니까 에너지 소모가 크네요,,

과거에 비해서 지금의 제가, 본 것도 많고 아는 것도 많아져서 머리가 더 복잡해졌어요

그래서 이것도 해보고 저것도 해봤는데 다 안 돼서 ㅠㅠ 하

 

초반에 ''.join()함수, isdigit() 함수로 시작했거든요

그걸로 다시 돌아가서 문제를 천천히 풀어봤어요

해냈으니 됐어요,,

생각했던 걸 코드화 시킬 수 있어서 다행이었던 문제였습니다.

 

 

def solution(n):
    answer = []
    fac = 1 # 곱해줘야 하니까 1부터 시작
    
    for i in range(1,11):   # 최대 팩토리얼은 10
        fac *= i    # 팩토리얼 코드
        if fac <= n:    # 10! 값보다 작아야 함
            answer.append(i)
        
    return answer[-1]	# 리스트에 들어간 끝 숫자만 출력

 

 

재귀함수를 통한 팩토리얼 만들기 

# 재귀함수
def fact(n):
    answer = n*fact(n-1)
    return answer

 

팩토리얼 계산할 때는 이런 식으로 표현할 수 있어요!


실패 흔적들 

1트

#1트
def solution(n):
    fac = 1 # 곱해줘야 하니까 1부터 시작
    
    for i in range(1,n+1):
        fac *= i
        
    return fac

 

이렇게 해서, 팩토리얼은 완성했지만

문제에서 원하는 답은 몇 팩토리얼을 한 거냐!! 이거예요 🙄

그래서 틀렸어요

 

2트

def solution(n):
    answer = []
    fac = 1 # 곱해줘야 하니까 1부터 시작
    
    for i in range(1,11):   # 최대 팩토리얼은 10
        fac *= i    # 팩토리얼 코드
        if fac <= n:    # 10! 값보다 작아야 함
            answer.append(i)
        
    return answer

 

결괏값을 보면 i가 다 들어가있더라고요 🤔

그래서 어차피 팩토리얼이니까 가장 큰 숫자만 넣으면 돼서

 

def solution(n):
    answer = []
    fac = 1 # 곱해줘야 하니까 1부터 시작
    
    for i in range(1,11):   # 최대 팩토리얼은 10
        fac *= i    # 팩토리얼 코드
        if fac <= n:    # 10! 값보다 작아야 함
            answer.append(i)
        
    return answer[-1]

 

그래서 answer[-1]을 써서 마지막에 있는 값만 return 했더니 문제 해결!!

def solution(letter):
    answer = []
    morse = { 
    '.-':'a','-...':'b','-.-.':'c','-..':'d','.':'e','..-.':'f',
    '--.':'g','....':'h','..':'i','.---':'j','-.-':'k','.-..':'l',
    '--':'m','-.':'n','---':'o','.--.':'p','--.-':'q','.-.':'r',
    '...':'s','-':'t','..-':'u','...-':'v','.--':'w','-..-':'x',
    '-.--':'y','--..':'z'}
    
    letter = letter.split()
    
    for i in letter:
        answer.append(morse[i])
        
    return ''.join(answer)

 

🤔 문제 풀이

  • letter = letter.split()
    • 문제를 보자마자 "split() 해야겠다". 라는 생각을 했어요
    • 왜냐면 "letter의 모스부호는 공백으로 나누어져 있습니다"를 봤거든요
  • for i in letter:
    • 그리고 한 글자씩 돌아가면서 봐야하니까 for문을 사용했어요
  • answer.append(morse[i])
    • morse는 딕셔너리 형태로 기입돼 있어요
    • 그렇다면 for문에서 만들어준 i는 morse의 key 역할이 되는 거예요
    • 딕셔너리에서 key을 입력해주면 value값이 출력되기 때문에 그 값을 answer에 append 해주었어요
    • 🔥append를 쓸 때, answer이 answer = '' 이 형태면 추가 안 돼요. answer = []로 변경해주셔야 추가 가능합니다.
  • return ''.join(answer)
    • answer에는 ""이 형태로 들어가져 있을 거예요
    • 그래서 join을 써서, 결괏값과 동일하게 만들어주면 문제 해결!

def solution(my_string):
    answer = ''
    
    answer = ''.join(dict.fromkeys(my_string))
    
    return answer

 

🤔 문제 풀이

  • answer = ''.join(dict.fromkeys(my_string))
    • 함수 dict.fromkeys()는 딕셔너리에서 key들을 만들 때 쓰는 함수예요
    • 딕셔너리에서 key는 중복이 불가능하다는 점을 활용해서 문제를 풀었어요
      • 중복된 문자를 제거할 때 자주 쓰이는 함수라고 하더라구요!

dict.fromkeys(keys, value) 딕셔너리의 key와 value를 생성

 

keys = ['a', 'b', 'c']
d = dict.fromkeys(keys)
print(d)  # 출력: {'a': None, 'b': None, 'c': None}

 

이렇게 key 값을 생성할 때 쓰이는 메서드예요

딕셔너리 특징을 알고 있었으면, 쉽게 풀었을 문제였어요!

def solution(num_list, n):
    answer = []
    
    for i in range(0, len(num_list)//n):
        answer.append(num_list[n*i:(n*i)+n])

    return answer

 

🤔 문제 풀이

  • for i in range(0, len(num_list)//n):
    • 0부터 시작해서 len(num_list)를 n 간격 만큼 나눈 것을 범위로 설정했어요 -> 굳이 0을 넣지 않아도 돼요
      • 예를 들면 num_list가 총 8자리니까 n이 2였으면 총 4개의 묶음이 나오겠죠?
  • answer.append(num_list[n*i:(n*i)+n])
    • range 때문에 i(0~ //n까지)가 index 역할을 해줘요
    • 그렇기 때문에 시작이 n차원 * i(index 역할)에서 +n까지가 범위가 돼요
    • return 해주면 문제 해결!

실패 흔적들 

1트
def solution(num_list, n):
    answer = [[]]
    
    slicing = num_list[0:n]
    print(slicing)
    return answer

 

🤔 문제 해결

  • 일단 첫 트라이로는 여기까지 입력했어요
  • slicing = num_list[0:n]
        print(slicing)
    • 출력했을 때 [1,2]로 제대로 잘 나오길래 for문으로 돌려줄 생각을 했어요

 

def solution(num_list, n):
    answer = [[]]
    slicing = num_list[0:n]
    
    for i in num_list:
        slicing = num_list[0:n]
        answer = slicing.append(i)
        
    return answer

 

왜 null이 되는 걸까요 🤔

흠,,,

 

문제 보자마자 슬라이싱이라는 건 이해했는데,

그 범위값을 모르겠어가지고 헤맸어요,,

 

 

하나하나 print로 확인하면서 수정하기 바빴더니, 과정은 어디가고 답만 가져왔네요 🤣

어려웠어요 너무,,,ㅠㅠㅠㅠ

 

인사말

내일이면 24년도 12월이 끝나는 날이에요!

다들, 당장 내일이 종말이 되는 날이라면 어떤 걸 하실 건가요? 🤔

저는 가장 좋아하는 옷을 입고,

가장 좋아하는 음식을 먹으면서,

가장 좋아하는 사람과 자결하려구요 ㅇㅅㅇ,,

 

무서운 상상은 치워두고, 오늘의 TMI는요

몸살 걸려서 컨디션 최악인 하루였습니다 ㅠㅠ

왜 항상, 전조가 없다가 자고 일어나면 후폭풍이 올라오는 걸까요?

하루종일 눈이 뱅글뱅글 돌았어요 😵‍💫

 

거두절미하고!

오늘도 파이팅합시다! 🔥

 

오늘의 일정
오전(09:00 ~ 13:00) 11:00~12:00 코드 카타 3문제
12:00~13:00 프로그래머스 4문제
오후(14:00 ~ 18:00) 14:00~18:00 머신러닝 비지도 학습
저녁(19:00 ~ 21:00) 19:00~21:00 머신러닝 비지도 학습

요약

  1. 코드 카타 3문제
    1. 정수 부분
    2. n의 배수
    3. 문자열의 앞의 n글자
  2. 프로그래머스 4문제
    1. 주사위의 개수
    2. 문자열 정렬하기(1) https://bmk0703.tistory.com/92
    3. 합성수 찾기
    4. 2차원으로 만들기 https://bmk0703.tistory.com/95
  3. 머신러닝 비지도 학습 https://bmk0703.tistory.com/93

오전(09:00 ~ 13:00)

1. 코드 카타 3문제

1.1. 정수 부분

def solution(flo):
    return int(flo)

 

🤔 문제 풀이방법

  • int로 형변환 해주면 문제 해결!

 

1.2. n의 배수

def solution(num, n):
    answer = 0
    
    for i in range(1, num+1):
        if i % n ==0:
            answer = 1
        else:
            answer = 0
            
    return answer

 

🤔 문제 풀이방법

  • for i in range(1, num+1):
    • for과 range문으로 범위를 설정해줄게요
  • if i % n ==0:
       answer = 1
    else:
       answer = 0
    • i가 n의 배수인 경우를 찾는 문제예요
    • 그래서 두 개를 나누었을 때 나머지가 0이 된다면 배수겠죠?
      • 이 경우엔 1을 반환하고, 아닌 경우는 0으로 설정해주면! 문제 해결

 

1.3. 문자열의 앞의 n글자

 

def solution(my_string, n):
    return my_string[0:n]

 

🤔 문제 풀이방법

  • return my_string[0:n]
    • 첫 번째 자리[0]부터 n번째 자리[n]를 슬라이싱 해주면 문제 해결!

 

2. 프로그래머스 4문제

2.1. 주사위의 개수

def solution(box, n):
    
    width = box[0]//n
    length = box[1]//n
    height = box[2]//n
    
    return width*length*height

 

🤔 문제 풀이방법

  • 주사위 한 개를 박스에 넣을 때, 주사위의 가로&세로&높이 값이 중요해요
  • 그래서 주사위의 모서리 길이(n)를 각각 가로, 세로, 높이의 몫(//)을 구해줘요
  • 그 뒤 가로*세로*높이를 하면 문제 해결!

 

2.2. 문자열 정렬하기(1)

https://bmk0703.tistory.com/92

def solution(my_string):
    answer = []
    
    for i in my_string:
        if i.isdigit():
            answer.append(int(i))
            
    answer.sort()
    return answer

 

2.3. 합성수 찾기

def solution(n):
    answer = 0
    
    for j in range(2, n+1): # 2부터 시작하는 n+1까지의 범위
        num = 0 # 초기화
        for i in range(1, n+1): # 1부터 시작하는 n+1까지의 범위
            if j % i ==0:   # 약수 구하는 코드
                num +=1
            if num >=3: # num의 숫자가 3개 이상이 된다면 합성수를 의미
                answer +=1  # 그 경우만 answer에 +1을 해줌
                break
                
    return answer

 

약수의 개수가 3개 이상인 걸 합성수라고 해요

너무 오랜만에 다시 듣는 개념이라, 동공지진 일어났어요 🤣

 

2.4. 2차원으로 만들기

def solution(num_list, n):
    answer = []
    
    for i in range(0, len(num_list)//n):
        answer.append(num_list[n*i:(n*i)+n])

    return answer

 


오후(14:00 ~ 18:00), 저녁(19:00 ~ 21:00)

3. 머신러닝 비지도 학습

https://bmk0703.tistory.com/93


마무리

오늘은 머신러닝 마지막 과제인 비지도 학습을 해보았어요!

pairplot 그래프를 써서 데이터 분석하니까 너무 재밌더라구요!

한 번에 파악할 수 있는 구조로 돼있어서 예쁘더라구요, 진짜 재밌던 오늘이었어요 🤭

Machine_Learning_비지도학습.zip
0.23MB

 


목차

  1. CSV 파일 불러오기
    1. 데이터 분석
      1. data_info
      2. data_nulls
      3. pairplot
  2. 데이터셋 탐색 및 전처리
    1. 결측치 처리
    2. 엘보우 메서드
  3. 2D로 결과 시각화

주제, 목표, 학습 내용 

더보기

💡 주제

고객 세분화 분석

 

🎯 목표

고객 데이터셋을 사용하여 비슷한 행동을 보이는 고객 그룹을 식별합니다.

 

📖 학습 내용

  • 비지도 학습의 개념을 이해하고, 클러스터링 기법을 통해 데이터의 패턴을 발견하는 능력
  • 데이터 전처리 및 탐색: 비지도 학습에서의 데이터 준비 과정
  • 클러스터링 기법 적용: 다양한 클러스터링 알고리즘의 이해와 실습
  • 최적의 클러스터 수 결정: 모델의 성능을 평가하는 방법과 시각화 기술을 통해 인사이트 도출

 

과제 가이드 

더보기

1. 데이터셋 탐색 및 전처리:

  • 결측치 처리
  • 스케일링
    • 데이터의 스케일을 조정하기 위해 표준화(Standardization) 또는 정규화(Normalization)를 수행합니다

2. 클러스터링 기법 적용:

  • K-means
  • 계층적 군집화
  • DBSCAN 등의 알고리즘

3. 최적의 클러스터 수 결정:

  • 엘보우 방법 또는 실루엣 점수를 사용하여 최적의 클러스터 수를 찾습니다.

4. 결과 시각화:

  • 클러스터링 결과를 2D 또는 3D로 시각화하여 고객 세분화 결과를 분석합니다.
    • 시각화: matplotlib 또는 seaborn을 사용하여 클러스터를 색상으로 구분하여 시각화합니다. 2D 플롯을 사용하여 각 클러스터를 다른 색으로 표현합니다.

0. 자료 분석 

Mall_Customers.csv
0.00MB

 

  1. 쇼핑몰 고객의 정보
  2. 칼럼명
    1. CustomerID : 고객의 고유 식별 번호
    2. Gender :  고객의 성별 (Male: 남성, Female: 여성)
    3. Age : 고객의 나이
    4. Annual Income (k$) : 고객의 연간 소득을 천 달러 단위로 나타냄 (15 == $15,000)
    5. Spending Score (1-100) : 고객의 소비 점수를 1~100으로 점수를 나타냄
  3. 총 행 개수 : 200개
  4. 결측값 개수 : 0개

1. CSV 파일 불러오기

import pandas as pd
df_mall = pd.read_csv('Mall_Customers.csv')
df_mall

 

1.1. 데이터 분석

1.1.1. data_info

# 데이터 구조 확인_info
data_info = df_mall.info()

# 칼럼 수 : 총 5개
# 결측값 없음을 알 수 있음
# 데이터 타입이 int와 object가 있는 것을 알 수 있음

 

📚 자료 분석

  • RangeIndex: 200 entries, 0 to 199
    • 시작 번호가 0부터 끝 번호 199까지 해서 총 200개의 행이 있음을 알 수 있어요
  • Data columns (total 5 columns):
    • 총 5가지의 칼럼들이 있어요
  • dtypes: int64(4), object(1)
    • int형인 칼럼이 4개가 있고 object으로 칼럼이 1개 있어요

 

1.1.2. data_nulls

# 데이터 구조 확인_nulls
data_nulls = df_mall.isnull().sum()
data_nulls

 

📚 자료 분석

  • 모두 0이 출력된 것을 보아, 결측치는 없다는 것을 알 수 있어요

 

1.1.3. pairplot

# pairplot 그래프로 연관관계 확인하기
## x축과 y축이 같을 때는 막대 그래프로 표기된다는 것도 알 수 있음
import matplotlib.pyplot as plt
import seaborn as sns

sns.pairplot(df_mall)

 

📚 그래프 분석

  • 군집 수를 총 2가지 연관성으로 알 수 있어요
    1. CustomerID & Spending Score(1-100)(==소비 점수)
    2. Annual Income(k$)(==연간 소득) & Spending Score(1-100)
  • 군집 수가 5가지로 몰려있다는 것을 확인할 수 있었어요
    • 클러스트링 할 때 k=5으로 설정해야겠어요

2. 데이터셋 탐색 및 전처리

2.1. 결측치 처리

# 데이터 구조 확인_nulls
data_nulls = df_mall.isnull().sum()
data_nulls

 

📚 자료 분석

  • data_nulls = df_mall.isnull().sum()
    • 처리할 결측치는 없다고 뜨네요!

 

2.2. 엘보우 메서드

# 스케일링_K-means_엘보우
from sklearn.preprocessing import StandardScaler
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt

# 수치값으로 입력된 칼럼 모으기_나이, 연간 소득, 소비 점수
numerical_columns = ['Age', 'Annual Income (k$)', 'Spending Score (1-100)']
X = df_mall[numerical_columns]

# StandardScaler를 써서 데이터 확장하기
scaler = StandardScaler()
X_scaled = scaler.fit_transform(X)

# 엘보우 방법을 사용하여 최적의 K값 탐색
inertia = []
range_clusters = range(1, 11)

for k in range_clusters:
    kmeans = KMeans(n_clusters=k, random_state=42)
    kmeans.fit(X_scaled)
    inertia.append(kmeans.inertia_)

# 엘보우 메소드 생성하기
plt.figure(figsize=(8, 5))
plt.plot(range_clusters, inertia, marker='o', linestyle='--')
plt.title('Elbow Method')
plt.xlabel('Number of Clusters')
plt.ylabel('Inertia')
plt.show()

 

📚 자료 분석

  •  

 

3. 2D로 결과 시각화

# 엘보우를 봤을 때 X축이 5일 때가 엘보우로 보여서 클러스터를 5로 설정
optimal_k = 5
kmeans = KMeans(n_clusters=optimal_k, random_state=42)
kmeans_labels = kmeans.fit_predict(X_scaled)

# K-means 클러스팅 결과를 통해서 2D로 시각화 하기
plt.figure(figsize=(8, 6))
sns.scatterplot(x=X_scaled[:, 0], y=X_scaled[:, 1], hue=kmeans_labels, palette='viridis', s=50)
plt.title('K-means Clustering Results')
plt.xlabel(numerical_columns[0])
plt.ylabel(numerical_columns[1])
plt.legend(title='Cluster')
plt.show()

 

📚 자료 분석

  • 색상별로 군집이 있다고 판단하면 돼요
  • optimal_k = 5
    • 이 코드가 클러스터 수를 의미하는 것이라 보면 돼요
    • kmeans = KMeans(n_clusters=optimal_k, random_state=42)
      • 이렇게 n_clusters로도 명시돼 있어요!
  • plt.figure(figsize=(8, 6))
    • 그래프 크기(가로, 세로)를 설정하는 코드예요
  • sns.scatterplot(x=X_scaled[:, 0], y=X_scaled[:, 1], hue=kmeans_labels, palette='viridis', s=50)
    • x=X_scaled[:, 0]
      • x축 값을 설정하는 코드예요 [:, 0]로 범위를 설정해 주었어요
    • y=X_scaled[:, 1]
      • y축 값을 설정하는 코드예요 [:, 1]로 범위를 설정해 주었어요

요약

  1. 연관성 분석
    • CustomerID & Spending Score(1-100)(==소비 점수)
    • Annual Income(k$)(==연간 소득) & Spending Score(1-100)
      • 이 두 자리 조합으로 군집 수를 확인할 수 있었음
  2. pairplot 그래프
    • 각 칼럼마다의 관계를 그래프로 표현하여 데이터 분석에 용이하였음
    • 군집 수가 몇 개인지 한눈에 알아볼 수 있었던 그래프
  3. 2D를 통한 결과 시각화
    • 색상별로 군집이 어떻게 분포되어 있는지 확인할 수 있음

결과

고객 세분화 분석을 해보았을 때, 세분화는 총 5가지로 분류됨을 알 수 있음


 

'과제' 카테고리의 다른 글

[머신러닝_지도학습] 주택 가격 예측  (0) 2024.12.23

def solution(my_string):
    answer = []
    
    for i in my_string:
        if i.isdigit():
            answer.append(int(i))
            
    answer.sort()
    return answer

 

문제를 풀면 풀수록 점점점 문제 패턴이 보이게 되는 거 같아요

어떻게 문제를 접근할지, 어떤 함수를 쓸지가 바로바로 떠올라서 매우 재밌습니다 ㅎㅎㅎ

역시,

공부를 할 때 제일 빨리 성장하는 건

시행착오 방식 만한게 없는 거 같아요


깨달은 점 

🤔 몰랐던 점

  • 함수 isdigit() 함수를 처음 써봤어요
    • 냅다 갖다 붙여도 작동 잘하더라구요
  • append() 함수가, 문자열형만 기입을 한다는 것을 알게 되었어요
    • int형으로 형변환을 해줘야 정답처럼 출력되더라구요

목차

  1. Jupyter Notebook 설치
    1. 파이썬이 설치돼 있는지 확인
    2. Jupyter Notebook 설치
  2. Jupyter Notebook 실행
  3. Jupyter Notebook 가상 환경에 연결 (선택 사항)
    1. 가상 환경 만들기 (만약 아직 만들지 않았다면)
    2. 가상 환경 활성화
    3. ipykernel 설치
    4. 가상 환경을 Jupyter 커널로 추가
    5. Jupyter Notebook 실행
  4. Jupyter Notebook에서 가상 환경 선택
  5. Jupyter Notebook 종료
  6. 요약

1. Jupyter Notebook 설치 

1.1. 파이썬이 설치돼 있는지 확인

python --version

# 또는

python3 --version
  1. 터미널에서 파이썬이 제대로 설치돼 있는지 확인
  2. 파이썬 버전이 출력된다면 파이썬이 정상적으로 설치된 것
  3. 만약 설치되어 있지 않다면 🔗Python 공식 홈페이지

 

1.2. Jupyter Notebook 설치

pip install jupyter
  • 터미널에서 명령어 실행
  • pip 패키지 관리자를 사용하여 Jupyter Notebook 설치

2. Jupyter Notebook 실행 

jupyter notebook
  • 터미널(또는 명령 프롬프트)에서 위의 명령어로 Jupyter Notebook을 실행
  • 이 명령어를 실행하면 자동으로 웹 브라우저가 열리면서 대시보드가 나타남
  • 대시보드에서 새로운 노트북을 만들거나 기존 노트북을 열 수 있음

 

3. Jupyter Notebook 가상 환경에 연결 (선택 사항)

-> 가상 환경을 사용하고 있고, 가상 환경에서 Jupyter Notebook을 실행하고 싶을 시.

3.1. 가상 환경 만들기 (만약 아직 만들지 않았다면)

# 가상 환경 만들기
python3 -m venv myenv

 

3.2. 가상 환경 활성화

  • Windows
myenv\Scripts\activate

 

  • Mac/Linux
source myenv/bin/activate

 

3.3. ipykernel 설치

pip install ipykernel
  • 가상 환경에서 ipykernel을 설치하면 해당 환경을 Jupyter Notebook에서 사용할 수 있게 해줌

 

3.4. 가상 환경을 Jupyter 커널로 추가

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  • 위의 명령어로 가상 환경을 Jupyter에 커널로 추가함
  • --name=myenv : 커널 이름으로 사용할 가상 환경 이름을 지정합니다.
  • --display-name "Python (myenv)" : Jupyter Notebook에서 표시될 이름입니다.

 

3.5. Jupyter Notebook 실행

jupyter notebook
  1. 가상 환경을 추가한 후, Jupyter Notebook을 다시 실행
  2. 브라우저에서 Jupyter Notebook을 염
  3. 새 노트북을 만들 때 Kernel 메뉴에서 "Python (myenv)"이라는 커널을 선택할 수 있음
  4. 가상 환경을 Jupyter Notebook에서 사용할 수 있음

 

4. Jupyter Notebook에서 가상 환경 선택 

  1. Jupyter Notebook을 실행한 후, 새 노트북을 만들거나 기존 노트북을 염
  2. 상단 메뉴에서 Kernel -> Change Kernel을 클릭
  3. 커널 목록에서 원하는 가상 환경(예: "Python (myenv)")을 선택
  4. 그러면 Jupyter Notebook이 해당 가상 환경에서 실행됨

 

5. Jupyter Notebook 종료 

  • 터미널에서 Ctrl + C를 눌러서 서버를 중지할 수 있음
  • 브라우저에서 직접 "Quit" 버튼을 눌러서 종료 할 수 있음

6. 요약 

1. Jupyter Notebook 설치:

pip install jupyter

 

2. Jupyter Notebook 실행:

jupyter notebook

 

3. 가상 환경에서 Jupyter Notebook 사용:

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"

 

4. Jupyter Notebook에서 커널을 가상 환경으로 변경:

  •  Kernel   Change Kernel  → "Python (myenv)"

'공부' 카테고리의 다른 글

[공부] Jupyter Notebook 가상 환경 설정하기_맥(MacOS)  (4) 2024.12.27

 


목차

  1. 가상 환경 만들기
    1. 가상 환경 생성
    2. 가상 환경 활성화
  2. Jupyter Notebook에서 가상 환경 사용하기
  3. 요약
  4. 추가 Tip
    1. pip list : pip의 list 확인 명령어
    2. deactivate : 가상환경 종료 <-> source 가상환경/bin/activate : 가상환경 실행
    3. sudo rm -rf "가상 환경 이름" : 가상 환경 삭제
  5. 가상 환경을 만들어야 하는 이유

1. 가상 환경 만들기 

1.1. 가상 환경 생성

  • 터미널을 열고, 원하는 폴더에 가상 환경을 생성
# 원하는 폴더로 이동 후 가상 환경 생성
cd /path/to/your/project/directory

# 가상 환경 생성
python3 -m venv myenv

 

 

myenv는 가상 환경 이름이기 때문에 원하는 이름으로 변경 가능 (영어로만 입력)

 

1.2. 가상 환경 활성화

source myenv/bin/activate

 

활성화 시, 터미널 프롬프트에 (myenv)의 가상 환경 이름이 표시됨

 

1.3. 필요한 패키지 설치

pip install jupyter ipykernel

 

  • 가상 환경이 활성화된 상태에서 필요한 패키지들을 설치할 수 있음
    • ipykernel
    • jupyter

 

2. Jupyter Notebook에서 가상 환경 사용하기 

2.1. 가상 환경을 Jupyter에서 커널로 추가

Jupyter Notebook에서 사용할 수 있도록 가상 환경을 커널로 등록해야 함

python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  • --name=myenv : 커널 이름을 설정(이 이름은 내부적으로 사용됨
  • --display-name "Python (myenv)" : Jupyter Notebook에서 사용자에게 보여지는 이름임

 

2.2. Jupyter Notebook 실행

jupyter notebook

 

  • 이제 Jupyter Notebook을 실행
    1. 브라우저에서 Jupyter Notebook 열림
    2. 새 노트북을 만들 때 Kernel 메뉴에서 Python (myenv)라는 이름의 커널을 선택할 수 있음
    3. 이렇게 하면 생성한 가상 환경을 Jupyter Notebook에서 사용할 수 있음

요약

  1. 가상 환경 생성: python3 -m venv myenv
  2. 가상 환경 활성화: source myenv/bin/activate (Mac/Linux)
  3. Jupyter에서 사용할 수 있도록 ipykernel 설치: pip install jupyter ipykernel
  4. 가상 환경을 Jupyter 커널에 등록: python -m ipykernel install --user --name=myenv --display-name "Python (myenv)"
  5. Jupyter Notebook 실행: jupyter notebook

추가 Tip

명령어 설명 비 고
pip list 설치된 pip의 list를 확인하는 명령어    
deactivate 가상 환경 종료 <-> "가상 환경 명"/bin/activate
sudo rm -rf "가상 환경 이름" 가상 환경 삭제  

 

🤔 가상 환경을 만들어야 하는 이유

  1. 하나의 컴퓨터로 여러 가지 개발을 할 수 있음
  2. 개발별로 관리가 쉬워짐

'공부' 카테고리의 다른 글

[공부] Jupyter Notebook 설치, 실행, 확인, 종료  (1) 2024.12.28

+ Recent posts