/ DATA-SCIENCE

Python 데이터분석 라이브러리(10) - Pandas(Exercise)

Data-Science 강의는 여러 절로 구성되어 있습니다.


Pandas Exercise - 1

Group Lens(미네소타 대학 컴퓨터과의 research lab)에서 수집한 영화 데이터를 이용해 데이터 분석을 해 보자.

영화의 선호 정보를 1~5사이의 점수로 표현 (5에 가까울수록 선호)

Group Lens 사이트

사용할 데이터 파일

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 파일은 아래 링크에서 다운로드 할 수 있습니다.

사용할 mpg 데이터 파일

만약 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에 대한 설명은 아래와 같고 더 자세한 설명은 아래에 링크된 사이트로 이동하시면 상세한 설명을 보실 수 있습니다.

R mpg data set Documentation

# 주요컬럼 설명
# 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 강좌는 아래의 책과 사이트를 참조했습니다. 조금 더 자세한 사항을 알고 싶으시면 해당 사이트를 방문하세요!!