2025-05-20

장상희·2025년 5월 20일
0

파이썬

목록 보기
25/31

plotting기초 (plot)

dataframe 객체를 시각화 하는 메서드

kind : 플로팅할 유형입니다. 목록은 아래와 같습니다.

※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin} x / y : 각 축으로 설정할 값(컬럼명) 입니다.

ax : 현재 figure의 axes 입니다. (fig와 axes의 개념은 아래 링크 참고)

※ 링크

subplot : 각 열들을 별개의 서브차트로 플로팅할지의 여부입니다.

sharex / sharey : subplot=True 인 경우 각축의 눈금을 공유할지 여부 입니다.

layout : 튜플로 입력하는 subplot의 배열입니다.

figsize : 출력할 fig의 크기 입니다.

use_index : 인덱스를 x축의 눈금으로 사용할지 여부 입니다.

title : fig의 제목 입니다.

grid : 배경 격자의 형성 여부입니다.

legend : subplot에서의 범례 배치 입니다.

style : 선의 스타일 입니다. 자세한것은 링크 참고 바랍니다.

logx / logy / loglog : 각 축에 대해 로그 스케일을 적용할지 여부 입니다. loglog=True인 경우 두 축에 모두 적용합니다.

xticks / yticks : 각 축의 눈금 값을 지정합니다.

xlim / ylim : 각 축의 값의 경계를 지정합니다.

xlabel / ylabel : 각 축의 라벨을 지정합니다.

rot : 눈금값의 기울기 입니다. 눈금값이 많을경우 유용합니다.

fontsize : 눈금값의 크기 입니다.

colormap / colorbar : 각 값에 대해 matplolib 에서 지원하는 colormap을 적용할 수 있습니다.

table : True면 데이터를 테이블로 출력하며 matplotlib의 기본 레이아웃에 맞게 전치됩니다.

yerr / xerr : 특정 열의 값을 이용하여 오차범위 표현을 할 수 있습니다.

stacked : bar plot이나 barh plot의 경우 막대 그래프를 누적 막대그래프로 표현할 수 있습니다.

sort_columns : 열을 정렬하여 플랏할지 여부입니다.

secondary_y : 보조축 레이블을 출력할지 여부 입니다.

mark_right : 보조축 레이블을 출력할 경우 범례에 "(right)"으로 열 레이블을 표시할지 여부 입니다.

include_bool : bool형식의 값을 플랏할지 여부입니다.

backend : plotting.backend 옵션에 지정된 백엔드 대신 사용할 백엔드. 예를 들어, 'matplotlib'. 또는 전체 세션에 대해 plotting.backend를 지정하려면 pd.options.plotting.backend를 설정할 수 있습니다.

val = np.linspace(0,100,101)
sin = np.sin(np.pi/25*val)
tan = np.tan(np.pi/25*val)
df = pd.DataFrame(data={'val':val,'sin':sin,'tan':tan})
print(df)
>>
       val           sin           tan
0      0.0  0.000000e+00  0.000000e+00
1      1.0  1.253332e-01  1.263294e-01
2      2.0  2.486899e-01  2.567564e-01
3      3.0  3.681246e-01  3.959280e-01
4      4.0  4.817537e-01  5.497547e-01
..     ...           ...           ...
96    96.0 -4.817537e-01 -5.497547e-01
97    97.0 -3.681246e-01 -3.959280e-01
98    98.0 -2.486899e-01 -2.567564e-01
99    99.0 -1.253332e-01 -1.263294e-01
100  100.0  1.286498e-15  1.286498e-15

df2는 df에서 sin, tan값만 추려낸 데이터 입니다.

sin과 tan은 삼각함수로, 각도에 따라 변하는 값을 나타냅니다.

sin은 수직 변의 길이를, tan은 수직 변과 수평 변의 비율을 나타냅니다

sin(사인):

  • 직각삼각형에서, 한 각에 대한 수직 변(높이)의 길이를 빗변의 길이로 나눈 값입니다.
  • 수직 방향으로 얼마나 떨어져 있는지 나타냅니다.

tan(탄젠트):

  • 직각삼각형에서, 한 각에 대한 수직 변(높이)의 길이를 수평 변(밑변)의 길이로 나눈 값입니다.

수직 변과 수평 변의 비율을 나타냅니다.

  • 수직 변과 수평 변의 비율을 나타냅니다.

sin 값을 cos 값으로 나눈 것과 같습니다.

  • sin 값을 cos 값으로 나눈 것과 같습니다.
df2 = df.loc[:,['sin','tan']]
print(df2)
>>
              sin           tan
0    0.000000e+00  0.000000e+00
1    1.253332e-01  1.263294e-01
2    2.486899e-01  2.567564e-01
3    3.681246e-01  3.959280e-01
4    4.817537e-01  5.497547e-01
..            ...           ...
96  -4.817537e-01 -5.497547e-01
97  -3.681246e-01 -3.959280e-01
98  -2.486899e-01 -2.567564e-01
99  -1.253332e-01 -1.263294e-01
100  1.286498e-15  1.286498e-15

[101 rows x 2 columns]

기본적인 사용법

기본 적인 사용법은 df.plot() 형태 입니다. line 형태로 모든 열을 plot하게 됩니다.

df2.plot()
plt.show()

sin그래프, tan그래프가 출력된 것을 확인할 수 있습니다.

kind, x, y 인수의 사용

kind인수를 통해 원하는 형태의 그래프를 출력 할 수 있으며, x와 y로 해당 그래프의 x와 y를 지정할 수 있습니다.

※ {line / bar / barh / hist / box / kde / density / area / pie / scatter / hexbin}

df.plot(kind='line', x='val', y='sin')
plt.show()

x축의 값은 0~100, y축의 값은 sin값으로 line 을 plot한 것을 확인할 수 있습니다.

ax 인수의 사용

ax인수를 통해 현재 axes값을 별도의 값으로 지정하여 plot에 사용할 수 있습니다.

fig, ax=plt.subplots(2) # 두개의 서브플롯에 ax를 배치하도록 fig를 설정
df.plot(kind='line', x='val', y='sin', ax=ax[0]) # sin그래프를 ax[0]으로 지정
df.plot(kind='line', x='val', y='tan', ax=ax[1]) # tan 그래프를 ax[1]으로 지정
plt.show()

각각의 ax로 구분한 Axes를 2칸짜리 subplot에 배열하여 plot한것을 확인 할 수 있습니다.

subplots 인수의 사용

subplots인수를 사용할 경우 각각의 열을 별도의 axes로 하여 subplot를 생성합니다.

※ 위 ax인수의 예시처럼 fig를 별도의 subplot 개체로 지정할 필요가 없습니다.

df2.plot(subplots=True)
plt.show()

각각의 열이 별도의 subplot에 할당된 것을 확인할 수 있습니다.

sharex / sharey 인수의 사용

subplot을 이용할 경우 두 Axes의 x축이나 y축값을 맞출 수 있습니다.

이때 공유된 축의 경우 한쪽은 보이지 않게 됩니다.

sharex의 기본값은 True로 x축은 맞추게 되고, sharey의 기본값은 False로 y축은 별도로 출력하는것이 기본입니다.

df2.plot(subplots=True, sharex=False, sharey=True) # x축값을 별도로 출력하고 y축값을 공유하도록 변경
plt.show()

x축값이 각각 그래프에 별도로 출력되는것을 확인 할 수 있습니다.

※subplot이 세로로 배열되어있기 때문에, shary=True인데 각각 출력이 됩니다. 가로로 배열되어있는상태라면 출력되지 않습니다.

layout인수의 사용

layout인수를 이용하여 subplot의 배열을 설정할 수 있습니다. 튜플 형태로 값을 입력합니다.

df2.plot(subplots=True, layout=(2,2))
plt.show()

fig가 2x2짜리 subplot으로 설정된 것을 확인할 수 있습니다.

figsize인수의 사용

figsize 인수를 이용해서 figure의 크기를 지정할 수 있습니다. 단위는 inch입니다.

df2.plot(figsize=(10,4))
plt.show()

fig의 크기가 변경된 것을 확인할 수 있습니다.

title / grid 인수의 사용

title인수는 figure의 제목을 설정하고, grid인수는 격자 출력 여부를 설정할 수 있습니다.

df2.plot(title="Pandas plot method", grid=True)
plt.show()

제목이 "Pandas plot method"로 설정되고, 격자가 설정된 것을 확인할 수 있습니다.

linestyle 인수의 사용

linestyle 인수를 지정하여 출력되는 그래프의 선 스타일을 지정할 수 있습니다.

선의 종류에 대해서는 matplotlib 홈페이지 참고 바랍니다.

df2.plot(linestyle='dashed')
plt.show()

선의 종류가 "- -" 형태인 'dashed'로 바뀐것을 확인 할 수 있습니다.

logx / logy / loglog인수의 사용

logs / logy / loglog인수를 이용해 각 축의 표시형식을 log스케일로 변경할 수 있습니다.

loglog인수는 모든 축의 값을 로그스케일로 변경합니다.

df2.plot(logx=True,logy=True) # df2.plot(loglog=True)
plt.show()

각 축의 표기형태가 로그 스케일로 변경된 것을 확인할 수 있습니다.

xticks / yticks 인수의 사용

xticks / yticks 인수에 리스트 형태의 값을 입력하여 특정 눈금의 값을 출력할 수 있습니다.

df.plot(kind='line', x='val',y='sin', xticks=[0,50,100],yticks=[0,0.5,1])
plt.show()

x축의 눈금이 0, 50, 100 만 y축의 눈금이 0, 0.5, 1 만 표시된 것을 확인할 수 있습니다.

xlim / ylim 인수의 사용

xlim / ylim 인수를 사용해 그래프의 출력 범위를 지정할 수 있습니다.

df.plot(kind='line', x='val',y='sin', xlim=[30,80],ylim=[0.25,0.75])
plt.show()

그래프가 x축으로는 30~80의 범위가, y 축으로는 0.25~0.75의 범위가 출력 된 것을 확인할 수 있습니다.

xlabel / ylabel 인수의 사용

xlabel / ylabel 인수를 사용해 각 축의 라벨을 출력할 수 있습니다.

df2.plot(xlabel='Width',ylabel='Height')
plt.show()

각 축의 이름이 출력 된 것을 확인할 수 있습니다.

rot / fontsize 인수의 사용

rot 인수를 이용해 눈금값의 기울기를 지정할 수 있고, fontsize 인수를 통해 눈금값의 크기를 지정할 수 있습니다.

df2.plot(rot=45,fontsize=20)
plt.show()

그래프 눈금값의 기울기가 45도로, 눈금값의 크기가 20으로 변경된 것을 확인할 수 있습니다.

colormap / colorbar 인수의 사용

colormap 은 출력되는 그래프의 값을 특정 색 범위로 표현하는 matplotlib의 기능입니다. colorbar는 색에 해당하는 값의 범위를 막대 형태로 출력하는 기능입니다.

colorbar의 기본값은 True이기 때문에, False로 지정해주어야 출력이 안됩니다.

colorbar를 적용하기 위해서는, 각 값에 대해서 색을 지정해 주어야합니다. c인수에 색의 값을 지정하는 열을 입력하여 가능합니다.

colormap의 종류에 대해서는 matplolib 에서 지원하는 colormap 링크을 참고 바랍니다.

data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}#x축에 표시될 값들,y축에 표시될 값들,각 점의 색을 결정할 값 (컬러바)
df3 = pd.DataFrame(data)
df3.plot(kind='scatter',x='x_value',y='y_value',c='color_bar', colormap='cool',colorbar=True) # c인수로 color_bar 열을 지정.
# 산점도 그래프 (scatter plot)로 그림, x축은 'x_value' 열 사용, 축은 'y_value' 열 사용,각 점의 색을 'color_bar' 열 값에 따라 다르게 지정, 색상 맵(colormap) 지정 ('cool'은 보라-청록 계열), 색상 기준을 옆에 colorbar로 시각적으로 표시
plt.show()

스크린샷 2025-05-20 185150.png

c='color_bar'를 통해 색범위를 0~4로 정해주었고, 각 y값에 대해서 색값을 지정해주었습니다.

그에 맞게 colormap과 colorbar가 적용된 것을 확인할 수 있습니다.

position 인수의 사용

position인수는 막대그래프 'bar / barh'에대해서 막대의 위치가 눈금의 위치 {좌측(0), 중(0.5), 우측(1)}를 지정할 수 있습니다.

data = {'x_value':[4,7,3,1,2],'y_value':[1,2,3,4,5],'color_bar':[0,1,2,3,4]}
df3 = pd.DataFrame(data)
fig, ax=plt.subplots(3) # 3칸짜리 subplot을 갖는 fig 개체 설정
df3.plot(kind='bar',x='x_value',y='y_value',position=0,ax=ax[0])
df3.plot(kind='bar',x='x_value',y='y_value',position=0.5,ax=ax[1])
df3.plot(kind='bar',x='x_value',y='y_value',position=1,ax=ax[2])
plt.show()

각각 그래프에서 눈금의 위치와 막대 그래프의 위치를 비교해보면 position인수가 어떻게 적용되는지 확인할 수 있습니다.

xerr / yerr인수의 사용

xerr / yerr인수는 특정 축을 기존그래프의 오차범위로 설정하는 인수 입니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
fig, ax=plt.subplots(2)
df4.plot(kind='bar',x='x_value',y='y_value',yerr='err',ax=ax[0])
df4.plot(kind='barh',x='x_value',y='y_value',xerr='err',ax=ax[1])
plt.show()

기존 x_value / y_value 막대그래프에 대해서 작은 선 형태로 err 열이 오차범위로써 덧 씌워진 것을 확인할 수 있습니다.

stacked 인수의 사용

막대그래프의 경우 값이 여러개라면 stacked인수를 통해 누적 막대그래프의 형태로 변환이 가능합니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
df4.plot(kind='bar',x='x_value',y=['y_value','err'],stacked=True)
plt.show()

y의 값을 리스트 형태로 두 컬럼을 입력하여 두 막대그래프를 출력하도록 한 다음 stacked=True로 하여 누적 막대그래프가 된 것을 확인할 수 있습니다.

secondary_y 인수의 사용

두 그래프를 출력 할 경우 한 Axes를 다른 Axes에 종속시킴으로서 종속된 Axes를 secondary_y 인수를 이용해 보조 축으로 표현할 수 있습니다.

data = {'x_value':[1,2,3,4,5],'y_value':[2,5,3,7,1],'err':[0.1,0.3,0.6,1.0,0.1]}
df4 = pd.DataFrame(data)
ax1 = df4.plot(x='x_value',y='y_value',color='Red',) # y_value를 ax1로
ax2 = df4.plot(x='x_value',y='err',ax=ax1,secondary_y=True) # err을 ax2로하여 ax1에 종속 및 보조축 설정
ax1.set_ylabel('y_value') # 라벨 설정
ax2.set_ylabel('err')

ax1를 생성하고 ax2를 ax1에 종속시키면서 secondary_y=True로 하여 우측에 보조축이 생성된 것을 확인할 수 있습니다.

x,y축 지정 (area / bar / barh / line)

val = np.linspace(0,100,101)
sin = np.sin(np.pi/25*val)+1
cos = np.cos(np.pi/25*val)+1
df = pd.DataFrame(data={'val':val,'sin+1':sin,'cos+1':cos})
print(df)
>>
       val     sin+1     cos+1
0      0.0  1.000000  2.000000
1      1.0  1.125333  1.992115
2      2.0  1.248690  1.968583
3      3.0  1.368125  1.929776
4      4.0  1.481754  1.876307
..     ...       ...       ...
96    96.0  0.518246  1.876307
97    97.0  0.631875  1.929776
98    98.0  0.751310  1.968583
99    99.0  0.874667  1.992115
100  100.0  1.000000  2.000000

기본적인 사용법

plot.[area / bar / barh / line] 메서드는 반드시 x축과 y축(값)을 지정해주어야 합니다.

area메서드의 사용

plot.area 메서드는 데이터를 면적 그래프의 형태로 반환합니다. 기본적으로 stacked=True 이므로, 면적이 누적되는 형태로 출력됩니다.

df.plot.area(x='val',y=['sin+1','cos+1'],stacked=True) #stacked=True는 기본값
#sin과 cos 사인은 -1~+1까지 나타내기 때문에 1부터 시작하기 위헤서 1을 더한거다
plt.show()

stacked=False인 경우 면적이 겹치는것을 시각화 하여 보여줍니다.

df.plot.area(x='val',y=['sin+1','cos+1'],stacked=False)
plt.show()

bar / barh 메서드의 사용

plot.bar / plot.barh는 각각 세로 막대그래프, 가로 막대 그래프를 반환합니다.

df.plot.bar(x='val',y=['sin+1','cos+1'])#plot.bar 세로 막대그래프
plt.show()

df.plot.barh(x='val',y=['sin+1','cos+1'])#가로 막대그래프
plt.show()

line 메서드의 사용

plot.line 메서드는 선형 그래프를 반환합니다.

df.plot.line(x='val',y=['sin+1','cos+1'])#선형 그래프
plt.show()

x,y축, c값 지정 (hexbin / scatter)

x / y : 각 축으로 설정할 값(컬럼명) 입니다.

c : 각 값에 대한 colorbar의 값을 지정할 수 있습니다.

kwargs : 그 외에 matplotlib 중 plot에서 지원하는 인수의 사용이 가능합니다.

먼저 기본적인 사용법 예시를위하여 데이터를 만들어 보겠습니다.

df는 크기 10000짜리 가우시안 표준 정규분포 x와 y, 그리고 0~10까지의 난수를 갖는 1000개짜리 c열 의 데이터입니다.

df = pd.DataFrame({'x':np.random.randn(10000),
                   'y':np.random.randn(10000),
                   'c':np.random.randint(0,10,size=10000)})
>>
             x         y  c
0     0.987301  0.239920  4
1    -0.466582  0.432507  4
2     0.462679  0.869407  7
3     0.547113 -1.123641  8
4     0.046728 -1.220947  6
...        ...       ... ..
9995  0.241341 -0.598799  0
9996 -1.694559  1.428881  5
9997  0.929081 -1.504374  9
9998  1.561134  1.445425  5
9999  2.113502  0.611024  7

[10000 rows x 3 columns]

기본적인 사용법

plot.[hexbin / scatter]] 메서드는 반드시 x축과 y축(값)을 지정해주어야 합니다. (colormap은 자동으로 지정되며, c는 선택)

hexbin메서드의 사용

hexbin 메서드는 육각형의 그리드형태로 값을 반환하는 그래프 입니다. gridsize 인수 는 x축 기준 그리드 한칸의 크기를 의미합니다.

colormap 인수는 자동 지정되나, 원하는 colormap으로 지정이 가능합니다.

df.plot.hexbin(x='x',y='y',gridsize=20,colormap='viridis')
plt.show()

스크린샷 2025-05-20 190529.png

C 인수의 사용

C 인수를 통해 colormap 기준으로 각 값이 colorbar에서 어떤 값을 취할지 지정할 수 있습니다.

df.plot.hexbin(x='x',y='y',gridsize=20,colormap='jet',C='c')
plt.show()

스크린샷 2025-05-20 190641.png

reduce_C_function 인수의 사용

reduce_C_function 인수는 colorbar의 값에 대해서 그래프의 bin(한칸의 가로사이즈)에 속하는 값들이 하나의 대표값으로 통일하게 해주는 np 메서드를 지정하는 인수입니다.

df.plot.hexbin(x='x',y='y',gridsize=20,colormap='cool',C='c',reduce_C_function=np.max)
plt.show()

스크린샷 2025-05-20 190811.png

colorbar에 대해서 한 bin의 값들이 해당값의 max값으로 통일 되어 반환되는것을 확인 할 수 있습니다.


scatter메서드의 사용

scatter는 점산도 그래프를 반환하는 메서드입니다.

s인수는 점의 크기를 스칼라값으로 지정 가능하며, c인수를 통해 각 값이 colorbar에서 어떤 값을 취할지 지정 가능합니다.

df.plot.scatter(x='x',y='y',s=3,c='c',colormap='viridis')
plt.show()

스크린샷 2025-05-20 190946.png

축 설정 불필요 (box / hist / pie)

data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
print(df)
>>
           x         y
0   1.476916 -1.549051
1   0.156672  1.601624
2   0.493568  0.096696
3  -0.550939  0.200391
4   0.885276  0.613648
..       ...       ...
95 -0.048403  2.432448
96  0.020946  0.900305
97  0.128520  0.514659
98  0.369856  1.519807
99  0.928380  0.105314

[100 rows x 2 columns]

기본적인 사용법

plot.[box / hist / pie]] 메서드는 각 열의 데이터를 가져오기 때문에 x축, y축등을 지정해 줄 필요가 없습니다.

box메서드의 사용

box 메서드의 경우 boxplot을 출력합니다.

df.plot.box메서드는 df.boxplot메서드와 동일한 기능을 수행합니다.

data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
df.plot.box()
plt.show()

스크린샷 2025-05-20 191744.png

hist 메서드의 사용

hist 메서드의 경우 histogram을 출력합니다. bins 인수를통해 막대 하나의 크기를 정할 수 있으며, alpha를 통해 투명도를 설정할 수 있습니다.

df.plot.hist메서드는 df.hist메서드와 동일한 기능을 수행합니다.

data = np.random.randn(100,2)
df = pd.DataFrame(data, columns = ['x','y'])
df.plot.hist(bins=20,alpha=0.5,color=['green','blue']) # bins로 막대 크기20, alpha로 투명도 0.5, 색은 초록-파랑 설정
plt.show()

스크린샷 2025-05-20 191839.png

pie 메서드의 사용

pie메서드는 원형 그래프를 출력하는 메서드 입니다. 열의 갯수만큼의 원형그래프가 생성되므로 서브플롯을 설정해주어야합니다.

data = {'x':[3,7,9],'y':[2,6,3]}
idx = ['A','B','C']
df = pd.DataFrame(data=data, index= idx)
df.plot.pie(subplots=True)
plt.show()

커널밀도추정 그래프 (kde / density)

bw_method : 대역폭을 지정합니다. 대역폭이 작을수록 더 자세한 smoothing이 가능하고, 대역폭이 크면 러프한 smoothing이 수행됩니다.

ind : 예상 PDF에 대한 평가 포인트입니다. 기본값은 1000개의 타점이며, numpy array나 리스트형태로 입력 할 경우 해당 포인트로 계산이 수행됩니다.

kwargs : matplotlib 중 plot에서 지원하는 인수의 사용이 가능합니다.

예시

먼저 기본적인 사용법 예시를위하여 데이터를 만들어 보겠습니다.

df는 크기 1000짜리 가우시안 표준 정규분포 value열의 데이터입니다.

data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
print(df)
>>
        value
0   -0.307367
1    0.310514
2    1.135779
3   -0.584566
4    0.859781
..        ...
995  0.449085
996 -0.513770
997 -0.782740
998  1.250284
999  0.566071

[1000 rows x 1 columns]

기본적인 사용법

커널밀도추정(KDE)는 간단히 말하면 데이터의 histogram을 smoothing하는 것이라고 볼 수 있습니다.(실제로는 더 복잡한 의미를 가집니다.)

50bin 짜리 histogram과 함께 kde 메서드를 수행해서 비교해보겠습니다.

data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True)
plt.show()

스크린샷 2025-05-20 192056.png

bw_method 인수의 사용

bw_method 인수를이용해 대역폭(bandwidth)를 설정할 수 있습니다. bw_method가 작을수록 더욱 세부적인 계산이 수행됩니다.

data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True,bw_method=0.1)
df.plot.kde(ax=ax,secondary_y=True,bw_method=3)
plt.show()

주황색 line의 0.1짜리 대역폭과, 녹색 line의 3짜리 대역폭의 차이점을 볼 수 있습니다.

스크린샷 2025-05-20 192246.png

ind 인수의 사용

ind 인수를 통해 계산이 수행되는 지점을 지정할 수 있습니다.

data = np.random.randn(1000,1)
df = pd.DataFrame(data,columns=['value'])
ax = df.plot.hist(bins=50)
df.plot.kde(ax=ax,secondary_y=True)
df.plot.kde(ax=ax,secondary_y=True,ind=[-6,-4,-2,0,2,4,6],color='red')
plt.show()

스크린샷 2025-05-20 192330.png

붉은색 line이 특정 지점을 기준으로 계산 된 것을 확인 할 수 있습니다.

간단한 문제 풀이

DataFrame.groupby max, min

위 데이터프레임에서 테마별 PER, PBR의 최대, 최소값을 계산하세요.

data = [
    ["2차전지(생산)", "SK이노베이션", 10.19, 1.29],
    ["해운", "팬오션", 21.23, 0.95],
    ["시스템반도체", "티엘아이", 35.97, 1.12],
    ["해운", "HMM", 21.52, 3.20],
    ["시스템반도체", "아이에이", 37.32, 3.55],
    ["2차전지(생산)", "LG화학", 83.06, 3.75]
]

columns = ["테마", "종목명", "PER", "PBR"]
df = pd.DataFrame(data=data, columns=columns)
print(df)
         테마      종목명    PER   PBR
0  2차전지(생산)  SK이노베이션  10.19  1.29
1        해운      팬오션  21.23  0.95
2    시스템반도체     티엘아이  35.97  1.12
3        해운      HMM  21.52  3.20
4    시스템반도체     아이에이  37.32  3.55
5  2차전지(생산)     LG화학  83.06  3.75

#

#정답

df.groupby(by="테마").max()
df.groupby(by="테마").min()
>>
	종목명	PER	PBR
테마			
2차전지(생산)	LG화학	10.19	1.29
시스템반도체	아이에이	35.97	1.12
해운	HMM	21.23	0.95

#2번정답

df.groupby(by="테마").size()
df.groupby(by="테마").size()
>>
0
테마	
2차전지(생산)	2
시스템반도체	2
해운	2

dtype: int64
#3번정답
df.groupby(by="테마").get_group("2차전지(생산)")
>>
테마	종목명	PER	PBR
0	2차전지(생산)	SK이노베이션	10.19	1.29
5	2차전지(생산)	LG화학	83.06	3.75

#4번정답
찐 df.groupby("테마")[["PER"]].mean()
df.groupby(by="테마").mean("PER","PBR")
>>
	PER	PBR
테마		
2차전지(생산)	46.625	2.520
시스템반도체	36.645	2.335
해운	21.375	2.075
#5번정답
df.groupby("테마")[["PER", "PBR"]].mean()
>>

PER	PBR
테마		
2차전지(생산)	46.625	2.520
시스템반도체	36.645	2.335
해운	21.375	2.075
profile
프로그래머 꿈나무

0개의 댓글