판다스 넘파이들 중 간단한것들을 시도해봤습니다.
넘파이에서의 axis=0, axis=1이 나오게되는데 0은 열을 의미하고 1은 행을 의미합니다.
sort함수는 axis에서 사용하게 됩니다.(0은 열과 비슷하니 0=열, 1은 행으로 외우려고 합니다)
#넘파이
#numpy&pandas.py
def p(str):
print(str, '\n')
##넘파이 배열
import numpy as np
# 파이썬 리스트로 넘파이 배열 만들기
ar1 = np.array([1, 2, 3, 4 ,5]) #1차원 배열
p(ar1) #리스트로 나오지만 넘파이 배열임
ar2 = np.array([[1,2,3],[4,5,6]]) #2차원 배열
p(ar2) #리트스 안의 리스트로 감싸주면 2차원 배열이됨
#크기가 3인 1차원 난수 배열
ar3= np.random.randn(3)
p(ar3)
# 2행 3열의 2차원 난수 배열
ar4 = np.random.rand(2, 3)
p(ar4)
#크기가 5인 0으로 채워진 배열
ar5= np.zeros(5)
p(ar5)
#크기가 5인 1로 채워진 배열
ar5_1 = np.ones(5)
p(5_1)
#크기가 2행 3열인 0으로 채워진 2차원 배열
ar6_1 = np.zeros((2,3))
p(ar6_1)
#20부터 200-1까지 10씩 증가한 배열
ar7 = np.arange(20, 200, 10)
p(ar7)
#3행 6열 배열로 모양바꾸기(재배치)
ar8 = ar7.reshape(3, 6)
p(ar8)
#1부터 20까지 1씩 증가한 배열
ar1 = np.arange(1, 21, 1)
p(ar1)
p(ar1[1]) #인덱스가 1인(즉 두번째 요소)
#2행 10열로 배열 재배치
ar2 = ar1.reshape(2, 10)
p(ar2)
ar2[1][1] = 100 #2행 2열의 값을 100으로 변경
p(ar2)
ar1 = np.arange(1, 11, 1) # 1~10
p(ar1)
ar2 = ar1 + 3 # 배열 각 요소에 숫자를 더한 배열
p(ar2)
ar3 = ar1 * 2 # 배열 각 요소에 숫자를 곱한 배열
p(ar3)
#배열 요소의 개수
ar1 = np.array([[5,7,9], [-7, -6, 19], [6, 9, 11]])
p(len(ar1)) #요소의 개수
p(len(ar1[0])) #첫번째 요소(1차원 배열)의 개수
#배열함수
p(ar1.sum()) #합계
p(ar1.mean()) #평균
p(ar1.max()) #최대값
p(ar1.min()) #최소값
p(ar1.max(axis=0)) #각 열의 요소 중 가장 큰 값
p(ar1.max(axis=1)) #각 행의 요소 중 가장 큰 값
p(ar1.min(axis=0)) #각 열의 요소 중 작은 값
p(ar1.min(axis=1)) #각 행의 요소 중 작은 값
#0 = 열, 1=행
ar1= np.array([[5, 7, 9], [-7, -6, 19], [6, 9, 11]])
# ar1배열의 모든 요소에 대해서 0보다 크면 True, 작으면 False
p(ar1>0)
#음수의 개수
m_count = (ar1<0).sum()
p(m_count)
#where : 배열에 조건 부여
ar2= np.where(ar1<0, 0, ar1)
p(ar2)
#배열 정렬
ar1= np.array([[5, 7, 9], [-3, -6, 19], [6, 4, 11]])
p(ar1)
ar1.sort(0) #열 기준으로 정렬
p(ar1)
ar1.sort(1) #행기준으로 정
p(ar1)
#판다스
#Series : 인덱스(숫자 또는 문자)가 있는 1차원 데이터 구조
#DataFrame : 인덱스(숫자 또는 문자)가 있는 2차원 데이터 구조
#판다스
#Series :인덱스(숫자 또는 문자)가 있는 1차원 데이터 구조
#dataFrame : 인덱스(숫자 또는 문자)가 있는 2차원 데이터 구조
#판다스 시리즈 객체 설정
sr1= pd.Series([10,30,20,40,60])
p(sr1) #시리즈
p(sr1.values) #값
p(sr1.index) #인덱스
p(sr1[2]) #인덱스 2의 값
#문자열로 인덱스 설정
sr1 = pd.Series([10,30,20,40,60], index=['a', 'b', 'c', 'd', 'e'])
p(sr1[1]) #두번째 요소
p(sr1['b']) #두번째 요소
p(sr1[[1,2]])#두번째부터 세번째 요소
p(sr1[['a','c']]) #첫번째,세번째 요소
p(sr1[1:4]) # 두번째부터 네번째 요소
p(sr1['b':'d']) #두번째부터 네번째 요소
# ,는 다 가져오는거고 :은 잘라서 가져오게 됩니다.
# 2행 3열 구조
df1 = pd.DataFrame([[10,20,30], [40,50,60]])
p(df1)
#딕셔너리로 DataFrame 생성
dic1 = {
'fruit': ['사과', '베', '감', '굴', '바나나'],
'price': [100, 200, 150 ,50 ,200],
'qty': [10, 25, 30, 20, 15] #수량
}
df1 = pd.DataFrame(dic1)
p(df1)
#행의 인덱스 설정
df1 = pd.DataFrame(dic1, index=['a','b','c','d','e'])
p(df1)
# 열 인덱스명 변경
df1.rename(columns={
'fruit': '과일',
'price': '가격',
'qty': '수량'
}, inplace=True)
p(df1)
# 행 인덱스명 변경
df1.rename(index={
'a': '01',
'b': '02',
'c': '03',
'd': '04',
'e': '05',
},inplace=True)
p(df1)
#csv 데이터로 데이터프레임 생성
df1 = pd.read_csv('../assets/df_sample.csv')
p(df1)
df1.head()
p(df1.head(5)) #상위 5개 행
df1.info() #데이터프레임의 구조
p(df1.describe(include='all')) #기본 통계랑
#데이터 프레임의 통계 함수
p(df1['중간'].mean()) #중간고사의 평균 데이터
p(df1[['중간', '기말']].mean()) #중간, 기말 평균
p(df1['학번'].min()) #학번 최소값
p(df1[['중간','기말']].max()) #중간, 기말 최대값
p(df1[['중간','기말']].std()) #표준편차
p(df1[['중간','기말']].var()) #분산
p(df1['퀴즈'].value_counts())#값 마다의 개수
p(df1[['중간', '기말']].corr()) #상관분석
#특정 컬럼을 행인덱스로 지정
df1.set_index('학번') #학번 열을 행의 인덱스로 지정
p(df1)
df1.index = df1['학번'] #학번 열의 값을 읽어서 인덱스로 지정
p(df1)
#loc : 이름으로 접근, iloc:인덱스로 접근
df1.set_index('학번', inplace=True)
p(df1)
p(df1.loc['S01', '중간']) #인덱스명과 열이름 사용해서 접근
p(df1.loc['S01', '기말']) #인덱스명과 열이름 사용해서 접근
p(df1.iloc[1, 0])
p(df1.iloc[2, 2])
p(df1.loc['S05']) # S05의 행 인덱스에 해당하는 열인덱스와 값
p(df1.iloc[3]) #인덱스 3번(S04)행 인덱스에 해당하는 열 인덱스와 값
p(df1['중간']) #중간 열인덱스에 해당하는 행인덱스와 값
p(df1[['중간', '기말']]) #중간, 기말 열인덱스에 해당하는 행인덱스와 값
df1 =pd.read_csv('../assets/df_sample.csv')
p(df1)
df2 = df1.drop(0) #0번 행 삭제
p(df2)
df3 = df2.drop('퀴즈', axis=1) #퀴즈 열 삭제
p(df3)
#데이터 프레임 정렬
df1.set_index('학번', inplace=True)#학번 열을 행인덱스로
df2 = df1.sort_index(ascending=False) #ascending = 오름차순
p(df2)
#기말 열의 값으로 오름차순 정렬
df3 = df1.sort_values(by='기말', ascending=True)
p(df3)
순서 | 함수(매소드) | 설명(역할) |
1 | np.random.randn(3) | 크기가 3인 1차원 난수 배열 |
2 | np.random.randn(2,3) | 크기가 2행 3열의 2차원 난수 배열 |
2 | np.zeros(2) | 0으로 채워진 크기가 2인 1차 배열 |
3 | np.zeros((2,3)) | 크기가 2행 3열인 0으로 채워진 2차열 배열 (튜플형식으로 써야함) |
4 | np.ones(5) | 크기가 5인 1로 채워진 배열 |
5 | np.arange(20,200,10) | 20부터 200-1까지 10씩 증가한 배열 |
6 | ar7.reshape(3,6) | ar7행렬을 3행 6열 배열로 재배치하기 |
7 | np.where(ar1<0, 0, ar1) | 배열에 조건 부여(ar1이 0보다 작으면 0 그렇지 않으면 그냥 ar1) |
8 | np1.sort(0) np1.sort(1) |
열을 기준으로 정렬 행 기준으로 정렬 |
9 | df1.rename(columns={ 'fruit': '과일', 'price': '가격', 'qty': '수량' }, inplace=True) p(df1) |
열 인덱스명 변경 |
10 | df1.rename(index={ 'a': '01', 'b': '02', 'c': '03', 'd': '04', 'e': '05', },inplace=True) p(df1) |
행 인덱스명 변경 |
11 | 변수 = pd.read_csv('경로') |
#판다스 csv파일 읽어서 df생성 |
12 | p(df1.describe(include='all')) | 기본 통계 확인 #카운트, 유니크 , 탑, freq, mean, std, min, 25%, 50%, 75%, max |
'데이터 분석 및 시각화' 카테고리의 다른 글
[데이터분석] ML(머신러닝)_basic, 데이터 분리 (0) | 2024.08.21 |
---|---|
[데이터분석] t-test,상관분석 (0) | 2024.08.20 |
[데이터분석]텍스트마이닝 , 워드클라우드, 지도시각화 (0) | 2024.08.14 |
[데이터분석] 인터렉티브, 마크다운 실습 (0) | 2024.08.13 |
[데이터분석] 텍스트마이닝 실습 (0) | 2024.08.12 |