도매시장 경락 데이터의 이해 - 오이
이번 Post에서 사용하는 데이터는 농림축산식품교육문화정보원에서 수집하여 공공데이터포털을 통해 제공되는 농수축산물 도매시장 상세 경락가격 Open API에서 수집한 데이터로 AWS S3 Agdata Lab 저장소에서 다운로드할 수 있다. 수집 기간은 2015년 1월 1일부터 2018년 7월 26일까지이며 해당기간 전국농산물 공영도매시장에서 거래된 배추 품목의 모든 데이터가 기록되어 있다.
먼저 csv파일을 읽어와서 dat
데이터로 저장하고 측정치 개수를 확인해보면 총 3,261,891개인 것을 알 수 있다. 날짜별 거래건수를 합해서 내림차순으로 정렬하여 상위 거래 건수를 확인해보면 거래가 많을 때는 3,000건 가까이 있었던 것을 확인할 수 있다.
dat <- read.csv('cucumber.csv')
print(paste('number of observation :',nrow(dat)))
## [1] "number of observation : 3261891"
dat %>% group_by(date) %>% tally() %>% arrange(desc(n)) %>% head()
## # A tibble: 6 x 2
## date n
## <int> <int>
## 1 20150103 2999
## 2 20150105 2999
## 3 20150107 2999
## 4 20150109 2999
## 5 20150112 2999
## 6 20150114 2999
다른 품목들과 마찬가지로 필요한 변수들을 생성하여주었다. 그런데 ‘sanji’ 변수에서 광주의 경우 ‘광주 광주 광산구’ 처럼 광주가 두 번 반복되는 데이터가 있어 앞의 광주를 한 번 제거한 뒤 ‘sanji_wide’, ‘sanji_city’, ‘sanji_wide2’ 변수를 생성하였다.
이제 raw 데이터를 가공해보자. 먼저, ’price_per_kg’이 NaN이나 Inf인 경우를 보면 ’prut’이 0인 것을 확인할 수 있다. 해당 데이터들은 분석에 사용할 수 없으므로 삭제해주자. 이제 히스토그램을 그려보면 kg 당 1000만원 가까이하는 어마어마한 오이가 존재하는 것을 볼 수 있다. 다시 kg 당 5000원 이하의 히스토그램을 그려보면 주로 2,000원 이하 가격에서 거래되고 있는 것을 볼 수 있다.
prodname | date | bidTime | aucCodeName | market | prut | insname | price | qty | sanji | sanji_wide | sanji_city | unit | shipment | grade | spename | package | year | month | day | week | wday | ym | yw | p_month | ymp | weight | sales_amt | price_per_kg | sanji_wide2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
오이 | 20150213 | 2.01502e+13 | 경매 | 광주서부도매 | 0 | 호남청과 | 38000 | 15 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 협동 | 특 | 취청 | 상자 | 2015 | 2 | 13 | 7 | 금요일 | 201502 | 201507 | 2 | 2015022 | 0 | 570000 | Inf | 전남 |
오이 | 20150507 | 2.01505e+13 | 경매 | 광주서부도매 | 0 | 두레청과 | 1500 | 1 | 광주 광산구 옥동 | 광주 | 광산구 | kg | 협동 | 상 | 취청 | 상자 | 2015 | 5 | 7 | 19 | 목요일 | 201505 | 201519 | 1 | 2015051 | 0 | 1500 | Inf | 광주 |
오이 | 20150610 | 2.01506e+13 | 경매 | 대전노은도매 | 0 | 대전중앙청과 | 19400 | 25 | 충남 연기군 | 충남 | 연기군 | kg | 특 | 백다다기 | 상자 | 2015 | 6 | 10 | 24 | 수요일 | 201506 | 201524 | 1 | 2015061 | 0 | 485000 | Inf | 충남 | |
오이 | 20150911 | 2.01509e+13 | 경매 | 광주서부도매 | 0 | 호남청과 | 30200 | 9 | 강원 횡성군 횡성읍 | 강원 | 횡성군 | kg | 협동 | 특 | 취청 | 상자 | 2015 | 9 | 11 | 37 | 금요일 | 201509 | 201537 | 2 | 2015092 | 0 | 271800 | Inf | 강원 |
오이 | 20160609 | 2.01606e+13 | 경매 | 수원도매시장 | 0 | 수원청과 | 7000 | 7 | NA | kg | 협동 | 특 | 백다다기 | 2016 | 6 | 9 | 24 | 목요일 | 201606 | 201624 | 1 | 2016061 | 0 | 49000 | Inf | ||||
오이 | 20161130 | 2.01611e+13 | 경매 | 구리도매시장 | 0 | 구리청과 | 25000 | 9 | 충남 논산시 | 충남 | 논산시 | kg | 협동 | 없음 | 백다다기 | 2016 | 11 | 30 | 49 | 수요일 | 201611 | 201649 | 3 | 2016113 | 0 | 225000 | Inf | 충남 | |
오이 | 20161130 | 2.01611e+13 | 경매 | 구리도매시장 | 0 | 구리청과 | 22000 | 1 | 충남 논산시 | 충남 | 논산시 | kg | 협동 | 없음 | 백다다기 | 2016 | 11 | 30 | 49 | 수요일 | 201611 | 201649 | 3 | 2016113 | 0 | 22000 | Inf | 충남 | |
오이 | 20170516 | 2.01705e+13 | 경매 | 광주각화도매 | 0 | 광주중앙청과 | 8600 | 3 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 계통 | 상 | 취청 | 상자 | 2017 | 5 | 16 | 21 | 화요일 | 201705 | 201721 | 2 | 2017052 | 0 | 25800 | Inf | 전남 |
오이 | 20180224 | 2.01802e+13 | 경매 | 대전오정도매 | 0 | 대전청과 | 28500 | 10 | 충북 보은군 | 충북 | 보은군 | kg | 개별 | 없음 | 백다다기 | 상자 | 2018 | 2 | 24 | 9 | 토요일 | 201802 | 201809 | 3 | 2018023 | 0 | 285000 | Inf | 충북 |
dat <- dat %>% filter(!prut==0)
gh1 <- ggplot(dat, aes(x = price_per_kg)) + geom_histogram(fill = "red", color = "red", bins = 1000)
gh2 <- ggplot(dat %>% filter(price_per_kg<=5000), aes(x = price_per_kg)) + geom_histogram(fill = "firebrick2", color = "firebrick2", bins = 1000)
grid.arrange(gh1, gh2, ncol=1, nrow=2)
이상치를 제거하기 위해 먼저 ‘price_per_kg’이 100원 이하인 경우와 100원 미만인 경우의 히스토그램을 그려보았다. 히스토그램을 살펴보면 100원을 기준으로 그 아래 가격에서의 거래 건수는 미미한 것을 볼 수 있다. 따라서 ’price_per_kg’이 100원 미만인 2,414건을 제외하고 ’dat2’ 데이터를 생성했다.
d1 <- dat %>% filter(price_per_kg<=100)
g1 <- ggplot(d1 %>% arrange(price_per_kg) %>% mutate(SEQ=seq(1,nrow(d1),1))) + geom_line(aes(x=SEQ,y=price_per_kg), linetype='solid', size=0.5, alpha=0.8, color='blue')
d2 <- d1 %>% filter(price_per_kg<100)
g2 <- ggplot(d2 %>% arrange(price_per_kg) %>% mutate(SEQ=seq(1,nrow(d2),1))) + geom_line(aes(x=SEQ,y=price_per_kg), linetype='solid', size=0.5, alpha=0.8, color='blue')
subplot(ggplotly(g1),ggplotly(g2), margin = 0.05, nrows=2)
dat2 <- dat %>% filter(price_per_kg>=100)
이제 가격이 지나치게 비싼 경우의 데이터를 살펴보자. 아래의 표는 ‘price_per_kg’ 기준으로 내림차순 데이터 상위 30개를 보여준다. 다른 작물들의 경우에는 대부분 prut이 잘못 입력된 경우를 의심해보았으나, 오이의 경우 prut이 10, 18 등 일반적인 값을 가진다. 단위가 kg이 아니라 ton이었을 경우를 생각해보면 상위 7건 정도를 제외하고는 일반적인 오이 가격 범위에 들어오기는 하나, 함부로 판단할 수 없으므로 일정 가격을 기준으로 데이터를 제외시키기로 한다. ‘price_per_kg’이 5000원을 초과하는 거래 건수는 총 8,836건으로 전체의 약 0.27%를 차지한다. 따라서 5000원 이하인 경우만 포함하여 최종 분석 대상인 ’dat3’ 데이터(3,250,640개)를 생성하였다.
prodname | date | bidTime | aucCodeName | market | prut | insname | price | qty | sanji | sanji_wide | sanji_city | unit | shipment | grade | spename | package | year | month | day | week | wday | ym | yw | p_month | ymp | weight | sales_amt | price_per_kg | sanji_wide2 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
오이 | 20170922 | 2.01709e+13 | 경매 | 청주도매시장 | 10 | 청주청과 | 96006600 | 3 | 충북 음성군 음성읍 | 충북 | 음성군 | kg | 협동 | 4등 | 취청 | 상자 | 2017 | 9 | 22 | 39 | 금요일 | 201709 | 201739 | 3 | 2017093 | 30 | 288019800 | 9600660.0 | 충북 |
오이 | 20170825 | 2.01708e+13 | 경매 | 정읍도매시장 | 10 | 정일청과 | 80009000 | 3 | 전북 정읍시 수성동 | 전북 | 정읍시 | kg | 개별 | 없음 | 취청 | 상자 | 2017 | 8 | 25 | 35 | 금요일 | 201708 | 201735 | 3 | 2017083 | 30 | 240027000 | 8000900.0 | 전북 |
오이 | 20170612 | 2.01706e+13 | 경매 | 대전오정도매 | 10 | 대전청과 | 80002000 | 1 | 충북 보은군 | 충북 | 보은군 | kg | 개별 | 없음 | 취청 | 상자 | 2017 | 6 | 12 | 25 | 월요일 | 201706 | 201725 | 2 | 2017062 | 10 | 80002000 | 8000200.0 | 충북 |
오이 | 20180607 | 2.01806e+13 | 경매 | 천안도매시장 | 15 | 천안청과 | 90007800 | 7 | 충남 아산시 권곡동 | 충남 | 아산시 | kg | 협동 | 없음 | 백다다기 | 상자 | 2018 | 6 | 7 | 24 | 목요일 | 201806 | 201824 | 1 | 2018061 | 105 | 630054600 | 6000520.0 | 충남 |
오이 | 20160528 | 2.01605e+13 | 경매 | 천안도매시장 | 10 | 천안청과 | 60004600 | 1 | 경기 안성시 미양면 | 경기 | 안성시 | kg | 협동 | 없음 | 백다다기 | 상자 | 2016 | 5 | 28 | 22 | 토요일 | 201605 | 201622 | 3 | 2016053 | 10 | 60004600 | 6000460.0 | 경기 |
오이 | 20170821 | 2.01708e+13 | 경매 | 청주도매시장 | 10 | 청주청과 | 56003600 | 11 | 충북 청주시 상당구 금천동 | 충북 | 청주시 | kg | 협동 | 4등 | 취청 | 상자 | 2017 | 8 | 21 | 35 | 월요일 | 201708 | 201735 | 3 | 2017083 | 110 | 616039600 | 5600360.0 | 충북 |
오이 | 20170502 | 2.01705e+13 | 경매 | 광주각화도매 | 10 | 광주청과 | 50012600 | 14 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 계통 | 특 | 취청 | 상자 | 2017 | 5 | 2 | 19 | 화요일 | 201705 | 201719 | 1 | 2017051 | 140 | 700176400 | 5001260.0 | 전남 |
오이 | 20170408 | 2.01704e+13 | 경매 | 광주각화도매 | 10 | 광주청과 | 50012200 | 2 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 계통 | 보통 | 취청 | 상자 | 2017 | 4 | 8 | 15 | 토요일 | 201704 | 201715 | 1 | 2017041 | 20 | 100024400 | 5001220.0 | 전남 |
오이 | 20170916 | 2.01709e+13 | 경매 | 청주도매시장 | 10 | 청주청과 | 43004000 | 1 | 충북 음성군 음성읍 | 충북 | 음성군 | kg | 협동 | 보통 | 취청 | 상자 | 2017 | 9 | 16 | 38 | 토요일 | 201709 | 201738 | 2 | 2017092 | 10 | 43004000 | 4300400.0 | 충북 |
오이 | 20180721 | 2.01807e+13 | 경매 | 청주도매시장 | 18 | 청주청과 | 60014600 | 4 | 충남 천안시 구룡동 | 충남 | 천안시 | kg | 계통 | 상 | 백다다기 | 상자 | 2018 | 7 | 21 | 30 | 토요일 | 201807 | 201830 | 3 | 2018073 | 72 | 240058400 | 3334144.4 | 충남 |
오이 | 20160525 | 2.01605e+13 | 경매 | 천안도매시장 | 18 | 천안청과 | 60010600 | 8 | 경기 안성시 가사동 | 경기 | 안성시 | kg | 협동 | 없음 | 백다다기 | 상자 | 2016 | 5 | 25 | 22 | 수요일 | 201605 | 201622 | 3 | 2016053 | 144 | 480084800 | 3333922.2 | 경기 |
오이 | 20180510 | 2.01805e+13 | 경매 | 천안도매시장 | 18 | 천안청과 | 50011000 | 1 | 충남 천안시 성환읍 | 충남 | 천안시 | kg | 협동 | 없음 | 백다다기 | 상자 | 2018 | 5 | 10 | 20 | 목요일 | 201805 | 201820 | 1 | 2018051 | 18 | 50011000 | 2778388.9 | 충남 |
오이 | 20150212 | 2.01502e+13 | 경매 | 부산반여도매 | 10 | 동부청과 | 25888875 | 34 | 경남 창녕군 창녕읍 | 경남 | 창녕군 | kg | 개별 | 특 | 가시오이 | 상자 | 2015 | 2 | 12 | 7 | 목요일 | 201502 | 201507 | 2 | 2015022 | 340 | 880221750 | 2588887.5 | 경남 |
오이 | 20170609 | 2.01706e+13 | 경매 | 광주각화도매 | 5 | 광주청과 | 10010000 | 1 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 계통 | 특 | 취청 | 상자 | 2017 | 6 | 9 | 24 | 금요일 | 201706 | 201724 | 1 | 2017061 | 5 | 10010000 | 2002000.0 | 전남 |
오이 | 20161219 | 2.01612e+13 | 경매 | 광주각화도매 | 10 | 광주청과 | 20011200 | 2 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 계통 | 4등 | 취청 | 상자 | 2016 | 12 | 19 | 52 | 월요일 | 201612 | 201652 | 2 | 2016122 | 20 | 40022400 | 2001120.0 | 전남 |
오이 | 20180713 | 2.01807e+13 | 경매 | 광주각화도매 | 10 | 광주청과 | 17718800 | 5 | 강원 화천군 화천읍 | 강원 | 화천군 | kg | 계통 | 특 | 취청 | 상자 | 2018 | 7 | 13 | 29 | 금요일 | 201807 | 201829 | 2 | 2018072 | 50 | 88594000 | 1771880.0 | 강원 |
오이 | 20180709 | 2.01807e+13 | 경매 | 청주도매시장 | 18 | 청주청과 | 30014500 | 7 | 충북 보은군 보은읍 | 충북 | 보은군 | kg | 협동 | 상 | 백다다기 | 상자 | 2018 | 7 | 9 | 29 | 월요일 | 201807 | 201829 | 1 | 2018071 | 126 | 210101500 | 1667472.2 | 충북 |
오이 | 20160525 | 2.01605e+13 | 경매 | 천안도매시장 | 18 | 천안청과 | 25009300 | 10 | 충남 천안시 성환읍 | 충남 | 천안시 | kg | 협동 | 없음 | 백다다기 | 상자 | 2016 | 5 | 25 | 22 | 수요일 | 201605 | 201622 | 3 | 2016053 | 180 | 250093000 | 1389405.6 | 충남 |
오이 | 20180214 | 2.01802e+13 | 경매 | 청주도매시장 | 10 | 청주청과 | 12029600 | 15 | 전남 순천시 가곡동 | 전남 | 순천시 | kg | 계통 | 특 | 취청 | 상자 | 2018 | 2 | 14 | 8 | 수요일 | 201802 | 201808 | 2 | 2018022 | 150 | 180444000 | 1202960.0 | 전남 |
오이 | 20160824 | 2.01608e+13 | 경매 | 정읍도매시장 | 10 | 정일청과 | 10013000 | 8 | 전북 정읍시 수성동 | 전북 | 정읍시 | kg | 계통 | 없음 | 취청 | 상자 | 2016 | 8 | 24 | 35 | 수요일 | 201608 | 201635 | 3 | 2016083 | 80 | 80104000 | 1001300.0 | 전북 |
오이 | 20170522 | 2.01705e+13 | 경매 | 서울강서도매 | 9 | 농협강서(공) | 8208100 | 72 | 서울 도봉구 | 서울 | 도봉구 | kg | 계통 | 특 | 백다다기 | 2017 | 5 | 22 | 22 | 월요일 | 201705 | 201722 | 3 | 2017053 | 648 | 590983200 | 912011.1 | 서울 | |
오이 | 20151229 | 2.01512e+13 | 경매 | 대구북부도매 | 10 | 대양청과 | 9000000 | 1 | 대구광역시 | 대구광역시 | NA | kg | 개별 | 특 | 가시오이 | 상자 | 2015 | 12 | 29 | 53 | 화요일 | 201512 | 201553 | 3 | 2015123 | 10 | 9000000 | 900000.0 | 대구광역시 |
오이 | 20170914 | 2.01709e+13 | 경매 | 천안도매시장 | 10 | 천안청과 | 8806800 | 1 | 경기 안성시 미양면 | 경기 | 안성시 | kg | 협동 | 없음 | 취청 | 상자 | 2017 | 9 | 14 | 38 | 목요일 | 201709 | 201738 | 2 | 2017092 | 10 | 8806800 | 880680.0 | 경기 |
오이 | 20150523 | 2.01505e+13 | 경매 | 천안도매시장 | 18 | 천안청과 | 12915900 | 21 | 충남 천안시 목천면 | 충남 | 천안시 | kg | 계통 | 없음 | 백다다기 | 상자 | 2015 | 5 | 23 | 21 | 토요일 | 201505 | 201521 | 3 | 2015053 | 378 | 271233900 | 717550.0 | 충남 |
오이 | 20160707 | 2.01607e+13 | 경매 | 구리도매시장 | 10 | 인터넷청과 | 7000000 | 6 | 강원 화천군 | 강원 | 화천군 | kg | 협동 | 특 | 백다다기 | 상자 | 2016 | 7 | 7 | 28 | 목요일 | 201607 | 201628 | 1 | 2016071 | 60 | 42000000 | 700000.0 | 강원 |
오이 | 20160525 | 2.01605e+13 | 경매 | 수원도매시장 | 10 | 경기청과 | 6688888 | 5 | 전남 순천시 승주읍 | 전남 | 순천시 | kg | 협동 | 상 | 취청 | 상자 | 2016 | 5 | 25 | 22 | 수요일 | 201605 | 201622 | 3 | 2016053 | 50 | 33444440 | 668888.8 | 전남 |
오이 | 20170421 | 2.01704e+13 | 경매 | 정읍도매시장 | 10 | 정일청과 | 6005000 | 4 | 전북 부안군 부안읍 | 전북 | 부안군 | kg | 개별 | 없음 | 취청 | 상자 | 2017 | 4 | 21 | 17 | 금요일 | 201704 | 201717 | 3 | 2017043 | 40 | 24020000 | 600500.0 | 전북 |
오이 | 20171214 | 2.01712e+13 | 경매 | 전주도매시장 | 10 | 전주청과 | 5111000 | 3 | 전북 전주시 덕진구 서노송동 | 전북 | 전주시 | kg | 계통 | 없음 | 취청 | 2017 | 12 | 14 | 51 | 목요일 | 201712 | 201751 | 2 | 2017122 | 30 | 15333000 | 511100.0 | 전북 | |
오이 | 20150620 | 4.11420e+04 | 경매 | 전주도매시장 | 10 | 전주청과 | 4449999 | 2 | NA | kg | 개별 | 없음 | 취청 | 2015 | 6 | 20 | 25 | 토요일 | 201506 | 201525 | 2 | 2015062 | 20 | 8899998 | 444999.9 | ||||
오이 | 20170114 | 2.01701e+13 | 경매 | 광주서부도매 | 10 | 농협광주(공) | 4000000 | 17 | 전남 순천시 낙안면 | 전남 | 순천시 | kg | 개별 | 특 | 취청 | 2017 | 1 | 14 | 3 | 토요일 | 201701 | 201703 | 2 | 2017012 | 170 | 68000000 | 400000.0 | 전남 |
dat3 <- dat2 %>% filter(price_per_kg<=5000)
연도-월 반입량
이제 오이의 연도-월 반입량을 살펴보자. 오이는 주로 5, 6월에 반입량이 많고 1, 2월에는 반입량이 적은 것을 확인할 수 있다. 특이하게 2015년에는 10월에도 반입량이 많았으며 다른 해보다 대체적으로 높은 반입량을 보였다.
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')
연도-월 가격
다음은 연도-월 가격이다. 오이는 주로 3월부터 6월에 가격이 낮고 반입량이 적은 1, 2월에 가격이 높은 것을 확인할 수 있다 다른해보다 높은 반입량을 보였던 2015에는 여름과 가을에 다른해보다 낮은 가격을 형성하고 있다.
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.0007, 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')
산지-월 출하량
다음은 산지-월 출하량이다. 전남에서의 오이 출하량이 월등히 많고 그 뒤를 충남과 경기 등이 따르는 것을 확인할 있다. 전남의 경우 겨울과 봄에 출하량이 집중되어 있으며 특히나 겨울 출하량의 대부분을 차지한다. 충남의 경우 전남의 오이 출하량이 적은 10월과 11월에 출하량이 집중되어 있다. 경기 지역의 경우 5, 6월에 출하량이 집중되있 있으며 경북은 전남과 출하시기가 비슷한 것을 볼 있다. 강원과 충북은 6월부터 9월에 주로 오이를 출하한다.
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:8,2:13])/1000
hist3D(z = d8, x=1:8, y=1:12, scale = FALSE, expand = 0.00008, 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)
산지-월 가격
다음은 산지-월 가격이다. 출하량 자체는 많지 않았지만 강원지역의 오이가 대체적으로 높은 가격을 형성하고 있는 것을 확인할 수 있다.
price_sanji_month <- dat3 %>% group_by(sanji_wide2,month) %>% summarise(price=mean(price_per_kg,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:8,3:14])/1000
hist3D(z = d8b, x=1:8, y=1:12, scale = FALSE, expand = 0.5, 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)
품종-월 반입량
다음은 품종-월 반입량이다. 백다다기와 취청이 대부분을 차지하고 있는 것을 볼 수 있다. 5, 6월에는 백다다기의 반입량이 특히 많아진다.
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:6,2:13])/1000
hist3D(z = d9, x=1:6, y=1:12, scale = FALSE, expand = 0.00005, 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)
품종-월 가격
다음은 품종-월 가격이다. 대체적으로 오이의 출하량이 많은 5, 6월에 가격이 낮고 출하량이 적은 1, 2월에 가격이 높을 것을 볼 수 있다. 청노각과 노각은 다른 품종들과는 전혀 다른 가겨을 형성하고 있어 확연히 다른 품종임을 알 수가 있다.
price_spec_month <- dat3 %>% group_by(spename,month) %>% summarise(price=mean(price_per_kg,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:6,3:14])
hist3D(z = d9b, x=1:6, y=1:12, scale = FALSE, expand = 0.0005, 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)
품종-산지 출하량
다음은 품종-산지 출하량이다. 백다다기는 오이 출하량이 많은 8개 지역 중 충남을 제외하고는 모든 지역에서 출하되는 것을 확인할 수 있다. 취청의 경우 전남과 강원 지역을 제외한 지역에서 출하되며 특히 대전에서 출하량이 높다. 가시오이는 강원에 그 춣량이 집중되어 있는 것을 확인할 수 있다. 가격 패턴이 유사했던 백다다기, 취청, 가시오이 중 가시오이는 산지가 확연히 달라 다른 품목으로 여겨야함을 유추할 있다.
input_spec_sanji_wide2 <- total_sort_2d(dat3,spename,sanji_wide2,weight)
d10 <- as.matrix(input_spec_sanji_wide2[1:8,2:7])/1000
hist3D(z = d10, x=1:8, y=1:6, scale = FALSE, expand = 0.0001, 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')
다음 분석을 진행하기 앞서 백다다기와 취청이 구분되는 품목인지 확인해보자. 산지에서 다소 차이를 보여 다른 품목일 가능성이 높아보이는데, 거래 단위와 거래 시장에서도 차이를 보인다면 다른 품목으로 구분지어도 될 것이다. 차이를 보기 위해 백다다기 데이터인 ‘dat_1’(1,800,504개)과 취청 데이터인 ‘dat_2’(1,309,365)를 생성했다.
오이의 경우 raw data에서 6건을 제외하고는 모두 ‘unit’이 kg이었기 때문에 품목 별로 ’prut’ 당 거래 건수 상위 10개를 살펴보았다. 백다다기의 경우 ’prut’이 18, 10, 15인 경우가 주를 이루고 취청의 경우 10, 20인 경우가 주를 이루고 있는 것을 확인할 수 있다.
다음으로 거래되는 시장에 차이가 있는지 밝혀내기 위해 2016년 기준으로 시장-월별 거래건수를 살펴보았다. 일반적으로 농산물 거래량이 가장 많은 서울가락도매시장을 기준으로 했을 때 백다다기의 경우 4~8월에 거래건수가 적고 취청의 경우 거래가 활발히 일어나는 것을 확인할 수 있었다.
이처럼 백다다기와 취청이 거래 단위와 거래 시장에서 차이를 보여 각기 구분되는 품목으로 결론지었다. 앞으로 이어질 분석이 서울가락시장도매를 중심으로 이루어지기 때문에 취청 데이터인 dat_2를 분석 데이터로 선정하였다.
prut | n |
---|---|
18.0 | 864428 |
10.0 | 514869 |
15.0 | 272393 |
8.0 | 69703 |
20.0 | 35831 |
9.0 | 29992 |
11.0 | 8124 |
0.6 | 712 |
7.5 | 512 |
12.0 | 456 |
prut | n |
---|---|
10.0 | 1185265 |
20.0 | 107981 |
18.0 | 4858 |
11.0 | 4843 |
5.0 | 3038 |
15.0 | 1412 |
8.0 | 548 |
4.0 | 325 |
0.4 | 174 |
0.2 | 159 |
ym | 강릉도매시장 | 광주각화도매 | 광주서부도매 | 구리도매시장 | 구미도매시장 | 대구북부도매 | 대전노은도매 | 대전오정도매 | 부산반여도매 | 부산엄궁도매 | 서울가락도매 | 서울강서도매 | 수원도매시장 | 순천도매시장 | 안동도매시장 | 안산도매시장 | 안양도매시장 | 울산도매시장 | 원주도매시장 | 익산도매시장 | 인천구월도매 | 인천삼산도매 | 전주도매시장 | 정읍도매시장 | 진주도매시장 | 창원내서도매시장 | 창원팔용도매시장 | 천안도매시장 | 청주도매시장 | 춘천도매시장 | 충주도매시장 | 포항도매시장 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
201601 | NA | 111 | 26 | 1073 | 25 | 439 | 375 | 510 | 80 | 161 | 4830 | 6669 | 295 | 3 | NA | 48 | 51 | 8 | 62 | 4 | 479 | 612 | 2 | 11 | 27 | 4 | 35 | 56 | 143 | 54 | 16 | NA |
201602 | 3 | 76 | 71 | 1197 | 20 | 420 | 535 | 866 | 50 | 193 | 5869 | 5813 | 576 | 3 | NA | 248 | 107 | 6 | 92 | NA | 552 | 831 | NA | 12 | 30 | 36 | 28 | 176 | 130 | 52 | 19 | NA |
201603 | NA | 235 | 416 | 3911 | 53 | 1369 | 1719 | 2779 | 368 | 361 | 10876 | 7069 | 1922 | 19 | NA | 1167 | 398 | 65 | 221 | 89 | 1491 | 3042 | 137 | 129 | 130 | 83 | 73 | 1434 | 619 | 161 | 69 | NA |
201604 | 19 | 263 | 1029 | 4525 | 173 | 550 | 3061 | 2471 | 1085 | 51 | 335 | 10263 | 2183 | 159 | NA | 1722 | 823 | 245 | 328 | 188 | 967 | 3994 | 288 | 224 | 186 | 161 | 268 | 1838 | 702 | 240 | 292 | NA |
201605 | 297 | 105 | 1584 | 5032 | 400 | NA | 3006 | 1025 | 2440 | NA | NA | 10029 | 1427 | 422 | 2 | 1345 | 479 | 774 | 416 | 225 | 302 | 4940 | 475 | 229 | 382 | 549 | 531 | 1677 | 649 | 241 | 854 | NA |
201606 | 682 | 82 | 1729 | 6842 | 267 | NA | 3084 | 1487 | 2737 | NA | NA | 6521 | 1780 | 542 | 12 | 1486 | 895 | 893 | 816 | 291 | 319 | 6997 | 588 | 177 | 383 | 431 | 678 | 1813 | 731 | 259 | 1042 | 17 |
201607 | 786 | 477 | 949 | 6953 | 58 | 1593 | 2625 | 4456 | 1524 | 144 | 257 | 8747 | 2595 | 147 | NA | 1801 | 1124 | 602 | 1156 | 220 | 2536 | 5871 | 354 | 174 | 181 | 179 | 492 | 1769 | 920 | 289 | 1228 | 1 |
201608 | 725 | 363 | 371 | 7623 | NA | 3394 | 2410 | 4964 | 1027 | 597 | 1066 | 8246 | 3100 | 10 | NA | 1751 | 1527 | 165 | 1049 | 41 | 3636 | 4779 | 166 | 132 | 122 | 51 | 173 | 1117 | 965 | 237 | 1091 | NA |
201609 | 358 | 291 | 195 | 5975 | 5 | 3436 | 1714 | 3466 | 691 | 1075 | 10366 | 6265 | 2267 | 11 | NA | 1221 | 1266 | 70 | 513 | 8 | 2970 | 3737 | 54 | 72 | 31 | 27 | 72 | 970 | 753 | 170 | 660 | NA |
201610 | 137 | 485 | 169 | 5313 | 78 | 4263 | 1818 | 3622 | 919 | 757 | 14968 | 4750 | 2388 | 91 | NA | 1444 | 1273 | 57 | 361 | 7 | 3261 | 2930 | 41 | 50 | 24 | 82 | 99 | 1366 | 661 | 192 | 516 | NA |
201611 | 19 | 281 | 54 | 2344 | 141 | 2658 | 1412 | 1885 | 452 | 336 | 21394 | 3462 | 1419 | 83 | NA | 725 | 740 | 51 | 197 | 13 | 1980 | 1660 | 50 | 56 | 61 | 74 | 91 | 757 | 444 | 179 | 203 | NA |
201612 | 13 | 169 | 67 | 1875 | 79 | 2131 | 1281 | 1367 | 363 | 677 | 19709 | 3554 | 845 | 13 | NA | 372 | 371 | 29 | 217 | 23 | 1271 | 2001 | NA | 39 | 45 | 66 | 51 | 533 | 397 | 181 | 105 | NA |
ym | 강릉도매시장 | 광주각화도매 | 광주서부도매 | 구리도매시장 | 대구북부도매 | 대전노은도매 | 대전오정도매 | 부산반여도매 | 부산엄궁도매 | 서울가락도매 | 서울강서도매 | 수원도매시장 | 순천도매시장 | 안산도매시장 | 안양도매시장 | 울산도매시장 | 원주도매시장 | 익산도매시장 | 인천구월도매 | 인천삼산도매 | 전주도매시장 | 정읍도매시장 | 진주도매시장 | 창원내서도매시장 | 창원팔용도매시장 | 천안도매시장 | 청주도매시장 | 춘천도매시장 | 충주도매시장 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
201601 | 72 | 3886 | 2989 | 1103 | 907 | NA | 637 | 530 | 484 | 25427 | 3331 | 476 | 1495 | 52 | 189 | 6 | 140 | 496 | 799 | 169 | 930 | 47 | 1978 | 37 | 1 | 53 | 67 | 71 | 43 |
201602 | 71 | 4091 | 3142 | 1036 | 1176 | NA | 631 | 448 | 723 | 25065 | 1649 | 504 | 1717 | 57 | 200 | 1 | 137 | 315 | 808 | 134 | 684 | 83 | 2100 | 27 | 1 | 24 | 87 | 79 | 10 |
201603 | 76 | 6578 | 4963 | 1470 | 1041 | 23 | 770 | 265 | 24 | 13438 | 832 | 491 | 2689 | 49 | 210 | 9 | 149 | 1105 | 798 | 174 | 1281 | 246 | 2778 | 19 | NA | 21 | 76 | 112 | 54 |
201604 | 68 | 7318 | 5897 | 1290 | 753 | 11 | 791 | 189 | 40 | 11238 | 529 | 386 | 3123 | 57 | 238 | 32 | 163 | 1161 | 914 | 198 | 1848 | 345 | 2389 | 38 | 7 | 6 | 98 | 151 | 37 |
201605 | 37 | 7653 | 6061 | 1241 | 459 | 47 | 665 | 45 | 7 | 10402 | 505 | 445 | 2943 | 66 | 198 | 4 | 151 | 1311 | 938 | 216 | 2217 | 344 | 1829 | 10 | 1 | 15 | 56 | 174 | 34 |
201606 | 2 | 6731 | 5442 | 1226 | 115 | 100 | 597 | 31 | 3 | 9620 | 285 | 442 | 2704 | 104 | 151 | 8 | 177 | 1416 | 696 | 242 | 2271 | 208 | 901 | 8 | 2 | 18 | 115 | 149 | 20 |
201607 | 2 | 4246 | 3958 | 438 | 5 | 138 | 512 | 33 | 2 | 7937 | 712 | 531 | 2379 | 65 | 171 | 10 | 149 | 1395 | 446 | 257 | 1985 | 229 | 6 | 14 | 5 | 121 | 170 | 129 | 4 |
201608 | 4 | 3715 | 4465 | 964 | 1 | 333 | 794 | 20 | 2 | 8931 | 736 | 457 | 2425 | 51 | 144 | 11 | 205 | 1214 | 675 | 228 | 1380 | 204 | NA | 14 | 17 | 266 | 194 | 169 | 41 |
201609 | NA | 2136 | 2501 | 498 | 11 | 510 | 494 | 32 | 3 | 7634 | 679 | 325 | 1386 | 67 | 120 | NA | 236 | 927 | 292 | 109 | 1247 | 195 | 20 | 8 | 11 | 85 | 117 | 90 | 33 |
201610 | NA | 3181 | 2915 | 432 | 16 | 736 | 664 | 43 | 4 | 9583 | 542 | 372 | 1588 | 156 | 157 | 2 | 189 | 864 | 121 | 218 | 1599 | 124 | 14 | 12 | 8 | 157 | 140 | 98 | 6 |
201611 | 21 | 3484 | 2978 | 728 | 102 | 590 | 580 | 37 | 23 | 8626 | 615 | 208 | 1793 | 76 | 99 | 1 | 111 | 771 | 335 | 271 | 1229 | 77 | 543 | 15 | 7 | 95 | 126 | 103 | 7 |
201612 | 53 | 4427 | 3397 | 1427 | 881 | 527 | 412 | 81 | 230 | 12369 | 761 | 587 | 1766 | 70 | 188 | 8 | 153 | 636 | 1060 | 216 | 866 | 84 | 1087 | 15 | NA | 111 | 272 | 110 | 29 |
다음은 거래단위별 가격이다. 주된 거래 단위인 10kg, 10kg 상자, 20kg, 20kg 상자를 대상으로 진행하였다. ’package’가 있는 경우와 없는 경우가 어떻게 다른지 정확하게 알 수는 없지만 10kg과 10kg상자 간에 다소 가격 차이가 있는 것을 볼 수 있다.
subplot(ggplotly(gg1.4a,tooltip = c("x", "y")),ggplotly(gg1.4b,tooltip = c("x", "y")),ggplotly(gg1.4c,tooltip = c("x", "y")),ggplotly(gg1.4d,tooltip = c("x", "y")),ggplotly(gg1.4e,tooltip = c("x", "y")), margin = 0.05, nrows=5)
마지막으로 법인별 반입량과 가격/거래 방법별 반입량과 가격을 살펴보자. 서울과 광주의 법인들이 높은 반입량을 보이는 것을 확인할 수 있다.
formattable(tab_2_1, list(
mkt_short=formatter(
"span",
style = x ~ ifelse(x == substr(mkt_sel,1,4), style(font.weight = "bold", color = 'blue'), NA)),
amt_ton = color_tile("white", "orange"),
area(col = c(price_l1w, price_l2w, price_l3w)) ~ normalize_bar("pink", 0.2, na.rm=T)
))
mkt_short | insname | amt_ton | price_l1w | price_l2w | price_l3w |
---|---|---|---|---|---|
서울가락 | 한국청과 | 90622 | 562 | 865 | 1519 |
서울가락 | 중앙청과 | 57213 | 648 | 885 | 1566 |
서울가락 | 농협가락(공) | 52164 | 510 | 852 | 1521 |
서울가락 | 서울청과 | 49935 | 451 | 813 | 1360 |
광주각화 | 광주원협(공) | 48821 | 646 | 1110 | 1755 |
광주서부 | 농협광주(공) | 41019 | 610 | 1041 | 1729 |
광주각화 | 광주중앙청과 | 38346 | 677 | 1313 | 1889 |
서울가락 | 동화청과 | 37958 | 458 | 812 | 1636 |
광주각화 | 광주청과 | 36900 | 516 | 1046 | 1632 |
순천도매 | 순천원협(공) | 30475 | 589 | 1142 | 2076 |
광주서부 | 호남청과 | 30312 | 649 | 1014 | 1762 |
익산도매 | 익산원협(공) | 17103 | 349 | 698 | 1137 |
광주서부 | 두레청과 | 15234 | 564 | 1004 | 1774 |
전주도매 | 전주원협(공) | 14596 | 327 | 659 | 1144 |
구리도매 | 구리청과 | 14189 | 656 | 1188 | 1822 |
순천도매 | 남도청과 | 12647 | 479 | 940 | 1398 |
전주도매 | 전주청과 | 12551 | 592 | 705 | 1248 |
구리도매 | 농협구리(공) | 11848 | 529 | 1094 | 2065 |
대전오정 | 농협대전(공) | 9562 | 481 | 952 | 1477 |
서울강서 | 서부청과 | 7852 | 445 | 893 | 1278 |
ggplotly(g, tooltip = c('x',"y"), height = 600)