[3주차_데이터분석] 개발일지 (데이터프레임 사용법)

Coastby·2022년 7월 8일
0
post-custom-banner

[3주차 목표]

1. 데이터프레임 사용법을 익힌다.
2. 파이썬을 이용해서 데이터를 각종 차트로 시각화해본다.
3. 상관 관계 분석에 대해서 이해한다.

○ CSV 파일 읽기

import pandas as pd
url = 'https://raw.githubusercontent.com/justmarkham/DAT8/master/data/drinks.csv'
drink_df = pd.read_csv(url, ',')

✋ read_csv vs read_table
세부적인 차이가 있기는 한데, 우리가 사용하는 범위에서는 거의 비슷하다.

  • pandas.read_table :
    Read general delimited file into DataFrame.
    sep : str, default ‘\t’ (tab-stop)
  • pandas.read_csv :
    Read a comma-separated values (csv) file into DataFrame.
    sep : str, default ‘,’

○ 데이터프레임의 행 출력

  • head()
# 상위 5개의 행을 출력
drink_df.head()
  • tail()
# 하위 5개의 행을 출력
drink_df.tail()
  • sample()
# 랜덤으로 선택된 10개의 행을 출력
drink_df.sample(10)

○ 데이터프레임 정보 확인

  • index
#0에서 시작하여 1씩 증가한다. 193에서 stop한다는 것은 포함하지 않는다는 의미이다.
#즉, index는 192까지 있으며, 샘플 수는 193개이다.
>>> df.index
RangeIndex(start=0, stop=193, step=1)
  • dtypes
# 각 컬럼의 타입 출력
drink_df.dtypes
#Result
country                          object
beer_servings                     int64
spirit_servings                   int64
wine_servings                     int64
total_litres_of_pure_alcohol    float64
continent                        object
dtype: object
  • shape

# 데이터프레임의 행과 열의 개수 출력
drink_df.shape
#Result
(193, 6)
  • values
# Numpy 타입으로 출력
drink_df.values
#Result
array([['Afghanistan', 0, 0, 0, 0.0, 'AS'],
       ['Albania', 89, 132, 54, 4.9, 'EU'],
       ['Algeria', 25, 0, 14, 0.7, 'AF'],
       ...,
       ['Yemen', 6, 0, 0, 0.1, 'AS'],
       ['Zambia', 32, 19, 4, 2.5, 'AF'],
       ['Zimbabwe', 64, 18, 4, 4.7, 'AF']], dtype=object)

# Numpy 타입도 list처럼 인덱싱가능
drink_df.values[0]
#Result
array(['Afghanistan', 0, 0, 0, 0.0, 'AS'], dtype=object)
  • info()
drink_df.info()
#Result
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 193 entries, 0 to 192
Data columns (total 6 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   country                       193 non-null    object 
 1   beer_servings                 193 non-null    int64  
 2   spirit_servings               193 non-null    int64  
 3   wine_servings                 193 non-null    int64  
 4   total_litres_of_pure_alcohol  193 non-null    float64
 5   continent                     170 non-null    object 
dtypes: float64(1), int64(3), object(2)
memory usage: 9.2+ KB
  • isnull().sum()
print(drink_df.isnull().sum())
#Result
country                          0
beer_servings                    0
spirit_servings                  0
wine_servings                    0
total_litres_of_pure_alcohol     0
continent                       23
dtype: int64
  • dropna()
    : 결측 데이터가 포함된 행 제거

○ 데이터프레임 열에 접근

  • 데이터프레임이름.열의이름 or 데이터프레임이름['열의이름']
# beer_servings 열에 접근
drink_df.beer_servings
# 또 다른 방법
drink_df['beer_servings']
#Series타입으로 출력

# 다수의 열에 접근
drink_df[['beer_servings','wine_servings']]

○ 열의 정보 파악하기

  • describe()
    숫자데이터로 구성된 열 분석하기
    std : 표준편차
drink_df.describe()

#특정 열만 출력
drink_df.beer_servings.describe()

#특정 열의 특정 정보만 출력
# beer_servings의 평균
drink_df.beer_servings.mean()

○ 정렬과 로직 사용하기

  • 조건부 로직

데이터 프레임에서 원하는 조건에 해당하는 행만 가져오고 싶을 때 사용한다.
데이터프레임이름.특정열이름 == '특정값'
데이터프레임이름['특정열이름'] == '특정값'
이라는 코드는 각 행에서 해당 조건에 만족하면 True, 아니면 False 값을 가지는 Series를 리턴한다.
이를 이용하여 원하는 데이터프레임 값을 뽑아내려고 하면 위의 series를 사용하여 다음과 같이 표현한다.
데이터프레임이름[데이터프레임이름.특정열이름 == '특정값']
데이터프레임이름[데이터프레임이름['특정열이름'] == '특정값']

# 출력이 너무 길어져서 상위 20개의 행만 뽑도록 했습니다.
drink_df[drink_df.continent=='EU'].head(20)

원하는 조건을 걸고 원하는 열만 출력하고 싶으면 뒤에 열의 이름을 붙여준다.

# 지면의 한계로 20개만 출력
drink_df[drink_df.beer_servings <= 10][['country','beer_servings']].head(20)

원하는 조건에서 평균값 등 얻기

#EU에서 맥주소비량 평균
drink_df[drink_df.continent=='EU'].beer_servings.mean()
  • 연산자
# NOT 조건
drink_df[~(drink_df.continent=='EU')]
# AND 조건
drink_df[(drink_df.continent=='EU') & (drink_df.wine_servings > 300)]
  • 정렬하기
    데이터프레임이름.sort_values('정렬기준열이름') (오름차순)
    데이터프레임이름.sort_values('정렬기준열이름', ascending=False) (내림차순)
# 다수의 열도 가능. 순서는 중요도 반영.
# 2개의 열을 기준으로 정렬
drink_df.sort_values(['beer_servings', 'wine_servings'])

#값이 높은 순으로 출력
drink_df.nlargest(10, 'total_litres_of_pure_alcohol', keep='all')
profile
훈이야 화이팅
post-custom-banner

0개의 댓글