Re: [問題] ggplot 畫機率分配走勢圖(NT$300+200)

看板R_Language作者 (天)時間8年前 (2016/04/26 21:25), 8年前編輯推噓2(200)
留言2則, 1人參與, 最新討論串2/2 (看更多)
※ 引述《realtemper (Be pythonic!)》之銘言: : [問題類型]: : 程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來) : 註:賞金限首殺者,自動分組的部分跟主要問題分開,詳見內文 : [軟體熟悉度]: : 入門(寫過其他程式,只是對語法不熟悉) : [問題敘述]: : 問題應該算常見,看標題就明白,但做起來卻難如登天 怎麼做怎麼錯 : 我的資料長這樣(公司資料無法攜出 勞煩解答者自行按下面說明稍微模擬一下) : tableA : GP N N_valid : --------------------- : 1 300 120 : 2 225 55 : 3 145 42 : 4 101 45 : .... : 52 5 3 : 53 1 1 : 55 2 0 : 58 2 2 : 63 1 0 : 79 2 1 : 97 1 0 : tableA 是一個 pre-summarized 的次數分布圖: : GP 是整數,由小排到大,但並不 consecutive : N 代表某 GP 值的事件數 : N_valid 代表成功事件數,0 <= N_valid <= N : 並且這張表有一個特性 : 就是 N 愈到後面愈稀疏 : 如果 N = N_valid = 0 則不會出現該 GP 的 row, 例如 GP=80 : 我想做的事情也很簡單: : 畫出成功機率 (N_valid / N) vs GP 的走勢圖 : 實際上應該會是 sum(N_valid)/sum(N) "group by 每個bins" 的概念 : 並且因為GP愈大,N值愈稀疏,所以組距也必須設定為愈後面愈寬 : 要不然每組的樣本數不夠,機率的上下跳動幅度會太大 : 目前還想不到什麼好方法來做自動化的計算 : 所以就先手動設定 breaks = c(5,10,15,20,30,50) : (如果可以自動化,也希望一併提供solution,賞金額外再給$200) : 我嘗試弄了一段程式碼如下 : hist <- ggplot(tableA, aes(x=GP)) + : geom_bar(aes(y=sum(N_valid)/sum(N)), : breaks=breaks, : stat='identity') + : scale_y_continuous(labels=percent) : hist : 反正就先設好資料,再設好圖層跟軸,最後座標軸等修飾屬性套上去 : ggplot 的 code 基本也就長這樣 : 結果雖然有圖,但是不work,跑出一堆黑白相間的條紋,scale 也完全不對。 : (資料在公司 無法連網請見諒) : 這問題太 subtle 了 : stackoverflow 無果 : 性質最接近的帖子如下 : http://stackoverflow.com/questions/15664202/how-to-interpret-the-different-ggplot2-densities : http://stackoverflow.com/questions/15733531/specifying-number-of-breaks-with-scales-in-ggplot2-without-a-transform/15734133#15734133 : http://stackoverflow.com/questions/15651084/error-with-ggplot2-mapping-variable-to-y-and-using-stat-bin : 但都不是我所需要的(當然也可能是我程度太差看不懂) : google 關鍵字也不知道要怎麼下 : 因為工作關係沒有辦法在這個問題上浪費太多時間 : 故在此直接出 $300 徵答(如有辦法不用手動設定breaks再加$200) : 請意者作答後,把匯款方式寄站內信給我(我付款後要再麻煩您推文告知已收到) : 感謝大大熱心! library(pipeR) library(dplyr) library(ggplot2) # data generation prob_f <- function(x) x %>>% (.^2/2+3*.-3) %>>% (./sum(.)) %>>% rev sample_f <- function(x) sort(sample(x, 60, prob = prob_f(x))) table_A <- data.frame(GP = sample_f(1:100), N = rev(sample_f(1:400))) %>>% mutate(N_valid = sapply(N, function(x) rbinom(1, x, 0.6))) # find the breaks find_breaks_f <- function(x){ seq(log(5), log(round(max(x)/100)*100), length.out = round(length(x)/11)) %>>% exp %>>% c(0) %>>% sort %>>% return } breaks <- find_breaks_f(table_A$GP) # find the probability of success by breaks table_for_graph <- mutate(table_A, group = findInterval(GP, breaks)) %>>% group_by(group) %>>% summarise(prob_success = sum(N_valid) / sum(N)) %>>% mutate(x = breaks %>>% ((head(., length(.)-1) + tail(., length(.)-1))/2 )) # plot ggplot(table_for_graph, aes(x = x, y=prob_success)) + geom_line() + ylab("Probabilities") + xlab("") %>>%網路上有很詳細的解釋 (跟%>%不相容) dplyr的相關內容a我的id吧 我這裡只是用直覺去做而已,我不知道合不合用,試試看吧 : [程式範例]: : 請見問題敘述後半段(公司資料保密無法連網請見諒) : [環境敘述]: : 摘要如下 : R 3.2.1 win7 x64 SP1 : platform: x86_64-w64-mingw32/x64 (64-bit) : 有library(ggplot2) : library(scales) : [關鍵字]: : ggplot : geom_histogram : geom_bar : summary function : density -- : 順便再問一下 : 為什麼我想上網 RTFM 卻沒有一個地方給我 RTFM (例如python就有python docs) : 只能在一堆非結構化的散亂網頁當中連來連去 : https://cran.r-project.org/index.html : https://cran.r-project.org/manuals.html : http://stat.ethz.ch/R-manual/ : https://www.r-project.org/other-docs.html : 是不是大家學R真的全靠help()跟example()就可以了呢? 好的help可以讓你懂那個套件在幹嘛,用心的作者還會寫tutorial or vignettes 而遇到一些問題,常常爬stackoverflow都能找到解答 不過畫圖這種東西,我覺得個人要的不同,很難找答案 不如自己想辦法畫吧 : 在網路上沒有一個像python docs的集中地 個人覺得是UX上的一個致命缺陷 這我不清楚,我不熟python : 當然個人學習 靠help()跟example()是OK的沒錯 : 問題是你要demo,要推廣,要做教學 demo, 推廣, 教學,有R console也夠阿,不懂為啥要Rstudio 而且Rstudio可以直接按Open in new windows,不用拉來拉去 自備一台筆電最重要 (我自己都用桌機還敢說別人XD 有自己的筆電有自己的環境才適合做更多事情 版上沒有自己筆電應該少之又少(攤手 如果是公司電腦就比較難辦了(攤手 : 你所在的環境不一定容許你預先裝好Rstudio : 例如,公司電腦,或者手機(出門在外需要討論問題查資料) : 而且初學者通常不喜歡打指令, 初學者之所以初學者就是要學,不喜歡打指令只能慢慢習慣 你選擇了這個工具只能去習慣這個工具 不然就去用SAS EG, spss, pspp, minitab之類的吧 : 更不喜歡每打一次指令就要跑去把Rstudio的說明視窗拉大 上面有說 : 我也很好奇大家是怎麼面對這個困擾的 @@ -- R資料整理套件系列文: magrittr #1LhSWhpH (R_Language) http://tinyurl.com/j3ql84c data.table #1LhW7Tvj (R_Language) http://tinyurl.com/hr77hrn dplyr(上) #1LhpJCfB (R_Language) http://tinyurl.com/jtg4hau dplyr(下) #1Lhw8b-s (R_Language) tidyr #1Liqls1R (R_Language) http://tinyurl.com/jq3o2g3 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 180.218.152.118 ※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1461677119.A.A27.html

04/26 21:50, , 1F
感謝大大辛勞,調試中,盡快回覆
04/26 21:50, 1F
試完再跟我說,覺得如何吧

04/27 00:22, , 2F
感謝大大,已結案!
04/27 00:22, 2F
※ 編輯: celestialgod (180.218.152.118), 04/27/2016 00:37:09
文章代碼(AID): #1N7sm_ed (R_Language)
文章代碼(AID): #1N7sm_ed (R_Language)