21.12.06 파이썬 정리2

2021. 12. 6. 17:56작업/데이터분석

12 04 1. Numpy 사용해보기

실습 1 배열 만들기 numpy, random.randint

import numpy as np
#0부터 5사이 랜덤한 값이 담긴 3x5 array를 만들어 봅시다!
array = np.random.randint(0,5,(3,5))
print(array)

실습 2 ndim, shape, size, dtype

import numpy as np

print("1차원 array")
array = np.arange(10)
print(array)

# Q1. array의 자료형을 출력해보세요.
print(type(array))

# Q2. array의 차원을 출력해보세요.
print(array.ndim)

# Q3. array의 모양을 출력해보세요.
print(array.shape)

# Q4. array의 크기를 출력해보세요.
print(array.size)

# Q5. array의 dtype(data type)을 출력해보세요.
print(array.dtype)

# Q6. array의 인덱스 5의 요소를 출력해보세요.
print(array[5])

# Q7. array의 인덱스 3의 요소부터 인덱스 5 요소까지 출력해보세요.
print(array[3:6])

실습 3 matrix의 ndim, shape, size, dtype

import numpy as np

print("2차원 array")
matrix = np.arange(1, 16).reshape(3,5)  #1부터 15까지 들어있는 (3,5)짜리 배열을 만듭니다.
print(matrix)


# Q1. matrix의 자료형을 출력해보세요.
print(type(matrix))

# Q2. matrix의 차원을 출력해보세요.
print(matrix.ndim)

# Q3. matrix의 모양을 출력해보세요.
print(matrix.shape)

# Q4. matrix의 크기를 출력해보세요.
print(matrix.size)

# Q5. matrix의 dtype(data type)을 출력해보세요.
print(matrix.dtype)

# Q6. matrix의 (2,3) 인덱스의 요소를 출력해보세요.
print(matrix[2,3])

# Q7. matrix의 행은 인덱스 0부터 인덱스 1까지, 열은 인덱스 1부터 인덱스 3까지 출력해보세요.
print(matrix[0:2,1:4])

실습 4 reshape()

import numpy as np

print("array")
array = np.arange(8)
print(array)
print("shape : ", array.shape, "\n")

# Q1. array를 (2,4) 크기로 reshape하여 matrix에 저장한 뒤 matrix와 그의 shape를 출력해보세요.
print("# reshape (2, 4)")
matrix = array.reshape(2,4) 


print(matrix)
print("shape : ", matrix.shape)

실습 5 concatenate

import numpy as np

print("matrix")
matrix = np.array([[0,1,2,3],
                   [4,5,6,7]])
print(matrix)
print("shape : ", matrix.shape, "\n")

# (아래의 배열 모양을 참고하세요.)
# Q1. matrix 두 개를 세로로 붙이기 
'''
[[0 1 2 3]
 [4 5 6 7]
 [0 1 2 3]
 [4 5 6 7]]
'''
m=np.concatenate([matrix,matrix],axis=0)
print(m)


# Q2. matrix 두 개를 가로로 붙이기
'''
[[0 1 2 3 0 1 2 3]
 [4 5 6 7 4 5 6 7]]
'''
n=np.concatenate([matrix,matrix],axis=1)
print(n)

실습 6 split()

import numpy as np

print("matrix")
matrix = np.array([[ 0, 1, 2, 3],
                   [ 4, 5, 6, 7],
                   [ 8, 9,10,11], 
                   [12,13,14,15]])
print(matrix, "\n")

# Q1. matrix를 [3] 행에서 axis 0으로 나누기
'''
[[0  1   2  3]
 [4  5   6  7]
 [8  9  10 11]],

 [12 13 14 15]
'''
a, b = np.split(matrix, [3],axis=0)

print(a, "\n")
print(b, "\n")


# Q2. matrix를 [1] 열에서 axis 1로 나누기
'''
[[ 0]
 [ 4]
 [ 8]
 [12]],

[[ 1  2  3]
 [ 5  6  7]
 [ 9 10 11]
 [13 14 15]]
'''

c, d = np.split(matrix,[1],axis=1)

print(c, "\n")
print(d)

실습 7 Numpy 연산 array+5

import numpy as np

array = np.array([1,2,3,4,5])
print(array)


# Q1. array에 5를 더한 값을 출력해보세요.
print(array+5)

# Q2. array에 5를 뺀 값을 출력해보세요.
print(array-5)

# Q3. array에 5를 곱한 값을 출력해보세요.
print(array*5)

# Q4. array를 5로 나눈 값을 출력해보세요.
print(array/5)


# Q5. array에 array2를 더한 값을 출력해보세요.    
array2 = np.array([5,4,3,2,1])
print(array+array2)


# Q6. array에 array2를 뺀 값을 출력해보세요.
print(array-array2)

실습 8 브로드캐스팅

import numpy as np

'''
[[0]
 [1]
 [2]
 [3]
 [4]
 [5]] 배열 A와

 [0 1 2 3 4 5] 배열 B를 선언하고, 덧셈 연산해보세요.
'''
A=np.arange(6).reshape(6,1)
print(A)
B=np.arange(6)
print(A+B)

실습 9 집계함수 np.sum, max, min, mean, std 마스킹 arr[arr<5]

import numpy as np

matrix = np.arange(8).reshape((2, 4))
print(matrix)

# Q1. sum 함수로 matrix의 총 합계를 구해 출력해보세요.
print(np.sum(matrix))

# Q2. max 함수로 matrix 중 최댓값을 구해 출력해보세요.
print(np.max(matrix))

# Q3. min 함수로 matrix 중 최솟값을 구해 출력해보세요.
print(np.min(matrix))

# Q4. mean 함수로 matrix의 평균값을 구해 출력해보세요.
print(np.mean(matrix))

# Q5. sum 함수의 axis 매개변수로 각 열의 합을 구해 출력해보세요.
print(np.sum(matrix,axis=0))

# Q6. sum 함수의 axis 매개변수로 각 행의 합을 구해 출력해보세요.
print(np.sum(matrix,axis=1))

# Q7. std 함수로 matrix의 표준편차를 구해 출력해보세요.
print(np.std(matrix))

# Q8. 마스킹 연산을 이용하여 matrix 중 5보다 작은 수들만 추출하여 출력해보세요.
print(matrix[matrix<5])

미션 양치기소년 거짓말

import numpy as np

daily_liar_data = [0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0]


# 양치기 소년이 거짓말을 몇 번 했는지 구하여 출력해주세요.

def main():
    liar_array = np.array(daily_liar_data)
    print(np.count_nonzero(liar_array == 0))

if __name__ == '__main__':
    main()

71

12 04 2. Pandas 사용해보기

실습1 Series 데이터

import numpy as np
import pandas as pd

# 예시) 시리즈 데이터를 만드는 방법.
series = pd.Series([1,2,3,4], index = ['a', 'b', 'c', 'd'], name="Title")
print(series, "\n")


# 국가별 인구 수 시리즈 데이터를 딕셔너리를 사용하여 만들어보세요.
population_dict = {
    'korea' : 5180,
    'japan' : 12718,
    'china' : 141500,
    'usa' : 32676
}

country = pd.Series(population_dict)
print(country)

실습2 DataFrame

import numpy as np
import pandas as pd

# 두 개의 시리즈 데이터가 있습니다.
print("Population series data:")
population_dict = {
    'korea': 5180,
    'japan': 12718,
    'china': 141500,
    'usa': 32676
}
population = pd.Series(population_dict)
print(population, "\n")

print("GDP series data:")
gdp_dict = {
    'korea': 169320000,
    'japan': 516700000,
    'china': 1409250000,
    'usa': 2041280000,
}
gdp = pd.Series(gdp_dict)
print(gdp, "\n")


# 이곳에서 2개의 시리즈 값이 들어간 데이터프레임을 생성합니다.
print("Country DataFrame")
country = pd.DataFrame({
    'population':population,
    'gdp':gdp
})


# 데이터 프레임에 gdp per capita 칼럼을 추가하고 출력합니다.
gdp_per_capita = country['gdp'] / country['population']
country['gdp per capita'] = gdp_per_capita


# 데이터 프레임을 만들었다면, index와 column도 각각 확인해보세요.
print(country)
print(country.index)
print(country.columns)

실습 3 인덱싱, 슬라이싱 loc iloc

import numpy as np
import pandas as pd

# 첫번째 컬럼을 인덱스로 country.csv 파일 읽어오기.
print("Country DataFrame")
country = pd.read_csv("./data/country.csv", index_col=0)
print(country, "\n")

# 명시적 인덱싱을 사용하여 데이터프레임의 "china" 인덱스를 출력해봅시다.
print(country.loc['china'])


# 정수 인덱싱을 사용하여 데이터프레임의 1번째부터 3번째 인덱스를 출력해봅시다.
print(country.iloc[1:4])

실습 4 pandas 연산 A+B A.add(B, fill_value=0))

import numpy as np
import pandas as pd


print("A: ")
A = pd.DataFrame(np.random.randint(0, 10, (2, 2)), columns=['A', 'B'])      #칼럼이 A, B입니다.
print(A, "\n")


print("B: ")
B = pd.DataFrame(np.random.randint(0, 10, (3, 3)), columns=['B', 'A', 'C'])     #칼럼이 B, A, C입니다.
print(B, "\n")


# 아래에 다양한 연산을 자유롭게 적용해보세요.
print(A+B)
print(A.add(B,fill_value=0.5))

실습 5 df.sort_values(컬럼명, ascending=트루펄스)

import numpy as np
import pandas as pd

print("DataFrame: ")
df = pd.DataFrame({
    'col1' : [2, 1, 9, 8, 7, 4],
    'col2' : ['A', 'A', 'B', np.nan, 'D', 'C'],
    'col3': [0, 1, 9, 4, 2, 3],
})
print(df, "\n")


# 정렬 코드 입력해보기    
# Q1. col1을 기준으로 오름차순으로 정렬하기.
sorted_df1 = df.sort_values('col1')
print(df.sort_values('col1'))


# Q2. col2를 기준으로 내림차순으로 정렬하기.
sorted_df2 = df.sort_values('col2',ascending=False)
print(df.sort_values('col2',ascending=False))


# Q3. col2를 기준으로 오름차순으로, col1를 기준으로 내림차순으로 정렬하기.
sorted_df3 = df.sort_values(['col2','col1'],ascending=[True,False])
print(df.sort_values(['col2','col1'],ascending=[True,False]))

미션 잭과 콩나무 height 데이터

import pandas as pd




# ./data/tree_data.csv 파일을 읽어서 작업해보세요!
height = pd.read_csv('./data/tree_data.csv')

print(height.head(10))

sorted_height = height.sort_values('height',ascending=False)

print(sorted_height.iloc[:5])
print(sorted_height.iloc[0])

12 04 3. Pandas 심화

실습 1 조건으로 검색 df[df[컬럼1]<0.5] & df[df[컬럼2]>0.3]

import numpy as np
import pandas as pd

print("Masking & query")
df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])
print(df, "\n")

#데이터 프레임에서 A컬럼값이 0.5보다 작고 B컬럼 값이 0.3보다 큰값들을 구해봅시다.
print(df[(df['A']<0.5) & (df['B']>0.3)])
print(df.query('A < 0.5 and B > 0.3'))

실습2 apply(함수)

import numpy as np
import pandas as pd

df = pd.DataFrame(np.arange(5), columns=["Num"])
print(df, "\n")

# 값을 받으면 제곱을 해서 돌려주는 함수
def square(x):
    return x**2


# apply로 컬럼에 함수 적용
df['Square'] = df['Num'].apply(square)
print(df)


# 람다 표현식으로도 적용하기
print(df.Num.apply(lambda x:x**2))

실습3 groupby(컬럼)

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [1, 2, 3, 1, 2, 3],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# groupby 함수를 이용해봅시다.
# key를 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby('key').sum())

# key와 data1을 기준으로 묶어 합계를 구해 출력해보세요.
print(df.groupby(['key','data1']).sum())

실습4 df.groupby(컬럼).aggregate({'data1':'min', 'data2':np.sum}) 

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [0, 1, 2, 3, 4, 5],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# aggregate를 이용하여 요약 통계량을 산출해봅시다.
# 데이터 프레임을 'key' 칼럼으로 묶고, data1과 data2 각각의 최솟값, 중앙값, 최댓값을 출력하세요.
print(df.groupby('key').aggregate(['min',np.median,max]))


# 데이터 프레임을 'key' 칼럼으로 묶고, data1의 최솟값, data2의 합계를 출력하세요.
print(df.groupby('key').aggregate({'data1':'min', 'data2':np.sum}))

실습 5 filter과 apply()

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [0, 1, 2, 3, 4, 5],
    'data2': [4, 4, 6, 0, 6, 1]
})
print("DataFrame:")
print(df, "\n")

# groupby()로 묶은 데이터에 filter를 적용해봅시다.
# key별 data2의 평균이 3이 넘는 인덱스만 출력해봅시다.
def filter_by_mean(x):
    return x['data2'].mean() >3
df1 = df.groupby('key').filter(filter_by_mean)

print(f"filtering : {df1}")



# groupby()로 묶은 데이터에 apply도 적용해봅시다.
# 람다식을 이용해 최댓값에서 최솟값을 뺀 값을 적용해봅시다.
df2 = df.groupby('key').apply(lambda x:x.max() - x.min())


print(f"applying : {df2}")

실습 6 멀티인덱스 pivot_table

import numpy as np
import pandas as pd

df1 = pd.DataFrame(
    np.random.randn(4, 2), 
    index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
    columns=['data1', 'data2']
)
print("DataFrame1")
print(df1, "\n")

df2 = pd.DataFrame(
    np.random.randn(4, 4),
    columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)
print("DataFrame2")
print(df2, "\n")

# 명시적 인덱싱을 활용한 df1의 인덱스 출력
print("df1.loc['A', 1]")
print(df1.loc['A', 1], "\n") 


# df2의 [A][1] 칼럼 출력
print('df2["A"]["1"]')
print(df2["A"]["1"], "\n")

미션 피리부는 사나이

import pandas as pd
import numpy as np


# 파일을 읽어서 코드를 작성해보세요
# 경로: "./data/the_pied_piper_of_hamelin.csv"

data = pd.read_csv('./data/the_pied_piper_of_hamelin.csv')
print(data)

# 피리부는 사나이를 따라간 어린이들 중 남자 어린이와 여자 어린이의 평균 연령을 표로 출력해보려고 합니다.
children = data[data['구분']=='Child']
print(children.head(10))
# sol1.
print(children.groupby('일차').mean())
# sol2.
print(children.pivot_table(index='일차', columns='성별', values='나이', aggfunc=np.mean))

 

'작업 > 데이터분석' 카테고리의 다른 글

21.12.13 모의테스트  (0) 2021.12.13
21.12.06 파이썬 데이터처리 모의테스트  (0) 2021.12.06
21.12.06 파이썬 정리 1  (0) 2021.12.06
21.12.04 numpy, pandas  (0) 2021.12.05
21.12.02 JSON, CSV  (0) 2021.12.04