2021. 12. 5. 00:34ㆍ작업/데이터분석
numpy
python에서 대규모 다차원 배열을 다룰 수 있게 도와주는 라이브러리
python list에 비해 빠른 연산 지원한다.
#list
list(range(10))
#numpy array
import numpy as np
np.array([1,2,3,4,5])
#2차원
np.array([[1,2],
[3,4]])
list는 [1,'apple']이 가능하지만 np.array는 단일타입으로 구성된다.
np.zeros(10)
np.ones((3,5),dtype=float)
np.arange(0,20,2)
np.linspace(0,8,5)
# array([0,2,4,6,8])
np.random.random((2,2))
#2x2의 랜덤배열
np.random.normal(0,1,(2,2))
#2x2의 평균이 0 표준편차가 1인 랜덤배열
np.random.randint(0,10,(2,2))
#2x2 0~10사이 랜덤정수배열
x = np.random.randint(10,size=(3,4))
x.ndim #2
x.shape #(3,4)
x.size #12
x.dtype #dtype('int64')
#reshape
x = np.arange(8)
x.shape #(8,)
x2 = x.reshape(2,4) #2x4로 바꿔주세요
x2.shape #(2,4)
#concatenate
x = np.array([0,1,2])
y = np.array([3,4,5])
np.concatenate([x,y])
심화 concatenate
matrix = np.arange(4).reshape(2,2) #[[0,1] [2,3]]
np.concatenate([matrix, matrix], axis=0)
np.concatenate([matrix,matrix], axis=1)
upper, lower = np.split(matrix, [3], axis=0)
#가로방향으로 나눈다면
left, right = np.split(matrix, [3], axis=1)
numpy 연산 - 브로드캐스팅
브로드캐스팅이란? shape이 다른 array끼리 연산하는 것
3x3 matrix + 5 = 3x3 결과가 나옴. 각 요소에 5씩 더해짐
예를 들어 3x1 + 1x3은 3x3으로 채워서 계산함
집계 함수
x = np.arange(8).reshape((2,4))
np.sum(x)
np.min(x)
np.max(x)
np.mean(x)
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])
마스킹 연산 : true false문으로 조건 성립하는 요소 보기
x[x<3]
pandas
Series : numpy array가 보강된 형태 Data와 index를 가지고 있다. 이때 인덱스는 숫자가 아니어도 된다.
딕셔너리로 만들 수 있다.
import pandas as pd
data = pd.Series([1,2,3,4])
data = pd.Series([1,2,3,4],index = ['a','b','c','d'])
population_dict ={
'korea':5180,
'japan':12718,
'china':141500,
'usa':32676
}
population = pd.Series(population_dict)
DataFrame
여러 개의 Series가 모여서 행과 열을 이룸
# numpy array처럼 인덱스처럼 수정 가능
country['age']=people_age
# 저장 불러오기
country.to_csv('./country.csv')
country.to_excel('country.xlsx')
country = pd.read_csv('./country.csv')
country = pd.read_excel('country.xlsx')
indexing / slicing
# loc '내 인덱스'
country.loc['china']
country.loc['japan':'korea', :'population'] # [,]
# iloc [0] 숫자
country.iloc[0]
country.iloc[1:3, :2]
DataFrame 새 데이터 추가,수정
user = pd.DataFrame(columns=['이름','나이','주소'])
user.loc[0] = ['서윤','23','서울']
user.loc[1] = {'이름':'서윤','나이':'23','주소':'서울'}
user.loc[1,'이름']='성윤' #수정
컬럼 선택하기
user['이름'] #컬럼 이름이 하나면 Series
user[['이름','주소','나이']] # 컬럼이 리스트로 들어가 있으면 DataFrame
누락된 데이터 체크
user.isnull()
user.notnull() #True 또는 False로 값이 나옴
# dropna()
user.dropna()
user['전화번호'] = user['전화번호'].fillna('전화번호 없음') # na를 채움
A.add(B,fill_value = 0)
A = pd.DataFrame(np.random.randint(0,10,(2,2)), columns=list("AB"))
B = pd.DataFrame(np.random.randint(0,10,(3,3)), columns=list("BAC"))
A + B # 안겹치는 부분 크기가 안맞는 부분은 NaN
A.add(B,fill_value=0) # 안겹치는 부분 크기가 안맞는 부분은 NaN이나 그걸 0으로 채운다.
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],
})
df.sort_values('col1') # col1의 컬럼값 기준으로 데이터를 정렬시킴
df.sort_values('col1',ascending=False)
df.sort_values(['col2','col1']) # col2로 먼저 정렬하고 그다음 col1정렬
미션 잭과 콩나무 height
조건으로 검색하기
import numpy as np
import pandas as pd
df = pd.DataFrame(np.random.rand(5,2), columns=['A','B'])
df['A'] < 0.5
# DataFrame row 추출
df[(df['A']<0.5) & (df['B']>0.3)] # 여까지 하면 true false인 series가 나옴.
df.query('A < 0.5 and B > 0.3')
# 문자열 검색
df['Animal'].str.contains('Cat')
df.Animal.str.match('Cat')
함수로 데이터 처리하기 - apply()
df = pd.DataFrame(np.arange(5), columns = ['Num'])
def square(x):
return x**2
df['Num'].apply(square) # 함수
df['Square'] = df.Num.apply(lambda x:x**2) # 람다사용
replace
df['Sex'] = df.Sex.replace({'Male':0, 'Female':1})
df.Sex.replace({'Male':0, 'Female':1}, inplace=True) # 바로대입
그룹으로 묶기 - groupby()
df.groupby('컬럼명').sum()
df.groupby(['컬1','컬2']).sum()
- aggregate
filter
groupby로 묶은 후에도 apply 적용이 가능하다.
get_group
df.groupby('시도').get_group('충남')
MultiIndex
df = pd.DataFrame(
np.random.randn(4,2),
index=[['A','A','B','B'],[1,2,1,2]],
columns=['data1','data2']
)
df['A']['1'] # loc,iloc 사용 가능
pivot_table
데이터에서 필요한 자료만 뽑아서 새롭게 요약
index는 행 인덱스로 들어갈 key
column에 열 인덱스로 라벨링될 값
value에 분석할 데이터
# 타이타닉 데이터에서 성별과 좌석별 생존률 구하기
df.pivot_table(
index='sex', columns='class', values='survived',
aggfunc=np.mean
)
피리부는 사나이
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.06 파이썬 데이터처리 모의테스트 (0) | 2021.12.06 |
---|---|
21.12.06 파이썬 정리2 (0) | 2021.12.06 |
21.12.06 파이썬 정리 1 (0) | 2021.12.06 |
21.12.02 JSON, CSV (0) | 2021.12.04 |
21.12.01 파이썬 파일 다루기 / 데이터 구조 다루기 / 그래프 다루기 (0) | 2021.12.01 |