In [81]:
# !pip install bar_chart_race
In [6]:
#필요한 모듈 불러오기
#!pip install bar_chart_race as bcr
import pandas as pd
import numpy as np
import bar_chart_race as bcr
In [7]:
# !pip install pandas
In [8]:
#필요한 데이터 셋 불러오기
path = "비스킷브랜드점유율_T.csv"
df = pd.read_csv(path, encoding='cp949')
In [9]:
# 요약출력
df.head()
Out[9]:
구분 | 홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2011-4Q | 11478 | 12256 | 9770.0 | 6770 | 12823 | 11236 | NaN | 5473 | 5847 | 8298.0 | NaN | NaN |
1 | 2012-1Q | 12537 | 2734 | 1100.0 | 8241 | 15678 | 10653 | 6483.0 | 6060 | 6002 | 9264.0 | NaN | 6978.0 |
2 | 2012-2Q | 11346 | 12339 | 9480.0 | 7999 | 14257 | 11285 | 4471.0 | 6611 | 6019 | 9217.0 | NaN | 8422.0 |
3 | 2012-3Q | 11122 | 11594 | 8077.0 | 8140 | 12119 | 11895 | 3923.0 | 6741 | 6371 | 9019.0 | NaN | 10481.0 |
4 | 2012-4Q | 11186 | 12061 | 9523.0 | 8868 | 13436 | 12334 | 4531.0 | 6789 | 5836 | 9409.0 | NaN | 10026.0 |
In [10]:
df_cum = df.set_index('구분')
# df.set_index('구분', inplace=True)
In [11]:
# NaN값 0으로 바꾸어 주기
# df_cum.fillna(0,inplace=True)
df_cum.sort_values(list(df_cum.columns), inplace=True)
df_cum = df_cum.sort_index()
df_cum.head()
Out[11]:
홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
구분 | ||||||||||||
2011-4Q | 11478 | 12256 | 9770.0 | 6770 | 12823 | 11236 | NaN | 5473 | 5847 | 8298.0 | NaN | NaN |
2012-1Q | 12537 | 2734 | 1100.0 | 8241 | 15678 | 10653 | 6483.0 | 6060 | 6002 | 9264.0 | NaN | 6978.0 |
2012-2Q | 11346 | 12339 | 9480.0 | 7999 | 14257 | 11285 | 4471.0 | 6611 | 6019 | 9217.0 | NaN | 8422.0 |
2012-3Q | 11122 | 11594 | 8077.0 | 8140 | 12119 | 11895 | 3923.0 | 6741 | 6371 | 9019.0 | NaN | 10481.0 |
2012-4Q | 11186 | 12061 | 9523.0 | 8868 | 13436 | 12334 | 4531.0 | 6789 | 5836 | 9409.0 | NaN | 10026.0 |
In [12]:
# 누적데이터로 각 축구팀의 데이터 값 바꾸기
df_cum.iloc[:,0:-1] = df_cum.iloc[:, 0:-1].cumsum()
df_cum.head()
Out[12]:
홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|
구분 | ||||||||||||
2011-4Q | 11478 | 12256 | 9770.0 | 6770 | 12823 | 11236 | 0.0 | 5473 | 5847 | 8298.0 | 0.0 | 0.0 |
2012-1Q | 24015 | 14990 | 10870.0 | 15011 | 28501 | 21889 | 6483.0 | 11533 | 11849 | 17562.0 | 0.0 | 6978.0 |
2012-2Q | 35361 | 27329 | 20350.0 | 23010 | 42758 | 33174 | 10954.0 | 18144 | 17868 | 26779.0 | 0.0 | 8422.0 |
2012-3Q | 46483 | 38923 | 28427.0 | 31150 | 54877 | 45069 | 14877.0 | 24885 | 24239 | 35798.0 | 0.0 | 10481.0 |
2012-4Q | 57669 | 50984 | 37950.0 | 40018 | 68313 | 57403 | 19408.0 | 31674 | 30075 | 45207.0 | 0.0 | 10026.0 |
In [13]:
# top 10 과자만 남기고 다른 데이터는 지우기
top_10_clubs= []
for index, row in df_cum.iterrows():
top_10_clubs = list(row[row>0].sort_values(ascending=False).head(10).index)
In [14]:
df_cum = df[top_10_clubs]
df_cum.head()
Out[14]:
홈런볼 | 카스타드 | 마가렛트 | 에이스 | 하임 | 오레오 | 칙촉 | 쿠크다스 | 칸쵸 | 닥터유바 | |
---|---|---|---|---|---|---|---|---|---|---|
구분 | ||||||||||
2011-4Q | 11478 | 12256 | 12823 | 9770.0 | 11236 | 0.0 | 6770 | 5847 | 5473 | 0.0 |
2012-1Q | 24015 | 14990 | 28501 | 10870.0 | 21889 | 6483.0 | 15011 | 11849 | 11533 | 0.0 |
2012-2Q | 35361 | 27329 | 42758 | 20350.0 | 33174 | 10954.0 | 23010 | 17868 | 18144 | 0.0 |
2012-3Q | 46483 | 38923 | 54877 | 28427.0 | 45069 | 14877.0 | 31150 | 24239 | 24885 | 0.0 |
2012-4Q | 57669 | 50984 | 68313 | 37950.0 | 57403 | 19408.0 | 40018 | 30075 | 31674 | 0.0 |
In [16]:
#bar chart race 그리기
import matplotlib.pyplot as plt
plt.rc("font", family="NanumGothic")
bcr.bar_chart_race(df = df_cum,
n_bars = 10,
sort='desc',
img_label_folder="bar_image_labels",
steps_per_period = 50,
title = '비스킷 브랜드 점유율_2011-2022 매출액 (단위:백만원)',
shared_fontdict={'family':'NanumGothic'}) #)#'TOP 6 TEAM in PL(1992-2017)'
#,filename = 'epl_10_clubs.mp4') #차트 레이스를 동영상으로 저장하고 싶을 때 사용
C:\Users\user\anaconda3\lib\site-packages\bar_chart_race\_bar_chart_race.py:627: MatplotlibDeprecationWarning: savefig() got unexpected keyword argument "dpi" which is no longer supported as of 3.3 and will become an error two minor releases later self.fig.tight_layout()
Out[16]:
In [5]:
df.index
Out[5]:
RangeIndex(start=0, stop=32, step=1)
In [6]:
sum = [273640, 276558, 270984, 267719, 289443, 280883, 281530, 261887, 295118, 275374, 274175, 252562, 275054, 254017, 248062, 239883, 254943, 256550, 259622,254462, 276511, 608307,602437, 586990,579820,587131,580557, 586975, 585409, 579508, 565158, 584371]
df['총매출'] = sum
In [7]:
df
Out[7]:
구분 | 홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | 총매출 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2011-4Q | 11478 | 12256 | 9770.0 | 6770 | 12823 | 11236 | NaN | 5473 | 5847 | 8298.0 | NaN | NaN | 273640 |
1 | 2012-1Q | 12537 | 2734 | 1100.0 | 8241 | 15678 | 10653 | 6483.0 | 6060 | 6002 | 9264.0 | NaN | 6978.0 | 276558 |
2 | 2012-2Q | 11346 | 12339 | 9480.0 | 7999 | 14257 | 11285 | 4471.0 | 6611 | 6019 | 9217.0 | NaN | 8422.0 | 270984 |
3 | 2012-3Q | 11122 | 11594 | 8077.0 | 8140 | 12119 | 11895 | 3923.0 | 6741 | 6371 | 9019.0 | NaN | 10481.0 | 267719 |
4 | 2012-4Q | 11186 | 12061 | 9523.0 | 8868 | 13436 | 12334 | 4531.0 | 6789 | 5836 | 9409.0 | NaN | 10026.0 | 289443 |
5 | 2013-1Q | 12334 | 12748 | 9738.0 | 10251 | 14856 | 11987 | 5373.0 | 6293 | 5841 | 9359.0 | NaN | 8771.0 | 280883 |
6 | 2013-2Q | 12504 | 12809 | 9042.0 | 8370 | 14712 | 12053 | 4771.0 | 6568 | 5999 | 7793.0 | NaN | 10349.0 | 281530 |
7 | 2013-3Q | 12009 | 11502 | 7023.0 | 8100 | 1244 | 10371 | 5019.0 | 5819 | 6430 | 7532.0 | NaN | 10797.0 | 261887 |
8 | 2013-4Q | 12933 | 12823 | 8032.0 | 8453 | 13051 | 11787 | 4853.0 | 5684 | 7618 | 8352.0 | NaN | 9606.0 | 295118 |
9 | 2014-1Q | 13351 | 11896 | 8310.0 | 8559 | 12106 | 10426 | 4479.0 | 5656 | 7575 | 7423.0 | NaN | 8854.0 | 275374 |
10 | 2014-2Q | 13324 | 13718 | 8764.0 | 7098 | 13594 | 9673 | 4783.0 | 6234 | 6824 | 7902.0 | NaN | 9204.0 | 274175 |
11 | 2014-3Q | 13286 | 11796 | 7947.0 | 6841 | 11504 | 9581 | 4133.0 | 5993 | 6558 | 7583.0 | 6748.0 | 9310.0 | 252562 |
12 | 2014-4Q | 12868 | 12253 | 9128.0 | 7810 | 11495 | 10150 | 3777.0 | 5877 | 7136 | 7257.0 | 6703.0 | 8413.0 | 275054 |
13 | 2015-1Q | 13924 | 11638 | 9485.0 | 7485 | 11626 | 8833 | 3397.0 | 5515 | 6919 | 7133.0 | 6115.0 | 7711.0 | 254017 |
14 | 2015-2Q | 11866 | 11409 | 9560.0 | 6491 | 11595 | 9223 | 3639.0 | 5994 | 6242 | 7187.0 | 6529.0 | 7068.0 | 248062 |
15 | 2015-3Q | 13136 | 11626 | NaN | 5820 | 10914 | 9882 | 6167.0 | 5579 | 6162 | 6523.0 | 6179.0 | NaN | 239883 |
16 | 2015-4Q | 14456 | 11374 | 9716.0 | 6388 | 10978 | 10211 | 5161.0 | 6056 | 7156 | 6420.0 | 6819.0 | 8063.0 | 254943 |
17 | 2016-1Q | 16233 | 10868 | 10300.0 | 6797 | 11952 | 10198 | 5550.0 | 6334 | 7584 | 6447.0 | 6623.0 | 6905.0 | 256550 |
18 | 2016-2Q | 16196 | 12763 | 9855.0 | 6497 | 9828 | 9606 | 6300.0 | 9703 | 6906 | 6671.0 | 5475.0 | 7204.0 | 259622 |
19 | 2016-3Q | 16329 | 11912 | 7774.0 | 6451 | 9606 | 8865 | 6239.0 | 6248 | 6728 | 5730.0 | 5911.0 | 7121.0 | 254462 |
20 | 2016-4Q | 15944 | 11013 | 10755.0 | 6201 | 11087 | 8362 | 8391.0 | 9439 | 5907 | 7943.0 | 6110.0 | 6534.0 | 276511 |
21 | 2017-1H | 36233 | 25329 | 22572.0 | 13553 | 25523 | 15863 | NaN | 14878 | 14603 | NaN | 14177.0 | 12212.0 | 608307 |
22 | 2017-2H | 37600 | 20339 | 20089.0 | 13595 | 22831 | 18265 | 15499.0 | 13318 | 15843 | NaN | 15247.0 | 10424.0 | 602437 |
23 | 2018-1H | 40416 | 24677 | 22516.0 | 15248 | 19603 | 17871 | 15814.0 | 14924 | 14640 | NaN | 13098.0 | 8296.0 | 586990 |
24 | 2018-2H | 43540 | 24943 | 20803.0 | 18506 | 17429 | 17301 | 15358.0 | 14829 | 14127 | NaN | 12102.0 | 8448.0 | 579820 |
25 | 2019-1H | 44588 | 26691 | 22762.0 | 18468 | 18600 | 17656 | 14882.0 | 14264 | 14015 | NaN | 10496.0 | 8376.0 | 587131 |
26 | 2019-2H | 44431 | 23977 | 20475.0 | 16488 | 18300 | 17598 | 16550.0 | 13376 | 13862 | NaN | 17148.0 | NaN | 580557 |
27 | 2020-1H | 46756 | 24865 | 24017.0 | 13763 | 18513 | 17337 | 17057.0 | 11808 | 14544 | NaN | 16736.0 | NaN | 586975 |
28 | 2020-2H | 44672 | 22493 | 23398.0 | 11974 | 17414 | 17782 | 15935.0 | 10815 | 15712 | NaN | 16530.0 | 13177.0 | 585409 |
29 | 2021-1H | 41587 | 25723 | 26024.0 | 14321 | 16149 | 16530 | 14103.0 | 9445 | 13650 | NaN | 18198.0 | 13576.0 | 579508 |
30 | 2021-2H | 35309 | 21699 | 24421.0 | 13240 | 16739 | 17831 | 15880.0 | 9618 | 13826 | NaN | 19024.0 | 13452.0 | 565158 |
31 | 2022-1H | 40315 | 21833 | 25853.0 | 12550 | 17345 | 18796 | 15703.0 | 9352 | 15726 | NaN | 18342.0 | 14255.0 | 584371 |
In [8]:
df.loc[32] = df.loc[31]
In [9]:
df
Out[9]:
구분 | 홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | 총매출 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 2011-4Q | 11478 | 12256 | 9770.0 | 6770 | 12823 | 11236 | NaN | 5473 | 5847 | 8298.0 | NaN | NaN | 273640 |
1 | 2012-1Q | 12537 | 2734 | 1100.0 | 8241 | 15678 | 10653 | 6483.0 | 6060 | 6002 | 9264.0 | NaN | 6978.0 | 276558 |
2 | 2012-2Q | 11346 | 12339 | 9480.0 | 7999 | 14257 | 11285 | 4471.0 | 6611 | 6019 | 9217.0 | NaN | 8422.0 | 270984 |
3 | 2012-3Q | 11122 | 11594 | 8077.0 | 8140 | 12119 | 11895 | 3923.0 | 6741 | 6371 | 9019.0 | NaN | 10481.0 | 267719 |
4 | 2012-4Q | 11186 | 12061 | 9523.0 | 8868 | 13436 | 12334 | 4531.0 | 6789 | 5836 | 9409.0 | NaN | 10026.0 | 289443 |
5 | 2013-1Q | 12334 | 12748 | 9738.0 | 10251 | 14856 | 11987 | 5373.0 | 6293 | 5841 | 9359.0 | NaN | 8771.0 | 280883 |
6 | 2013-2Q | 12504 | 12809 | 9042.0 | 8370 | 14712 | 12053 | 4771.0 | 6568 | 5999 | 7793.0 | NaN | 10349.0 | 281530 |
7 | 2013-3Q | 12009 | 11502 | 7023.0 | 8100 | 1244 | 10371 | 5019.0 | 5819 | 6430 | 7532.0 | NaN | 10797.0 | 261887 |
8 | 2013-4Q | 12933 | 12823 | 8032.0 | 8453 | 13051 | 11787 | 4853.0 | 5684 | 7618 | 8352.0 | NaN | 9606.0 | 295118 |
9 | 2014-1Q | 13351 | 11896 | 8310.0 | 8559 | 12106 | 10426 | 4479.0 | 5656 | 7575 | 7423.0 | NaN | 8854.0 | 275374 |
10 | 2014-2Q | 13324 | 13718 | 8764.0 | 7098 | 13594 | 9673 | 4783.0 | 6234 | 6824 | 7902.0 | NaN | 9204.0 | 274175 |
11 | 2014-3Q | 13286 | 11796 | 7947.0 | 6841 | 11504 | 9581 | 4133.0 | 5993 | 6558 | 7583.0 | 6748.0 | 9310.0 | 252562 |
12 | 2014-4Q | 12868 | 12253 | 9128.0 | 7810 | 11495 | 10150 | 3777.0 | 5877 | 7136 | 7257.0 | 6703.0 | 8413.0 | 275054 |
13 | 2015-1Q | 13924 | 11638 | 9485.0 | 7485 | 11626 | 8833 | 3397.0 | 5515 | 6919 | 7133.0 | 6115.0 | 7711.0 | 254017 |
14 | 2015-2Q | 11866 | 11409 | 9560.0 | 6491 | 11595 | 9223 | 3639.0 | 5994 | 6242 | 7187.0 | 6529.0 | 7068.0 | 248062 |
15 | 2015-3Q | 13136 | 11626 | NaN | 5820 | 10914 | 9882 | 6167.0 | 5579 | 6162 | 6523.0 | 6179.0 | NaN | 239883 |
16 | 2015-4Q | 14456 | 11374 | 9716.0 | 6388 | 10978 | 10211 | 5161.0 | 6056 | 7156 | 6420.0 | 6819.0 | 8063.0 | 254943 |
17 | 2016-1Q | 16233 | 10868 | 10300.0 | 6797 | 11952 | 10198 | 5550.0 | 6334 | 7584 | 6447.0 | 6623.0 | 6905.0 | 256550 |
18 | 2016-2Q | 16196 | 12763 | 9855.0 | 6497 | 9828 | 9606 | 6300.0 | 9703 | 6906 | 6671.0 | 5475.0 | 7204.0 | 259622 |
19 | 2016-3Q | 16329 | 11912 | 7774.0 | 6451 | 9606 | 8865 | 6239.0 | 6248 | 6728 | 5730.0 | 5911.0 | 7121.0 | 254462 |
20 | 2016-4Q | 15944 | 11013 | 10755.0 | 6201 | 11087 | 8362 | 8391.0 | 9439 | 5907 | 7943.0 | 6110.0 | 6534.0 | 276511 |
21 | 2017-1H | 36233 | 25329 | 22572.0 | 13553 | 25523 | 15863 | NaN | 14878 | 14603 | NaN | 14177.0 | 12212.0 | 608307 |
22 | 2017-2H | 37600 | 20339 | 20089.0 | 13595 | 22831 | 18265 | 15499.0 | 13318 | 15843 | NaN | 15247.0 | 10424.0 | 602437 |
23 | 2018-1H | 40416 | 24677 | 22516.0 | 15248 | 19603 | 17871 | 15814.0 | 14924 | 14640 | NaN | 13098.0 | 8296.0 | 586990 |
24 | 2018-2H | 43540 | 24943 | 20803.0 | 18506 | 17429 | 17301 | 15358.0 | 14829 | 14127 | NaN | 12102.0 | 8448.0 | 579820 |
25 | 2019-1H | 44588 | 26691 | 22762.0 | 18468 | 18600 | 17656 | 14882.0 | 14264 | 14015 | NaN | 10496.0 | 8376.0 | 587131 |
26 | 2019-2H | 44431 | 23977 | 20475.0 | 16488 | 18300 | 17598 | 16550.0 | 13376 | 13862 | NaN | 17148.0 | NaN | 580557 |
27 | 2020-1H | 46756 | 24865 | 24017.0 | 13763 | 18513 | 17337 | 17057.0 | 11808 | 14544 | NaN | 16736.0 | NaN | 586975 |
28 | 2020-2H | 44672 | 22493 | 23398.0 | 11974 | 17414 | 17782 | 15935.0 | 10815 | 15712 | NaN | 16530.0 | 13177.0 | 585409 |
29 | 2021-1H | 41587 | 25723 | 26024.0 | 14321 | 16149 | 16530 | 14103.0 | 9445 | 13650 | NaN | 18198.0 | 13576.0 | 579508 |
30 | 2021-2H | 35309 | 21699 | 24421.0 | 13240 | 16739 | 17831 | 15880.0 | 9618 | 13826 | NaN | 19024.0 | 13452.0 | 565158 |
31 | 2022-1H | 40315 | 21833 | 25853.0 | 12550 | 17345 | 18796 | 15703.0 | 9352 | 15726 | NaN | 18342.0 | 14255.0 | 584371 |
32 | 2022-1H | 40315 | 21833 | 25853.0 | 12550 | 17345 | 18796 | 15703.0 | 9352 | 15726 | NaN | 18342.0 | 14255.0 | 584371 |
In [ ]:
In [10]:
df['year'] = df["구분"].str.split("-", expand=True)[0]
# df['구분'].str.split('-')[0]
In [11]:
df_gr = df.groupby(['year']).sum(numeric_only=True)
In [12]:
df_gr.drop(['2011'], axis=0, inplace=True)
In [13]:
df_gr
Out[13]:
홈런볼 | 카스타드 | 에이스 | 칙촉 | 마가렛트 | 하임 | 오레오 | 칸쵸 | 쿠크다스 | 롯데샌드 | 닥터유바 | 예감 | 총매출 | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
year | |||||||||||||
2012 | 46191 | 38728 | 28180.0 | 33248 | 55490 | 46167 | 19408.0 | 26201 | 24228 | 36909.0 | 0.0 | 35907.0 | 1104704 |
2013 | 49780 | 49882 | 33835.0 | 35174 | 43863 | 46198 | 20016.0 | 24364 | 25888 | 33036.0 | 0.0 | 39523.0 | 1119418 |
2014 | 52829 | 49663 | 34149.0 | 30308 | 48699 | 39830 | 17172.0 | 23760 | 28093 | 30165.0 | 13451.0 | 35781.0 | 1077165 |
2015 | 53382 | 46047 | 28761.0 | 26184 | 45113 | 38149 | 18364.0 | 23144 | 26479 | 27263.0 | 25642.0 | 22842.0 | 996905 |
2016 | 64702 | 46556 | 38684.0 | 25946 | 42473 | 37031 | 26480.0 | 31724 | 27125 | 26791.0 | 24119.0 | 27764.0 | 1047145 |
2017 | 73833 | 45668 | 42661.0 | 27148 | 48354 | 34128 | 15499.0 | 28196 | 30446 | 0.0 | 29424.0 | 22636.0 | 1210744 |
2018 | 83956 | 49620 | 43319.0 | 33754 | 37032 | 35172 | 31172.0 | 29753 | 28767 | 0.0 | 25200.0 | 16744.0 | 1166810 |
2019 | 89019 | 50668 | 43237.0 | 34956 | 36900 | 35254 | 31432.0 | 27640 | 27877 | 0.0 | 27644.0 | 8376.0 | 1167688 |
2020 | 91428 | 47358 | 47415.0 | 25737 | 35927 | 35119 | 32992.0 | 22623 | 30256 | 0.0 | 33266.0 | 13177.0 | 1172384 |
2021 | 76896 | 47422 | 50445.0 | 27561 | 32888 | 34361 | 29983.0 | 19063 | 27476 | 0.0 | 37222.0 | 27028.0 | 1144666 |
2022 | 80630 | 43666 | 51706.0 | 25100 | 34690 | 37592 | 31406.0 | 18704 | 31452 | 0.0 | 36684.0 | 28510.0 | 1168742 |
In [89]:
df_gr.index
Out[89]:
Index(['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022'], dtype='object', name='year')
In [93]:
df_gr.index
Out[93]:
Index(['2012', '2013', '2014', '2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022'], dtype='object', name='year')
In [106]:
import matplotlib.pyplot as plt
import matplotlib
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (20, 11)
plt.rcParams['font.size'] = 20
plt.rcParams["font.family"] = 'NanumGothic'
# 2. 데이터 준비
df_gr.index = pd.to_datetime(df_gr.index)
x = df_gr.index
y1 = df_gr['총매출']
y2 = df_gr['홈런볼']
# 3. 그래프 그리기
fig, ax1 = plt.subplots()
# y1 : 비스킷 총매출
ax1.plot(x, y1, '-s', color='green', markersize=3, linewidth=3, alpha=0.7, label='비스킷류 총합계')
# ax1.set_ylim(300, 600)
ax1.set_xlabel('연도')
ax1.set_ylabel('비스킷류 총 연매출', fontsize=18, rotation=0)
ax1.tick_params(axis='both', direction='in')
ax1.grid()
# y2 : 홈런볼 연매출
ax2 = ax1.twinx()
ax2.plot(x, y2, '-s', color='blue', markersize=3, linewidth=3, alpha=0.7, label='홈런볼')
ax2.set_ylabel('홈런볼 연매출', fontsize=18, rotation=0)
ax2.tick_params(axis='y', direction='in')
# 3. 제목, xy축, 범례
plt.title('홈런볼의 성장주기(2012~2022)', fontsize=25, weight='bold')
# 구간별 색상변경
plt.axvspan(datetime(2012, 1, 1), datetime(2015, 1, 1), facecolor='yellow', alpha=0.3)
plt.axvspan(datetime(2015, 1, 1), datetime(2018, 1, 1), facecolor='yellowgreen', alpha=0.3)
plt.axvspan(datetime(2018, 1, 1), datetime(2020, 1, 1), facecolor='greenyellow', alpha=0.3)
plt.axvspan(datetime(2020, 1, 1), datetime(2022, 1, 1), facecolor='limegreen', alpha=0.3)
# # 구간별 텍스트
mybox={'facecolor':'y','edgecolor':'w','boxstyle':'round','alpha':0.5}
ax2.text(datetime(2013, 4, 1),70000,'잠재기', bbox=mybox)
ax2.text(datetime(2016, 4, 1),70000,'성장기', bbox=mybox)
ax2.text(datetime(2018, 10, 1),70000,'부흥기', bbox=mybox)
ax2.text(datetime(2020, 10, 1),70000,'침체기', bbox=mybox)
ax1.set_zorder(ax2.get_zorder() + 10)
ax1.patch.set_visible(False)
ax1.legend(loc='upper left')
ax2.legend(loc='lower right')
ax1.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
ax2.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
plt.margins(x=0)
plt.show()
In [74]:
import matplotlib.pyplot as plt
import matplotlib
from datetime import datetime
import seaborn as sns
# 1. 기본 스타일 설정
plt.style.use('default')
plt.rcParams['figure.figsize'] = (20, 11)
plt.rcParams['font.size'] = 20
plt.rcParams["font.family"] = 'NanumGothic'
# 2. 데이터 및 플로팅
df_stack = df_gr.drop(['총매출'], axis=1)
ax = df_stack.plot(kind='bar', stacked=True, colormap='RdYlGn_r') #YlGnBu_r
# 3. 제목, xy축, 범례
plt.title('비스킷류 연간 매출액(2012~2022)', fontsize=25, weight='bold')
plt.ylabel('매출액(백만원)', fontsize=18, rotation=0)
plt.xlabel('연도', fontsize=18)
plt.legend(loc=(0, -0.2), ncol=9, frameon=True, shadow=True, fontsize=16)
plt.xticks(rotation=0,fontsize=15)
plt.yticks(fontsize=15)
# for p in plt.patches:
# left, bottom, width, height = p.get_bbox().bounds
# plt.annotate(f"{int(height)}",(left+width/2, height-1), ha = 'center', size =20, color = '#E6F0F8')
for i, p in enumerate(ax.patches):
if i//11 == 0:
left, bottom, width, height = p.get_bbox().bounds
ax.annotate(format(int(height), ','), xy=(left+width/2, bottom+height/2), ha='center', va='center', size =13, color = 'orange', weight='bold')
else:
pass
ax.get_yaxis().set_major_formatter(
matplotlib.ticker.FuncFormatter(lambda x, p: format(int(x), ',')))
plt.box(False)
plt.show()
'빅데이터(Big Data) 이론과 코드 > 2. 데이터 전처리' 카테고리의 다른 글
Pandas Dataframe 조건에 맞게 값 변경 하기 (0) | 2022.03.04 |
---|---|
[zip 함수] 파이썬 내장함수 zip() (0) | 2022.03.03 |
로그변환에 np.log1p()을 사용하는 이유 (0) | 2021.12.01 |