[Linux]부트캠프 - 파일 및 폴더 생성
파일 및 폴더 생성
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
# 모듈 import
import numpy as np
import pandas as pd
# 설정 변경 코드
# 변수 명이 두번 이상 출력되어도 모두 콘솔에서 보여줄 것
from IPython.core.interactiveshell import InteractiveShell
InteractiveShell.ast_node_interactivity="all"
# InteractiveShell.ast_node_interactivity : 'all' | 'last' | 'last_expr' | 'none' (기본값은 'last_expr')
# 시리즈 생성
s = pd.Series(range(10))
s[3] = np.NaN # 결측치 nan를 이용하여 NaN에 저장
s
0 0.0
1 1.0
2 2.0
3 NaN
4 4.0
5 5.0
6 6.0
7 7.0
8 8.0
9 9.0
dtype: float64
# 시리즈 개수 세기
s.count() # NaN은 세지 않는다.
9
난수 발생시켜 데이터프레임 생성
# 고정 시드값
np.random.seed(10)
np.random.randint(5, size = 4) # 0부터 5 사이의 랜덤 정수를 4개(size=4) 생성
array([1, 4, 0, 1])
# 변경 시드값
import time
np.random.seed(int(time.time())) # 현재 시간을 seed 값으로 지정
np.random.randint(5, size=4)
array([2, 3, 4, 4])
np.random.randint(5, size=4)
array([1, 1, 1, 4])
np.random.seed(3)
df1 = pd.DataFrame(np.random.randint(5, size=(4,4)))
df1
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3 |
1 | 0 | 0 | 0 | 3 |
2 | 2 | 3 | 1 | 1 |
3 | 2 | 0 | 4 | 4 |
df1.count() # 열에 해당하는 결측치를 제외한 개수
0 4
1 4
2 4
3 4
dtype: int64
=> 데이터 프레임이므로 각 열의 원소의 갯수를 시리즈 형태로 반환
# NaN 부여
df1.iloc[2,3] = np.NaN # 결측치가 생기며 열 전체가 실수형으로 바뀐다.
df1
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3.0 |
1 | 0 | 0 | 0 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
df1.count() # 3열의 결측치(NaN)을 제외해서 3개
0 4
1 4
2 4
3 3
dtype: int64
실전 데이터에 count() 적용
import seaborn as sns # seaborn 패키지 : 그래프 패키지
titanic = sns.load_dataset('titanic')
titanic
titanic.head() # 앞 5(default)개 행
titanic.tail() # 뒤 5개 행
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
3 | 1 | 1 | female | 35.0 | 1 | 0 | 53.1000 | S | First | woman | False | C | Southampton | yes | False |
4 | 0 | 3 | male | 35.0 | 0 | 0 | 8.0500 | S | Third | man | True | NaN | Southampton | no | True |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
886 | 0 | 2 | male | 27.0 | 0 | 0 | 13.0000 | S | Second | man | True | NaN | Southampton | no | True |
887 | 1 | 1 | female | 19.0 | 0 | 0 | 30.0000 | S | First | woman | False | B | Southampton | yes | True |
888 | 0 | 3 | female | NaN | 1 | 2 | 23.4500 | S | Third | woman | False | NaN | Southampton | no | False |
889 | 1 | 1 | male | 26.0 | 0 | 0 | 30.0000 | C | First | man | True | C | Cherbourg | yes | True |
890 | 0 | 3 | male | 32.0 | 0 | 0 | 7.7500 | Q | Third | man | True | NaN | Queenstown | no | True |
891 rows × 15 columns
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
3 | 1 | 1 | female | 35.0 | 1 | 0 | 53.1000 | S | First | woman | False | C | Southampton | yes | False |
4 | 0 | 3 | male | 35.0 | 0 | 0 | 8.0500 | S | Third | man | True | NaN | Southampton | no | True |
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
886 | 0 | 2 | male | 27.0 | 0 | 0 | 13.00 | S | Second | man | True | NaN | Southampton | no | True |
887 | 1 | 1 | female | 19.0 | 0 | 0 | 30.00 | S | First | woman | False | B | Southampton | yes | True |
888 | 0 | 3 | female | NaN | 1 | 2 | 23.45 | S | Third | woman | False | NaN | Southampton | no | False |
889 | 1 | 1 | male | 26.0 | 0 | 0 | 30.00 | C | First | man | True | C | Cherbourg | yes | True |
890 | 0 | 3 | male | 32.0 | 0 | 0 | 7.75 | Q | Third | man | True | NaN | Queenstown | no | True |
#titanic df의 각 열의 원소 개수를 산출 - count() 함수 이용
titanic.count()
survived 891
pclass 891
sex 891
age 714
sibsp 891
parch 891
fare 891
embarked 889
class 891
who 891
adult_male 891
deck 203
embark_town 889
alive 891
alone 891
dtype: int64
# 항상 같은 값이 나오도록 생성
np.random.seed(1)
# 데이터 마지막 부분 확인
s2 = pd.Series(np.random.randint(6, size=100))
s2
0 5
1 3
2 4
3 0
4 1
..
95 4
96 5
97 2
98 4
99 3
Length: 100, dtype: int32
# 데이터 길이
len(s2)
100
# 0,1,2,3,4,5 각 값이 몇번 나왔는지 확인
s2.value_counts()
1 22
0 18
4 17
5 16
3 14
2 13
dtype: int64
# titanic df 의 alive 열 : 생존여부가 yes/no 로 표시 되어 있음
# 문자열(Object type)
titanic['alive'].dtype
#
titanic['alive'].value_counts()
dtype('O')
no 549
yes 342
Name: alive, dtype: int64
# 생존자 사망자 비율 계산(normalize = True 가 비율로 변환)
titanic['alive'].value_counts(normalize = True)
titanic['alive'].value_counts(normalize = True) * 100
no 0.616162
yes 0.383838
Name: alive, dtype: float64
no 61.616162
yes 38.383838
Name: alive, dtype: float64
# 예제 df
df = pd.DataFrame(np.array([2,2,4,0,4,0,6,0]).reshape(4,2),
index = ['falcon','dog','cat','ant'],
columns = ['num_legs','num_wings'])
df
num_legs | num_wings | |
---|---|---|
falcon | 2 | 2 |
dog | 4 | 0 |
cat | 4 | 0 |
ant | 6 | 0 |
df.value_counts()
num_legs num_wings
4 0 2
6 0 1
2 2 1
dtype: int64
# 예제 df
df1
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3.0 |
1 | 0 | 0 | 0 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
df1.value_counts() # NaN은 제외
0 1 2 3
2 0 4 4.0 1
1 3.0 1
0 0 0 3.0 1
dtype: int64
df1.value_counts().sort_index()
df1.value_counts().sort_index().shape
df1.value_counts().sort_index().index
0 1 2 3
0 0 0 3.0 1
2 0 1 3.0 1
4 4.0 1
dtype: int64
(3,)
MultiIndex([(0, 0, 0, 3.0),
(2, 0, 1, 3.0),
(2, 0, 4, 4.0)],
names=[0, 1, 2, 3])
# column : 시리즈 -> value_count() 적용가능
df1[0].value_counts()
df1.iloc[2,3] = np.nan
df1
df1[3].value_counts()
2 3
0 1
Name: 0, dtype: int64
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3.0 |
1 | 0 | 0 | 0 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
3.0 2
4.0 1
Name: 3, dtype: int64
#예제 시리즈
s2
0 5
1 3
2 4
3 0
4 1
..
95 4
96 5
97 2
98 4
99 3
Length: 100, dtype: int32
# 결과 인덱스가 순서 없이 반환
s2.value_counts()
#인덱스 기준 정렬
s2.value_counts().sort_index()
1 22
0 18
4 17
5 16
3 14
2 13
dtype: int64
0 18
1 22
2 13
3 14
4 17
5 16
dtype: int64
#인덱스 기준 내림차순 정렬
s2.value_counts().sort_index(ascending = False) # 오름차순을 False하면 내림차순이 된다.
5 16
4 17
3 14
2 13
1 22
0 18
dtype: int64
#값을 기준으로 오름차순 정렬
s2.value_counts().sort_values()
2 13
3 14
5 16
4 17
0 18
1 22
dtype: int64
#값을 기준으로 내림차순 정렬
s2.value_counts().sort_values(ascending=False)
1 22
0 18
4 17
5 16
3 14
2 13
dtype: int64
s2.sort_values() # 데이터 개수 순으로
57 0
38 0
39 0
85 0
28 0
..
71 5
40 5
46 5
11 5
0 5
Length: 100, dtype: int32
df1
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3.0 |
1 | 0 | 0 | 0 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
# df1.sort_values() #sort_values() missing 1 required positional argument: 'by'
df1.sort_values(by=0)
0 | 1 | 2 | 3 | |
---|---|---|---|---|
1 | 0 | 0 | 0 | 3.0 |
0 | 2 | 0 | 1 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
df1.sort_values(by=0, ascending = False)
0 | 1 | 2 | 3 | |
---|---|---|---|---|
0 | 2 | 0 | 1 | 3.0 |
2 | 2 | 3 | 1 | NaN |
3 | 2 | 0 | 4 | 4.0 |
1 | 0 | 0 | 0 | 3.0 |
#1열을 기준으로 정렬, 1열 값이 동일 할때는 2열값을 기준으로 정렬
df1.sort_values(by=[1,2])
0 | 1 | 2 | 3 | |
---|---|---|---|---|
1 | 0 | 0 | 0 | 3.0 |
0 | 2 | 0 | 1 | 3.0 |
3 | 2 | 0 | 4 | 4.0 |
2 | 2 | 3 | 1 | NaN |
# 예제 df 확인
df
num_legs | num_wings | |
---|---|---|
falcon | 2 | 2 |
dog | 4 | 0 |
cat | 4 | 0 |
ant | 6 | 0 |
df.sort_values(by='num_wings') # num_wings 기준으로 오름차순
num_legs | num_wings | |
---|---|---|
dog | 4 | 0 |
cat | 4 | 0 |
ant | 6 | 0 |
falcon | 2 | 2 |
# 인덱스 기준 정렬
df.sort_index()
# 인덱스 기준 내림차순 정렬
df.sort_index(ascending=False)
num_legs | num_wings | |
---|---|---|
ant | 6 | 0 |
cat | 4 | 0 |
dog | 4 | 0 |
falcon | 2 | 2 |
num_legs | num_wings | |
---|---|---|
falcon | 2 | 2 |
dog | 4 | 0 |
cat | 4 | 0 |
ant | 6 | 0 |
타이타닉 데이터에서 승객의 성별(sex) 인원수, 나이별(age) 인원수, 선실별(class) 인원수, 사망/생존(alive)인원수를 구하시오.
성별 인원수는 인덱스 기준으로 정렬하고, 나이별 인원수는 값 기준으로 정렬하며, 나머지는 임의 기준으로 선정하여 정렬 하시오.
titanic
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
3 | 1 | 1 | female | 35.0 | 1 | 0 | 53.1000 | S | First | woman | False | C | Southampton | yes | False |
4 | 0 | 3 | male | 35.0 | 0 | 0 | 8.0500 | S | Third | man | True | NaN | Southampton | no | True |
... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... | ... |
886 | 0 | 2 | male | 27.0 | 0 | 0 | 13.0000 | S | Second | man | True | NaN | Southampton | no | True |
887 | 1 | 1 | female | 19.0 | 0 | 0 | 30.0000 | S | First | woman | False | B | Southampton | yes | True |
888 | 0 | 3 | female | NaN | 1 | 2 | 23.4500 | S | Third | woman | False | NaN | Southampton | no | False |
889 | 1 | 1 | male | 26.0 | 0 | 0 | 30.0000 | C | First | man | True | C | Cherbourg | yes | True |
890 | 0 | 3 | male | 32.0 | 0 | 0 | 7.7500 | Q | Third | man | True | NaN | Queenstown | no | True |
891 rows × 15 columns
# 타이타닉 승객에 대하여 성별 인원수 구하기
titanic['sex'].value_counts().sort_index()
female 314
male 577
Name: sex, dtype: int64
# 타이타닉 승객에 대하여 나이별 인원수 구하기
titanic['age'].value_counts().sort_values()
0.42 1
20.50 1
24.50 1
0.67 1
14.50 1
..
30.00 25
19.00 25
18.00 26
22.00 27
24.00 30
Name: age, Length: 88, dtype: int64
# 타이타닉 승객에 대하여 선실별 인원수 구하기
#파이썬에서는 형태 분류 class로 작업
titanic['class'].value_counts().sort_values(ascending=True)
Second 184
First 216
Third 491
Name: class, dtype: int64
#타이타닉 승객에 대하여 사망/생존 인원수 구하기
titanic['alive'].value_counts().sort_index(ascending=False)
yes 342
no 549
Name: alive, dtype: int64
#타이타닉 승객에 대하여 사망/생존 인원수 구하기
#.연산자 이용해서 data에 접근
titanic.alive.value_counts().sort_index(ascending=False)
yes 342
no 549
Name: alive, dtype: int64
데이터 프레임 생성
np.random.seed(1)
df2 = pd.DataFrame(np.random.randint(10,size=(4,8)))
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 |
각 행의 합계 계산
# 각 행의 합계를 구할때는 sum(axis=1)
df2.sum(axis=1) # 시리즈 형태로 반환
0 35
1 34
2 41
3 42
dtype: int64
각 열의 합계 계산
# 각 열의 합계를 구할때는 sum(axis=0)
df2.sum(axis=0)
0 24
1 33
2 25
3 24
4 15
5 10
6 5
7 16
dtype: int64
# axis인수 생략 : df.sum() : 기본값이 0이므로 열방향 합계를 구한다.
df2.sum() # default(axis=0)
0 24
1 33
2 25
3 24
4 15
5 10
6 5
7 16
dtype: int64
# 예제 DF 확인
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 |
# df의 기본 함수 : min(), max(), mean()
# df2.mean()
# df2.min()
# df2.max()
df2.mean(axis=0)
df2.min(axis=0)
df2.max(axis=0)
0 6.00
1 8.25
2 6.25
3 6.00
4 3.75
5 2.50
6 1.25
7 4.00
dtype: float64
0 4
1 7
2 2
3 4
4 0
5 0
6 0
7 1
dtype: int32
0 9
1 9
2 9
3 9
4 9
5 7
6 4
7 7
dtype: int32
# 각 행의 합계를 새로운 열로 추가
df2['RowSum'] = df2.sum(axis=1)
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
#새로운 행 추가(loc 인덱서 사용이 가장 간단함)
#각 열의 합계를 구한후에 행으로 추가
#행 이름은 ColTotal
df2.loc['ColTotal'] = df2.sum(axis=0)
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
# 각 행의 합계 계산
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
# - df.drop('행이름',0) : 행삭제
# - 행삭제 후 df로 결과를 반환
df2.drop('ColTotal', 0)
df2 # ColTotal의 원본은 살아있다.
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
# df.drop('컬럼명(열이름)',1) 열삭제 - 삭제 후 df로 반환
# 원본반영안됨
df2.drop('RowSum', 1)
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | |
---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 5 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
: NaN 값 처리 함수
# df2에 결측치 값 적용
df2.iloc[0,0] = np.nan
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | NaN | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
# NaN이 포함된 행을 삭제
df2.dropna()
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | NaN | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
#NaN이 포함된 열삭제
df2.dropna(axis=1)
df2
1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|
0 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | NaN | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
df2
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | NaN | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
결측치를 0으로 변경
df2.fillna(0)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | NaN | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
: fillna() 적용 후 결과값은 실수가 됨 (NaN이 실수형)
결측치를 1로 변경
df2.fillna(1)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 1.0 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6.0 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4.0 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9.0 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24.0 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
# NaN 이 실수형이어서 fillna 후 결과값이 실수 임
# 정수 변환 함수 astype(데이터형)
df2.fillna(0).astype(int)
df2.fillna(0).astype(float)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 0 | 8 | 9 | 5 | 0 | 0 | 1 | 7 | 35 |
1 | 6 | 9 | 2 | 4 | 5 | 2 | 4 | 2 | 34 |
2 | 4 | 7 | 7 | 9 | 1 | 7 | 0 | 6 | 41 |
3 | 9 | 9 | 7 | 6 | 9 | 1 | 0 | 1 | 42 |
ColTotal | 24 | 33 | 25 | 24 | 15 | 10 | 5 | 16 | 152 |
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | RowSum | |
---|---|---|---|---|---|---|---|---|---|
0 | 0.0 | 8.0 | 9.0 | 5.0 | 0.0 | 0.0 | 1.0 | 7.0 | 35.0 |
1 | 6.0 | 9.0 | 2.0 | 4.0 | 5.0 | 2.0 | 4.0 | 2.0 | 34.0 |
2 | 4.0 | 7.0 | 7.0 | 9.0 | 1.0 | 7.0 | 0.0 | 6.0 | 41.0 |
3 | 9.0 | 9.0 | 7.0 | 6.0 | 9.0 | 1.0 | 0.0 | 1.0 | 42.0 |
ColTotal | 24.0 | 33.0 | 25.0 | 24.0 | 15.0 | 10.0 | 5.0 | 16.0 | 152.0 |
열 또는 행에 동일한 연산 반복 적용할 때
데이터프레임 생성
# 예제 df 생성
df3 = pd.DataFrame({
'a':[1,3,4,3,4],
'b':[2,3,1,4,5],
'c':[1,5,2,4,4]
})
df3
a | b | c | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 4 | 4 |
4 | 4 | 5 | 4 |
데이터프레임의 각 열에 sum() 함수 적용
# df3의 각 열에 대해 np.sum 함수를 반복 적용
# sum함수는 열 또는 행단위로 적용되는 함수여서 각 열별로 적용 됨
df3.sum(axis=0)
df3.apply(np.sum, 0)
df3.apply(np.sum)
a 15
b 15
c 16
dtype: int64
a 15
b 15
c 16
dtype: int64
a 15
b 15
c 16
dtype: int64
데이터프레임의 각 행에 sum() 함수 적용
# df3의 각 행에 대해 np.sum 함수를 반복 적용
# sum함수는 열 또는 행단위로 적용되는 함수여서 각 행별로 적용 됨
df3.sum(axis=1)
df3.apply(np.sum,1)
0 4
1 11
2 7
3 11
4 13
dtype: int64
0 4
1 11
2 7
3 11
4 13
dtype: int64
데이터프레임의 각 원소의 제곱값을 계산
# df3의 각 열별 모든 원소에 대하여 np.square 함수 적용(제곱값)
# square 함수는 원소에 적용이 가능 한 함수이므로 열별로 원소에 대하여 벡터화 연산을 진행
df3.apply(np.square)
a | b | c | |
---|---|---|---|
0 | 1 | 4 | 1 |
1 | 9 | 9 | 25 |
2 | 16 | 1 | 4 |
3 | 9 | 16 | 16 |
4 | 16 | 25 | 16 |
데이터프레임의 행별로 각 원소의 제곱값을 계산
# 행별 각 원소에 대하여 np.square 함수 연산을 진행
## 원소에 대하여 진행하는 함수여서 열/행 모두 동일한 결과
df3.apply(np.square,1)
a | b | c | |
---|---|---|---|
0 | 1 | 4 | 1 |
1 | 9 | 9 | 25 |
2 | 16 | 1 | 4 |
3 | 9 | 16 | 16 |
4 | 16 | 25 | 16 |
# 집합데이터의 최대값과 최소값의 차이를 구하는 lambda 함수
diff = lambda x:x.max()-x.min()
# df3의 a열에 최대값과 최소값의 차이를 위에서 생성한 lambda 함수를 이용하여 구하시오
diff(df3['a'])
3
# apply 함수를 이용하여 위에서 생성한 lambda diff를 df3의 모든 열에 반복 적용하여 모든 열의 최대값과 최소값의 차이를 구하시오
df3.apply(diff,0)
a 3
b 4
c 4
dtype: int64
# apply 함수를 이용하여 위에서 생성한 lambda diff를 df3의 모든 행에 반복 적용하여 모든 행의 최대값과 최소값의 차이를 구하시오
df3.apply(diff,1)
0 1
1 2
2 3
3 1
4 1
dtype: int64
# 다른 방법 : 직접 연산
# df3의 각 열에 대하여 최대값과 최소값의 차이를 구하시오
df3.max(axis=0) - df3.min(axis=0)
a 3
b 4
c 4
dtype: int64
데이터프레임 각 열의 데이터에 대한 범주별 빈도 계산
# df3의 각 열의 데이터에 대해서 카테고리 세기를 수행하시오
df3
a | b | c | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 4 | 4 |
4 | 4 | 5 | 4 |
# apply()함수를 사용해서 value_counts()적용 test
# df3['a'].value_counts()
df3.apply(pd.value_counts)
# a열 : 1 - 1번, 2 - 나타나지 않음(NaN), 3 - 2번, 4 2번 , 5 - 나타나지 않음(NaN)
a | b | c | |
---|---|---|---|
1 | 1.0 | 1 | 1.0 |
2 | NaN | 1 | 1.0 |
3 | 2.0 | 1 | NaN |
4 | 2.0 | 1 | 2.0 |
5 | NaN | 1 | 1.0 |
각 열의 데이터에 대한 범주별 빈도 계산 후, NaN값은 0으로 변환하고 전체 데이터 타입을 정수로 변환
# df3 각 열 데이터의 빈도를 세고, NaN값은 0으로 변환 전체 데이터 타입을 정수로 변환하시오.
df3.apply(pd.value_counts).fillna(0).astype(int)
a | b | c | |
---|---|---|---|
1 | 1 | 1 | 1 |
2 | 0 | 1 | 1 |
3 | 2 | 1 | 0 |
4 | 2 | 1 | 2 |
5 | 0 | 1 | 1 |
: 데이터값을 카테고리 값으로 변환
구간을 나눌 실제 값 : 관측 데이터
ages=[0,0.5,4,6,4,5,2,10,21,23,37,15,38,31,61,20,41,31,100]
구간 경계값, 범주 리벨 설정
# 구간 경계값 설정
bins = [0, 4, 15, 25, 35, 60, 100]
#label : 카테고리 명
labels = ['영유아', '미성년자', '청년', '중년','장년','노년']
# 0 < 영유아 <= 4
# 4 < 미성년자 <= 15
카테고리 생성 함수 cut() 적용
# 함수 적용해서 카테고리 생성
catAge = pd.cut(ages, bins, labels = labels)
catAge
ages
list(catAge)
[NaN, '영유아', '영유아', '미성년자', '영유아', ..., '노년', '청년', '장년', '중년', '노년']
Length: 19
Categories (6, object): ['영유아' < '미성년자' < '청년' < '중년' < '장년' < '노년']
[0, 0.5, 4, 6, 4, 5, 2, 10, 21, 23, 37, 15, 38, 31, 61, 20, 41, 31, 100]
[nan,
'영유아',
'영유아',
'미성년자',
'영유아',
'미성년자',
'영유아',
'미성년자',
'청년',
'청년',
'장년',
'미성년자',
'장년',
'중년',
'노년',
'청년',
'장년',
'중년',
'노년']
type(catAge)
pandas.core.arrays.categorical.Categorical
참고: Categorical 클래스 객체
카테고리명 속성 : Categorical.categories
코드 속성 : Categorical.codes
# 카테고리 속성
catAge.categories
Index(['영유아', '미성년자', '청년', '중년', '장년', '노년'], dtype='object')
# 코드 속성
catAge.codes
# -1로 나오는 데이터는 결측치를 나타냄
array([-1, 0, 0, 1, 0, 1, 0, 1, 2, 2, 4, 1, 4, 3, 5, 2, 4,
3, 5], dtype=int8)
# age 리스트를 이용해서 df 생성
df4 = pd.DataFrame(ages, columns=['ages'])
df4
ages | |
---|---|
0 | 0.0 |
1 | 0.5 |
2 | 4.0 |
3 | 6.0 |
4 | 4.0 |
5 | 5.0 |
6 | 2.0 |
7 | 10.0 |
8 | 21.0 |
9 | 23.0 |
10 | 37.0 |
11 | 15.0 |
12 | 38.0 |
13 | 31.0 |
14 | 61.0 |
15 | 20.0 |
16 | 41.0 |
17 | 31.0 |
18 | 100.0 |
df4['age_cut']=pd.cut(df4.ages, bins, labels=labels)
df4
ages | age_cut | |
---|---|---|
0 | 0.0 | NaN |
1 | 0.5 | 영유아 |
2 | 4.0 | 영유아 |
3 | 6.0 | 미성년자 |
4 | 4.0 | 영유아 |
5 | 5.0 | 미성년자 |
6 | 2.0 | 영유아 |
7 | 10.0 | 미성년자 |
8 | 21.0 | 청년 |
9 | 23.0 | 청년 |
10 | 37.0 | 장년 |
11 | 15.0 | 미성년자 |
12 | 38.0 | 장년 |
13 | 31.0 | 중년 |
14 | 61.0 | 노년 |
15 | 20.0 | 청년 |
16 | 41.0 | 장년 |
17 | 31.0 | 중년 |
18 | 100.0 | 노년 |
: 구간 경계선을 지정하지 않고 데이터의 사분위수(quantile) 기준으로 분할
형식 : pd.qcut(data,구간수,labels=[d1,d2….])
각 구간의 label은 Q1,Q2,Q3,Q4 로 설정
# 랜덤정수 생성 : 범위 0-19, size =20
# seed 설정해서 재 실행해도 랜덤정수가 변하지 않도록 생성
# seed 설정
np.random.seed(2)
# 랜덤정수 생성
data = np.random.randint(20, size = 20)
data
array([ 8, 15, 13, 8, 11, 18, 11, 8, 7, 2, 17, 11, 15, 5, 7, 3, 6,
4, 10, 11])
qcutData = pd.qcut(data, 4, labels=['Q1','Q2','Q3','Q4'])
qcutData
['Q2', 'Q4', 'Q4', 'Q2', 'Q3', ..., 'Q1', 'Q1', 'Q1', 'Q3', 'Q3']
Length: 20
Categories (4, object): ['Q1' < 'Q2' < 'Q3' < 'Q4']
#값이 겹치면 같은 구간으로 들어가게 된다.
np.sort(data)
qcutData.value_counts()
array([ 2, 3, 4, 5, 6, 7, 7, 8, 8, 8, 10, 11, 11, 11, 11, 13, 15,
15, 17, 18])
Q1 5
Q2 5
Q3 5
Q4 5
dtype: int64
df5 = pd.DataFrame(data, columns=['data'])
df5['qcut'] = qcutData
df5
data | qcut | |
---|---|---|
0 | 8 | Q2 |
1 | 15 | Q4 |
2 | 13 | Q4 |
3 | 8 | Q2 |
4 | 11 | Q3 |
5 | 18 | Q4 |
6 | 11 | Q3 |
7 | 8 | Q2 |
8 | 7 | Q2 |
9 | 2 | Q1 |
10 | 17 | Q4 |
11 | 11 | Q3 |
12 | 15 | Q4 |
13 | 5 | Q1 |
14 | 7 | Q2 |
15 | 3 | Q1 |
16 | 6 | Q1 |
17 | 4 | Q1 |
18 | 10 | Q3 |
19 | 11 | Q3 |
: 타이타닉호 승객을 사망자와 생존자 그룹으로 나누고(alive), 각 그룹에 대해 미성년자, 청년, 중년, 장년, 노년 승객의 비율을 구하시오.
# Warning 표시 안하도록 설정
import warnings
warnings.filterwarnings('ignore')
타이타닉 데이터셋 로딩
# 타이타닉 승객 dataset 읽어오기
import seaborn as sns
titanic = sns.load_dataset('titanic')
titanic.head()
survived | pclass | sex | age | sibsp | parch | fare | embarked | class | who | adult_male | deck | embark_town | alive | alone | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 3 | male | 22.0 | 1 | 0 | 7.2500 | S | Third | man | True | NaN | Southampton | no | False |
1 | 1 | 1 | female | 38.0 | 1 | 0 | 71.2833 | C | First | woman | False | C | Cherbourg | yes | False |
2 | 1 | 3 | female | 26.0 | 0 | 0 | 7.9250 | S | Third | woman | False | NaN | Southampton | yes | True |
3 | 1 | 1 | female | 35.0 | 1 | 0 | 53.1000 | S | First | woman | False | C | Southampton | yes | False |
4 | 0 | 3 | male | 35.0 | 0 | 0 | 8.0500 | S | Third | man | True | NaN | Southampton | no | True |
데이터 셋 분리 : 생존자 그룹과 사망자 그룹
# 사망자 그룹 데이터 프레임 추출
dfNo = titanic[titanic['alive'] == 'no']
# 생존자 그룹 데이터 프레임 추출
dfYes = titanic[titanic['alive'] == 'yes']
데이터 범위 설정
# 라벨과 범위 간격 설정
bins = [1, 15, 25, 35, 60, 99]
labels=['미성년자','청년','중년','장년','노년']
# 범위 유효성 검사
# bins=[1,15,25,35,60,99]
titanic['age'].min()
#제시된 bins의 최초값 1 이하인 값 1.0과 0.42가 각
#그룹의 최소나이로 확인되므로 bins 수정
#최대나이는 74와 80으로 확인되어서 수정 필요 없음
bins[0] = 0
bins
0.42
[0, 15, 25, 35, 60, 99]
범주형 데이터 생성
# 카테고리 데이터 생성
catYes = pd.cut(dfYes['age'], bins, labels=labels) # 생존자
catNo = pd.cut(dfNo['age'], bins, labels=labels) # 사망자
범주형 데이터 확인
#카테고리 데이터 확인
catYes
catNo
1 장년
2 중년
3 중년
8 중년
9 미성년자
...
875 미성년자
879 장년
880 청년
887 청년
889 중년
Name: age, Length: 342, dtype: category
Categories (5, object): ['미성년자' < '청년' < '중년' < '장년' < '노년']
0 청년
4 중년
5 NaN
6 장년
7 미성년자
...
884 청년
885 장년
886 중년
888 NaN
890 중년
Name: age, Length: 549, dtype: category
Categories (5, object): ['미성년자' < '청년' < '중년' < '장년' < '노년']
범주형 데이터 빈도 계산
# 카테고리 데이터들의 빈도 수 계산
catNo.value_counts()
# 사망자그룹 계산
catNo.count()
# 각 연령대별 승객수의 비율 계산
catNo.value_counts(normalize=True)
# 전체 비율의 합 계산
catNo.value_counts(normalize=True).sum()
청년 143
장년 117
중년 113
미성년자 34
노년 17
Name: age, dtype: int64
424
청년 0.337264
장년 0.275943
중년 0.266509
미성년자 0.080189
노년 0.040094
Name: age, dtype: float64
1.0
# 카테고리 데이터들의 빈도 수 계산
catYes.value_counts()
# 생존자그룹 계산
catYes.count()
# 각 연령대별 승객수의 비율 계산
catYes.value_counts(normalize=True)
# 전체 비율의 합 계산
catYes.value_counts(normalize=True).sum()
중년 83
장년 78
청년 75
미성년자 49
노년 5
Name: age, dtype: int64
290
중년 0.286207
장년 0.268966
청년 0.258621
미성년자 0.168966
노년 0.017241
Name: age, dtype: float64
1.0
set_index() : 기존 행 인덱스를 제거하고 데이터 열 중 하나를 인덱스로 설정해주는 함수
데이터프레임 생성
# 예제 데이터프레임 생성
df3 = pd.DataFrame({
'a':[1,3,4,3,4],
'b':[2,3,1,4,5],
'c':[1,5,2,4,4]
})
df3
a | b | c | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 4 | 4 |
4 | 4 | 5 | 4 |
데이터프레임의 인덱스를 a열로 설정
# df3은 index 설정이 없어서 기본 인덱스로 생성되어 있음
# df3 데이터 프레임의 인덱스를 a 열로 설정하시오.
df3 = df3.set_index('a')
df3
b | c | |
---|---|---|
a | ||
1 | 2 | 1 |
3 | 3 | 5 |
4 | 1 | 2 |
3 | 4 | 4 |
4 | 5 | 4 |
행 인덱스를 제거하고 기본 인덱스로 설정
# df3의 행 인덱스를 제거하고 기본 인덱스로 설정하시오.
df3.reset_index()
# a열이 돌아옴
## 원래 index의 처리 : 설정 없으면 원 인덱스가 data로 처리
## 원래 index의 처리 : 원index 제거 (drop=True)
df3.reset_index(drop=True) # 기존 a열이 사라짐
## 원본 반영되지 않으므로 반드시 저장해야 한다.
a | b | c | |
---|---|---|---|
0 | 1 | 2 | 1 |
1 | 3 | 3 | 5 |
2 | 4 | 1 | 2 |
3 | 3 | 4 | 4 |
4 | 4 | 5 | 4 |
b | c | |
---|---|---|
0 | 2 | 1 |
1 | 3 | 5 |
2 | 1 | 2 |
3 | 4 | 4 |
4 | 5 | 4 |
인덱스 이름 바꾸기
#i ndex 이름 바꾸기(행 인덱스)
# df3 데이터 프레임의 인덱스를 제거하고 기본 인덱스로 설정하시오.
# 단, 원 인덱스는 삭제한다.
df3.rename(index = {1:'1반'})
b | c | |
---|---|---|
a | ||
1반 | 2 | 1 |
3 | 3 | 5 |
4 | 1 | 2 |
3 | 4 | 4 |
4 | 5 | 4 |
열이름 값 변경
# 열이름(columns) 첫번째 이름 값을 학생으로 바꾸시오
# rename() 사용
# df.rename(columns={현재컬럼명:바꿀컬럼명})
df3.rename(columns={'b':'학생'})
학생 | c | |
---|---|---|
a | ||
1 | 2 | 1 |
3 | 3 | 5 |
4 | 1 | 2 |
3 | 4 | 4 |
4 | 5 | 4 |
파일 및 폴더 생성
파일 시스템 탐색
도움말(man -> manual)
명령어 기초
유닉스(Unix)
특정 코드 지연 실행 - DispatchQueue.main.asyncAfter(deadline: )
Naming Conventions
안드로이드 폰과 맥북에어 M1 USB 테더링 성공
Simulator 풀 스크린 사용 방법
10807번 - 개수 세기
프로그래머스 Lv.1 풀이 코드 모음
프로그래머스 Lv.1 풀이 코드 모음
11047번 - 동전 0
11659번 - 구간 합 구하기 4
14888번 - 연산자 끼워넣기
9184번 - 신나는 함수 실행
24416번 - 알고리즘 수업 - 피보나치 수 1
2580번 - 스도쿠
9663번 - N-Queen
15652번 - N과 M (4)
15651번 - N과 M (3)
15650번 - N과 M (2)
25305번 - 커트라인
25304번 - 영수증
3003번 - 킹, 퀸, 룩, 비숍, 나이트, 폰
15649번 - N과 M (1)
2004번 - 조합 0의 개수
1676번 - 팩토리얼 0의 개수
9375번 - 패션왕 신해빈
1010번 - 다리 놓기
11051번 - 이항 계수 2
11050번 - 이항 계수 1
3036번 - 링
2981번 - 검문
1934번 - 최소공배수
2609번 - 최대공약수와 최소공배수
1037번 - 약수
5086번 - 배수와 약수
1358번 - 하키
1004번 - 어린 왕자
1002번 - 터렛
3053번 - 택시 기하학
2477번 - 참외밭
4153번 - 직각삼각형
3009번 - 네 번째 점
1085번 - 직사각형에서 탈출
11478번 - 서로 다른 부분 문자열의 개수
1269번 - 대칭 차집합
1764번 - 듣보잡
10816번 - 숫자 카드 2
1620번 - 나는야 포켓몬 마스터 이다솜
14425번 - 문자열 집합
10815번 - 숫자 카드
18870번 - 좌표 압축
10814번 - 나이순 정렬
1181번 - 단어 정렬
11651번 - 좌표 정렬하기 2
11650번 - 좌표 정렬하기
1427번 - 소트인사이드
2108번 - 통계학
10989번 - 수 정렬하기 3
2751번 - 수 정렬하기 2
2750번 - 수 정렬하기
22.06.25 ~ 27 부산 먹부림 기록
1436번 - 영화감독 숌
1018번 - 체스판 다시 칠하기
7568번 - 덩치
2231번 - 분해합
2798번 - 블랙잭
11729번 - 하노이 탑 이동 순서
2447번 - 별 찍기 - 10
17478번 - 재귀함수가 뭔가요?
10870번 - 피보나치 수 5
10872번 - 팩토리얼
9020번 - 골드바흐의 추측
4948번 - 베르트랑 공준
1929번 - 소수 구하기
11653번 - 소인수분해
2581번 - 소수
1978번 - 소수 찾기
10757번 - 큰 수 A+B
2839번 - 설탕 배달
2775번 - 부녀회장이 될테야
10250번 - ACM 호텔
2869번 - 달팽이는 올라가고 싶다
1193번 - 분수찾기
2292번 - 벌집
1712번 - 손익분기점
1316번 - 그룹 단어 체커
2941번 - 크로아티아 알파벳
5622번 - 다이얼
2908번 - 상수
1152번 - 단어의 개수
1157번 - 단어 공부
2675번 - 문자열 반복
10809번 - 알파벳 찾기
11720번 - 숫자의 합
11654번 - 아스키 코드
1065번 - 한수
4673번 - 셀프 넘버
15596번 - 정수 N개의 합
4344번 - 평균은 넘겠지
8958번 - OX퀴즈
25083번 - 새싹
Spark Bigdata Pipeline
Spark 3일차
Spark 2일차
1546번 - 평균
Spark 1일차
Hadoop🐘
3052번 - 나머지
2577번 - 숫자의 개수
2562번 - 최댓값
10818번 - 최소, 최대
Linux
MongoDB 조회 문제
MongoDB
1110번 - 더하기 사이클
10951번 - A+B - 4
Oracle 3️⃣
ORACLE 연습용 문제 만들기 숙제
10952번 - A+B - 5
Oracle 2️⃣
2480번 - 주사위 세개
Oracle Day1️⃣
Tensorflow
Big Data
2525번 - 오븐 시계
10871번 - X보다 작은 수
2439번 - 별 찍기 - 2
2438번 - 별 찍기 - 1
11022번 - A+B - 8
11021번 - A+B - 7
2742번 - 기찍 N
2741번 - N 찍기
15552번 - 빠른 A+B
8393번 - 합
10950번 - A+B - 3
9️⃣ 2739번 - 구구단
2884번 - 알람 시계
14681번 - 사분면 고르기
⛏크롤링(Crawling)
2753번 - 윤년
Django 복습 4️⃣
Django 복습 3️⃣
💯 9498번 - 시험 성적
1330번 - 두 수 비교하기
✖ 2588번 - 곱셈
➗ 10430번 - 나머지
Django 복습 2️⃣
Django 복습 1
MySQL 복습!
⁉10926번 - ??!
🆎1008번 - A/B
👩🦲 18108번 - 1998년생인 내가 태국에서는 2541년생?!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🎈✨경 축✨🎈
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
선형 자료구조(1일차에 이어서)
🆎10998번 - A×B
🆎1001번 - A-B
🆎1000번 - A+B
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐶10172번 - 개
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
🐱10171번 - 고양이
[해당 포스트는 유튜버 나동빈님의 영상을 참고했습니다.]
❤10718번 - We love kriii
🖐2557번 - Hello World
Today I Learned(TIL)📌 (2021.12.31)
Today I Learned(TIL)📌 (2021.12.30)
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[Noitce] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!
[noitce!!] 고쳐야하거나 틀린 것이 있으면 말씀해주세요!