2024. 12. 18. 22:00ㆍLLM(Large Language Model)의 기초
판다스가 길어서 2로 이어서 하겠습니다.
예시 결과물은 길어서 캡쳐본 저장하였으니 궁금하시면 펼쳐보시면 됩니다.
평균과 중앙값 뒤부터 하겠습니다.
예시 1)
df_copy['height'].max() # 최대값
-->
182.0
예시 2)
df_copy['height'].var() # 분산
-->
52.203567251462
예시 3)
df_copy['height'].std() # 표준편차
-->
7.225203613149044
편차 와 분산 표준편차의 공식
※ 분산과 표준편차
* 분산(Variance)과 표준편차(Standard Deviation)는 데이터가 평균에서 얼마나 퍼져 있는지를 나타내는 산포도(분포 정도)를 측정하는 지표입니다.
* 분산은 데이터가 평균을 기준으로 얼마나 퍼져 있는지를 나타냅니다.
* 평균에서 각 데이터의 거리를 제곱한 값들의 평균입니다.
* 표준편차는 분산의 제곱근입니다.
* 분산은 제곱 값이기 때문에 단위가 커질 수 있는데, 이를 원래 데이터와 같은 단위로 변환하기 위해 제곱근을 씌웁니다.
9. 그룹
예시 1)
데이터를 되돌립니다.
df_copy
-->
예시 2)
# groupby(): 데이터를 그룹으로 묶어 분석할 때 사용
df.groupby('group')
-->
<pandas.core.groupby.generic.DataFrameGroupBy object at 0x7b194a3c2200>
예시 3)
# 그룹을 맺으면 통계함수를 사용할 수 있음
df_copy.groupby('group').count()
-->
예시 4)
df_copy.groupby('group').mean(numeric_only=True) #숫자형 열만을 대상으로 평균 계산.
-->
예시 5)
df_copy.groupby('group').sum(numeric_only=True) # 각 그룹의 숫자형 열에 대해 합계를 계산
-->
예시 6)
df_copy.groupby(['blood', 'gender']).mean(numeric_only=True)
-->
예시 7)
df_copy.groupby(['blood', 'gender'])['height'].mean() #평균
-->
10. 중복 값 제거하기
df_copy['blood']
-->
예시 1)
#drop_duplicates() : 중복된 데이터 제거
df_copy['blood'].drop_duplicates()
-->
예시 2)
#value_counts() : 열의 각 값에 대한 데이터의 개수를 변환, 기본값은 NaN을 생략
df_copy['blood'].value_counts()
-->
예시 3)
df_copy['company'].value_counts() # 회사 소속인 사람
-->
예시 4)
df_copy['company'].value_counts(dropna=False) #NaN을 포함
-->
11. 데이터 프레임 합치기
df1 = pd.read_csv('/content/drive/MyDrive/KDT 시즌 4/10. 데이터분석/Data/idol.csv')
df2 = pd.read_csv('/content/drive/MyDrive/KDT 시즌 4/10. 데이터분석/Data/idol2.csv')
-->
df1
-->
df2
-->
예시 1)
df_copy = df1.copy()
pd.concat([df1, df_copy])
-->
예시 2)
dic = {
'이름': '김사과',
'연봉': 9000,
'가족수': 10
}
df_concat = pd.concat([df1, df_copy])
df_concat.reset_index(drop=True) # 기존 인덱스 삭제
-->
예시 3)
pd.concat([df1, df2], axis=1) # axis=1은 열 방향(가로)으로 병합
-->
예시 4)
df3 = df2.drop([1, 3, 5, 7, 9])
df3
-->
예시 5)
pd.concat([df1, df3], axis=1)
-->
예시 6)
df_right = df2.drop([1, 3, 5, 7, 9], axis=0) #axis=0은 행을 삭제
df_right
-->
예시 7)
df_right = df_right.reset_index(drop=True) # drop=True는 기존의 인덱스를 새로운 열로 추가하지 않고 삭제
df_right
-->
예시 8)
dic = {
'이름': '김사과',
'연봉': 9000,
'가족수': 10
}
df_right = pd.concat([df_right, pd.DataFrame(dic, index=[0])], ignore_index=True)
df_right
-->
예시 9)
pd.concat([df1, df_right], axis=1)
-->
예시 10)
# merge () : 특정 고유한 키(unique, id) 값을 기준으로 합침
# merge(데이터프레임1, 데이터프레임2, on='유니크값', how='병합의 기준')
#병합의 기준 : left, right, inner, cross
pd.merge(df1, df_right, on='이름', how='left') #left는 왼쪽 조인(left join)을 수행합니다.
-->
예시 11)
pd.merge(df1, df_right, on='이름', how='right')
-->
예시 12)
pd.merge(df1, df_right, on='이름', how='inner') # inner는 공통 '이름' 값만 결과에 포함
-->
예시 13)
pd.merge(df1, df_right, how='cross') # cross는 모든 행의 조합을 생성
-->
예시 14)
df_right.columns = ['성함', '연봉', '가족수'] # 열 이름 변경
df_right
-->
예시 15)
# pd.merge(df1, df_right, on='이름', how='right') # KeyError: '이름'
pd.merge(df1, df_right, left_on='이름', right_on='성함', how='right') # df_right에 있는 모든 '성함'이 결과에 포함
-->
12. 등수 매기기
예시 1)
# rank(): 데이터프레임 또는 시리즈의 순위를 매기는 함수. 기본값은 ascending
df1['브랜드순위'] = df1['브랜드평판지수'].rank()
df1
-->
예시 2)
df1['브랜드순위'] = df1['브랜드평판지수'].rank(ascending=False) # ascending=False는 내림차순으로 순위를 매김
df1
-->
예시 3)
# astype(): 특정열의 자료형을 변경
df1['브랜드순위'] = df1['브랜드순위'].astype(int) # 열의 자료형을 정수형으로 변환
df1
-->
예시 4)
df1['브랜드순위'].dtypes
-->
dtype('int64')
13. 날짜타입 사용하기
df.info()
df.info()
-->
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 20 non-null object
1 group 20 non-null object
2 company 19 non-null object
3 gender 20 non-null object
4 birthday 20 non-null object
5 height 19 non-null float64
6 blood 19 non-null object
7 brand 20 non-null int64
dtypes: float64(1), int64(1), object(6)
memory usage: 1.4+ KB
예시 1)
df['birthday']
-->
예시 2)
# to_datetime() : object타입에서 datetime타입으로 변환
df['birthday'] = pd.to_datetime(df['birthday'])
print(type(df['birthday']))
print(df['birthday'].dtypes)
-->
<class 'pandas.core.series.Series'>
datetime64[ns]
예시 3)
df['birthday'].dt.year
-->
예시 4)
df['birthday'].dt.month
-->
예시 5)
df['birthday'].dt.day
-->
예시 6)
df['birthday'].dt.dayofweek #요일: 0(월요일) ~ 6(일요일) # dayofweek 각 날짜에 대해 요일을 숫자로 반환
예시 7)
df['birthday'].dt.isocalendar().week #dt.isocalendar().week는 날짜가 속한 ISO 주 번호를 반환
-->
14. apply 사용하기
* Pandas의 apply() 함수는 데이터프레임이나 시리즈의 데이터를 사용자 정의 함수 또는 내장 함수에 적용하여 새로운 값을 계산하거나 변환할 때 사용됩니다.
* 데이터를 행(row) 또는 열(column) 단위로 처리할 수 있는 강력한 도구입니다.
데이터를 되돌립니다.
df_copy = df.copy()
df_copy
-->
예시 1)
# 성별의 남자는 1, 여자는 0으로 변환(loc 사용)
df_copy.loc[df_copy['gender'] == '남자', 'gender'] = 1
df_copy.loc[df_copy['gender'] == '여자', 'gender'] = 0
df_copy.head()
-->
예시 2)
df_copy = df.copy()
df_copy.head()
-->
예시 3)
#남자는 1, 여자는 0 반환 그 외에는 None
def male_or_female(x):
if x == '남자':
return 1
elif x == '여자':
return 0
else:
return None
print(male_or_female('남자')) #1
print(male_or_female('여자')) #0
예시 4)
df_copy['gender'].apply(male_or_female)
-->
예시 5)
df_copy['gender'].apply(lambda x:1 if x == '남자' else 0)
-->
예시 6)
df_copy['NewGender'] = df_copy['gender'].apply(lambda x:1 if x == '남자' else 0) # 'gender'열을 기반으로 'NewGender' 열 생성
df_copy.head() # 상위 5개 행 출력
-->
15. map 사용하기
* Pandas의 map() 함수는 Series 객체에서 사용할 수 있는 함수로, 각 요소에 대해 함수나 매핑 규칙을 적용하여 새로운 값을 계산하거나 변환할 때 사용됩니다.
* map()은 데이터의 각 요소를 순회하며 특정 작업을 수행하므로, 데이터를 가공하거나 변환하는 데 유용합니다.
일단 데이터를 되돌린다.
df_copy = df.copy()
df_copy.head()
-->
예시 1)
map_gender = {'남자':1, '여자':0}
df_copy['gender'].map(map_gender) # 'gender' 열을 기반으로 'gender' 열 생성
-->
예시 2)
df_copy['NewGender'] = df_copy['gender'].map(map_gender) # 'gender' 열을 기반으로 'NewGender' 열 생성
df_copy.head()
-->
16. 데이터 프레임의 산술 연산
예시 1)
df1 = pd.DataFrame({
'파이썬':[60, 70, 80, 90, 95],
'데이터분석':[40, 60, 70, 55, 87],
'머신러닝딥러닝':[35, 40, 30, 70, 55]
})
df1
-->
예시 2)
df1['파이썬'].dtypes
-->
dtype('int64')
예시 3)
type(df1['파이썬'])
-->
pandas.core.series.Series
def __init__(data=None, index=None, dtype: Dtype | None=None, name=None, copy: bool | None=None, fastpath: bool | lib.NoDefault=lib.no_default) -> None
예시 4)
df1['파이썬'] + df1['데이터분석'] + df1['머신러닝딥러닝']
-->
예시 5)
df1['총점'] = df1['파이썬'] + df1['데이터분석'] + df1['머신러닝딥러닝']
df1['평균'] = df1['총점'] / 3
df1
-->
예시 6)
df1['파이썬'].sum() # df1['파이썬'].sum(axis=0)
-->
395
예시 7)
df1['파이썬'].mean()
-->
79.0
예시 8)
df1.sum()
-->
예시 9)
df1.mean()
-->
예시 10)
df1 = pd.DataFrame({
'파이썬':[60, 70, 80, 90, 95],
'데이터분석':[40, 60, 70, 55, 87],
'머신러닝딥러닝':[35, 40, 30, 70, 55]
})
df2 = pd.DataFrame({
'파이썬':['C', 'B', 'B', 'A', 'A'],
'데이터분석':[40, 60, 70, 55, 87],
'머신러닝딥러닝':[35, 40, 30, 70, 55]
})
예시10-1)
df1 + 10
-->
예시 10-2)
#df2 + 10 이건 되지 않는다
예시 11)
df1 = pd.DataFrame({
'데이터분석':[40, 60, 70, 55, 87],
'머신러닝딥러닝':[35, 40, 30, 70, 55]
})
df2 = pd.DataFrame({
'데이터분석':[40, 60, 70, 55],
'머신러닝딥러닝':[35, 40, 30, 70]
})
예시 11-1)
df1 + df2 # 행의 개수가 다를 경우 빠진 데이터를 NaN으로 취급하기 때문에 결과는 NaN
-->
17. select_dtypes
데이터를 되돌린다.
df_copy = df.copy()
df_copy.head()
-->
예시 1)
df.info()
-->
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 8 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 20 non-null object
1 group 20 non-null object
2 company 19 non-null object
3 gender 20 non-null object
4 birthday 20 non-null datetime64[ns]
5 height 19 non-null float64
6 blood 19 non-null object
7 brand 20 non-null int64
dtypes: datetime64[ns](1), float64(1), int64(1), object(5)
memory usage: 1.4+ KB
예시 2)
df.select_dtypes(include='object') # # 문자열형 열만 선택
-->
예시 3)
df.select_dtypes(exclude='object') # 문자열형 열을 제외하고 나머지 열만 선택
-->
예시 4)
df.select_dtypes(exclude='object').head() # 문자열형 열을 제외한 나머지 열을 선택 #head():상위 5개의 행을 확인
예시 5)
df.select_dtypes(exclude=['object' , 'datetime64[ns]']) + 10 # 숫자형 열에 10을 더하기
-->
예시 6)
# str_cols는 데이터프레임에서 문자열형(object) 열의 이름들을 저장
str_cols = df.select_dtypes(include='object').columns
str_cols
-->
Index(['name', 'group', 'company', 'gender', 'blood'], dtype='object')
예시 7)
df[str_cols]
-->
18. get_dummis()
get_dummies()는 Pandas에서 범주형 데이터를 원-핫 인코딩(one-hot encoding) 방식으로 변환하는 데 사용됩니다.
> 원-핫 인코딩
* 원-핫 인코딩은 각 범주를 별도의 열로 변환하고, 해당 범주에 해당하는 곳에 1을, 나머지에는 0을 채우는 방식입니다.
* 예를 들어, 데이터가 "Red", "Green", "Blue"와 같은 문자열이라면, 모델은 이를 이해하지 못합니다.
* 범주형 데이터를 숫자로 변환해야 모델이 계산할 수 있습니다.
* 원-핫 인코딩은 범주형 데이터를 숫자로 변환하면서도 각 범주 간의 순서나 크기를 부여하지 않습니다.
예시 1)
blood_map = {'A': 0, 'B': 1, 'AB' : 2, '0': 3} # 혈액형 매핑 딕셔너리
df['blood_code'] = df['blood'].map(blood_map) # 'blood' 열을 'blood_code'로 변환
df.head()
-->
예시 2)
# pd.get_dummies()는 범주형 데이터를 원-핫 인코딩하여 더미 변수를 생성
# 0과 1을 True or False로 표현
pd.get_dummies(df['blood'])
-->
예시 3)
#혈액형별로 a, ab, b, o형을 true or false로 표현
df = pd.get_dummies(df, columns=['blood'])
df
-->
예시 4)
df.info()
-->
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 20 entries, 0 to 19
Data columns (total 12 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 name 20 non-null object
1 group 20 non-null object
2 company 19 non-null object
3 gender 20 non-null object
4 birthday 20 non-null datetime64[ns]
5 height 19 non-null float64
6 brand 20 non-null int64
7 blood_code 16 non-null float64
8 blood_A 20 non-null bool
9 blood_AB 20 non-null bool
10 blood_B 20 non-null bool
11 blood_O 20 non-null bool
dtypes: bool(4), datetime64[ns](1), float64(2), int64(1), object(4)
memory usage: 1.5+ KB
'LLM(Large Language Model)의 기초' 카테고리의 다른 글
Matplotlib (4) | 2024.12.19 |
---|---|
4. Online Retail 데이터셋 (1) | 2024.12.18 |
1. 판다스(Pandas) (2) | 2024.12.17 |
9. 넘파이(Numpy) (0) | 2024.12.16 |
FAST API (8) | 2024.12.13 |