도매시장 경락 데이터의 이해 - 배추(2/3)

PREV : 도매시장 경락 데이터의 이해: 배추(1/3)

지난 Post에 이어서 이상치로 판단되는 10,000원 이상의 kg당 가격 케이스를 삭제한 dat3 데이터를 이용하여 도매시장 경매와 관련한 각 변수들 간의 관계를 눈으로 확인해보자. 이번 Post에서는 Cross tabulation라고도 불리는 교차분석 방법으로 명목형(categorical) 변수들 간의 관계를 보려고 한다. 교차분석은 두 변수 간의 관계를 한 변수는 X축, 다른 한 변수는 Y축 방향으로 각 변수의 요소들을 나열하고 각각의 경우에 대한 연속형 변수의 값을 보여주는 것이다. 예를들어 성별, 결혼유무 두 명목형 변수와 행복지수라는 하나의 연속형 변수가 있을 때 이를 남-기혼, 남-미혼, 여-기혼, 여-미혼으로 표현되는 2x2 표를 만들고 각 케이스에 속하는 사람들의 행복지수 평균을 구해서 비교하는 것이 교차분석의 예이다.


연도-월 반입량

먼저 연도와 월 변수간의 관계를 도매시장 반입량(kg) weight 변수로 비교해보자. input_year_monthdat3으로부터 group_by() 함수로 year, month 변수의 각각의 케이스별로 그룹화한 후 각 그룹 내에서 mutate() 함수로 weight 변수의 합을 구해서 새로운 input 변수를 만든다. 여기까지는 dplyr 패키지가 신속하게 처리해준다. 다음은 tidyr 패키지의 spread() 함수를 이용해서 2개 변수로 그룹핑된 데이터를 그중 1개의 변수를 x축 방향으로 늘어뜨린 형태로 펼쳐준다. MS엑셀의 피벗 테이블 기능과 유사한 결과를 만들어준다. 마지막으로 우리가 원하는 형태로 만들어진 데이터프레임은 ungroup() 함수를 이용해서 그룹을 풀어준다.(group화된 데이터프레임을 입력 데이터로 쓸 경우 오류가 발생하는 경우가 있다.) 문자값을 가진 첫번째 열을 제거한 숫자로만 구성된 데이터를 matrix형으로 형변환을 해서 1000을 나누어 단위를 ton으로 변환하여 d5에 저장한 후, hist3D() 함수를 이용해서 3D bar chart를 그린다. `hist3D()’에 대한 구체적인 설명은 R study Post를 참고하자.

  library(plotly); library(plot3D); library(dplyr); library(tidyr); library(ggplot2); library(gridExtra); library(knitr); library(kableExtra); library(reshape2)
input_year_month <- dat3 %>% group_by(year,month) %>% summarise(input=sum(weight,na.rm=T)) %>% spread(month,input,fill=0) %>% ungroup()
d5 <- as.matrix(input_year_month[,-1])/1000
hist3D(z = d5, x = as.numeric(t(input_year_month[,1])), y = 1:12, scale = F, expand = 0.00005, bty = "g", phi = 30, theta = 20, col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab='year',ylab='month',zlab='ton')

위에서 3D 그래프로 표현된 연도-월별 반입량 정보와 아래에 테이블로 표현된 동일한 정보 중 어떤 것이 더 해석하기가 쉬운가? 대부분의 사람들의 뇌는 숫자가 가지는 상징성보다는 서로 다른 길이와 색깔을 가진 이미지를 인지하고 판별하는 것이 더 편해 할 것이다.(숫자가 훨씬 더 편한 천재과의 사람도 있겠지만..) 그런 의미에서 Agdatalab blog에서는 분석결과들을 되도록 그래프와 같은 시각적인 결과물로 설명하는 방향으로 하겠다.

그래프를 보는 방법은 x축은 year, y축은 month를 표현한다. z축은 weight 변수로 단위는 ton이다. 색깔은 ton의 수치를 설명하는 것으로 파란색의 2만톤 이하 수준에서 하늘색을 거처 노란색의 6만톤 수준을 지나 주황색을 넘어 빨간색의 8만톤 수준까지를 표현한다. 월별로 보면 대체로 겨울철, 봄철의 반입량은 낮은 수준이고 여름이 지나고 가을철이 되면 급증하는 패턴을 보인다. 연도별로는 대체로 비슷한 수준에서 조금씩 변화하는 패턴을 보이나 2014년의 반입량이 전반적으로 적은 것으로 나타나고 있다. 이정도의 차이가 실제로 있었는지는 도매시장 통계 비교 Post에서 별도로 다루도록 하자.

Table 1: 연도-월별 반입량(kg) 테이블
year 1 2 3 4 5 6 7 8 9 10 11 12
2002 21618892 24262511 35974384 42777652 45986369 48435377 44811207 45990349 50327342 49884182 68488848 40422086
2003 23973524 24374740 36996336 46495794 51253451 55942605 40323383 52867831 52116815 53139867 60986609 63520011
2004 25930574 31027697 48115740 50694088 51261774 59172152 43918354 41852555 64258918 56305805 63274139 50738827
2005 26025686 21824148 40117468 49384730 47300723 39768053 39233026 47394528 49731437 41224279 66986360 55757743
2006 21502574 19857836 29950862 29268587 37489585 51401765 34017370 36000088 56039372 48993816 73764710 50653469
2007 24352858 24584323 30770390 35104782 41635096 45939875 39063467 50409252 57540988 56005479 76707299 70990305
2008 29684565 26540569 37232746 23237032 36603517 43017982 41728114 45694493 41067192 36061154 69492645 29644326
2009 24558644 28250560 31604264 23318108 34451251 50995677 46785888 37158732 45136631 26381114 77979603 29003118
2010 25255905 23893883 28114883 27554414 39264900 51274929 39429761 48753668 34486810 38780110 95494750 60024178
2011 23022055 22792529 32377491 41006963 46992998 52633798 38415399 45706137 61668396 58857029 85206981 52501466
2012 23236770 25752848 29846311 23812150 37373101 35017023 31251853 44861785 36542286 32134512 75095352 67043673
2013 29622966 25281356 31304439 34822611 37046359 41095253 40409566 38790234 54204473 55485512 70067134 35839637
2014 19605400 16793884 20102531 22174160 22971975 24449792 28046438 32301291 52897298 56366748 86672451 65602038
2015 28513081 27286441 32882904 34862719 33214085 42382785 41738884 44553143 66506572 54200735 60158933 56386235
2016 24366738 20246805 20444264 26994303 34792776 43713673 42115420 38728304 42782904 49226440 92933781 67823709
2017 28998725 26594175 33337786 46071641 48031176 39740758 37701978 37759979 61702199 47455772 83353067 54442400
2018 27412006 25901712 33643943 34161238 0 0 0 0 0 0 0 0
.
연도-월 명목가격

다음은 연도-월별 kg당 가격에 대한 교차분석 결과를 3D 그래프로 살펴보자. R 코드는 반입량 분석 코드와 동일하며 그래프의 z축에 해당하는 값만 반입량에서 가격으로 변경하였다. 월별로 편차가 있기는 하나 2005년 이후부터 꾸준히 가격이 증하하는 추세를 보이고 있다. 이는 16년 전의 배추 가격이 현재의 가격과 동일한 가치를 가지는 것이 아니기 때문에 물가상승률에 대한 할인율의 적용이 필요하다. 물가상승 할인율 데이터는 소비자물가지수와 할인율 계산 Post를 통해서 만들 수 있으며 이번 Post에서 사용한 데이터는 AWS S3 Agdata Lab 저장소에서 받을 수 있다.

price_year_month <- dat3 %>% group_by(year,month) %>% summarise(price=mean(price_per_kg,na.rm=T)) %>% spread(month,price,fill=0) %>% ungroup()
d6 <- as.matrix(price_year_month[,-1])
hist3D(z = d6,  x = as.numeric(t(price_year_month[,1])), y = 1:12, scale = FALSE, expand = 0.002, bty = "g", phi = 30, theta = 20, col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab='year',ylab='month',zlab='ton')

연도-월 실질가격

할인율 적용은 농축수산물 소비자물가지수에 대한 할인율을 적용하였다. 2002년을 지수 100으로 두었을 때 매년 증가한 물가에 대한 정보를 담고 있으며 2018년에는 2002년 대비 76.5%나 증가한 것으로 나타났다. 3D 막대그래프도 앞선 그래프와 비교해보면 물가상승 효과가 완화된 것을 느낄 수 있다. 물가 상승을 통제한 표준화된 가격을 이용해서 그래프를 해석해보면 2004년 이전에는 배추가격이 비교적 낮았으나 2005, 2006년에는 9, 10월 가격이 급등하였고 2009년 이후에는 2009, 2010, 2015, 2016년에 3,4월 가격이 급등하는 현상이 나타나고 있다. 9월 가격 폭등은 2005, 2010, 2016에 두드러져서 5~6년 주기를 보여주고 있다. 3,4월 가격 급등도 6년 주기였는데.. 주기가 정말 존재하는지는 더 장기간의 데이터를 들여다봐야 알 수 있을 것이다.

ds_rate <- read.csv('CPI_KOR_1975-2018(2002).csv',stringsAsFactors = F)
price_year_month_norm <- merge(price_year_month,ds_rate[,c('year',"agri_2002")],by='year',all.x=T)
price_year_month_norm[,2:13] <- price_year_month_norm[,2:13]/price_year_month_norm$agri_2002*100
d6b <- as.matrix(price_year_month_norm[,2:13])
hist3D(z = d6b,  x = as.numeric(t(price_year_month[,1])), y = 1:12, scale = FALSE, expand = 0.004, bty = "g", phi = 30, theta = 20,
       col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90,
       space = 0.4, ticktype = "detailed", d = 2, xlab='year',ylab='month',zlab='ton')

Table 2: 농축수산물 물가지수(2002=100)
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
year 2002 2003.0000 2004.0000 2005.00 2006.0000 2007.0000 2008.0000 2009.0000 2010.0000 2011.0000 2012.0000 2013.0000 2014.0000 2015.0000 2016.0000 2017.0000 2018.0000
agri_2002 100 105.9114 115.3728 117.54 117.4034 119.6466 120.2338 127.9828 140.8153 153.7703 158.6003 157.5723 153.3338 156.3754 162.3177 171.2452 176.5538
Table 3: 연도-월별 표준화 가격(원) 테이블
year 1 2 3 4 5 6 7 8 9 10 11 12 agri_2002
2002 328.6469 255.4147 195.2210 248.6271 340.1623 308.4838 321.2684 634.7203 773.3154 336.6829 391.9542 523.6327 100.0000
2003 579.0721 562.6274 686.9667 640.5789 432.1552 247.6070 426.2201 433.6598 530.2393 637.6695 443.8112 289.4393 105.9114
2004 318.0308 325.8367 386.5312 392.9490 325.1486 313.8533 617.3544 801.7993 611.6009 392.8314 330.1530 309.3549 115.3728
2005 411.5246 493.2256 415.0829 360.3797 335.4123 366.5772 605.8079 718.2070 857.4845 1044.2792 648.8109 720.5630 117.5400
2006 874.2845 788.0074 839.5683 910.8342 705.9789 467.1779 798.0544 1055.8382 850.9822 433.7164 427.7323 546.5022 117.4034
2007 688.4329 599.9148 765.6876 683.9606 491.2147 509.2468 635.6266 700.2879 835.3072 887.0079 633.5956 538.5620 119.6466
2008 696.3427 659.1908 681.2098 734.6185 577.2152 504.4308 560.8539 698.0015 533.2037 525.6422 445.6017 565.0299 120.2338
2009 751.4572 699.7234 883.1145 1065.2788 757.1504 519.5509 641.8104 780.1094 615.8169 468.1113 445.9851 637.7052 127.9828
2010 811.2392 889.6551 1183.0624 1247.8213 821.3494 592.7972 843.7170 785.9709 1090.6904 914.8927 612.5531 690.7093 140.8153
2011 984.5003 823.0415 885.2974 653.1849 477.9281 498.2782 753.6627 903.9928 686.7751 523.4666 402.1068 607.2792 153.7703
2012 830.5997 895.8046 982.5614 980.5603 684.4936 576.4903 631.0004 741.0731 898.4406 702.1659 565.2313 685.8206 158.6003
2013 880.4436 864.2342 920.8149 874.9127 670.4182 635.0543 689.6589 919.4177 748.9775 501.4282 449.0451 551.3662 157.5723
2014 657.4545 659.2550 696.2255 692.4711 568.0624 691.0469 728.6370 776.3989 732.0584 602.5857 525.2290 660.1317 153.3338
2015 794.7274 787.0198 961.6222 1057.0086 1046.6849 834.5199 715.8066 845.1595 672.1228 592.1097 564.9828 693.6781 156.3754
2016 948.7020 909.7008 1191.1537 1235.2366 920.5769 789.9224 867.8248 1163.6142 1277.3104 855.0916 670.9123 751.8903 162.3177
2017 857.6474 940.2872 1023.8852 816.3808 689.6022 668.7896 843.0978 1101.3248 928.2253 594.9399 495.6199 672.8289 171.2452
2018 794.7209 903.2725 842.6128 946.6059 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 176.5538
.

산지-월 출하량

산지-월별 출하량 패턴을 살펴보자. R 코드는 연도-월별 반입량 계산 코드에서 연도 대신 산지 변수 sanji_wide2가 들어갔다. 3D 그래프의 각도는 hist3D() 함수의 phi, theta 파라메터를 그래프의 패턴이 눈에 잘 보이도록 조정하면 된다. 산지의 개수는 총 22개이지만 출하량의 비중이 낮은 8개의 광역도 단위 지역만 포함시켰다. 이를 위해 산지별 총 출하량 total 변수를 만들어서 내림차순 정렬을 해서 상위 9개 (결측지역 1개 포함)만으로 그래프용 d8 테이블을 생성하였다.

먼저 전남과 강원 지역이 출하량(동일한 물동량이지만 산지기준에서는 출하의 개념이고 도매시장 기준에서는 출하된 물량을 반입하기 때문에 반입량이 된다)에서 앞도적으로 많다. 전남은 1~4월, 12월이 주 출하기이고 강원은 7~10월이 주 출하기이다. 세번째 출하지인 경북은 전남, 강원의 화력이 교체되는 틈새인 6, 11월이 주 출하기이고 네번째 출하지인 충남 역시 틈새 중 5, 11월이 주 출하기이다. 전남과 거리가 가까운 충남, 경남은 5월이 상반기 주력이고 강원도와 거리가 가까운 경북,경기,충북은 6월이 상반기 주력인 것은 지리적으로도 해석이 잘 된다. 나머지 지역들이 최대 산지인 전남과 강원이 교체되는 틈새 시기에 출하량이 많은 것은 기후요인 때문인지 전략적인 선택인지는 파악이 어려우나 두 요인의 적절한 결합확률에 의한 의사결정으로 볼 수는 있을 것 같다.

input_sanji_month <- dat3 %>% group_by(sanji_wide2,month) %>% summarise(input=sum(weight,na.rm=T)) %>% spread(month,input,fill=0) %>% ungroup()
input_sanji_month <- input_sanji_month %>% mutate(total=apply(input_sanji_month[,-1],1,sum)) %>% arrange(desc(total))
d8 <- as.matrix(input_sanji_month[1:9,2:13])/1000
hist3D(z = d8, x=1:9, y=1:12, scale = FALSE, expand = 0.000005, bty = "g", phi = 40, theta = 15, col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab="전남 강원 경북 결측 충남 경기 전북 경남 충북", ylab="month", zlab='ton', cex.lab=1.1)

Table 4: 산지-월별 반입량(kg) 테이블
sanji_wide2 1 2 3 4 5 6 7 8 9 10 11 12 total
전라남도 279513813 279210979 375142976 340763704 154193551 42221822 23719172.8 24570363 32239268 23024190.7 178220785 429695368 2182515992
강원도 12196078 11836039 14248507 10950453 16372005 152552050 337151077.3 431674314 528123686 376169412.6 192966404 34853070 2119093096
경상북도 6669674 4387938 6030339 8769174 29361076 158924331 68387137.4 21934524 18960237 86815350.5 183342477 40764214 634346472
a 24475215 22688493 27675445 32157388 45716340 45889218 34251769.2 39462042 51108342 46290350.7 80994847 67681175 518390624
충청남도 5454257 4331462 4417604 38078300 123446429 55265974 7465270.1 6800919 7891021 13884348.9 159578099 35317376 461931062
경기도 19066293 20086061 25959330 25568605 42060828 59692495 32192286.0 32807543 38136523 44469745.4 89615277 28479866 458134852
경상남도 13881127 10716571 13104888 24696276 86608637 28085193 15850225.7 15564272 18494142 17753559.1 35748207 54196455 334699552
전라북도 8323265 6809654 9057538 17438666 32768439 24109670 20103092.4 20848761 24221443 19890655.9 92286938 55593829 331451951
충청북도 4752974 5101407 6820007 7238837 23828210 71542641 16967834.0 11267540 14886617 54870603.6 71586088 10056809 298919567
대구광역시 10610687 10600700 17086185 19881853 19199388 17417516 16360896.4 17858350 18070718 15347434.6 24848152 23238872 210520753
광주광역시 7903617 7913781 10691562 14780731 13719446 11660884 12519015.7 14208237 19908489 16130955.5 20439349 18552513 168428579
인천광역시 7281335 7147421 9874780 10254699 12141396 13843689 10492604.5 13754590 13743828 11734854.3 21414037 10833962 142517194
서울특별시 6793944 6239844 9101553 12950604 12363082 12174925 10261053.4 12577149 15175875 12370661.7 17531681 10327340 137867711
부산광역시 10040291 7910101 10276670 12167405 12945813 12921677 9252561.2 9806346 9395280 7660870.4 12846431 12531205 127754651
대전광역시 4727695 5134457 6794150 8648510 11311575 12377277 9558654.1 10486972 10284481 9744998.2 17195204 7283396 113547370
울산광역시 3482716 2839205 3763092 3519688 4761877 4647014 3490655.4 3848201 4446769 3483801.6 5280409 7636321 51199748
제주특별자치도 2507003 2311052 2765436 3875209 4860919 1654805 966390.5 1338473 1921698 815475.9 2752329 3343955 29112745
중국 981 853 6679 860 10104 312 100.0 504 1214 45155.0 14535 6805 88102
미국 0 0 0 10 20 4 0.0 7950 0 0.0 1411 691 10086
러시아 0 0 0 0 0 0 0.0 5000 0 0.0 0 0 5000
기타국 0 0 0 0 0 0 310.0 320 0 0.0 0 0 630
태국 0 0 0 0 0 0 0.0 0 0 130.0 0 0 130
.
산지-월 실질가격

이후 분석에서도 할인율 적용 가격이 계속 사용될 것이므로 할인율 적용 가격을 price_per_kg_norm의 이름으로 만들어보자. dat3 row 데이터에 year를 기준으로 agri_2002 물가지수 변수를 merge하고 price_per_kgagri_2002로 나눈 뒤 다시 100을 곱해서 할인율이 적용된 가격 변수 price_per_kg_norm을 만든다.

dat3 <- merge(dat3, ds_rate[,c('year','agri_2002')], by='year', all.x=T)
dat3 <- dat3 %>% mutate(price_per_kg_norm = price_per_kg / agri_2002 * 100)

이제 표준화된 가격이 산지-월별로 어떤 차이와 추세를 보이는지 살펴보자. 이제부터는 price_per_kg_norm 변수의 평균을 구해서 분석용 테이블을 만들 것이다. 아래 code의 두번째줄에서 input_sanji_month[,c(1,14)]를 기준으로 merge를 하는 이유는 출하량 기준으로 정렬된 상위 9개 산지 리스트와 동일한 리스트를 기준으로 가격 분석 결과를 보여주기 위해서이다. R의 merge() 함수는 key 변수를 기준으로 다시 정렬을 해버리기 때문에 기존에 정렬된 순서가 풀려버리게 되므로 반드시 다시 arrange() 함수를 이용해서 재정렬을 해주는 것이 필요하다.

산지-월별 가격 분포를 보면 경북 지역의 가격이 유난히 높은 것이 특징이다. 주산지인 전남 강원은 물량이 워낙 많아서인지 가격이 낮은 편이다. 나머지 지역에서는 주 출하기가 아닌 시즌에 가격이 높은 편이고 주 출하기에는 전남, 강원과 비슷한 수준인 것을 알 수 있다. 경북 지역의 가격은 이상치에 가깝다고 보여지는데 그 이유는 역시 현장 전문가에게 자문을 구해봐야 알 수 있을 것이다.

price_sanji_month <- dat3 %>% group_by(sanji_wide2,month) %>% summarise(price=mean(price_per_kg_norm,na.rm=T)) %>% spread(month,price,fill=0) %>% ungroup()
price_sanji_month <- merge(input_sanji_month[,c(1,14)],price_sanji_month, by='sanji_wide2',all.x=T) %>% arrange(desc(total))
d8b <- as.matrix(price_sanji_month[1:9,3:14])
hist3D(z = d8b, x=1:9, y=1:12, scale = FALSE, expand = 0.001, bty = "g", phi = 40, theta = 15,   col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab="전남 강원 경북 결측 충남 경기 전북 경남 충북", ylab="month", zlab='ton', cex.lab=1.1)

Table 5: 산지-월별 표준화 가격(원) 테이블
sanji_wide2 total 1 2 3 4 5 6 7 8 9 10 11 12
전라남도 2182515992 376.5938 403.4792 442.6030 467.7518 361.5710 289.1865 385.6415 513.8500 580.1131 460.6588 381.3089 368.3780
강원도 2119093096 500.4085 529.1793 623.6193 746.3417 555.6570 324.0513 399.6541 535.3473 573.0784 429.6150 379.6821 442.2901
경상북도 634346472 1609.6488 1561.4956 2125.1275 1658.5790 1165.5665 819.3502 1155.9221 1768.1374 1606.5413 914.5398 714.8584 1178.0551
a 518390624 569.7698 591.9062 631.4479 623.5187 540.1769 493.1939 629.8282 710.1707 685.6382 491.0291 404.1323 475.7081
충청남도 461931062 801.0355 947.1389 1057.9322 702.0017 421.6264 515.3874 1017.8269 1029.8524 1190.1227 826.5946 374.5322 464.1745
경기도 458134852 849.0272 804.1997 861.3972 923.9659 715.6769 558.4003 716.2402 912.5215 856.9505 620.5994 489.4141 766.6097
경상남도 334699552 904.8234 876.2486 1100.4147 958.4609 512.6879 440.9412 812.9839 1025.0271 907.5656 733.8096 603.9218 579.8242
전라북도 331451951 504.1820 550.2661 593.0326 645.8259 455.8704 364.0546 560.2577 677.0288 750.1036 637.9336 366.5394 381.5305
충청북도 298919567 718.4751 851.8158 804.4810 896.1747 468.3296 259.7654 458.9072 644.5242 675.2024 364.7118 345.3655 541.3925
대구광역시 210520753 1268.8092 1240.3113 1133.5957 1075.4642 912.3639 813.5368 977.5638 1159.7957 1156.5147 970.4193 829.7693 955.3916
광주광역시 168428579 642.8545 674.1521 659.6610 639.5426 580.1135 530.5672 647.7059 804.5245 792.5176 663.4457 523.7119 493.2712
인천광역시 142517194 618.9005 630.5680 726.4564 731.7475 520.3304 425.9975 528.6958 615.8018 730.7073 592.6983 471.9626 596.2875
서울특별시 137867711 1565.8875 1538.5577 1604.0480 1495.7623 1348.6174 1263.0023 1401.7384 1595.8528 1490.0166 1392.1797 1339.0000 1551.4332
부산광역시 127754651 594.1237 625.8253 710.7610 655.2000 535.2693 557.8892 857.6268 894.7536 887.5558 846.1108 627.8254 550.6496
대전광역시 113547370 500.8301 579.1450 495.0750 532.0761 396.4793 338.7227 457.0373 608.2219 584.6297 402.7012 338.6225 415.3172
울산광역시 51199748 774.6589 772.4953 766.4242 719.7342 535.6027 513.1752 681.4414 830.2075 944.9793 743.9106 701.5051 704.4215
제주특별자치도 29112745 758.0132 727.1898 637.3136 583.0888 404.2949 382.3871 519.2920 639.3792 646.4986 608.9487 598.1208 628.3017
중국 88102 947.3135 1074.2799 1056.4953 989.7500 1015.7073 1254.9260 583.9581 1255.9642 976.9923 794.4534 781.5757 663.8760
미국 10086 0.0000 0.0000 0.0000 6521.7192 1956.5158 6521.7192 0.0000 323.5892 0.0000 0.0000 136.1761 218.9149
러시아 5000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 433.3777 0.0000 0.0000 0.0000 0.0000
기타국 630 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 1361.9304 1680.7538 0.0000 0.0000 0.0000 0.0000
태국 130 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 5077.0331 0.0000 0.0000
.
산지-월 출하량+실질가격

이번에는 산지-월별 조건에서 출하량과 가격을 동시에 볼 수 있는 방법으로 histogram과 선그래프를 동시에 그려보자. ggplot() 함수는 데이터가 wide type이 아닌 long type이어야 group별 그래프 분리가 가능하기 때문에 reshape2 패키지의 ’melt()함수를 이용해서 데이터를 변환여dat_sanji_month_long으로 저장한다. 비슷하게 가격은tmp4에 저장한 후dat_sanji_month_long에 merge 시킨다. 변환과 merge 과정에서month변수가 factor형으로 변경되어서 다시 numeric형으로 전환해준다. 이제ggplot()`으로 출하량은 histogram으로, 가격은 y축을 상대적으로 변환하여 선그래프로 그려보자.

산지별 출하기는 3D 그래프에서 보았던 것과 동일하게 나타났다. 가격의 경우 상대적 크기로 표현이 되어서 우측 Y축 범위가 지역별로 다른 것을 볼 수 있다. 2002~2018년 17년간의 평균적인 트렌드에서는 모든 지역에서 1~3월까지는 가격이 오르다 4월부터 감소세를 보이다 6월에 최하점을 찍고 다시 8~9월에 최고치를 찍은 후 11월에 최저점으로 다시 내려오는 추세를 보이는 것을 확인할 수 있다.

dat_sanji_month_long <- melt(input_sanji_month[1:9,-14], id=c('sanji_wide2'), variable.name = 'month',value.name = 'input')
tmp4 <- melt(price_sanji_month[,-2], id=c('sanji_wide2'), variable.name = 'month', value.name = 'price')
dat_sanji_month_long <- merge(dat_sanji_month_long,tmp4, by=c('sanji_wide2','month'),all.x=T) 
dat_sanji_month_long$month <- as.numeric(dat_sanji_month_long$month)
ggplot(data=dat_sanji_month_long) + geom_bar(aes(x=month, y=input , fill= sanji_wide2, color=sanji_wide2),stat="identity",position=position_dodge(), colour="black") +
  geom_line(aes(x=month, y=price*200000, group= sanji_wide2, color=sanji_wide2), color='blue', size=0.8, alpha=0.4) + scale_y_continuous(sec.axis = sec_axis(~./200000, name = "price")) + 
  facet_grid(vars(sanji_wide2), scales="free_y") 


품종-월 반입량

이번에는 품종-월별 반입량을 살펴보자. sepname 변수는 결측을 포함하여 16개의 품종값을 가지고 있는데 그 중 비중이 크지 않은 생채용 배추, 절임배추, 우거지, 배추뿌리, 배추(수입), 우거지(수입), 배양채 품종은 제외하고 월동배추, 봄배추, 여름배추, 고랭지배추, 가을배추, 저장배추, 쌈배추, 기타 8개 품종만 고려하였다. 변수명이 품종명이기는 하나 실제로는 봄배추, 여름배추 품종이 다른 것은 아니기 때문에 배추에 대해서는 품종의 의미보다는 출하시기를 의미한다고 볼 수 있다. 그래프를 보면 월동배추는 1~3월, 봄배추는 5,6월, 여름배추/고랭지배추는 7~9월, 가을배추는 10~12월이 출하량이 많다. 주요 출하기에서 제외된 4월은 저장배추가 많이 출하되어 틈새를 매우는 형태를 보인다. 쌈배추는 연중 물량이 많지 않기도 하고 쌈용이기 때문에 본격적인 분석에서는 제외하는 것이 합당해보이는데 문제는 기타로 분류된 품종이다. 물량을 보면 가을배추와 비슷한 주출하기를 보이지만 연중 고르게 분포하고 있어서 이것이 쌈배추와 같이 별도의 용도인지 아니면 특정 산지에서는 품종정보를 기입하지 않아서 기타로 처리하는 것인지는 현장 확인이 필요할 것 같다.

input_spec_month <- dat3 %>% group_by(spename,month) %>% summarise(input=sum(weight,na.rm=T)) %>% spread(month,input,fill=0) %>% ungroup()
input_spec_month <- input_spec_month %>% mutate(total=apply(input_spec_month[,-1],1,sum)) %>% arrange(desc(total))
d9 <- as.matrix(input_spec_month[1:8,2:13])/1000
hist3D(z = d9, x=1:8, y=1:12, scale = FALSE, expand = 0.00001, bty = "g", phi = 50, theta = 20,  col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab="기타 가을 월동 봄 고냉지 여름 저장 쌈배추", ylab="month", zlab='ton', cex.lab=0.8)

Table 6: 산지-월별 표준화 가격(원) 테이블
spename 1 2 3 4 5 6 7 8 9 10 11 12 total
기타 134840510.6 130463628.3 174889935.2 185849994.5 198106233.9 246674631.3 266743494.5 241738189.6 246371499 287482618.8 500538079.4 302371634.8 2916070449.5
김장(가을)배추 34753500.5 15656279.0 15235205.5 12504111.3 12014497.8 11335506.0 41835933.0 18314901.0 11381242 169803711.2 450966997.6 377020311.3 1170822196.2
월동배추 187656536.8 183284542.3 190654760.5 83968742.4 47795811.5 38066489.0 34075819.0 38607622.5 50983413 72339502.0 142129723.4 97269777.5 1166832740.2
봄배추 16626786.5 16686994.6 24276978.1 84806717.6 303212311.3 382224637.8 60470349.4 25631220.7 28704785 26032604.9 41938629.8 34143935.5 1044755951.5
고냉지배추 23453247.0 28124948.5 22342054.5 846627.0 1267032.0 6057043.0 54896070.6 210723252.7 314108107 129081767.5 22545746.2 2430081.3 815875977.4
여름배추 781158.9 692017.4 697552.4 702652.3 1378232.1 12583734.7 145019489.5 129315234.7 145537150 44758911.9 3635634.9 1298661.7 486400430.4
저장배추 9239320.5 21960065.0 106196225.0 202117623.5 61721436.0 10625940.0 7519988.0 7254231.8 9504887 7836030.0 14411990.0 9898112.0 468285848.8
쌈배추 17803986.6 16374230.5 16615496.3 19593801.1 18548266.5 15988251.4 17287966.4 15972340.5 19101749 21793129.9 18788284.1 15172944.3 213040447.1
생채용 배추 678681.0 602868.0 690973.5 749925.0 1241925.0 1283710.0 1060172.0 1203112.5 1219593 1074459.4 2614228.5 3874695.0 16294342.4
절임배추 197031.0 16488.0 25180.0 35440.0 18100.0 44470.0 23530.0 14270.0 12183 22530.0 8844214.0 6218141.0 15471577.0
우거지 1459223.1 1250096.0 913001.4 452369.0 330169.4 73376.7 31513.7 31722.4 54945 135252.9 179763.0 489821.3 5401253.9
배추뿌리 189939.8 148566.9 101172.4 31967.0 35121.0 23594.0 25780.0 14488.0 18628 33786.0 55935.3 144905.9 823884.3
배추(수입) 1040.0 5111.0 177974.0 81000.0 0.0 0.0 0.0 1600.0 11450 107806.0 11655.0 60000.0 457636.0
우거지(수입) 0.0 180.0 68.0 0.0 0.0 112.0 0.0 184.0 0 444.0 400.0 200.0 1588.0
a 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0.0 1380.0 0.0 1380.0
배양채 0.0 0.0 164.0 0.0 0.0 0.0 0.0 0.0 0 0.0 0.0 0.0 164.0
.
품종-월 실질가격

다음은 품종-월별 표준화 가격 분포를 살펴보자. 기타와 쌈배추의 kg당 가격이 다른 품종 배추에 비해 지나치게 높은 것을 확인할 수 있다. 쌈배추는 별개의 용도로 보고 제외시키는 것이 문제가 안되지만 기타는 전체 물량에서 차지하는 비중이 가장 높기 때문에 제외시키는 것은 바람직하지 않다. 그렇다면 왜 기타 품종만 가격이 높은지는 추가 분석을 통해 확인을 해야 할 것이다. 문제의 두 품종을 제외하면 대체로 8,9월의 가격이 높은 편이고 여름배추의 가격이 1~4월은 높게 나타났으나 여름배추의 주 출하기가 7~9월인 점을 고려하면 의미있는 정보라고 보기는 어렵다.

price_spec_month <- dat3 %>% group_by(spename,month) %>% summarise(price=mean(price_per_kg_norm,na.rm=T)) %>% spread(month,price,fill=0) %>% ungroup()
price_spec_month <- merge(input_spec_month[,c(1,14)],price_spec_month, by='spename',all.x=T) %>% arrange(desc(total))
d9b <- as.matrix(price_spec_month[1:8,3:14])
hist3D(z = d9b, x=1:8, y=1:12, scale = FALSE, expand = 0.003, bty = "g", phi = 50, theta = 20, col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab="기타 가을 월동 봄 고냉지 여름 저장 쌈배추", ylab="month", zlab='ton', cex.lab=0.8)

품종-월 출하량+실질가격

품종-월별 조건에서 출하량과 가격을 histogram과 선그래프로 확인해보자. 산지별로 주 출하기가 달랐던 것과 유사하게 품종별로 주출하기가 다른 것을 볼 수 있다. 각 품종별로 해당 계절이 아닌 시기에도 출하량이 어느정도 잡히고 있는 것도 보이는데 품종을 기록하는 것이 산지의 출하조직에서 이루어지는 사람이 하는 일이라고 생각하면 오류의 존재를 인정할 수 있을 것이다. 따라서 기존의 품종 정보는 무시하고 월을 기준으로 새로운 품종 변수를 만드는 것이 더 적절할 수도 있을 것이다. 이는 이후 분석을 하는 과정에서의 결과를 통해서 어떤 방향이 나은지 생각해보자. 가격의 패턴은 산지에서와 유사하게 3, 8, 9월 고점, 6, 11월 저점을 보여주고 있다.

dat_spec_month_long <- melt(input_spec_month[1:8,-14], id=c('spename'), variable.name = 'month',value.name = 'input')
tmp5 <- melt(price_spec_month[,-2], id=c('spename'), variable.name = 'month', value.name = 'price')
dat_spec_month_long <- merge(dat_spec_month_long,tmp5, by=c('spename','month'),all.x=T) 
dat_spec_month_long$month <- as.numeric(dat_spec_month_long$month)
ggplot(data=dat_spec_month_long) + geom_bar(aes(x=month, y=input , fill= spename, color=spename),stat="identity",position=position_dodge(), colour="black") +
  geom_line(aes(x=month, y=price*200000, group= spename, color=spename), color='blue', size=0.8, alpha=0.4) + scale_y_continuous(sec.axis = sec_axis(~./200000, name = "price")) + 
  facet_grid(vars(spename), scales="free_y") 


품종-산지 출하량

마지막으로 품종과 산지의 출하량 관계를 3D 그래프로 확인해보자. 출력용 가공 데이터는 spenamesanji_wide2 변수로 피벗 테이블을 만들고 합계의 내림차순으로 정렬된 표이다. 두 변수 기준으로 해당 데이터를 만드는 함수는 두 변수 정렬 피벗 테이블 함수 Post를 참고하자.

생성된 가공 데이터에서 산지는 상위 9개, 품종은 상위 8개를 이용해서 3D 막대그래프를 그려보면 최대 주산지 전남에서는 가을, 월동, 여름, 배추, 기타 품종의 주 출하지이다. 두번째 주산지인 강원은 고랭지, 여름 품종의 주 출하지이다. 가을 배추도 강원도가 2위 출하지이긴 하다. 경북은 봄, 가을 배추 출하량이 많은 편, 충남은 봄배추의 출하량이 많은 편이다. 경기 지역에서 기타 품종이 많은 것은 특이하다. 경기도에서 생산하는 특수 목적의 배추가 기타일 수도 있지 않을까? 하지만 문제의 기타 품종은 주 출하지인 전남, 강원의 출하량이 절대다수인 것을 보았을 때 품종정보가 기록 되지 않은 일반 배추일 가능성이 높아보인다.

input_spec_sanji_wide2 <- total_sort_2d(dat3,spename,sanji_wide2,weight)
d10 <- as.matrix(input_spec_sanji_wide2[1:9,2:9])/1000
hist3D(z = d10, x=1:9, y=1:8, scale = FALSE, expand = 0.00001, bty = "g", phi = 50, theta = 120, col = jet.col(100), alpha = 0.5, border = "black", shade = 0.2, ltheta = 90, space = 0.4, ticktype = "detailed", d = 2, xlab="충북 경남 전북 경기 충남 결측 경북 강원 전남", cex.lab=0.8, ylab="기타  가을  월동  봄  고냉지  여름  저장  쌈배추", zlab='ton')

Table 7: 품종-산지별 출하량(kg) 테이블
spename 1 2 3 4 5 6 7 8 9 10 11 12 total
기타 134840510.6 130463628.3 174889935.2 185849994.5 198106233.9 246674631.3 266743494.5 241738189.6 246371499 287482618.8 500538079.4 302371634.8 2916070449.5
김장(가을)배추 34753500.5 15656279.0 15235205.5 12504111.3 12014497.8 11335506.0 41835933.0 18314901.0 11381242 169803711.2 450966997.6 377020311.3 1170822196.2
월동배추 187656536.8 183284542.3 190654760.5 83968742.4 47795811.5 38066489.0 34075819.0 38607622.5 50983413 72339502.0 142129723.4 97269777.5 1166832740.2
봄배추 16626786.5 16686994.6 24276978.1 84806717.6 303212311.3 382224637.8 60470349.4 25631220.7 28704785 26032604.9 41938629.8 34143935.5 1044755951.5
고냉지배추 23453247.0 28124948.5 22342054.5 846627.0 1267032.0 6057043.0 54896070.6 210723252.7 314108107 129081767.5 22545746.2 2430081.3 815875977.4
여름배추 781158.9 692017.4 697552.4 702652.3 1378232.1 12583734.7 145019489.5 129315234.7 145537150 44758911.9 3635634.9 1298661.7 486400430.4
저장배추 9239320.5 21960065.0 106196225.0 202117623.5 61721436.0 10625940.0 7519988.0 7254231.8 9504887 7836030.0 14411990.0 9898112.0 468285848.8
쌈배추 17803986.6 16374230.5 16615496.3 19593801.1 18548266.5 15988251.4 17287966.4 15972340.5 19101749 21793129.9 18788284.1 15172944.3 213040447.1
생채용 배추 678681.0 602868.0 690973.5 749925.0 1241925.0 1283710.0 1060172.0 1203112.5 1219593 1074459.4 2614228.5 3874695.0 16294342.4
절임배추 197031.0 16488.0 25180.0 35440.0 18100.0 44470.0 23530.0 14270.0 12183 22530.0 8844214.0 6218141.0 15471577.0
우거지 1459223.1 1250096.0 913001.4 452369.0 330169.4 73376.7 31513.7 31722.4 54945 135252.9 179763.0 489821.3 5401253.9
배추뿌리 189939.8 148566.9 101172.4 31967.0 35121.0 23594.0 25780.0 14488.0 18628 33786.0 55935.3 144905.9 823884.3
배추(수입) 1040.0 5111.0 177974.0 81000.0 0.0 0.0 0.0 1600.0 11450 107806.0 11655.0 60000.0 457636.0
우거지(수입) 0.0 180.0 68.0 0.0 0.0 112.0 0.0 184.0 0 444.0 400.0 200.0 1588.0
a 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0 0.0 1380.0 0.0 1380.0
배양채 0.0 0.0 164.0 0.0 0.0 0.0 0.0 0.0 0 0.0 0.0 0.0 164.0
장박 avatar
About 장박
장박은 농업정보시스템 연구실에서 오랜시간 숙성되고 있는 농업데이터사이언티스트이다.
comments powered by Disqus