일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Toast 메시지 띄우기
- 앱네임체인지
- AWS
- BottomNavigationView
- 안드로이드 개발
- 안드로이드 스튜디오 애니메이션 효과주기
- Log.i
- 안드로이드 스튜디오 앱이름 변경
- 주사위 게임 앱
- 액티비티 라이프 사이클
- 안드로이드 로그보기
- 라이프사이클관리
- 안드로이드 스튜디오 알림메시지
- android studio
- AndroidTips
- 안디르오드 스튜디오 Logcat
- Snackbar 메시지 띄우기
- PANDAS
- 파이티스
- 안드로이드 스튜디오 앱이름
- 안드로이드 스튜디오 하단바
- 안드로이드스튜디오 사용자 메시지
- 안드로이드 스튜디오 Fragment 화면전환
- 안드로이드 스튜디오 네비게이션바
- 안드로이드 스튜디오
- 안드로이드 스튜디오 탭바
- 안드로이드 스튜디오 생명주기
- 앱 디버깅
- Android 앱 개발
- 안드로이드 스튜디오 미디어재생
- Today
- Total
파이티스
파이썬 Pandas 라이브러리와 groupby함수 사용으로 실습하기 3 본문
groupby 함수란?
- 데이터를 그룹화하여 특정 기준에 따라 그룹으로 묶는 데 사용되는 파이썬의 함수
- 판다스(Pandas) 라이브러리와 함께 가장 자주 사용
- 판다스는 데이터 조작과 분석을 위한 강력한 도구로 널리 사용
- 데이터프레임(DataFrame)이라는 자료구조를 제공
- 데이터프레임을 그룹화하기 위해 사용
Pandas 기초실습 3
- winemag-data-130k-v2.csv 파일을 reviews 로 읽는다.
import pandas as pd
reviews = pd.read_csv('D:/yh-k4-main/yh-k4-main/data/winemag-data.csv',index_col=0)
- 데이터 확인하기 위해 head(2) 맨앞 데이터 2개만 불러와서 확인
reviews.head(2)
- 과정1 )
- 리뷰 데이터프레임에서 points 컬럼의 median 값은?
- median이란?
- 주어진 데이터를 오름차순 또는 내림차순으로 정렬했을 때 중간에 위치하는 값
- 데이터를 절반으로 나누어 전체 데이터셋을 두 개의 동일한 크기로 나눈다.
- 중간 값은 데이터를 정렬하여 중간에 위치한 값이므로, 전체 데이터셋을 대표하는 값으로 사용
reviews['points'].median()
- 과정2 )
- 나라를 중복되지 않도록 가져와서 countries 변수에 저장하고, 화면에 출력하시오.
countries = reviews['country'].unique()
countries
reviews['country'].nunique()
- 실제 나라의 개수는 43개 인데 위에서는 NaN이 포함되어 44개가 출력된다.
- notna()를 사용하여 NaN을 포함시키지 않고 출력한다.
reviews['country'][reviews['country'].notna()].unique() # nan 제외
- 과정3 )
- 각 국가별로는 몇개의 리뷰가 있는지, 각국가별 리뷰수를 구하시오.
- 국가별로 그룹화 함.
reviews.groupby('country')
- count()를 사용하여 그룹으로 묶인 나라의 리뷰수를 구함.
- 방법1)
reviews.groupby('country')['country'].count() # 방법1
방법2)
reviews['country'].value_counts() # 방법2 내림차순으로 정렬
방법3)
reviews.groupby('country')['country'].count().sort_values(ascending=False) #방법3
- 과정4 )
- 리뷰 데이터프레임의 price 컬럼 값에서, price의 평균값을 뺀 값을, centered_price 라고 저장하시오.
- 통계량 보기
reviews.describe()
- mean()을 사용하여 평균값을 빼기
centered_price = reviews['price'] - reviews['price'].mean()
centered_price
- 과정5 )
- 나는 경제적이므로, 가격대비 포인트가 가장 큰 와인을 사려한다. 해당 와인의 title은?
- 가성비에 대한 컬럼이 없어서 만들자!
- 가성비의 공식은 " 포인트 / 가격 " 이다.
# 컬럼에 가격대비 포인트가 없다.
# 그러므로 데이터가공을 해야 한다.
# 결론은 "가격대비 포인트" 컬럼을 만든다.
# 포인트 / 가격 = 가성비
reviews['가성비'] = reviews['points'] / reviews['price']
reviews
- 맨 마지막에 가성비 컬럼이 생성되고 값이 표시됨.
- 가성비 내림차순으로 정렬
reviews.sort_values('가성비',ascending=False)
- 과정6 )
- 사람들이 어떤와인을 더 많이 거론했는지 보려한다.
"tropical" 이 들어있는 리뷰의 갯수를 세고, "fruity" 라고 들어있는 리뷰의 갯수를 세어서 판다스 시리즈
descriptor_counts 변수로 만들어 보자.
- 깃 허브의 데이터분석 항목 참고
- 데이터프레임의 apply 함수도 고려
"tropical" 리뷰 갯수 세기
- apply 함수 사용
def is_tropical(sentence): # tropical 함수를 만들어서 아래 apply함수에 적용
if 'tropical' in sentence:
return True
else :
return False
reviews['description'].apply(is_tropical).sum() # apply 함수 사용
- pandas.Series.str.contains 형식으로 구하기
# reviews['description'] # 이 소스의 결과는 판다스 시리즈
reviews['description'].str.contains('tropical').sum() # pandas.Series.str.contains 형식으로 구하기
"fruity" 리뷰 갯수 세기
- apply 함수 사용
def is_fruity(sentence): # tropical 함수를 만들어서 아래 apply함수에 적용
if 'fruity' in sentence:
return True
else :
return False
reviews['description'].apply(is_fruity).sum()
- pandas.Series.str.contains 형식으로 구하기
reviews['description'].str.contains('fruity').sum()
과정7 )
- 별점 시스템을 만들려고 한다. 따라서 별점에 대한 데이터가 필요하다.
별점은 1,2,3 즉 3개로 만들것이다.
포인트가 95점 이상이면 3점, 85점 이상이면 2점, 나머지는 1점으로 할 것이다.
리뷰데이터를 통해 각 데이터의 별점을 구하시오.
reviews['points']
- get_star 함수를 정의하고 apply함수 사용
- star칼럼을 새로 만들고 별점을 넣어준다.
def get_star(point):
if point >= 95:
return 3
elif point >= 85:
return 2
else:
return 1
reviews['star'] = reviews['points'].apply(get_star)
과정8 )
- 리뷰의 region_2 컬럼에 데이터가 비어있는 경우에는, 'Unknown'으로 셋팅하자.
reviews['region_2'] = reviews['region_2'].fillna('Unknown')
reviews.head(2)
- 과정9 )
- 각 포인트 별로, 몇개의 리뷰가 있는가?
예를들어, 95점은 4개, 94점은 10개 등등... 알고싶은 경우다.
reviews['points'].value_counts()
- 오름차순으로 정렬해보기
reviews.groupby('points')['points'].count().sort_values(ascending=True)
- 과정10 )
- 가장 점수가 좋은 와인은?
가정 높은 점수는 100점이다.
reviews['points'].max()
- 100점을 받은 와인 데이터만 loc를 사용하여 출력한다.
reviews.loc[reviews['points'] == reviews['points'].max() , ]
reviews.loc[reviews['points'] == 100, ].count
- 과정11 )
- 점수는 높고 가격은 싼 와인 순으로 보여주시오.
- points는 내림차순으로, price는 오름차순으로 정렬
- 이때 ascending도 리스트화 하여 ['points','price'] ascending=[False,True]) 해준다.
reviews.sort_values(['points','price'],ascending=[False,True])
- 과정12 )
- 포인트별로, 가격의 최소값을 구해본다
- 이것을 구하면 100점짜리 와인을 먹으려면, 최소한 얼마가 있어야 하는지 파악이 가능함.
reviews.groupby('points') # 포인트별로 묶어라
reviews.groupby('points')['price'].min()
- 과정13 )
- 포인트별로 제일 싼 와인과 제일 비싼와인을 한번에 보기
import numpy as np
reviews.groupby('points')['price'].agg([np.min , np.max]) # agg함수 : 집계하다.
import numpy as np
reviews.groupby('points')['price'].agg([np.min , np.max]).sort_index(ascending=False) # 포인트 내림차순 정렬
실습 끝!
'Python > Pandas' 카테고리의 다른 글
파이썬 Pandas 라이브러리와 loc함수 사용으로 실습하기 2 (0) | 2023.05.23 |
---|---|
파이썬 Pandas 라이브러리 정의를 알아보고, 사용방법 실습하기 (0) | 2023.05.23 |