[3주차 목표]
1. 데이터프레임 사용법을 익힌다.
2. 파이썬을 이용해서 데이터를 각종 차트로 시각화해본다.
3. 상관 관계 분석에 대해서 이해한다.
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')