Python 데이터분석 라이브러리(10) - Pandas(Exercise)
Data-Science 강의는 여러 절로 구성되어 있습니다.
- Python 데이터분석 라이브러리(1) - NumPy
- Python 데이터분석 라이브러리(2) - NumPy(Exercise)
- Python 데이터분석 라이브러리(3) - Pandas(Series)
- Python 데이터분석 라이브러리(4) - Pandas(DataFrame 생성)
- Python 데이터분석 라이브러리(5) - Pandas(DataFrame indexing)
- Python 데이터분석 라이브러리(6) - Pandas(DataFrame functions)
- Python 데이터분석 라이브러리(7) - Pandas(DataFrame merge)
- Python 데이터분석 라이브러리(8) - Pandas(DataFrame 제어)
- Python 데이터분석 라이브러리(9) - Pandas(DataFrame Grouping)
- Python 데이터분석 라이브러리(10) - Pandas(Exercise)
Pandas Exercise - 1
Group Lens(미네소타 대학 컴퓨터과의 research lab)에서 수집한 영화 데이터를 이용해 데이터 분석을 해 보자.
영화의 선호 정보를 1~5사이의 점수로 표현 (5에 가까울수록 선호)
pandas를 사용하여 다음의 문제를 해결합니다. 동률이 있을 경우 오름차순으로 정렬하여 출력합니다.
1. 사용자가 평가한 모든 영화의 전체 평균 평점을 출력하세요.
2. 각 사용자별 평균 평점을 구하세요. 출력시 정렬은 userId로 오름차순 정렬합니다.
3. 각 영화별 평균 평점을 구하세요. 출력시 정렬은 movieId로 오름차순 정렬합니다.
4. 평균 평점이 가장 높은 영화의 제목을 출력하세요.
단, 동률이 있을 경우 모두 출력하고 title을 기준으로 오름차순 정렬하세요.
5. Comedy영화 중 가장 평점이 낮은 영화의 제목을 출력하세요.
단, 동률이 있을 경우 모두 출력하고 title을 기준으로 오름차순 정렬하세요.
6. 2015년도에 평가된 모든 Romance 영화의 평균 평점은?
예상되는 정답.
1. 사용자가 평가한 모든 영화의 전체 평균 평점을 출력하세요.
=> 3.501556983616962
2. 각 사용자별 평균 평점을 구하세요. 출력시 정렬은 userId로 오름차순 정렬합니다.
=> userId
1 4.366379
2 3.948276
3 2.435897
4 3.555556
5 3.636364
...
606 3.657399
607 3.786096
608 3.134176
609 3.270270
610 3.688556
Name: rating, Length: 610, dtype: float64
3. 각 영화별 평균 평점을 구하세요. 출력시 정렬은 movieId로 오름차순 정렬합니다.
=> movieId title rating
0 1 Toy Story (1995) 3.920930
1 2 Jumanji (1995) 3.431818
2 3 Grumpier Old Men (1995) 3.259615
3 4 Waiting to Exhale (1995) 2.357143
4 5 Father of the Bride Part II (1995) 3.071429
... ... ... ...
9737 193581 Black Butler: Book of the Atlantic (2017) 4.000000
9738 193583 No Game No Life: Zero (2017) 3.500000
9739 193585 Flint (2017) 3.500000
9740 193587 Bungo Stray Dogs: Dead Apple (2018) 3.500000
9741 193609 Andrew Dice Clay: Dice Rules (1991) 4.000000
9742 rows × 3 columns
4. 평균 평점이 가장 높은 영화의 제목을 출력하세요.
단, 동률이 있을 경우 모두 출력하고 title을 기준으로 오름차순 정렬하세요.
=> movieId title rating
5690 27751 'Salem's Lot (2004) 5.0
7332 77846 12 Angry Men (1997) 5.0
9046 141816 12 Chairs (1976) 5.0
3893 5468 20 Million Miles to Earth (1957) 5.0
5639 27373 61* (2001) 5.0
... ... ... ...
9711 187717 Won't You Be My Neighbor? (2018) 5.0
8355 108795 Wonder Woman (2009) 5.0
9289 158398 World of Glory (1991) 5.0
9560 173351 Wow! A Talking Fish! (1983) 5.0
7521 84273 Zeitgeist: Moving Forward (2011) 5.0
296 rows × 3 columns
5. Comedy영화 중 가장 평점이 낮은 영화의 제목을 출력하세요.
단, 동률이 있을 경우 모두 출력하고 title을 기준으로 오름차순 정렬하세요.
=> movieId title genres
8893 134528 Aloha (2015) Comedy|Drama|Romance
5777 31422 Are We There Yet? (2005) Children|Comedy
7762 91414 Arthur Christmas (2011) Animation|Children|Comedy|Drama
9419 165645 Bad Santa 2 (2016) Comedy
4439 6557 Born to Be Wild (1995) Adventure|Children|Comedy|Drama
5409 25782 Boudu Saved From Drowning (Boudu sauvé des eau... Comedy
6554 54934 Brothers Solomon, The (2007) Comedy
5453 26095 Carabineers, The (Carabiniers, Les) (1963) Comedy|Drama|War
6545 54768 Daddy Day Camp (2007) Children|Comedy
4881 7312 Follow Me, Boys! (1966) Comedy|Drama
7553 85334 Hard Ticket to Hawaii (1987) Action|Comedy
8417 110773 Haunted House 2, A (2014) Comedy|Horror
5662 27595 Jesus Christ Vampire Hunter (2001) Action|Comedy|Horror|Musical
8984 138798 Joe Dirt 2: Beautiful Loser (2015) Comedy
7820 92681 Journey 2: The Mysterious Island (2012) Action|Adventure|Comedy|Sci-Fi|IMAX
6160 44243 Leprechaun 4: In Space (1997) Comedy|Fantasy|Horror|Sci-Fi
8248 104644 Maria Bamford: The Special Special Special! (2... Comedy
7201 72696 Old Dogs (2009) Comedy
9056 141994 Saving Christmas (2014) Children|Comedy
5258 8632 Secret Society (2002) Comedy
9590 175475 The Emoji Movie (2017) Animation|Children|Comedy
8908 135216 The Star Wars Holiday Special (1978) Adventure|Children|Comedy|Sci-Fi
8676 122246 Tooth Fairy 2 (2012) Children|Comedy
5795 31692 Uncle Nino (2003) Comedy
6784 60363 Zombie Strippers! (2008) Comedy|Horror
6. 2015년도에 평가된 모든 Romance 영화의 평균 평점은?
=> 3.396375098502758
Pandas Exercise - 2
R에서 데이터 분석에 사용되는 mpg data set을 이용하여 pandas로 기술분석을 진행합니다.
mpg data set 파일은 아래 링크에서 다운로드 할 수 있습니다.
만약 R이 설치되어 있다면 다음의 코드로 데이터파일을 생성할 수 있습니다.
## mpg data set 파일 저장
library(ggplot2)
df <- as.data.frame(mpg)
write.csv(df,
file="C:/notebook_dir/mpg.txt",
row.names = F,
quote = F,
fileEncoding = "UTF-8")
기본적인 column에 대한 설명은 아래와 같고 더 자세한 설명은 아래에 링크된 사이트로 이동하시면 상세한 설명을 보실 수 있습니다.
# 주요컬럼 설명
# manufacturer : 제조회사
# displ : 배기량
# cyl : 실린더 개수
# drv : 구동 방식
# hwy : 고속도로 연비
# class : 자동차 종류
# model : 자동차 모델명
# year : 생산연도
# trans : 변속기 종류
# cty : 도시 연비
# fl : 연료 종류
pandas를 사용하여 다음의 문제를 해결합니다.
1. displ(배기량)이 4 이하인 자동차와 5 이상인 자동차 중
어떤 자동차의 hwy(고속도로 연비)가 평균적으로 더 높은지 확인하세요.
2. 자동차 제조 회사에 따라 도시 연비가 다른지 알아보려고 한다.
"audi"와 "toyota" 중 어느 manufacturer(제조회사)의 cty(도시 연비)가
평균적으로 더 높은지 확인하세요.
3. "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균을 알아보려고 한다.
이 회사들의 데이터를 추출한 후 hwy(고속도로 연비) 평균을 구하세요.
4. "audi"에서 생산한 자동차 중에 어떤 자동차 모델의 hwy(고속도로 연비)가
높은지 알아보려고 한다.
"audi"에서 생산한 자동차 중 hwy가 1~5위에 해당하는 자동차의 데이터를 출력하세요.
5. mpg 데이터는 연비를 나타내는 변수가 2개입니다.
두 변수를 각각 활용하는 대신 하나의 통합 연비 변수를 만들어 사용하려 합니다.
평균 연비 변수는 두 연비(고속도로와 도시)의 평균을 이용합니다.
회사별로 "suv" 자동차의 평균 연비를 구한후 내림차순으로 정렬한 후 1~5위까지 데이터를 출력하세요.
6. mpg 데이터의 class는 "suv", "compact" 등 자동차의 특징에 따라
일곱 종류로 분류한 변수입니다. 어떤 차종의 도시 연비가 높은지 비교하려 합니다.
class별 cty 평균을 구하고 cty 평균이 높은 순으로 정렬해 출력하세요.
7. 어떤 회사 자동차의 hwy(고속도로 연비)가 가장 높은지 알아보려 합니다.
hwy(고속도로 연비) 평균이 가장 높은 회사 세 곳을 출력하세요.
8. 어떤 회사에서 "compact" 차종을 가장 많이 생산하는지 알아보려고 합니다.
각 회사별 "compact" 차종 수를 내림차순으로 정렬해 출력하세요.
예상되는 정답.
1. displ(배기량)이 4 이하인 자동차와 5 이상인 자동차 중
어떤 자동차의 hwy(고속도로 연비)가 평균적으로 더 높은지 확인하세요.
=> 배기량 4이하인자동차 : 25.96319018404908
배기량 5이상인자동차 : 18.07894736842105
2. 자동차 제조 회사에 따라 도시 연비가 다른지 알아보려고 한다.
"audi"와 "toyota" 중 어느 manufacturer(제조회사)의 cty(도시 연비)가
평균적으로 더 높은지 확인하세요.
=> audi의도시연비평균 : 17.61111111111111
toyota의도시연비평균 : 18.529411764705884
3. "chevrolet", "ford", "honda" 자동차의 고속도로 연비 평균을 알아보려고 한다.
이 회사들의 데이터를 추출한 후 hwy(고속도로 연비) 평균을 구하세요.
=> hwy(고속도로 연비) 평균 : 22.50943396226415
4. "audi"에서 생산한 자동차 중에 어떤 자동차 모델의 hwy(고속도로 연비)가
높은지 알아보려고 한다. "audi"에서 생산한 자동차 중 hwy가 1~5위에 해당하는
자동차의 데이터를 출력하세요.
=> manufacturer model displ year cyl trans drv cty hwy fl class
2 audi a4 2.0 2008 4 manual(m6) f 20 31 p compact
3 audi a4 2.0 2008 4 auto(av) f 21 30 p compact
0 audi a4 1.8 1999 4 auto(l5) f 18 29 p compact
1 audi a4 1.8 1999 4 manual(m5) f 21 29 p compact
9 audi a4 quattro 2.0 2008 4 manual(m6) 4 20 28 p compact
5. mpg 데이터는 연비를 나타내는 변수가 2개입니다.
두 변수를 각각 활용하는 대신 하나의 통합 연비 변수를 만들어 사용하려 합니다.
평균 연비 변수는 두 연비(고속도로와 도시)의 평균을 이용합니다.
회사별로 "suv" 자동차의 평균 연비를 구한후 내림차순으로 정렬한 후 1~5위까지 데이터를 출력하세요.
=> avg_fuel_efficiency
manufacturer
subaru 21.916667
toyota 16.312500
nissan 15.875000
mercury 15.625000
jeep 15.562500
ford 15.333333
chevrolet 14.888889
lincoln 14.166667
land rover 14.000000
dodge 13.928571
6. mpg 데이터의 class는 "suv", "compact" 등 자동차의 특징에 따라
일곱 종류로 분류한 변수입니다. 어떤 차종의 도시 연비가 높은지 비교하려 합니다.
class별 cty 평균을 구하고 cty 평균이 높은 순으로 정렬해 출력하세요.
=> class
subcompact 20.371429
compact 20.127660
midsize 18.756098
minivan 15.818182
2seater 15.400000
suv 13.500000
pickup 13.000000
Name: cty, dtype: float64
7. 어떤 회사 자동차의 hwy(고속도로 연비)가 가장 높은지 알아보려 합니다.
hwy(고속도로 연비) 평균이 가장 높은 회사 세 곳을 출력하세요.
=> manufacturer
honda 32.555556
volkswagen 29.222222
hyundai 26.857143
Name: hwy, dtype: float64
8. 어떤 회사에서 "compact" 차종을 가장 많이 생산하는지 알아보려고 합니다.
각 회사별 "compact" 차종 수를 내림차순으로 정렬해 출력하세요.
=> manufacturer
audi 15
volkswagen 14
toyota 12
subaru 4
nissan 2
Name: class, dtype: int64
Pandas Exercise - 3
본격적으로 데이터 분석 연습문제를 풀어겠습니다.
실습데이터는 한국복지패널데이터
를 이용합니다. 이 데이터는 한국보건사회연구원에서
전국 7000여 가구를 선정해 2006년부터 매년 추적 조사한 자료로, 경제활동, 생활실태,
복지욕구등 천여 개 변수로 구성되어 있습니다.
해당 데이터에는 우리나라의 다양한 삶에 대한 데이터가 들어있고 이를 분석하면 대한민국 사람들이 어떻게 살아가고 있는가를 분석할 수 있습니다.
# 한국복지패널데이터를 이용한 데이터 분석 연습
# 데이터 준비
# 제공된 파일의 압축을 풀면 파일이 2개 있습니다.
# Koweps_hpc10_2015_beta1.sav : SPSS 데이터 파일 (128M)
# Koweps_Codebook.xlsx : 우리가 사용할 column에 대한 설명
# 총 7개의 column만을 이용합니다.
# 데이터 파일인 Koweps_hpc10_2015_beta1.sav 파일은
# 상용 통계분석 소프트웨어인 SPSS 전용파일입니다.
# 해당 데이터 파일은 SPSS 전용파일이기 때문에 pandas에서 사용하기
# 위해서 다음의 코드를 이용해서 DataFrame으로 변환해야 합니다.
# pip install savReaderWriter
import pandas
import savReaderWriter
with savReaderWriter.SavReader('./data/Koweps_hpc10_2015_beta1.sav', ioUtf8 = True) as reader:
df = pandas.DataFrame(reader.all(), columns = [s for s in reader.header])
print(df.shape) # # (16664, 957)
df['h10_g3'].head() # 성별
df['h10_g4'].head() # 태어난 연도
준비된 데이터를 이용하여 데이터 분석을 진행합니다.
1. 성별에 따른 월급 차이
과거에 비해 여성의 사회 진출이 활발하지만 직장에서의
위상에서는 여전히 차별이 존재하고 있는것이 사실.
실제로 그러한지 월급의 차이를 이용하여 사실을 확인해보자
2. 나이와 월급의 관계
평균적으로 몇 살 때 월급을 가장 많이 받을까? 또 그때의 평균 월급은 얼마인가?
3. 연령대에 따른 월급 차이
30세 미만을 초년(young),
30~59세 : 중년(middle),
60세 이상 : 노년(old)
위의 범주로 연령대에 따른 월급의 차이를 알아보자
4. 연령대 및 성별 월급 차이
성별 월급 차이는 연령대에 따라 다른 양상을 보일 수 있습니다.
성별 월급 차이가 연령대에 따라 다른지 분석해보자
기존에는 3그룹(초년,중년,노년)이었지만 이젠 6그룹으로
그룹핑을 해야 한다.(초년남성,초년여성,..)
5. 직업별 월급 차이
어떤 직업이 월급을 가장 많이 받을까?
직업별 월급을 분석해 보자
직업코드는 제공된 Koweps_Codebook.xlsx을 이용하면
편하게 코드값을 이용 할 수 있습니다.
6. 성별 직업 빈도
성별로 어떤 직업이 가장 많을까?
7. 종교 유무에 따른 이혼율
종교가 있는 사람들이 이혼을 덜 할까??
종교있는 사람과 종교가 없는 사람들의 총원이 다르기 때문에
각 파트의 이혼률을 구해서 비교하면 될 듯 합니다.
8. 지역별 연령대 비율
노년층이 많은 지역은 어디일까?
노년층의 수가 많은 지역이 어디인지를 알아내는 문제입니다. 각 지역마다 노년층의
인구수를 구해서 가장 많은 노년층 인구가 있는 지역을 출력하시면 됩니다.
예상되는 정답.
1. 성별에 따른 월급 차이
과거에 비해 여성의 사회 진출이 활발하지만 직장에서의
위상에서는 여전히 차별이 존재하고 있는것이 사실.
실제로 그러한지 월급의 차이를 이용하여 사실을 확인해보자
==> # 결과
# 남성 평균 월급 : 312.2932
# 여성 평균 월급 : 163.2471
# 남성이 여성보다 월급이 약 150만원 많다.
2. 나이와 월급의 관계
평균적으로 몇 살 때 월급을 가장 많이 받을까? 또 그때의 평균 월급은 얼마인가?
==> 월급을 가장 많이 받는 나이는 : 53살, 월급 : 318.6777
3. 연령대에 따른 월급 차이
30세 미만을 초년(young),
30~59세 : 중년(middle),
60세 이상 : 노년(old)
위의 범주로 연령대에 따른 월급의 차이를 알아보자
==> # 초년(young) : 163.5953
# 중년(middle) : 281.8871
# 노년(old) : 125.3295
4. 연령대 및 성별 월급 차이
성별 월급 차이는 연령대에 따라 다른 양상을 보일 수 있습니다.
성별 월급 차이가 연령대에 따라 다른지 분석해보자
기존에는 3그룹(초년,중년,노년)이었지만 이젠 6그룹으로
그룹핑을 해야 한다.(초년남성,초년여성,..)
==> # 초년 남성 : 170.81737
# 초년 여성 : 159.50518
# 중년 남성 : 353.07574
# 중년 여성 : 187.97552
# 노년 남성 : 173.85558
# 노년 여성 : 81.52917
5. 직업별 월급 차이
어떤 직업이 월급을 가장 많이 받을까?
직업별 월급을 분석해 보자
직업코드는 제공된 Koweps_Codebook.xlsx을 이용하면
편하게 코드값을 이용 할 수 있습니다.
6. 성별 직업 빈도
성별로 어떤 직업이 가장 많을까?
7. 종교 유무에 따른 이혼율
종교가 있는 사람들이 이혼을 덜 할까??
8. 지역별 연령대 비율
노년층이 많은 지역은 어디일까?
End.
Data-Science 강좌는 아래의 책과 사이트를 참조했습니다. 조금 더 자세한 사항을 알고 싶으시면 해당 사이트를 방문하세요!!