728x90
반응형
SMALL

Matplotlib은 Matlab과 비슷한 명령어 스타일로 동작하는 함수의 모음으로 파이썬 기반 시각화 라이브러리입니다. pandas와 호환성이 높아 연동이 용이하지만, 한글 지원이 완벽하지 않다는 단점이 있습니다.

Matplotlib로 간단한 그래프 그리기

python
import matplotlib.pyplot as plt

plt.plot([1,2,3,4])
plt.show()

python
plt.plot([1,2,3,4], [1,4,10,15])
plt.show()

python
import numpy as np

data = np.arange(1, 100)
plt.plot(data)
plt.show()

다수 그래프 그리기

python
data1 = np.arange(1, 50)
plt.subplot(2, 1, 1)
plt.plot(data1)

data2 = np.arange(50, 100)
plt.subplot(2, 1, 2)
plt.plot(data2)

plt.show()
python
data1 = np.arange(0, 100)
plt.subplot(131)
plt.plot(data1)

data2 = np.arange(0, 100)
plt.subplot(132)
plt.plot(data2)

data3 = np.arange(0, 100)
plt.subplot(133)
plt.plot(data3)

plt.show()

Matplotlib 스타일 옵션

Matplotlib를 사용한 시각화를 더욱 예쁘고 효과적으로 꾸미기 위해서는 스타일 옵션을 사용할 수 있습니다. 이를 위해서는 먼저 Colab에 나눔체를 설치한 후 아래 코드를 실행해야 합니다.

python
!sudo apt-get install -y fonts-nanum
!sudo fc-cache -fv
!rm ~/.cache/matplotlib -rf
python
import matplotlib.pyplot as plt

plt.rc('font', family = 'NanumBarunGothic') # 나눔바른고딕 폰트 사용
plt.figure(figsize=(6, 8)) # 그래프 크기 지정
plt.plot([1,2,3], [1,2,3])
plt.plot([1,2,3], [2,4,6])

plt.title('타이틀', fontsize=30)
plt.xlabel('X축', fontsize=20)
plt.ylabel('Y축', fontsize=20)

.show()
python
plt.figure(figsize=(15, 10))


plt.title('마커설정', fontsize=30)
plt.plot(np.arange(10), np.arange(10), color='b', marker='o', linestyle='')
plt.plot(np.arange(10), np.arange(10)*2, color='r', marker='v', linestyle='--')
plt.plot(np.arange(10), np.arange(10)*3, color='y', marker='*', linestyle='-.')


plt.legend(['10', '10*2', '10*3'], fontsize=15, loc='lower right', ncol=3) #
plt.xlim(0, 12)
plt.ylim(0, 30)


plt.xticks(rotation=30)
plt.yticks(rotation=50)
plt.show()

Matplotlib을 이용한 바 차트 그리기

Matplotlib를 이용하여 바 차트를 그는 방법은 다음과 같습니다.

python
x = ['파이썬', '데이터분석', '머신러닝', '딥러닝', '컴퓨터비전', '자연어처리']
y = [ 95, 80, 65, 30, , 10]

plt.figure(figsize=(8, 5))
plt.bar(x, y, align='center',alpha=0.7, color='#e35f62')
plt.title('AI 성적표', fontsize=25)

plt.ylabel('점수')
plt.show()
 
728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요. 이번 포스팅에서는 데이터프레임에서 등수 매기기와 날짜 타입 다루기, apply와 map 메소드에 대해서 다루고, 마지막으로 One Hot Encoding 방법을 알아보겠습니다.

데이터프레임에서 등수 매기기

  • pandas.rank(): 데이터 프레임에서 등수를 매기는 함수입니다. ascending 옵션을 이용해서 오름차순이나 내림차순으로 등수를 매길 수 있습니다. 순위를 매긴 뒤, astype() 메소드를 이용해서 int 형으로 변경해주어야 합니다.
python
# 브랜드평판지수를 기준으로 등수 매기기
df1['브랜드순위'] = df1['브랜드평판지수'].rank(ascending=False)
df1['브랜드순위'] = df1['브랜드순위'].astype('int')

날짜 타입 다루기

  • pandas.to_datetime(): 데이터 프레임에서 날짜를 처리하기 위한 함수입니다. 기존의 object 타입에서 datetime 타입으로 변환합니다. 이후, dt 속성을 이용하여 각 날짜 변수를 사용할 수 있습니다.
python
# 생년월일을 datetime 타입으로 변환
df['생년월일'] = pd.to_datetime(df['생년월일'])

# dt 속성을 이용해 생년월일의 년, 월, 일, 요일, 해당 연도의 몇번째 주인지 등을 알아볼 수 있습니다.
df['생년월일'].dt.year
df['생년월일'].dt.month
df['생년월일'].dt.day
df['생년월일'].dt.dayofweek
df['생년월일'].dt.isocalendar().week

apply 메소드

  • apply() 메소드는 특정 함수를 실행시켜 결과를 반환하는 함수입니다. DataFrame 혹은 Series에서 apply() 메소드를 호출하면, 첫 번째 인수로 전달된 함수를 시리즈의 각 요소에 적용하여 반환합니다. 이 때 input으로는 람다 함수 혹은 일반 함수가 들어갈 수 있습니다.
python
# 성별을 1, 0으로 변환하는 일반 함수
def male_or_female(x):
    if x =='남자':
        return 1
    elif x == '여자':
        return 0

# apply를 이용해 성별 데이터 변환하기
df['new성별'] = df['성별'].apply(male_or_female)

# apply와 람다 함수를 이용한 코드 (한 줄로 작성 가능)
df['new성별'] = df['성별'].apply(lambda x: 1 if x == '남자' else 0)

map 메소드

  • map() 메소드 역시 apply와 비슷한 함수입니다. 입력값이 Series일 때, 해당 Series안의 요소들을 인자로 전달하는 함수를 적용하여 결과를 출력합니다. map()은 딕셔너리 형태로 각 범주에 대한 처리 방법을 입력할 수 있기 때문에 매우 간편합니다.
python
# 딕셔너리를 활용한 map() 예시
blood_map = { "A": 0, 'B': 1, 'AB':2, "O": 3}
df['혈액형_code'] = df['혈액형'].map(blood_map)

One Hot Encoding

  • One Hot Encoding(원 핫 인코딩)은 데이터프레임의 카테고리 변수를 더미 변수(Dummy Variable)로 변환하는 방법입니다. 이 방법은 머신닝 알고리즘에서 범주형 변수를 처리하기 위해 사용됩니다.
python
# pd.get_dummies()를 이용한 one hot encoding 기능
# 분류해야 할 범위를 선택하고 해당 범위를 인자로 전달하면 원하는 더미 인코딩 값을 생성해줍니다.
.get_dummies(df['혈액형_code'])

# columns 인자를 이용해서 새 칼럼 이름을 지정하여 더미 인코딩 값을 가져올 수 있습니다.
df_one_hot = pd.get_dummies(df, columns=['혈액형_code'])

이번 포스팅에서는 데이터프레임에서수 매기기, 날짜 타입 다루기, apply와 map 메소드, 그리고 One Hot Encoding 방법에 대해서 다뤄봤습니다.

728x90
반응형
LIST
728x90
반응형
SMALL
  • pandas.concat(): concat()은 데이터를 합치는데 사용됩니다. axis=0은 위 아래로(세로로), axis=1은 왼쪽 오른쪽으로(가로로) 합치는 방법을 의미합니다.
python
# DataFrame 불러오기
df1 = pd.read_csv('http://bit.ly/ds-korean-idol')
df2 = pd.read_csv('https://bit.ly/ds-korean-idol-2')

# 두 데이터 프레임을 합치기
pd.concat([df1, df2], axis=0)

# 합친 데이터프레임의 index를 새로 설정
df_concat = pd.concat([df1, df2], sort=False)
df_concat.reset_index(drop=True)

# 두 개의 데이터프레임을 가로 방향으로 합치기
pd.concat([df1, df2], axis=1)

# 한 쪽 데이터프레임에서 일부 데이터 삭제 후, 다른 데이터 프레임과 결합하기
df3 = df2.drop([3, 5])
pd.concat([df1, df3], axis=1)

# 특정 값을 기준으로 데이터프레임 병합하기
merged_df = pd.merge(df1, df3, on='이름', how='left')
  • pandas.merge(): merge()는 특정 키(값이 서로 유일한 id)값을 기준으로 데이터를 합치는 메소드입니다. how 옵션을 이용해서 병합 기준을 정할 수 있습니다.
python
# 이름으로 기존 데이터프레임과 새 데이터 프레임을 병합하는 예시
df_right = df2.drop([1,3,5,7,9], axis=0)
df_right.reset_index(drop=True)
pd.merge(df1, df_right, on='이름', how='left')

# 새로운 데이터프레임 정보 추가 후, 병합하기
df_right = df_right.append({'이름': '김사과', '연봉': 5000, '가족수': 5}, ignore_index=True)
pd.merge(df1, df_right, on='이름', how='right')

# 두개 데이터프레임에서 컬럼명이 다를 경우, 오른쪽 데이터프레임 컬럼명 변경하며 병합하기
df_right.columns = ['성함', '연봉', '가족수']
pd.merge(df1, df_right, left_on='이름', right_on='성함', how='right')

이번 포스팅에서는 pandas를 이용하여 데이터프레임을 결합하는 방법에 대해서 알아보았습니다.

728x90
반응형
LIST
728x90
반응형
SMALL

DataFrame을 다루다 보면 중복된 데이터를 제거해야 할 경우가 있습니다. pandas에서는 중복된 데이터를 찾아서 제거하는 drop_duplicates() 메소드를 제공하고 있습니다. drop_duplicates() 메소드를 사용하면 중복된 데이터를 확인할 수 있습니다.

python
# DataFrame 불러오기
df = pd.read_csv('data.csv')

# 중복된 혈액형 정보 제거
df['혈액형'].drop_duplicates()

# 중복된 혈액형 정보에서 마지막 행 제거
df['혈액형'].drop_duplicates(keep='last')

# 열의 각 값에 대한 발생 횟수(데이터의 개수) 반환
df['그룹'].value_counts()

# 열의 각 값에 대한 발생 횟수(데이터의 개) 반환(결과에 nan도 표기)
df['그룹'].value_counts(dropna=False)
728x90
반응형
LIST
728x90
반응형
SMALL

Pandas를 이용하면 간편하게 통계값을 구할 수 있습니다. DataFrame의 describe() 메소드를 이용하면 숫자, 문자형 데이터의 기본적인 통계값이 나옵니다. 이 외에도 평균(mean), 합(sum), 갯(count), 최대값(max), 분산(var), 표준편차(std) 등을 구할 수 있습니다.

python
import pandas as pd

# DataFrame 불러오기
df = pd.read_csv('data.csv')

# describe() 메소드를 이용한 숫자, 문자형 데이터 통계값 구하기
df.describe()

# 특정 열의 평균(mean), 합(sum), 갯수(count), 최대값(max), 분산(var), 표준편차(std) 구하기
df['키'].mean()
df['키'].sum()
df['키'].count()
df['키'].max()
df['키'].var()
df['키'].std()

Pandas를 이용한 그룹으로 묶기

그룹으로 묶어석하기 위해서 pandas를 이용할 수 있습니다. DataFrame의 groupby() 메소드를 이용하면 데이터를 그룹으로 묶어 분석할 수 있습니다.

python
# DataFrame 불러오기
df = pd.read_csv('data.csv')

# 소속사별로 그룹을 맺어 각속사별 인원수 구하기
df.groupby('소속사').count()

# 그룹의 평균 구하기
df.groupby('그룹').mean()

# 성별별 평균 구하기
df.groupby('성별').mean()

# 혈액형별로 그룹을 맺어, 키의균값을 확인
df.groupby('혈액형').mean()

# 혈액형으로 그룹을 맺어, 키의 평균을 확인
df.groupby('혈액')['키'].mean()

# 혈액형, 성별로 그룹을 맺어 키의 평균 구하기
df.groupby(['혈액형', '성별'])['키mean()

이번 포스팅이 여러분이 Pandas를 이용해서 통계값을 다루고 그룹으로 묶는데 도움이 되었를 바랍니다.

728x90
반응형
LIST
728x90
반응형
SMALL

안녕하세요! 오늘은 Pandas를 사용하여 데이터프레임의 행과 열을 추가, 수정, 제거하는 방법에 대해 알아보겠습니다. 차근차근 따라오신다면 어렵지 않게 이해하실 수 있을 것입니다.

10. 행 추가하기

먼저 행을 추가하는 방법을 살펴보겠습니다. 이는 주로 dict 형태의 데이터를 만든 후 append()를 사용하여 데이터를 추가하는데, 반드시 ignore_index=True 옵션을 추가해야 에러가 발생하지 않습니다.

python
dic1 = {
    '이름':'김사과',
    '그룹':'애플',
    '소속사':'apple',
    '성별':'여자',
    '생년월일':'2000-01-01',
    '키':160,
    '혈액형': 'A',
    '브랜드평판지수': 987654321
}
df = df.append(dic1, ignore_index=True)
df

10-2. 열 추가하기

열을 추가하는 방법에 대해 알아보겠습니다.

python
df['국적'] = '대한민국'
df.tail()

# 김사과의 국적을 미국으로 변경 (단, loc를 사용하여 작성)
df.loc[df['이름'] == '김사과', '국적'] = '미국'
df

10-3. 열 제거하기

이제 열 제거 방법에 대해 살펴보겠습니다.

python
# 열 제거하기 (그룹, 소속사가 날아갔다)
df.drop(['그룹', '소속사'], axis=1)

10-4. 행 제거하기

마지막으로 행 제거 방법에 대하여 알아보겠습니다.

python
# 행 제거하기 (inplace 연산이 아님)
df.drop(15, axis=0)

# 여러 행 삭제하기
df.drop([1, 3, 5, 15], axis=0)

오늘은 Pandas를 사용하여 행과 열을 추가, 수정, 제거하는 방법에 대해 알아보았습니다.

728x90
반응형
LIST

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

Pandas 중복값 제거  (0) 2023.06.08
Pandas를 이용한 통계값 다루기, 그룹으로 묶기  (0) 2023.06.08
Pandas 데이터 복사 방법 - 원본 데이터 훼손 방지  (0) 2023.06.08
Pandas  (0) 2023.06.08
Numpy  (0) 2023.06.08

+ Recent posts