판다스 내장 그래프 도구
판다스는 Matplotlib 라이브러리의 기능을 일부 내장하고 있어서 별도로 import하지 않고 간단히 그래프를 그릴 수 있음.
선 그래프 : plot()메소드 적용 시 다른 옵션을 추가하지 않으며 가장 기본적인 선 그래프를 그림.
막대 그래프 : plot(kind='bar')
히스토그램 : plot(kind='hist')
산점도 : plot(x='', y='', kind='scatter'), 상관관계를 볼 수 있음.
박스플롯 : plot(kind='box'), 특정 변수의 데이터 분포와 분산 정도에 대한 정보를 제공
남북한 발전 전력량
Q.남한, 북한 발전량 합계 데이터만 추출, df_ns 이름으로 저장 및 출력하세요
(단, 행인덱스는 South, North로 열인덱스는 정수형, 열 이름 배열에 map(int))
In [1]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt df = pd.read_excel('남북한발전전력량.xlsx') # 데이터 프레임 변환 df_ns = df.iloc[[0,5],2:] print(type(df_ns.columns)) df_ns.index=['South','North'] df_ns.columns=df_ns.columns.astype('int') # 열 이름의 자료형을 정수형으로 변경 display(df_ns) print(type(df_ns.columns)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
<class 'pandas.core.indexes.base.Index'>
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 10열 선택10열 다음에 열 추가
- 11열 선택11열 다음에 열 추가
- 12열 선택12열 다음에 열 추가
- 13열 선택13열 다음에 열 추가
- 14열 선택14열 다음에 열 추가
- 15열 선택15열 다음에 열 추가
- 16열 선택16열 다음에 열 추가
- 17열 선택17열 다음에 열 추가
- 18열 선택18열 다음에 열 추가
- 19열 선택19열 다음에 열 추가
- 20열 선택20열 다음에 열 추가
- 21열 선택21열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
1990 |
1991 |
1992 |
1993 |
1994 |
1995 |
1996 |
1997 |
1998 |
1999 |
... |
2007 |
2008 |
2009 |
2010 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
South |
1077 |
1186 |
1310 |
1444 |
1650 |
1847 |
2055 |
2244 |
2153 |
2393 |
... |
4031 |
4224 |
4336 |
4747 |
4969 |
5096 |
5171 |
5220 |
5281 |
5404 |
North |
277 |
263 |
247 |
221 |
231 |
230 |
213 |
193 |
170 |
186 |
... |
236 |
255 |
235 |
237 |
211 |
215 |
221 |
216 |
190 |
239 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
2 rows × 27 columns
<class 'pandas.core.indexes.numeric.Int64Index'>
In [2]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
tdf_ns = df_ns.T display(tdf_ns.head()) #전치하여 출력 display(tdf_ns.loc[:,['South']].head()) #남한꺼만 뽑고싶다. tdf_ns.plot() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
South |
North |
1990 |
1077 |
277 |
1991 |
1186 |
263 |
1992 |
1310 |
247 |
1993 |
1444 |
221 |
1994 |
1650 |
231 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
South |
1990 |
1077 |
1991 |
1186 |
1992 |
1310 |
1993 |
1444 |
1994 |
1650 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[2]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa96b0e108>
대표사진 삭제
사진 설명을 입력하세요.
In [3]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 행, 열 전치하여 막대 그래프 그리기 tdf_ns.plot(kind='bar') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[3]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa96e63808>
대표사진 삭제
사진 설명을 입력하세요.
In [37]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 행, 열 전치하여 히스토그램 그리기 tdf_s = tdf_ns.loc[:,['South']] display(tdf_s) tdf_s.plot(kind='hist') # tdf_ns.cumsum().plot(kind='hist') # tdf_ns.plot('kind=hist') # tdf_ns.North.plot('kind=hist') # tdf_ns.South.plot('kind=hist') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
- 9행 선택9행 다음에 행 추가
- 10행 선택10행 다음에 행 추가
- 11행 선택11행 다음에 행 추가
- 12행 선택12행 다음에 행 추가
- 13행 선택13행 다음에 행 추가
- 14행 선택14행 다음에 행 추가
- 15행 선택15행 다음에 행 추가
- 16행 선택16행 다음에 행 추가
- 17행 선택17행 다음에 행 추가
- 18행 선택18행 다음에 행 추가
- 19행 선택19행 다음에 행 추가
- 20행 선택20행 다음에 행 추가
- 21행 선택21행 다음에 행 추가
- 22행 선택22행 다음에 행 추가
- 23행 선택23행 다음에 행 추가
- 24행 선택24행 다음에 행 추가
- 25행 선택25행 다음에 행 추가
- 26행 선택26행 다음에 행 추가
- 27행 선택27행 다음에 행 추가
열 너비 조절
행 높이 조절
|
South |
1990 |
1077 |
1991 |
1186 |
1992 |
1310 |
1993 |
1444 |
1994 |
1650 |
1995 |
1847 |
1996 |
2055 |
1997 |
2244 |
1998 |
2153 |
1999 |
2393 |
2000 |
2664 |
2001 |
2852 |
2002 |
3065 |
2003 |
3225 |
2004 |
3421 |
2005 |
3646 |
2006 |
3812 |
2007 |
4031 |
2008 |
4224 |
2009 |
4336 |
2010 |
4747 |
2011 |
4969 |
2012 |
5096 |
2013 |
5171 |
2014 |
5220 |
2015 |
5281 |
2016 |
5404 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[37]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa991fc708>
대표사진 삭제
사진 설명을 입력하세요.
Q. df_s 에서 mpg와 각 칼럼간의 산점도를 그리고 음의 상관관계가 있는 변수를 기술하세요.
In [5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df = pd.read_csv('../auto-mpg.csv', header=None) df.columns = ['mpg','cylinders','displacement','horsepower', 'weight','acceleration','model year','origin','name'] df_s = df[['mpg','cylinders','weight','displacement','acceleration' ]] df_s.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[5]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
weight |
displacement |
acceleration |
0 |
18.0 |
8 |
3504.0 |
307.0 |
12.0 |
1 |
15.0 |
8 |
3693.0 |
350.0 |
11.5 |
2 |
18.0 |
8 |
3436.0 |
318.0 |
11.0 |
3 |
16.0 |
8 |
3433.0 |
304.0 |
12.0 |
4 |
17.0 |
8 |
3449.0 |
302.0 |
10.5 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df_s.corr() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[6]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
weight |
displacement |
acceleration |
mpg |
1.000000 |
-0.775396 |
-0.831741 |
-0.804203 |
0.420289 |
cylinders |
-0.775396 |
1.000000 |
0.896017 |
0.950721 |
-0.505419 |
weight |
-0.831741 |
0.896017 |
1.000000 |
0.932824 |
-0.417457 |
displacement |
-0.804203 |
0.950721 |
0.932824 |
1.000000 |
-0.543684 |
acceleration |
0.420289 |
-0.505419 |
-0.417457 |
-0.543684 |
1.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [7]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 2개의 열을 선택하여 산점도 그리기 df_s.plot(x='weight', y='mpg', kind='scatter') # 음의 상관관계 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[7]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa97045808>
대표사진 삭제
사진 설명을 입력하세요.
In [8]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df_s.plot(x='cylinders', y='mpg', kind='scatter') # 범주형 데이터 (연속이 없음) # 숫자의 크기보다 카테고리의 의미 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[8]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa970a8a08>
대표사진 삭제
사진 설명을 입력하세요.
In [9]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df_s.plot(x='displacement', y='mpg', kind='scatter') # 음의 상관관계, 이상치 제거 필요 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[9]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa971151c8>
대표사진 삭제
사진 설명을 입력하세요.
In [10]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df_s.plot(x='acceleration', y='mpg', kind='scatter') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[10]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa971ace48>
대표사진 삭제
사진 설명을 입력하세요.
In [11]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
#titanic age, fare 컬럼간 상관관계 import matplotlib.pyplot as plt %matplotlib inline titanic = sns.load_dataset('titanic')
#스타일 테마 설정(5가지 : darkgrid, whitegrid, dark, white, ticks) sns.set_style('darkgrid')
# 그래프 객체 생성(figure에 2개의 서브 플롯을 생성) fig = plt.figure(figsize=(15,5)) ax1=fig.add_subplot(1,2,1) # 1행 2열의 1번째 좌표(전체 데이터를 1행 2열짜리로 보기 때문에 이렇게선택) ax2=fig.add_subplot(1,2,2) # 1행 2열의 2번째 좌표
# 그래프 그리기 - 선형 회귀선 미표시 (fit_reg=False) sns.regplot(x='age', #x축 변수 y='fare', #y축 변수 data=titanic, #data ax=ax1) # axe 객체 - 1번째 그래프
#그래프 그리기 - 선형회귀선 표시 (fit_reg=True) sns.regplot(x='age', #x축 변수 y='fare', #y축 변수 data=titanic, #data ax=ax2, # axe 객체 - 2번째 그래프 fit_reg=True) # 회귀선 표시
plt.show() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Q.auto-mpg.csv의 df_s 각 컬럼간의 상관관계에 대한 시각화를 아래와 같이 수행하세요.
2개의 행과 2개의 열을 가진 subplots를 이용해서 표현
seaborn의 regplot을 이용해 산점도와 선형회귀직선을 함께 표현
In [12]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline
fig, axs = plt.subplots(figsize=(16,8), ncols=2, nrows=2) # 2행 2열 차트를 만든다. lm_features = ['acceleration', 'cylinders', 'weight', 'displacement'] for i, feature in enumerate(lm_features): # 인덱스와 같이 작동하는 것 row = int(i/2) #처음 인덱스는 0 col = i%2 # 컬럼도 처음에 0 # 시본의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현 sns.regplot(x=feature, y='mpg', data=df_s, ax=axs[row][col]) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Box plot 의미 해석
중앙값
IQR(Inter Quartile Range): 제 3사분위 수 - 제 1사분위 수
lower whisker : Q1 - 1.5 * IQR 보다 작은 값
upper whisker : Q3 - 1.5 * IQR 보다 큰 값
이상치 : lower whisker, upper whisker 를 벗어나는 값
(an outlier is any number less than Q1 - (1.5xIQR) or greater than Q3+(1.5xIQR))
In [13]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd
box_df = pd.DataFrame([[25, 28, 29, 29, 30, 34, 35, 35, 37, 38], [25, 28, 29, 29, 30, 34, 35, 35, 37, 50]], index=['m1','m2'], columns=['y1','y2','y3','y4','y5','y6','y7','y8','y9','y10']) display(box_df) box_t = box_df.transpose() display(box_t.head(2)) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 10열 선택10열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
y1 |
y2 |
y3 |
y4 |
y5 |
y6 |
y7 |
y8 |
y9 |
y10 |
m1 |
25 |
28 |
29 |
29 |
30 |
34 |
35 |
35 |
37 |
38 |
m2 |
25 |
28 |
29 |
29 |
30 |
34 |
35 |
35 |
37 |
50 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
열 너비 조절
행 높이 조절
|
m1 |
m2 |
y1 |
25 |
25 |
y2 |
28 |
28 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [14]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
box_t[['m1','m2']].plot(kind='box') display(box_t.describe()) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
- 7행 선택7행 다음에 행 추가
- 8행 선택8행 다음에 행 추가
열 너비 조절
행 높이 조절
|
m1 |
m2 |
count |
10.000000 |
10.000000 |
mean |
32.000000 |
33.200000 |
std |
4.346135 |
7.020605 |
min |
25.000000 |
25.000000 |
25% |
29.000000 |
29.000000 |
50% |
32.000000 |
32.000000 |
75% |
35.000000 |
35.000000 |
max |
38.000000 |
50.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Q. box_t의 m2칼럼의 box_plot의 중앙값, IQR, lower whisker, upper whisker, 이상치를 구하여 기술하세요.
In [15]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# upper, lower whisker 산출 uw = 35 + 1.5 * 6 print(uw) lw = 29 - 1.5 * 6 print(lw)
# 이상치 : 44보다 큰 수 50 m2 = [25, 28, 29, 29, 30, 34, 35, 35, 37, 50] |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
44.0 20.0
In [16]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# ●김홍교님 풀이 # Q box_t의 m2컬럼의 box plot의 중앙값, IQR,lower whisker,upper whisker,이상치를 구하여 기술하세요. import numpy as np x = box_t.m2 m=x.median() print("m2컬럼의 box plot의 중앙값 : ",m)
Q1=x.quantile(0.25) Q3=x.quantile(0.75) print(Q1) print(Q3) IQR = Q3-Q1 print('IQR : ',IQR)
y=Q1-1.5*IQR z=x-y lowerWhisker=z[z>0].min()+y print('lowerWhisker : ',lowerWhisker)
y=Q3+1.5*IQR z=x-y upperWhisker=z[z<0].max()+y print('upperWhisker : ',upperWhisker)
Outlierlist=x[(m-1.5*IQR>x)|(m+1.5*IQR<x)].tolist print('Outlierlist : ',Outlierlist) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
m2컬럼의 box plot의 중앙값 : 32.0 29.0 35.0 IQR : 6.0 lowerWhisker : 25.0 upperWhisker : 37.0 Outlierlist : <bound method IndexOpsMixin.tolist of y10 50 Name: m2, dtype: int64>
In [17]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
median = box_t['m2'].median() #중앙값 Q1 = box_t['m2'].quantile(.25) Q3 = box_t['m2'].quantile(.75) IQR = Q3 - Q1 lower = Q1 - 1.5 * box_t['m2'][box_t.m2<IQR] upper = Q3 - 1.5 * box_t['m2'][box_t['m2']>IQR]
display(median, IQR, Q1, Q3, lower, upper) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
32.0
6.0
29.0
35.0
Series([], Name: m2, dtype: float64)
y1 -2.5 y2 -7.0 y3 -8.5 y4 -8.5 y5 -10.0 y6 -16.0 y7 -17.5 y8 -17.5 y9 -20.5 y10 -40.0 Name: m2, dtype: float64
Q. 'auto-mpg.csv' 데이터셋을 불러와서 'mpg','cylinders' 칼럼의 boxplot을 그리고 중앙값, IQR, lower whisker, upper whisker 값을 구하고 이상치 갯수를 구하여 기술하세요.
In [18]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
#열을 선택하여 박스 플롯 그리기 import pandas as pd
df = pd.read_csv('../auto-mpg.csv') df.columns = ['mpg','cylinders', 'displacement', 'horsepower', 'weight', 'acceleration','model year','origin','name'] df[['mpg','cylinders']].plot(kind='box') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[18]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa97655e48>
대표사진 삭제
사진 설명을 입력하세요.
In [19]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df_s.mpg.describe() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[19]:
count 398.000000 mean 23.514573 std 7.815984 min 9.000000 25% 17.500000 50% 23.000000 75% 29.000000 max 46.600000 Name: mpg, dtype: float64
In [20]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# mpg 기준 내림차순 정렬 df_s = df.sort_values(by='mpg', ascending=False) df_s.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[20]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
displacement |
horsepower |
weight |
acceleration |
model year |
origin |
name |
321 |
46.6 |
4 |
86.0 |
65.00 |
2110.0 |
17.9 |
80 |
3 |
mazda glc |
328 |
44.6 |
4 |
91.0 |
67.00 |
1850.0 |
13.8 |
80 |
3 |
honda civic 1500 gl |
324 |
44.3 |
4 |
90.0 |
48.00 |
2085.0 |
21.7 |
80 |
2 |
vw rabbit c (diesel) |
393 |
44.0 |
4 |
97.0 |
52.00 |
2130.0 |
24.6 |
82 |
2 |
vw pickup |
325 |
43.4 |
4 |
90.0 |
48.00 |
2335.0 |
23.7 |
80 |
2 |
vw dasher (diesel) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [21]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# mpg의 이상치 : 46.6 # IQR : 11.5 uw_m = 29 + (11.5*1.5) print(uw_m) lw_m = 17.5 - (11.5*1.5) print(lw_m) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
46.25 0.25
Matplotlib 기본 그래프 도구
In [22]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 라이브러리 불러오기 import pandas as pd import matplotlib.pyplot as plt %matplotlib inline
# Excel 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0) df['전입지별'].unique() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[22]:
array(['전입지별', '전국', '서울특별시', '부산광역시', '대구광역시', '인천광역시', '광주광역시', '대전광역시', '울산광역시', '세종특별자치시', '경기도', '강원도', '충청북도', '충청남도', '전라북도', '전라남도', '경상북도', '경상남도', '제주특별자치도'], dtype=object)
In [23]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# df.info() display(df.전출지별.isnull().sum())
# 누락값(NaN)을 앞 데이터로 채움(엑셀 양식 병합 부분) df = df.fillna(method='ffill') df.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
306
Out[23]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 10열 선택10열 다음에 열 추가
- 11열 선택11열 다음에 열 추가
- 12열 선택12열 다음에 열 추가
- 13열 선택13열 다음에 열 추가
- 14열 선택14열 다음에 열 추가
- 15열 선택15열 다음에 열 추가
- 16열 선택16열 다음에 열 추가
- 17열 선택17열 다음에 열 추가
- 18열 선택18열 다음에 열 추가
- 19열 선택19열 다음에 열 추가
- 20열 선택20열 다음에 열 추가
- 21열 선택21열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
전출지별 |
전입지별 |
1970 |
1971 |
1972 |
1973 |
1974 |
1975 |
1976 |
1977 |
... |
2008 |
2009 |
2010 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
2017 |
0 |
전출지별 |
전입지별 |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
... |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
이동자수 (명) |
1 |
전국 |
전국 |
4046536 |
4210164 |
3687938 |
4860418 |
5297969 |
9011440 |
6773250 |
7397623 |
... |
8808256 |
8487275 |
8226594 |
8127195 |
7506691 |
7411784 |
7629098 |
7755286 |
7378430 |
7154226 |
2 |
전국 |
서울특별시 |
1742813 |
1671705 |
1349333 |
1831858 |
2050392 |
3396662 |
2756510 |
2893403 |
... |
2025358 |
1873188 |
1733015 |
1721748 |
1555281 |
1520090 |
1573594 |
1589431 |
1515602 |
1472937 |
3 |
전국 |
부산광역시 |
448577 |
389797 |
362202 |
482061 |
680984 |
805979 |
724664 |
785117 |
... |
514502 |
519310 |
519334 |
508043 |
461042 |
478451 |
485710 |
507031 |
459015 |
439073 |
4 |
전국 |
대구광역시 |
- |
- |
- |
- |
- |
- |
- |
- |
... |
409938 |
398626 |
370817 |
370563 |
348642 |
351873 |
350213 |
351424 |
328228 |
321182 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
5 rows × 50 columns
In [24]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df.전출지별.isnull().sum() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[24]:
0
In [25]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가
df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해) df_seoul.head() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[25]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 6열 선택6열 다음에 열 추가
- 7열 선택7열 다음에 열 추가
- 8열 선택8열 다음에 열 추가
- 9열 선택9열 다음에 열 추가
- 10열 선택10열 다음에 열 추가
- 11열 선택11열 다음에 열 추가
- 12열 선택12열 다음에 열 추가
- 13열 선택13열 다음에 열 추가
- 14열 선택14열 다음에 열 추가
- 15열 선택15열 다음에 열 추가
- 16열 선택16열 다음에 열 추가
- 17열 선택17열 다음에 열 추가
- 18열 선택18열 다음에 열 추가
- 19열 선택19열 다음에 열 추가
- 20열 선택20열 다음에 열 추가
- 21열 선택21열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
- 6행 선택6행 다음에 행 추가
열 너비 조절
행 높이 조절
|
1970 |
1971 |
1972 |
1973 |
1974 |
1975 |
1976 |
1977 |
1978 |
1979 |
... |
2008 |
2009 |
2010 |
2011 |
2012 |
2013 |
2014 |
2015 |
2016 |
2017 |
전입지 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
전국 |
1448985 |
1419016 |
1210559 |
1647268 |
1819660 |
2937093 |
2495620 |
2678007 |
3028911 |
2441242 |
... |
2083352 |
1925452 |
1848038 |
1834806 |
1658928 |
1620640 |
1661425 |
1726687 |
1655859 |
1571423 |
부산광역시 |
11568 |
11130 |
11768 |
16307 |
22220 |
27515 |
23732 |
27213 |
29856 |
28542 |
... |
17353 |
17738 |
17418 |
18816 |
16135 |
16153 |
17320 |
17009 |
15062 |
14484 |
대구광역시 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
... |
9720 |
10464 |
10277 |
10397 |
10135 |
10631 |
10062 |
10191 |
9623 |
8891 |
인천광역시 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
... |
50493 |
45392 |
46082 |
51641 |
49640 |
47424 |
43212 |
44915 |
43745 |
40485 |
광주광역시 |
- |
- |
- |
- |
- |
- |
- |
- |
- |
- |
... |
10846 |
11725 |
11095 |
10587 |
10154 |
9129 |
9759 |
9216 |
8354 |
7932 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
5 rows × 48 columns
In [26]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values)
# 판다스 객체를 plot 함수에 입력 plt.plot(sr_one) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[26]:
[<matplotlib.lines.Line2D at 0x1fa976e3a88>]
대표사진 삭제
사진 설명을 입력하세요.
In [27]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import warnings warnings.filterwarnings('ignore') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
In [28]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 정리 import pandas as pd import matplotlib.pyplot as plt
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values)
# 차트 제목 추가 plt.title('서울 -> 경기 인구 이동')
# 축이름 추가 plt.xlabel('기간') plt.ylabel('이동 인구수')
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [29]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# Matplotlib 한글 폰트 오류 해결 from matplotlib import font_manager, rc font_path = "../malgun.ttf" # 폰트파일의 위치 font_name = font_manager.FontProperties(fname=font_path).get_name() rc('font', family=font_name)
# 정리 import pandas as pd import matplotlib.pyplot as plt
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values)
# 차트 제목 추가 plt.title('서울 -> 경기 인구 이동')
# 축이름 추가 plt.xlabel('기간') plt.ylabel('이동 인구수')
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [30]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import matplotlib.pyplot as plt
# Matplotlib 한글 폰트 오류 해결 from matplotlib import font_manager, rc font_path = "../malgun.ttf" # 폰트파일의 위치 font_name = font_manager.FontProperties(fname=font_path).get_name() rc('font', family=font_name)
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
# 그림 사이즈 지정( 가로 14인치, 세로 5인치) plt.figure(figsize=(14,5))
# x축 눈금 라벨 회전하기 plt.xticks(rotation='vertical')
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values)
# 차트 제목 추가 plt.title('서울 -> 경기 인구 이동') #차트 제목 plt.xlabel('기간') #x축 plt.ylabel('이동 인구수') #y축
plt.legend(labels=['서울 -> 경기'], loc='best') #범례 표시
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [31]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import matplotlib.pyplot as plt
# Matplotlib 한글 폰트 오류 해결 from matplotlib import font_manager, rc font_path = "../malgun.ttf" # 폰트파일의 위치 font_name = font_manager.FontProperties(fname=font_path).get_name() rc('font', family=font_name)
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
#스타일 서식 지정 plt.style.use('ggplot')
# 그림 사이즈 지정( 가로 14인치, 세로 5인치) plt.figure(figsize=(14,5))
# x축 눈금 라벨 회전하기 plt.xticks(rotation='vertical')
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values, marker='o', markersize=7) # 마커표시 추가
# 차트 제목 추가 plt.title('서울 -> 경기 인구 이동', size=30) #차트 제목 plt.xlabel('기간', size=20) #x축 plt.ylabel('이동 인구수', size=20) #y축
plt.legend(labels=['서울 -> 경기'], loc='best', fontsize=15) #범례 표시
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [32]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import matplotlib.pyplot as plt
#스타일 리스트 출력 print(plt.style.available) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
['bmh', 'classic', 'dark_background', 'fast', 'fivethirtyeight', 'ggplot', 'grayscale', 'seaborn-bright', 'seaborn-colorblind', 'seaborn-dark-palette', 'seaborn-dark', 'seaborn-darkgrid', 'seaborn-deep', 'seaborn-muted', 'seaborn-notebook', 'seaborn-paper', 'seaborn-pastel', 'seaborn-poster', 'seaborn-talk', 'seaborn-ticks', 'seaborn-white', 'seaborn-whitegrid', 'seaborn', 'Solarize_Light2', 'tableau-colorblind10', '_classic_test']
In [33]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import matplotlib.pyplot as plt
# Matplotlib 한글 폰트 오류 해결 from matplotlib import font_manager, rc font_path = "../malgun.ttf" # 폰트파일의 위치 font_name = font_manager.FontProperties(fname=font_path).get_name() rc('font', family=font_name)
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 경기도로 이동한 인구 데이터 값만 선택 sr_one = df_seoul.loc['경기도'] #행 선택
#스타일 서식 지정 plt.style.use('ggplot')
# 그림 사이즈 지정( 가로 14인치, 세로 5인치) plt.figure(figsize=(14,5))
# x축 눈금 라벨 회전하기 plt.xticks(rotation='vertical')
# x, y 축 데이터를 plot 함수에 입력 plt.plot(sr_one.index, sr_one.values, marker='o', markersize=7) # 마커표시 추가
# 차트 제목 추가 plt.title('서울 -> 경기 인구 이동', size=30) #차트 제목 plt.xlabel('기간', size=20) #x축 plt.ylabel('이동 인구수', size=20) #y축
plt.legend(labels=['서울 -> 경기'], loc='best', fontsize=15) #범례 표시
# y축 범위 지정(최소값, 최대값) plt.ylim(50000, 800000)
#주석 표시 - 화살표 plt.annotate('', xy=(20, 620000), #화살표의 머리 시작 xytext=(2, 290000), #화살표의 머리 마지막 xycoords='data', #좌표체계 arrowprops=dict(arrowstyle='->', color='skyblue', lw=5), #화살표 서식 )
plt.annotate('', xy=(47, 450000), #화살표의 머리 시작 xytext=(30, 580000), #화살표의 머리 마지막 xycoords='data', #좌표체계 arrowprops=dict(arrowstyle='->', color='red', lw=5), #화살표 서식 )
#주석 표시 - 텍스트 plt.annotate('인구이동 증가(1970-1995)', #텍스트 입력 xy=(10,400000), #텍스트 위치 기준점 rotation=25, #텍스트 회전 각도 va='baseline', #텍스트 상하 정렬 ha='center', #텍스트 좌우 정렬 fontsize=15) #폰트 크기
plt.annotate('인구이동 감소(1995-2017)', #텍스트 입력 xy=(40,500000), #텍스트 위치 기준점 rotation=-10, #텍스트 회전 각도 va='baseline', #텍스트 상하 정렬 ha='center', #텍스트 좌우 정렬 fontsize=15) #폰트 크기
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Q. '서울 -> 충남, 경북, 강원 인구 이동'을 설명하는 그래프를 출력하세요.
In [34]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import matplotlib.pyplot as plt
# Matplotlib 한글 폰트 오류 해결 from matplotlib import font_manager, rc font_path = "C:/Users/USER/workspace/ml_python/malgun.ttf" # 폰트파일의 위치 font_name = font_manager.FontProperties(fname=font_path).get_name() rc('font', family=font_name)
# EXCEL 데이터를 데이터프레임 변환 df = pd.read_excel('시도별 전출입 인구수.xlsx', fillna=0, header=0)
# 전출지별에서 누락값(NaN)을 앞 데이터로 채움(엑셀양식 병합 부분) df = df.fillna(method='ffill')
#서울에서 다른 지역으로 이동한 데이터만 추출하여 정리 mask = (df['전출지별'] == '서울특별시') & (df['전입지별'] != '서울특별시') df_seoul = df[mask] # mask를 통해 새로 컬럼 추가 df_seoul = df_seoul.drop(['전출지별'], axis=1) # 기존에 있는 전출지별은 드랍시킨다. df_seoul.rename({'전입지별':'전입지'}, axis=1, inplace=True) # 딕셔너리타입으로 이름 변경 df_seoul.set_index('전입지', inplace=True) # 전입지를 index로 만든다(전입지별로 데이터를 정렬하기 위해)
# 서울에서 충남, 경북, 강원도로 이동한 인구 데이터 값만 선택 col_years=list(map(str, range(1970, 2018))) df_3=df_seoul.loc[['충청남도','경상북도','강원도'],col_years]
#스타일 서식 지정 plt.style.use('ggplot')
# 그림 사이즈 지정( 가로 14인치, 세로 5인치) fig = plt.figure(figsize=(20,5)) ax = fig.add_subplot(1,1,1) # 1행 1열에 하나
# axe 객체에 plot 함수로 그래프 출력 ax.plot(col_years, df_3.loc['충청남도',:], marker='o',markerfacecolor='green', markersize=10, color='olive',linewidth=2, label='서울->충남')
ax.plot(col_years, df_3.loc['경상북도',:], marker='o',markerfacecolor='blue', markersize=10, color='skyblue',linewidth=2, label='서울->경북')
ax.plot(col_years, df_3.loc['강원도',:], marker='o',markerfacecolor='red', markersize=10, color='magenta',linewidth=2, label='서울->강원')
# 범례 표시 ax.legend(loc='best')
# 차트 제목 추가 ax.set_title('서울 -> 충남, 경북, 강원 인구이동', size=20)
# 축이름 추가 ax.set_xlabel('기간',size=12) ax.set_ylabel('이동인구수', size=12)
# 축 눈금 라벨 지정 및 90도 회전 ax.set_xticklabels(col_years,rotation=90)
# 축 눈금 라벨 크기 ax.tick_params(axis="x",labelsize=10) ax.tick_params(axis="y",labelsize=10)
plt.show() # 변경사항 저장하고 그래프 출력 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [35]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
sr_one = df_seoul.loc['경상북도'] sr_two = df_seoul.loc['충청남도'] sr_three = df_seoul.loc['강원도'] fig = plt.figure(figsize=(20,5)) plt.plot(sr_one.index, sr_one.values, 'm:', sr_two.index, sr_two.values, 'y:', sr_three.index, sr_three.values, 'k:') plt.title('서울 -> 충남, 강원, 경북 이동', size=30) #차트 제목 plt.xlabel('기간', size=20) #x축 plt.ylabel('이동 인구수', size=20) plt.xticks(rotation=90) plt.legend(labels=['서울 -> 경북', '서울 -> 충남', '서울 -> 강원'], loc='best', fontsize=15) #범례 표시 plt.grid(False) plt.show() |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
In [36]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 라이브러리 불러오기 titanic = sns.load_dataset('titanic')
# 스타일 테마 설정 sns.set_style('whitegrid')
# 그래프 객체 생성(figure에 3개의 서브 플롯을 생성) fig = plt.figure(figsize=(15,5)) ax1 = fig.add_subplot(1,3,1) ax2 = fig.add_subplot(1,3,2) ax3 = fig.add_subplot(1,3,3)
# 기본값 sns.countplot(x='class', palette ='Set1', data=titanic, ax=ax1)
# hue 옵션에 'who' 추가 sns.countplot(x='class', hue ='who',palette ='Set2', data=titanic, ax=ax2)
# dodge = False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력) sns.countplot(x='class', hue='who', palette='Set3', dodge=False, data=titanic, ax=ax3) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[36]:
<matplotlib.axes._subplots.AxesSubplot at 0x1fa97b07508>
대표사진 삭제
사진 설명을 입력하세요.
훈련과정 : R·파이썬 기반 빅데이터 분석 전문가 양성과정
교과목 평가 : 빅데이터 분석결과 시각화
성명 : 호지수
점수 : 50점(1번 틀림, 2번 보류, 3(20),4(10),5(20)번 맞음, 6번 보류)
Q1. 'auto-mpg.csv' 데이터셋을 df 이름으로 불러온 후 아래 사항을 수행하세요. --- (10점)
df.columns = ['mpg','cylinders','displacement','horsepower','weight','model year','origin','name']
mpg , cylinders, weight, displacement, acceleration 칼럼만을 선택해서 df_s 이름으로 저장하고 처음 5개행을 출력하세요.
df_s에서 mpg와 각 칼럼간의 산점도를 그리고 음의 상관관계가 있는 변수를 기술하세요.
In [155]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import pandas as pd import numpy as np import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline import warnings warnings.filterwarnings('ignore')
df = pd.read_csv('../auto-mpg.csv') df.columns = ['mpg','cylinders','displacement','horsepower', 'weight','acceleration','model year','origin','name'] df_s = df[['mpg','cylinders','weight','displacement','acceleration' ]] display(df_s.head()) df_s.plot(x='weight', y='mpg', kind='scatter') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
weight |
displacement |
acceleration |
0 |
15.0 |
8 |
3693.0 |
350.0 |
11.5 |
1 |
18.0 |
8 |
3436.0 |
318.0 |
11.0 |
2 |
16.0 |
8 |
3433.0 |
304.0 |
12.0 |
3 |
17.0 |
8 |
3449.0 |
302.0 |
10.5 |
4 |
15.0 |
8 |
4341.0 |
429.0 |
10.0 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[155]:
<matplotlib.axes._subplots.AxesSubplot at 0x2115e159288>
대표사진 삭제
사진 설명을 입력하세요.
In [157]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
# 풀지 않은 추가 답안
display(df_s.corr()) df_s.plot(x='weight',y='mpg', kind='scatter') df_s.plot(x='cylinders',y='mpg', kind='scatter') df_s.plot(x='displacement',y='mpg', kind='scatter') df_s.plot(x='acceleration',y='mpg', kind='scatter') # 음의 상관관계 : cylinders, weight, displacement |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 1열 선택1열 다음에 열 추가
- 2열 선택2열 다음에 열 추가
- 3열 선택3열 다음에 열 추가
- 4열 선택4열 다음에 열 추가
- 5열 선택5열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
- 1행 선택1행 다음에 행 추가
- 2행 선택2행 다음에 행 추가
- 3행 선택3행 다음에 행 추가
- 4행 선택4행 다음에 행 추가
- 5행 선택5행 다음에 행 추가
열 너비 조절
행 높이 조절
|
mpg |
cylinders |
weight |
displacement |
acceleration |
mpg |
1.000000 |
-0.775412 |
-0.831558 |
-0.803972 |
0.419133 |
cylinders |
-0.775412 |
1.000000 |
0.896623 |
0.950718 |
-0.503016 |
weight |
-0.831558 |
0.896623 |
1.000000 |
0.932957 |
-0.416488 |
displacement |
-0.803972 |
0.950718 |
0.932957 |
1.000000 |
-0.542083 |
acceleration |
0.419133 |
-0.503016 |
-0.416488 |
-0.542083 |
1.000000 |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[157]:
<matplotlib.axes._subplots.AxesSubplot at 0x21160d07cc8>
대표사진 삭제
사진 설명을 입력하세요.
대표사진 삭제
사진 설명을 입력하세요.
대표사진 삭제
사진 설명을 입력하세요.
Q2. df_s의 각 컬럼간의 상관관계에 대한 시각화를 아래와 같이 수행하세요. (10점)
2개의 행과 2개의 열을 가진 subplots를 이용해서 표현
Seaborn의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현
In [12]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
import matplotlib.pyplot as plt import seaborn as sns %matplotlib inline
fig, axs = plt.subplots(figsize=(16,8), ncols=2, nrows=2) # 2행 2열 차트를 만든다. lm_features = ['acceleration', 'cylinders', 'weight', 'displacement'] for i, feature in enumerate(lm_features): # 인덱스와 같이 작동하는 것 row = int(i/2) #처음 인덱스는 0 col = i%2 # 컬럼도 처음에 0 # 시본의 regplot을 이용해 산점도와 선형 회귀 직선을 함께 표현 sns.regplot(x=feature, y='mpg', data=df_s, ax=axs[row][col]) |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Q3. auto_mpg.csv 파일을 df 이름으로 불러와서 horsepower열에 대한 히스토그램을 그린 후 출력하세요.(20점)
df.columns = ['mpg','cylinders','displacement','horsepower','weight', 'acceleration','model year','origin','name']
In [142]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
df = pd.read_csv('../auto-mpg.csv', header=None) df.columns = ['mpg','cylinders','displacement','horsepower','weight', 'acceleration','model year','origin','name'] df_h = df.loc[:,['horsepower']] # display(df_h['horsepower'].unique()) # '?' 하나가 있어서 제거하기 위해 작업함 df_h.replace('?', np.nan, inplace=True) df_h.fillna(df_h.mean(), inplace=True) df_fh=df_h.astype('float') df_fh.plot(kind='hist') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Out[142]:
<matplotlib.axes._subplots.AxesSubplot at 0x2115ee79888>
Q4. 아래 사항을 준수하여 막대 그래프(barplot)를 출력하세요. (10점)
Seaborn 제공 데이터셋 가져오기 : titanic = sns.load_dataset('titanic')
sns.barplot 이용
스타일 테마 설정 : sns.set_style('whitegrid')
그래프 객체 생성 : figure에 3개의 서브 플롯을 생성
x축, y축에 변수 할당 : x='sex', y='survived', data=titanic, ax=ax1
x축, y축에 변수 할당하고 hue 옵션 추가 : x='sex', y='survived', hue='class', data=titanic, ax=ax2
x축, y축에 변수 할당하고 hue 옵션을 추가하여 누적 출력 : x='sex', y='survived', hue='class', dodge=False, data=titanic, ax=ax3
차트 제목 표시\ ax1.set_title('titanic survived - sex')\ ax2.set_title('titanic survived - sex/class')\ ax3.set_title('titanic survived - sex/class(stacked)')
In [152]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
titanic = sns.load_dataset('titanic') sns.set_style('whitegrid')
fig = plt.figure(figsize=(15,5)) ax1=fig.add_subplot(1,3,1) ax2=fig.add_subplot(1,3,2) ax3=fig.add_subplot(1,3,3)
#x축, y축 변수 할당 sns.barplot(x='sex', y='survived', data=titanic, ax=ax1)
# hue 옵션에 'who' 추가 sns.barplot(x='sex', y='survived', hue='class', data=titanic, ax=ax2)
# dodge = False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력) sns.barplot(x='sex', y='survived', hue='class', dodge=False, data=titanic, ax=ax3)
ax1.set_title('titanic survived - sex') ax2.set_title('titanic survived - sex/class') ax3.set_title('titanic survived - sex/class(stacked)') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
대표사진 삭제
사진 설명을 입력하세요.
Out[152]:
Text(0.5, 1.0, 'titanic survived - sex/class(stacked)')
Q5. 아래 사항을 준수하여 빈도 그래프(countplot)를 출력하세요.(20점)
Seaborn 제공 데이터셋 가져오기 : titanic = sns.load_dataset('titanic')
sns.countplot 이용
스타일 테마 설정 : sns.set_style('whitegrid')
그래프 객체 생성 : figure에 3개의 서브 플롯을 생성
기본값 : x='class', palette='Set1', data=titanic, ax=ax1
hue 옵션에 'who' 추가 : x='class', hue='who', palette='Set2', data=titanic, ax=ax2
dodge=False 옵션 추가 : x='class', hue='who', palette='Set3', dodge=False, data=titanic, ax=ax3
차트 제목 표시\ ax1.set_title('titanic class')\ ax2.set_title('titanic class - who')\ ax3.set_title('titanic class - who(stacked)')
In [153]:
셀 전체 선택
- 0열 선택0열 다음에 열 추가
- 0행 선택0행 다음에 행 추가
열 너비 조절
행 높이 조절
titanic = sns.load_dataset('titanic') sns.set_style('whitegrid')
fig = plt.figure(figsize=(15,5)) ax1=fig.add_subplot(1,3,1) ax2=fig.add_subplot(1,3,2) ax3=fig.add_subplot(1,3,3)
# 기본값 sns.countplot(x='class', palette ='Set1', data=titanic, ax=ax1)
# hue 옵션에 'who' 추가 sns.countplot(x='class', hue ='who', palette ='Set2', data=titanic, ax=ax2)
# # dodge = False 옵션 추가 (축 방향으로 분리하지 않고 누적 그래프 출력) sns.countplot(x='class', hue='who', palette='Set3', dodge=False, data=titanic, ax=ax3)
ax1.set_title('titanic class') ax2.set_title('titanic class - who') ax3.set_title('titanic class - who(stacked)') |
- 셀 병합
- 행 분할
- 열 분할
- 너비 맞춤
- 삭제
Out[153]:
Text(0.5, 1.0, 'titanic class - who(stacked)')
대표사진 삭제
사진 설명을 입력하세요.
Q6. 타이타닉 생존자 예측 모델 개발을 위한 최종 선정 변수와 그 이유를 논하세요. (20점)
titanic3 분석용 데이터에 대한 탐색적 분석 결과 반영
1.fare
2.age
3.sex
4.survived
5.pclass
결론 : (금액, 나이, 성별, 생존률, 등급) 변수를 통해, 연산 메소드를 이용하여 데이터들의 상관관계를 해석할 수 있다.
부연설명
전처리를 통해 가공된 데이터를 corr()함수로 분석해 보면 sex-survived 가 가장 큰 음의 상관관계를 나타낸다고 해석할 수 있다. (의미상 pclass - fare 관계는 제외)
이는, sex-survived 가 서로 가장 밀접한 영향을 미친다고 볼 수 있으며, 최종 선정 변수로 채택된 이유로 적합하다고 판단된다.
추가적인 fare, age, pclass 데이터는 sex-survived 관계 외에도 다양한 변수를 고려해야 한다는 의미로 사용될 수 있다. --> 각 데이터가 생존률에 미치는 영향을 가중치로 두어 5가지 변수를 사용하는 방법도 사용 가능
'PYTHON' 카테고리의 다른 글
20200325 - 2 파이썬 통계기반 데이터 분석 (0) | 2020.03.25 |
---|---|
20200325-1 파이썬 머신러닝 (CT 촬영(폐) 원하는 부분 추출) (0) | 2020.03.25 |
20200323 - 파이썬 탐색적 데이터 분석 - 전처리, 그룹 연산 (0) | 2020.03.23 |
20200321 - 파이썬(미래 예측 머신러닝 모델(삼성전자, 이더리움)) (1) | 2020.03.21 |
20200320 - 파이썬(타이타닉 생존자 예측 데이터 전처리) (0) | 2020.03.20 |
댓글