Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
使用Kubeadm在國(guó)內(nèi)部署Kubernetes集群時(shí),由于無(wú)法訪問(wèn)k8s.gcr.io,就修改了默認(rèn)的倉(cāng)庫(kù)地址,直接使用了Azure 提供的gcr.azk8s.cn/google_containers倉(cāng)庫(kù)。
操作系統(tǒng):Centos7
Kubernetes:v1.17.0 單Master節(jié)點(diǎn)
docker pull gcr.azk8s.cn/google_containers/pause:3.1
Error response from daemon: error parsing HTTP 403 response body: invalid character '<' looking for beginning of value: "<html>\r\n<head><title>403 Forbidden</title></head>\r\n<body bgcolor=\"white\">\r\n<center><h1>403 Forbidden</h1></center>\r\n<hr><center>nginx/1.14.0 (Ubuntu)</center>\r\n</body>\r\n</html>\r\n"
近期Azure調(diào)整了策略,其倉(cāng)庫(kù)只允許 Azure China IP 使用,不再對(duì)外提供服務(wù), 如果確實(shí)有需求,可以聯(lián)系akscn@microsoft.com并提供IP地址。
官方說(shuō)明:https://mirror.azure.cn/help/docker-registry-proxy-cache.html
這樣我在新增節(jié)點(diǎn)時(shí)就無(wú)法下載`kube-proxy`以及`pause`鏡像了,甚至已有節(jié)點(diǎn)出現(xiàn)意外時(shí),對(duì)恢復(fù)節(jié)點(diǎn)也造成一定影響。
切換所有相關(guān)鏡像至新的倉(cāng)庫(kù)。
升級(jí)過(guò)程中服務(wù)會(huì)短暫中斷,也可能存在未知風(fēng)險(xiǎn),應(yīng)提前做好準(zhǔn)備。
升級(jí)過(guò)程中服務(wù)會(huì)短暫中斷,也可能存在未知風(fēng)險(xiǎn),應(yīng)提前做好準(zhǔn)備。
升級(jí)過(guò)程中服務(wù)會(huì)短暫中斷,也可能存在未知風(fēng)險(xiǎn),應(yīng)提前做好準(zhǔn)備。
倉(cāng)庫(kù)切換涉及到兩個(gè)核心內(nèi)容:
1. Kubernetes集群鏡像,以及現(xiàn)有運(yùn)行中的所有基礎(chǔ)服務(wù)。
2. Kubeadm配置信息,保證新增節(jié)點(diǎn)拿到新的配置信息,進(jìn)行初始化。
創(chuàng)建倉(cāng)庫(kù)代理
創(chuàng)建代理倉(cāng)庫(kù)的細(xì)節(jié)網(wǎng)上很多,就不詳細(xì)贅述。
網(wǎng)上可以找到很多更好的倉(cāng)庫(kù),像:阿里、中科大、網(wǎng)易都有相關(guān)的服務(wù)提供。為了以后不會(huì)在出現(xiàn)什么意外,我還是選擇了自建代理,使用了阿里云香港節(jié)點(diǎn)的輕量應(yīng)用服務(wù)器做了代理,寬帶峰值30M,每月1T流量,經(jīng)常會(huì)被限速,體驗(yàn)不怎么好,但好歹不會(huì)突然變化了。急需的同學(xué)倒是可以拿來(lái)應(yīng)急下。
鏡像清單可以通過(guò)kubeadm config images list命令查看到。
k8s.gcr.io/kube-apiserver:v1.17.0
k8s.gcr.io/kube-controller-manager:v1.17.0
k8s.gcr.io/kube-scheduler:v1.17.0
k8s.gcr.io/kube-proxy:v1.17.0
k8s.gcr.io/pause:3.1
k8s.gcr.io/etcd:3.4.3-0
k8s.gcr.io/coredns:1.6.5
kube-apiserver、kube-controller-manager、kube-scheduler、etcd可以在主節(jié)點(diǎn)的/etc/kubernetes/manifests/目錄下找到,yaml配置文件修改保存后立即生效。
coredns、kube-proxy是發(fā)布到Kubernetes集群中的,直接kubectl更新配置。
pause是與kubelet綁定在一起的,修改service配置即可。
Kubernetes中存有名為kubeadm-config的ConfigMap配置信息,需要對(duì)其進(jìn)行更新。
可以使用kubectl edit cm kubeadm-config -n kube-system命令進(jìn)行編輯,修改imageRepository部分,如:imageRepository: gcr.msorg.cn/google_containers
在主節(jié)點(diǎn)的/etc/kubernetes/manifests/目錄中,找到kube-apiserver.yaml文件,修改其中的image部分即可,如:image: gcr.msorg.cn/google_containers/kube-apiserver:v1.17.0
修改之后保存文件立即生效
在主節(jié)點(diǎn)/etc/kubernetes/manifests/目錄中,找到kube-controller-manager.yaml文件,修改其中的image部分即可,如:image: gcr.msorg.cn/google_containers/kube-controller-manager:v1.17.0
修改之后保存文件立即生效
在主節(jié)點(diǎn)/etc/kubernetes/manifests/目錄中,找到kube-scheduler.yaml文件,修改其中的image部分即可,如:image: gcr.msorg.cn/google_containers/kube-scheduler:v1.17.0
修改之后保存文件立即生效
在主節(jié)點(diǎn)/etc/kubernetes/manifests/目錄中,找到etcd.yaml文件,修改其中的image部分即可,如:image: gcr.msorg.cn/google_containers/etcd:3.4.3-0
修改之后保存文件立即生效
coredns被以deployment的方式發(fā)布在Kubernetes集群之上,我們只需要修改其配置即可。
可以使用命令kubectl edit deployment coredns -n kube-system,修改其image部分配置,如:image: gcr.msorg.cn/google_containers/coredns:1.6.5
kube-proxy被以daemonset的方式發(fā)布在Kubernetes集群之上,我們只需要需改其配置即可。
可以使用kubectl edit daemonset kube-proxy -n kube-system命令進(jìn)行編輯,修改其image部分配置,如:image: gcr.msorg.cn/google_containers/kube-proxy:v1.17.0
該鏡像配置被放在每個(gè)節(jié)點(diǎn)上的kubelet啟動(dòng)命令中,可以通過(guò)以下方式確認(rèn)。
使用ps -ef | grep kubelet命令查看當(dāng)前kubelet啟動(dòng)信息
root 26588 1 2 Apr11 ? 06:18:01 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=gcr.msorg.cn/google_containers/pause:3.1
可以看到在啟動(dòng)時(shí)有pod-infra-container-image參數(shù),修改此參數(shù)即可。具體此參數(shù)如何修改,因?yàn)橄到y(tǒng)不同,可能方式也不太一樣,下面以Centos7系統(tǒng)為例,Centos7使用了systemd,演示如何查找該參數(shù)配置位置。
第一步:kubeadm已經(jīng)將kubelet已經(jīng)被安裝為service了,可以使用service kubelet status查看當(dāng)前service信息。
kubelet.service - kubelet: The Kubernetes Node Agent
Loaded: loaded (/usr/lib/systemd/system/kubelet.service; enabled; vendor preset: disabled)
Drop-In: /usr/lib/systemd/system/kubelet.service.d
└─10-kubeadm.conf
Active: active (running) since Sat 2020-04-11 17:27:03 CST; 1 weeks 1 days ago
Docs: https://kubernetes.io/docs/
Main PID: 26588 (kubelet)
Tasks: 35
Memory: 196.4M
CGroup: /system.slice/kubelet.service
└─26588 /usr/bin/kubelet --bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf --config=/var/lib/kubelet/config.yaml --cgroup-driver=systemd --network-plugin=cni --pod-infra-...
從以上信息中我們可以看到當(dāng)前使用的service配置文件為/usr/lib/systemd/system/kubelet.service,并且加載了10-kubeadm.conf
第二步:查看service配置
使用cat /usr/lib/systemd/system/kubelet.service進(jìn)行查看
[Unit]
Description=kubelet: The Kubernetes Node Agent
Documentation=https://kubernetes.io/docs/
[Service]
ExecStart=/usr/bin/kubelet
Restart=always
StartLimitInterval=0
RestartSec=10
[Install]
WantedBy=multi-user.target
發(fā)現(xiàn)其中并沒(méi)有什么特別的,進(jìn)一步查看10-kubeadm.conf,至于這個(gè)文件呢,在/usr/lib/systemd/system/kubelet.service.d路徑下,或者使用find命令進(jìn)行查找即可。
[Service]
Environment="KUBELET_KUBECONFIG_ARGS=--bootstrap-kubeconfig=/etc/kubernetes/bootstrap-kubelet.conf --kubeconfig=/etc/kubernetes/kubelet.conf"
Environment="KUBELET_CONFIG_ARGS=--config=/var/lib/kubelet/config.yaml"
# This is a file that "kubeadm init" and "kubeadm join" generates at runtime, populating the KUBELET_KUBEADM_ARGS variable dynamically
EnvironmentFile=-/var/lib/kubelet/kubeadm-flags.env
# This is a file that the user can use for overrides of the kubelet args as a last resort. Preferably, the user should use
# the .NodeRegistration.KubeletExtraArgs object in the configuration files instead. KUBELET_EXTRA_ARGS should be sourced from this file.
EnvironmentFile=-/etc/sysconfig/kubelet
ExecStart=
ExecStart=/usr/bin/kubelet $KUBELET_KUBECONFIG_ARGS $KUBELET_CONFIG_ARGS $KUBELET_KUBEADM_ARGS $KUBELET_EXTRA_ARGS
從此文件中我們可以找到/var/lib/kubelet/kubeadm-flags.env文件是在kubeadm init與kubeadm join時(shí)產(chǎn)生的。基本可以確定下一步的目標(biāo)了。
第三步:查看/var/lib/kubelet/kubeadm-flags.env文件
使用cat /var/lib/kubelet/kubeadm-flags.env查看該文件
KUBELET_KUBEADM_ARGS="--cgroup-driver=systemd --network-plugin=cni --pod-infra-container-image=gcr.msorg.cn/google_containers/pause:3.1"
我們會(huì)發(fā)現(xiàn)需要的內(nèi)容真的在里面,這時(shí)候只需要改了pod-infra-container-image這個(gè)參數(shù)為我們所需要的,重新啟動(dòng)kubelet即可,每個(gè)node節(jié)點(diǎn)都需要手動(dòng)修改。
至此所有操作就已經(jīng)完成了,當(dāng)然了,此方式比較野路子。哪位大神有官方相關(guān)材料,可以告訴小弟的。
者:NSS
翻譯:楊金鴻
術(shù)語(yǔ)校對(duì):韓海疇
全文校對(duì):林亦霖
本文約3000字,建議閱讀7分鐘。
本文為帶大家了解R語(yǔ)言以及分段式的步驟教程!
人們學(xué)習(xí)R語(yǔ)言時(shí)普遍存在缺乏系統(tǒng)學(xué)習(xí)方法的問(wèn)題。學(xué)習(xí)者不知道從哪開(kāi)始,如何進(jìn)行,選擇什么學(xué)習(xí)資源。雖然網(wǎng)絡(luò)上有許多不錯(cuò)的免費(fèi)學(xué)習(xí)資源,然而它們多過(guò)了頭,反而會(huì)讓人挑花了眼。
為了構(gòu)建R語(yǔ)言學(xué)習(xí)方法,我們?cè)赩idhya和DataCamp中選一組綜合資源,幫您從頭學(xué)習(xí)R語(yǔ)言。這套學(xué)習(xí)方法對(duì)于數(shù)據(jù)科學(xué)或R語(yǔ)言的初學(xué)者會(huì)很有用;如果讀者是R語(yǔ)言的老用戶,則會(huì)由本文了解這門語(yǔ)言的部分最新成果。
R語(yǔ)言學(xué)習(xí)方法會(huì)幫助您快速、高效學(xué)習(xí)R語(yǔ)言。
前言
在開(kāi)始學(xué)習(xí)之前,第一個(gè)要回答的問(wèn)題是:為什么要用R語(yǔ)言?或者R語(yǔ)言為何如此有用?
R語(yǔ)言是一門快速發(fā)展的開(kāi)源軟件,是SAS、STATA和SPSS這類商業(yè)軟件的競(jìng)爭(zhēng)對(duì)手。就業(yè)市場(chǎng)對(duì)R語(yǔ)言的需求正在迅速上升,微軟等公司也同時(shí)承諾將致力讓R語(yǔ)言成為數(shù)據(jù)科學(xué)通用語(yǔ)言。
看看由Revolution Analytics制作的90秒視頻(https://www.youtube.com/watch?v=VlJnNSeO1uQ),您就知道R語(yǔ)言的用處。順便說(shuō)下,微軟剛剛收購(gòu)了Revolution Analytics。
步驟一:配置計(jì)算機(jī)環(huán)境
建立R語(yǔ)言學(xué)習(xí)環(huán)境最簡(jiǎn)單方法是通過(guò)綜合R語(yǔ)言歸檔網(wǎng)絡(luò)(CRAN)下載(https://cran.r-project.org/)到您的本地計(jì)算機(jī)上。可以選擇Linux、Mac和Windows對(duì)應(yīng)二進(jìn)制文件下載。
您可能會(huì)考慮使用R語(yǔ)言自帶的控制臺(tái),但我們建議您安裝R語(yǔ)言集成開(kāi)發(fā)環(huán)境(IDE)。RStudio(https://www.rstudio.com/)是最有名的IDE,它能讓R語(yǔ)言編碼更容易、更快,還能讓您輸入多行代碼、處理圖形、安裝和維護(hù)程序,有效引導(dǎo)您的編程環(huán)境。RStudio此外可以選用基于eclipse的Architect(http://www.openanalytics.eu/architect)。如果需要安裝圖形用戶界面(GUI),請(qǐng)選擇R-commander(http://www.rcommander.com/)或Deducer(http://www.deducer.org/pmwiki/index.php?n=Main.WindowsInstallation)。
課后作業(yè)
安裝R和RStudio。
安裝Rcmdr、rattle和Deducer程序包。以及推薦或依賴的程序包,包括GUI。
使用庫(kù)命令加載安裝程序,并打開(kāi)GUI。
步驟二:R語(yǔ)言基礎(chǔ)學(xué)習(xí)
您應(yīng)該首先了解語(yǔ)言、庫(kù)和數(shù)據(jù)結(jié)構(gòu)基礎(chǔ)知識(shí)。
如果您更傾向于在線交流方式學(xué)習(xí)R語(yǔ)法,DataCamp(https://www.datacamp.com/courses/free-introduction-to-r)提供的免費(fèi)在線R教程是很好的資源。還可以選擇后續(xù)課程:中級(jí)R編程(https://www.datacamp.com/courses/intermediate-r)。另一種學(xué)習(xí)方法是在線版本swirl(https://www.datacamp.com/swirl-r-tutorial),它能讓您在類似RStudio環(huán)境中學(xué)習(xí)R語(yǔ)言。
在互動(dòng)學(xué)習(xí)環(huán)境中,您可以選擇參加Coursera(https://www.coursera.org/specializations/jhu-data-science)或Edx(https://www.edx.org/course/introduction-r-programming-microsoft-dat204x-0)上mooc課程。
除了上述在線資源,您還可以考慮以下優(yōu)秀資源:
CRAN免費(fèi)教學(xué)R語(yǔ)言(https://cran.r-project.org/doc/manuals/R-intro.pdf)。
Jared Lander’s R for Everyone(http://www.jaredlander.com/r-for-everyone/)
Quick-R(http://statmethods.net/)
專門學(xué)習(xí):閱讀、數(shù)據(jù)幀、表、概述、描述、加載和安裝包、使用繪圖命令可視化數(shù)據(jù)。
課后作業(yè)
使用DataCamp免費(fèi)在線R教程,熟悉基本的R語(yǔ)法。
創(chuàng)建Github(http://github.com/)賬號(hào)。
通過(guò)google幫助,解決安裝過(guò)程中出現(xiàn)的問(wèn)題。
安裝swirl包并學(xué)習(xí)R編程(見(jiàn)上文)。
步驟三:了解R社
強(qiáng)大社區(qū)的存在是R語(yǔ)言發(fā)展迅速、大獲成功的主要原因。社區(qū)中核心的是R語(yǔ)言的“包”生態(tài)系統(tǒng)。R語(yǔ)言程序包可以在CRAN、bioconductor、github和bitbucket中下載。在Rdocumentation(http://www.rdocumentation.org/)中,您可以輕松搜索來(lái)自CRAN、github和bioconductor中能滿足您當(dāng)前工作需要的程序包。與在R語(yǔ)言程序包生態(tài)系統(tǒng)同樣重要的是,您可以在R endeavours上輕松獲得幫助與反饋。首先,R內(nèi)置幫助系統(tǒng),您可以通過(guò)命令來(lái)訪問(wèn)。同時(shí),在Analytics Vidhya Discussions,Stack OverflowR語(yǔ)言是增長(zhǎng)最快語(yǔ)言。R-bloggers(http://www.r-bloggers.com/)匯集許多R語(yǔ)言愛(ài)好者寫(xiě)的博文。
課后作業(yè):
訪問(wèn)CranTask Views了解R語(yǔ)言生態(tài)系統(tǒng)。
在http://r-bloggers.com上注冊(cè)并訂閱每日新聞。
步驟四:數(shù)據(jù)導(dǎo)入和操作
導(dǎo)入和操作數(shù)據(jù)是數(shù)據(jù)科學(xué)工作流程中重要步驟。R語(yǔ)言允許使用特定包導(dǎo)入不同數(shù)據(jù)格式,從而使您工作更輕松,如下:
readr:導(dǎo)入平面文件。
Readxl package:將excel文件轉(zhuǎn)化為R語(yǔ)言。
haven package包:讓您將SAS、STATA和SPSS數(shù)據(jù)文件導(dǎo)入R語(yǔ)言。
Databases:連接通過(guò)像RMySQL和RpostgreSQL包,使用DBI訪問(wèn)和操作。
rvest: 網(wǎng)頁(yè)數(shù)據(jù)抓取。
一旦數(shù)據(jù)在工作環(huán)境中可用,您就可以使用下面程序包操作:
整理數(shù)據(jù)的tidyr程序包。
stringr包處理字符串操作。
對(duì)象數(shù)據(jù)幀,可以學(xué)習(xí)dplyr包輸入和輸出(https://www.datacamp.com/courses/dplyr-data-manipulation)。
需要執(zhí)行繁重?cái)?shù)據(jù)爭(zhēng)用任務(wù)?試試data.table程序包。
執(zhí)行時(shí)間序列分析?嘗試一下像zoo,xts和quantmod程序包。
課后作業(yè)
通過(guò)“導(dǎo)入數(shù)據(jù)進(jìn)入R語(yǔ)言”課程,或閱讀文章1、2、3、4。掌握導(dǎo)入數(shù)據(jù)軟件包。
通過(guò)RStudio觀看Data Wrangling with R 。(https://www.rstudio.com/resources/webinars/data-wrangling-with-r-and-rstudio/)
閱讀并練習(xí)如何使用dplyr、tidyr和data.table程序包。
步驟五:有效數(shù)據(jù)可視化
自己創(chuàng)建數(shù)據(jù)可視化作品是一件很自豪的事情。然而,數(shù)據(jù)可視化既是一項(xiàng)技能,也是一門藝術(shù)。許多學(xué)者閱讀Edward Tufte 的“可視化定量數(shù)據(jù)”原理,或者StephenFew的 “pitfalls on dashboard design”。也可以閱讀NathanYau在FlowingData 寫(xiě)的博文,來(lái)獲得創(chuàng)建R語(yǔ)言可視化靈感。
1. 平面圖無(wú)處不在
R語(yǔ)言提供了多種創(chuàng)建圖形方法,使用原理圖創(chuàng)建圖形是標(biāo)準(zhǔn)的方法。然而,有一些好的工具(或包)使用更簡(jiǎn)單的方式來(lái)創(chuàng)建,查看圖形。
在R語(yǔ)言中學(xué)習(xí)基本圖形語(yǔ)法是數(shù)據(jù)可視化中一種實(shí)用方法。
在R語(yǔ)言中g(shù)gplot是數(shù)據(jù)可視化中最重要的包,并且很受歡迎,網(wǎng)上有很多它的學(xué)習(xí)資源,比如在線ggplot2教程,cheatsheet ,和以及一本由哈德利韋翰編寫(xiě)的教學(xué)書(shū)。
ggvis程序包允許您使用基本圖形語(yǔ)法創(chuàng)建交互式web圖形(參見(jiàn)教程)。
您知道Hans Rosling ted課程嗎?教您如何的用googleVis(一個(gè)帶有谷歌圖表接口)來(lái)重建圖表。
如果您遇到了繪制數(shù)據(jù)的問(wèn)題,這篇文章會(huì)對(duì)您有所幫助。在這個(gè)CRAN任務(wù)視圖中可以查看到更多的可視化資源。或者查看R語(yǔ)言數(shù)據(jù)可視化指南。
2. 地圖無(wú)處不在
您對(duì)分析空間可視化數(shù)據(jù)感興趣嗎?學(xué)習(xí)本教程:介紹R語(yǔ)言空間數(shù)據(jù),您會(huì)輕松地使用這些包。
源自Google maps和ggmap開(kāi)放街道的靜態(tài)圖片,可用來(lái)創(chuàng)建可視化空間數(shù)據(jù)和模型。
Ari Lamstein’s中的choroplethr程序包。
tmap 程序包
3. HTML插件
HTML插件是R語(yǔ)言可視化產(chǎn)品中非常有前景的插件,您可以用簡(jiǎn)單的方式創(chuàng)建交互式web可視化(參見(jiàn)RStudio教程),掌握這種可視化方法將會(huì)成為R語(yǔ)言學(xué)習(xí)中必備技能。其帶來(lái)的視覺(jué)效果會(huì)給您朋友和同事留下深刻印象。
leaflet創(chuàng)建動(dòng)態(tài)圖片。
使用dygraphs生成時(shí)間序列數(shù)據(jù)圖表。
互動(dòng)表(datatable)。
DiagrammeR創(chuàng)建圖和流程圖。
MetricsGraphics創(chuàng)建散點(diǎn)圖、線圖和直方圖。
課后作業(yè)
理解基本圖形語(yǔ)法原理。
學(xué)習(xí)ggplot2教程。
使用RStudio環(huán)境學(xué)習(xí)html插件。
步驟六:數(shù)據(jù)挖掘、機(jī)器學(xué)習(xí)
對(duì)于新的統(tǒng)計(jì)數(shù)據(jù)學(xué)習(xí)方法,我們推薦下列資源:
Andrew Conway’s課程:R語(yǔ)言統(tǒng)計(jì)數(shù)據(jù)簡(jiǎn)介。
杜克大學(xué)數(shù)據(jù)分析和統(tǒng)計(jì)推斷。
R語(yǔ)言實(shí)用數(shù)據(jù)科學(xué)。
約翰霍普金斯大學(xué)數(shù)據(jù)科學(xué)專業(yè)課程。
R語(yǔ)言數(shù)據(jù)科學(xué)使用指南。
如果您想提高機(jī)器學(xué)習(xí)能力,可以考慮從以下教程開(kāi)始學(xué)習(xí):
機(jī)器學(xué)習(xí)算法要點(diǎn)。
自行車共享大賽--一套R(shí)語(yǔ)言完整解決方案。
Kaggle上的機(jī)器學(xué)習(xí)課程。
掌握機(jī)器學(xué)習(xí)。
介紹機(jī)器學(xué)習(xí)。
確保在相關(guān)的CRAN任務(wù)視圖中查看到R語(yǔ)言可用的機(jī)器學(xué)習(xí)資源。
課后作業(yè)
從統(tǒng)計(jì)學(xué)課程開(kāi)始入門。
學(xué)習(xí)Kaggle上免費(fèi)機(jī)器學(xué)習(xí)課程。
看Rattle中的一些R語(yǔ)言數(shù)據(jù)挖掘書(shū)。
可以從這本小冊(cè)子上學(xué)習(xí)時(shí)間序列——A Little Book for Time Series in R .
步驟七:報(bào)告結(jié)果
與數(shù)據(jù)科學(xué)愛(ài)好者交流成果,分享見(jiàn)解是一件很重要的事情。幸運(yùn)的是,R語(yǔ)言針對(duì)這個(gè)問(wèn)題有一些非常實(shí)用工具。
第一個(gè)工具是R Markdown,采用knitr和pandoc復(fù)制方式生成您的數(shù)據(jù)分析結(jié)果報(bào)告。使用R markdown工具,R語(yǔ)言最終生成文檔,替換R語(yǔ)言代碼。文檔可以是html、word、pfd、ioslides等格式。您可以通過(guò)本教程學(xué)到更多知識(shí)并使用cheatsheet作為參考資料。
第二個(gè)工具是ReporteRs,它是個(gè)創(chuàng)建Microsoft(Worddocx和Powerpoint pptx)和html R語(yǔ)言文檔程序包,并可以在Windows、Linux、Unix和Mac OS系統(tǒng)上運(yùn)行。像R Markdown工具一樣自動(dòng)生成R語(yǔ)言報(bào)告,點(diǎn)擊這里我們來(lái)看看如何操作。
第三個(gè)是Shiny,目前R語(yǔ)言中最令人興奮的工具。使R語(yǔ)言構(gòu)建交互式web應(yīng)用程序變得非常容易。您可以把分析報(bào)告轉(zhuǎn)換為交互式web應(yīng)用程序,您不需要了解HTML、CSS或Javascript相關(guān)知識(shí)。如果您想要學(xué)習(xí)Shiny ,請(qǐng)點(diǎn)擊RStudio learning portal。
課后作業(yè)
使用RMarkdown或ReporteRs創(chuàng)建第一個(gè)交互式報(bào)告。
嘗試構(gòu)建一個(gè)Shiny應(yīng)用。
練習(xí)
只有通過(guò)大量練習(xí)才能成為優(yōu)秀R語(yǔ)言程序員。因此,要定期解決數(shù)據(jù)科學(xué)中的問(wèn)題。我們的建議是趕緊開(kāi)始與Kaggle上的數(shù)據(jù)科學(xué)家交流。
在解決問(wèn)題中測(cè)試自己的R語(yǔ)言水平--練習(xí)中的問(wèn)題。
步驟八:時(shí)間序列分析
R語(yǔ)言有一個(gè)用于專屬任務(wù)視圖時(shí)間序列。如果你想在R語(yǔ)言中做一些時(shí)間序列分析,這將是您開(kāi)始的地方。您很快會(huì)發(fā)現(xiàn)工具的強(qiáng)大。
想要從在線資源中掌握時(shí)間序列分析是件不容易的事情。好的切入點(diǎn)是一本關(guān)于時(shí)間序列的書(shū)或者選擇《原理與實(shí)踐》這本書(shū)。在程序包方面,您需要熟悉Zoo與xts程序包。Zoo為您提供了常用的保存時(shí)間序列對(duì)象格式,而xts供了操作時(shí)間序列的數(shù)據(jù)集工具。
輔助資源: 時(shí)間序列綜合教程。
課后作業(yè)
選擇上述列出的時(shí)間系列教程,開(kāi)始您的分析。
使用quantmod或quandl程序軟件包下載財(cái)務(wù)數(shù)據(jù),開(kāi)始您的時(shí)間序列分析。
使用諸如dygraphs的程序包創(chuàng)建您的可視化時(shí)間序列數(shù)據(jù)和分析。
文本挖掘一個(gè)重要工具
學(xué)習(xí)文本挖掘,您可以從edge課程中學(xué)習(xí)。雖然課程已經(jīng)結(jié)束,但是您仍然可以訪問(wèn)這些課程。
練習(xí)
文本挖掘競(jìng)賽--一套R(shí)語(yǔ)言的完整解決方案。
步驟九:成為R語(yǔ)言大師
現(xiàn)在您已經(jīng)掌握了大部分R語(yǔ)言數(shù)據(jù)分析,是時(shí)候給出一些高級(jí)課程資源了。您很可能已經(jīng)知道其中的一些內(nèi)容,但不妨看看這些教程。
Hadley Wickham的高級(jí)R語(yǔ)言教程。
在Hadoop、MongoDB或NoSQL中使用R語(yǔ)言。
微軟的RevoScaleR 程序包
原文鏈接:
https://www.analyticsvidhya.com/learning-paths-data-science-business-analytics-business-intelligence-big-data/learning-path-r-data-science/
楊金鴻,北京護(hù)航科技有限公司員工,在業(yè)余時(shí)間喜歡翻譯一些技術(shù)文檔。喜歡閱讀有關(guān)數(shù)據(jù)挖掘、數(shù)據(jù)庫(kù)之類的書(shū),學(xué)習(xí)java語(yǔ)言編程等,希望能在數(shù)據(jù)派平臺(tái)上熟識(shí)更多愛(ài)好相同的伙伴,今后能在數(shù)據(jù)科學(xué)的道路上走的更遠(yuǎn),飛的更遠(yuǎn)。
在,我們已經(jīng)充分了解了 HTTP 和 Socket 的關(guān)系,也了解了 HTTP 報(bào)文的格式,為了讓小伙伴能夠加深對(duì)這兩個(gè)概念的理解,本文我們來(lái)看看如何利用 Socket 模擬 HTTP 請(qǐng)求。如果小伙伴們對(duì) HTTP 和 Socket 的關(guān)系、HTTP 報(bào)文格式尚不熟悉的話,可以參考前面的文章 Http 和 Socket 到底是哪門子親戚?。
由于 HTTP 是基于 TCP 協(xié)議的應(yīng)用層協(xié)議,因此我們可以用更為底層的方式來(lái)訪問(wèn) HTTP 服務(wù),即直接使用 Socket 完成 HTTP 的請(qǐng)求和響應(yīng)。我們前面說(shuō)過(guò),HTTP 的任務(wù)就是完成數(shù)據(jù)的包裝, Socket 提供了網(wǎng)絡(luò)的傳輸能力,所以我們只需要按照 HTTP 報(bào)文的格式來(lái)組裝數(shù)據(jù),然后利用 Socket 將數(shù)據(jù)發(fā)送出去,就能得到回應(yīng)。
假設(shè)我現(xiàn)在有一個(gè)數(shù)據(jù)接口 http://localhost/hello,該接口每次接收一個(gè)參數(shù) name ,調(diào)用成功之后返回給用戶一個(gè) hello:name 字符串,那我們用 Socket 來(lái)實(shí)現(xiàn)這樣一個(gè) HTTP 請(qǐng)求。
首先,我們要先組裝出 HTTP 的請(qǐng)求頭,如下(如果小伙伴對(duì)下面這個(gè)請(qǐng)求頭有疑問(wèn),請(qǐng)復(fù)習(xí) Http 和 Socket 到底是哪門子親戚?一文):
POST /hello HTTP/1.1
Accept:text/html
Accept-Language:zh-cn
Host:localhost
name=張三
我這里為了簡(jiǎn)單,只添加了三個(gè)請(qǐng)求頭,然后我們通過(guò) Socket 將上面這個(gè)字符串發(fā)送出去:
Socket socket = new Socket(InetAddress.getByName("localhost"), 80);
OutputStream os = socket.getOutputStream();
String data = "name=張三";
int dataLen = data.getBytes().length;
String contentType = "Content-Length:" + dataLen+"\r\n";
os.write("POST /hello HTTP/1.1\r\n".getBytes());
os.write("Accept:text/html\r\n".getBytes());
os.write("Accept-Language:zh-cn\r\n".getBytes());
os.write(contentType.getBytes());
os.write("Host:localhost\r\n".getBytes());
os.write("\r\n".getBytes());
os.write(data.getBytes());
os.write("\r\n".getBytes());
os.flush();
我在 Serlvet 中接收這個(gè)請(qǐng)求并作簡(jiǎn)單處理,如下:
BufferedReader br = new BufferedReader(new InputStreamReader(req.getInputStream(),"UTF-8"));
StringBuffer sb = new StringBuffer();
String str;
while ((str = br.readLine()) != null) {
sb.append(str).append("\r\n");
}
System.out.println("sb:"+sb.toString());
resp.setContentType("text/html;charset=utf-8");
PrintWriter out = resp.getWriter();
out.write(sb.toString());
out.flush();
out.close();
然后通過(guò) Socket 中的輸入流我就能拿到響應(yīng)結(jié)果,如下:
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
StringBuffer sb = new StringBuffer();
String str;
while ((str = br.readLine()) != null) {
sb.append(str).append("\r\n");
}
System.out.println(sb.toString());
響應(yīng)結(jié)果如下:
HTTP/1.1 200
Content-Type: text/html;charset=utf-8
Transfer-Encoding: chunked
Date: Sun, 03 Dec 2017 10:46:52 GMT
name=張三
這是一個(gè)簡(jiǎn)單的通過(guò) POST 請(qǐng)求下載文本的案例。接下來(lái)我們?cè)賮?lái)一個(gè) GET 請(qǐng)求下載圖片的案例,來(lái)加深對(duì) Socket 的理解。
這個(gè)實(shí)際上也不難,但是要實(shí)現(xiàn)圖片的下載需要我們首先熟悉HTTP響應(yīng)的數(shù)據(jù)格式,不熟悉的小伙伴可以閱讀 Http 和 Socket 到底是哪門子親戚?一文。
下載圖片,響應(yīng)頭是文本文件,響應(yīng)數(shù)據(jù)是二進(jìn)制文件,我們要想辦法通過(guò)空行將這兩塊數(shù)據(jù)分開(kāi),分別處理。為了解決這個(gè)問(wèn)題,我首先提供一個(gè)工具類,這個(gè)工具類用來(lái)實(shí)現(xiàn)一行一行的解析字節(jié)流,如下:
public class BufferedLineInputStream {
private InputStream is;
public BufferedLineInputStream(InputStream is) {
this.is = is;
}
/**
* @param buf 將數(shù)據(jù)讀入到byte數(shù)組中
* @param offset 數(shù)組偏移量
* @param len 數(shù)組長(zhǎng)度
* @return 返回值表示讀取到的數(shù)據(jù)長(zhǎng)度 -1表示數(shù)據(jù)讀取完畢,0表示其他異常情況
*/
public int readLine(byte[] buf, int offset, int len) throws IOException {
if (len < 1) {
return 0;
}
//count用來(lái)統(tǒng)計(jì)已經(jīng)向數(shù)組中存儲(chǔ)了多少數(shù)據(jù)
int count = 0, c;
while ((c = is.read()) != -1) {
buf[offset++] = (byte) c;
count++;
//如果一行已經(jīng)讀完或者數(shù)組已滿
if (c == '\n' || count == len) {
break;
}
}
return count > 0 ? count : -1;
}
}
然后將響應(yīng)中的頭信息和圖片分別保存在不同的文件中,數(shù)據(jù)解析的核心思路就是一行一行讀取響應(yīng)數(shù)據(jù),當(dāng)遇到 \r\n 表示頭信息已經(jīng)讀取完了,要開(kāi)始讀取二進(jìn)制數(shù)據(jù)了,二進(jìn)制數(shù)據(jù)讀取到之后,將之保存成圖片即可。核心代碼如下:
fos = new FileOutputStream("E:\333.png");
pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream("E:\222.txt")));
socket = new Socket(InetAddress.getByName("localhost"), 80);
OutputStream out = socket.getOutputStream();
out.write("GET /1.png HTTP/1.1\r\n".getBytes());
out.write("Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n".getBytes());
out.write("Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3\r\n".getBytes());
out.write("Host:localhost\r\n".getBytes());
out.write("\r\n".getBytes());
BufferedLineInputStream blis = new BufferedLineInputStream(socket.getInputStream());
int len;
byte[] buf = new byte[1024];
while ((len = blis.readLine(buf, 0, buf.length)) != -1) {
String s = new String(buf, 0, len);
System.out.println(s);
if (s.equals("\r\n")) {//表示頭信息讀取完畢
break;
}
}
//開(kāi)始解析二進(jìn)制的圖片數(shù)據(jù)
while ((len = blis.readLine(buf, 0, buf.length)) != -1) {
fos.write(buf, 0, len);
}
OK,Socket 模擬 HTTP 請(qǐng)求我們就先說(shuō)到這里,兩個(gè)案例,希望能夠加深小伙伴對(duì) Socket 和 HTTP 的理解。
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。