-
데이터 사이언스: Seaborn, Pandas 새로운 인사이트 찾아보기(groupby, map, str...)데이터 사이언스 2020. 8. 1. 21:13
이번에는 Pandas와 Seaborn을 이용해서 새로운 값을 계산하고
새로운 인사이트를 도출해봅시다.
< 데이터 합치기 >
다음과 같이 년도별 방송사 시청률에 대한 데이터프레임이 있습니다.
import pandas as pd import seaborn as sns broadcast_df = pd.read_csv("Downloads/broadcast.csv", index_col = 0) broadcast_df.head()
방송사에 따른 년도별 시청률은 다음과 같군요
broadcast_df.plot()
전체적인 추이를 확인해보고 싶어서
broadcast_df에 "Total"을 추가합니다.
년도별 전체 시청률을plot해 봅시다.
broadcast_df["Total"] = broadcast_df.sum("columns") broadcast_df
broadcast_df.plot(y = "Total")
2011년 2012년 사이 잠깐 증가했다가 그 이후로는 그냥 떡락이군요
이번에는 지상파와 케이블방송을 따로 구분해서 확인해봅시다.
group1 = broadcast_df.iloc[:, :3] group2 = broadcast_df.iloc[:, 3:] broadcast_df["Group1"] = group1.sum("columns") broadcast_df["Group2"] = group2.sum("columns") broadcast_df.plot(y = ["Group1, Group2"])
시간에 따른 시청률이 지상파 방송은 감소, 케이블방송은 증가하는 것을 알 수 있군요
아마 넷플릭스나 왓챠 같은 플랫폼들이 생기면서 케이블 방송에 대한 인기가 늘어나 그런것 아닐까요?
< 문자값 필터링 >
음악에는 여러 장르가 있고, 여러 장르에 해당하는 음악도 있습니다.
한번 블루스에 포함되는 음악들을 모두 찾아봅시다.
import pandas as pd import seaborn as sns albums_df = pd.read_csv("Downloads/albums.csv", index_col = 0) albums_df
albums_df["Genre"].unique()
array(['Rock', 'Rock, Pop', 'Funk / Soul', 'Rock, Blues', 'Jazz', 'Jazz, Rock, Blues, Folk, World, & Country', 'Funk / Soul, Pop', 'Blues', 'Pop', 'Rock, Folk, World, & Country', 'Folk, World, & Country', 'Classical, Stage & Screen', 'Reggae', 'Hip Hop', 'Jazz, Funk / Soul', 'Rock, Funk / Soul, Pop', 'Electronic, Rock', ... 'Electronic, Hip Hop, Reggae, Pop', 'Electronic, Reggae', 'Electronic, Funk / Soul', 'Rock, Funk / Soul, Blues', 'Rock,�Pop', 'Electronic, Rock, Funk / Soul, Blues, Pop', 'Rock, Reggae, Latin'], dtype=object)
이렇게 그냥 블루스 말고도, 블루스와 소울, 블루스와 팝이 섞인 장르들이 있네요
"Blues"라는 문자열이 들어있는 모든 음악들을 찾아 봅시다.
condition = albums_df["Genre"].str.contains("Blues") albums_df[condition]
"Blues"로 시작하는 장르를 찾을 때는 startswitch()라는 메서드를 사용합니다.
albums_df[albums_df["Genre"].str.startswitch("Blues")]
"소재지 도로명주소" 칼럼을 이용해서 "관할구역"이라는 새로운 칼럼을 기존 데이터 프레임에 추가해 주고 싶습니다.
import pandas as pd import seaborn as sns parks_df = pd.read_csv("Downloads/parks.csv") parks_df
split() 함수는 말 그대로 문자열을 어떤 기준으로 쪼개어 리스트를 만들어줍니다.
아무 파라미터가 들어가지 않았을 때는 띄어쓰기를 기준으로 쪼개줍니다.
parks_df["소재지도로명주소"].str.split()
0 [광주광역시, 북구, 대천로, 86] 1 [광주광역시, 북구, 삼정로, 36] 2 [광주광역시, 북구, 임방울대로, 877] 3 [광주광역시, 북구, 일곡로, 55] 4 [광주광역시, 북구, 설죽로, 526] ... 8117 [충청남도, 홍성군, 홍성읍, 오관리, 472, 일원] 8118 [경상북도, 영양군, 영양읍, 군민회관길, 42-6] 8119 [경상북도, 영양군, 입암면, 신구리, 산27-5번지] 8120 [경상북도, 영양군, 수비면, 발리리, 산48번지] 8121 [경상북도, 영양군, 영양읍, 삼지리, 200번지] Name: 소재지도로명주소, Length: 8122, dtype: object
파라미터로 n과 expand를 받으면 다음과 같이 이쁘게 만들 수도 있습니다.
n은 칼럼의 수, expand는 판다스 데이터 프레임형식을 말합니다.
parks_df["소재지도로명주소"].str.split(n = 1, expand = True)
관할구역 칼럼을 새로 만들어주었습니다.
address = parks_df["소재지도로명주소"].str.split(n = 1, expand = True) parks_df["관할구역"]= address[0] parks_df
< 새로운 값 추가하기 >
노트북에 대한 데이터를 가져왔습니다. 노트북 브랜드에 따른 나라명을 칼럼으로 추가해주고 싶습니다. 어떻게 할까요?
laptops_df = pd.read_csv("Downloads/laptops.csv") laptops_df.rename(columns = {"ram": "memory"},inplace = True) laptops_df.head()
우선 어떤 브랜드들이 있는지 먼저 확인해봅시다.
laptops_df["brand"].unique()
array(['Dell', 'Apple', 'Acer', 'HP', 'Lenovo', 'Alienware', 'Microsoft', 'Asus'], dtype=object)
8가지 브랜드가 있네요
이제 어떤 브랜드가 있는지 알았으니
브랜드: 브랜드에 해당되는 나라
형식에 맞게 딕셔너리를 작성해줍니다.
brand_nation = { "Dell" : "US", "Apple": "US", "Acer": "China", "HP": "US", "Lenovo": "Hongkong", "Alienware": "US", "Microsoft": "US", "Asus": "Taiwan" }
이제 map함수를 이용합니다.
map은 어떤 형식을 전체에 적용하고 싶을 때 사용합니다.
x = laptops_df["brand"].map(brand_nation) laptops_df["brand nation"] = x laptops_df.head()
브랜드 국가가 잘 추가 되었네요
< 그룹나누기 >
이번엔 그래픽 카드 브랜드에 따라 쉽게 비교할 수 있게 해주는 groupy라는 함수를 알아봅시다.
우선 어떤 그래픽 카드 브랜드가 있는지 확인해봅시다.
latops_df["graphic_card_brand"].unique()
array(['intel', 'amd', 'nvidia', nan], dtype=object)
groupby 메서드를 이용하면 그래픽 카드 브랜드에 따른 값들을 한눈에 알 수 있습니다.
브랜드에 따른 평균을 알아봅시다.
card_groups = latops_df.groupby("graphic_card_brand") card_groups.mean()
브랜드별 첫번째 값을 알고 싶다면 first() 메서드를 이용합니다.
card_groups.first()
브랜드별 마지막 값을 알고 싶다면 last() 메서드를 이용합니다.
card_groups.last()
박스 플롯을 이용해서 데이터 시각화를 시킬 수도 있습니다.
card_groups.plot(kind = "box", y = "price")
가격분포는 amd < intel < nvidia
가격 평균은 nvidia가 제일 비싼것 같습니다.
이상점은 대체로 intel과 amd가 많구요
반응형'데이터 사이언스' 카테고리의 다른 글