日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

当当网 R 语言学习资料统计分析

發(fā)布時(shí)間:2024/3/7 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 当当网 R 语言学习资料统计分析 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

當(dāng)當(dāng)網(wǎng) R 語(yǔ)言學(xué)習(xí)資料統(tǒng)計(jì)分析

  • 一、網(wǎng)絡(luò)數(shù)據(jù)的抓取
  • 二、數(shù)據(jù)清洗與保存
    • (一)工作目錄的修改
    • (二)導(dǎo)入數(shù)據(jù)并修改列名
      • 1. 交互式編輯器
      • 2. names()函數(shù)
      • 3. rename()函數(shù)
    • (三)數(shù)據(jù)的處理和數(shù)據(jù)類型的轉(zhuǎn)化
      • 1. 書名的提取
      • 2. 價(jià)格中刪去“¥”并轉(zhuǎn)化數(shù)據(jù)類型
      • 3. 折扣和評(píng)論數(shù)轉(zhuǎn)為數(shù)值型
      • 4. 出版時(shí)間的轉(zhuǎn)化和判斷
    • (四)缺失值的處理
      • 1. 滿減和折扣
      • 2. 出版時(shí)間數(shù)據(jù)缺失
      • 3. 出版社的缺失
    • (五)結(jié)果的保存
  • 三、數(shù)據(jù)分析
    • (一)出版社數(shù)據(jù)
    • (二)日期時(shí)間的比較
    • (三)分析評(píng)論數(shù)
    • (四)基本作圖與數(shù)據(jù)統(tǒng)計(jì)
    • (五)根據(jù)價(jià)格,標(biāo)簽,評(píng)論數(shù)對(duì)書籍打分
  • 四、分析總結(jié)
  • 五、完整代碼

一、網(wǎng)絡(luò)數(shù)據(jù)的抓取

數(shù)據(jù)通過數(shù)據(jù)抓取軟件八爪魚進(jìn)行抓取,進(jìn)入當(dāng)當(dāng)網(wǎng)頁(yè)面,頁(yè)面中搜索“R語(yǔ)言”,將目標(biāo)網(wǎng)址導(dǎo)入八爪魚軟件中,經(jīng)過軟件內(nèi)的一系列操作,爬取了 300條與“R 語(yǔ)言”相關(guān)的書籍?dāng)?shù)據(jù),包括但不限于書名,作者,價(jià)格,出版社,折扣信息,評(píng)論數(shù)等數(shù)據(jù),爬取完成后將數(shù)據(jù)保存為 csv 文件,命名為 dangdang.csv,放置在 F 盤根目錄下以備調(diào)用。初始數(shù)據(jù)如下圖所示dangdang.csv

二、數(shù)據(jù)清洗與保存

數(shù)據(jù)爬取完成后,將數(shù)據(jù)導(dǎo)入 R 語(yǔ)言環(huán)境中。

(一)工作目錄的修改

打開 RStudio,首先查看工作目錄,工作目錄是 R 語(yǔ)言運(yùn)行結(jié)果、圖片文件、導(dǎo)出數(shù)據(jù)的默認(rèn)路徑,所以要先對(duì)工作目錄進(jìn)行修改。使用 getwd()來查看工作目錄,使用 setwd()修改工作目錄。

> #查看工作目錄 > getwd() [1] "C:/Users/sea20/Documents" > #更改工作目錄 > setwd("D:/sea20/documents") > getwd() [1] "D:/sea20/documents"

修改完成后再次查看即可發(fā)現(xiàn)工作目錄修改到了"D:/sea20/documents"。

(二)導(dǎo)入數(shù)據(jù)并修改列名

數(shù)據(jù)可以使用 read.table()函數(shù)導(dǎo)入,其中第一個(gè)參數(shù)是目標(biāo)文件,header=T表示導(dǎo)入的數(shù)據(jù)首行包含了變量名,sep 指定文件以“,”分隔,encoding 參數(shù)防止出現(xiàn)中文亂碼的問題。

a <- read.table("F:/dangdang.csv",header = T, sep = ",",encoding = "UTF-8")

使用 head()函數(shù)查看導(dǎo)入數(shù)據(jù)的前面幾行,可以發(fā)現(xiàn)數(shù)據(jù)非常混亂,變量名稱也比較雜亂缺少代表性,數(shù)據(jù)的清洗整理必不可少。

首先是列名的修改,本文提供三種方法,先用 names()查看整體列名

1. 交互式編輯器

通過 fix( )函數(shù)調(diào)用交互式的編輯器,然后單擊變量名,在彈出的對(duì)話框中將其重命名,在對(duì)話框中還可以進(jìn)行數(shù)據(jù)類型的簡(jiǎn)單修改。

2. names()函數(shù)

names()返回列名的向量,可以通過修改向量中的值來修改列名

names(a)[1] <- "書名"

3. rename()函數(shù)

rename()函數(shù)的使用要借助 reshape 包,所有首先要下載 reshape 包,install.packages(“reshape”),下載完成后通過 library(reshape)調(diào)用包,其實(shí)就是在R 語(yǔ)言環(huán)境中將包中包含的函數(shù)整體運(yùn)行一遍,方便之后的使用。

install.packages("reshape") library(reshape) a <- rename(a, c(評(píng)論 = "評(píng)論數(shù)",作者 9 = "出版時(shí)間",作者 11 = "出版社")) names(a)

列名修改完成后再使用 names()查看當(dāng)前的列名。
命令 search()可以查看那些包已加載并可使用。

(三)數(shù)據(jù)的處理和數(shù)據(jù)類型的轉(zhuǎn)化

1. 書名的提取

觀察數(shù)據(jù)可以發(fā)現(xiàn),第一列中書名非常混亂,里面包括書名,書籍簡(jiǎn)介,還有空格作為分隔符號(hào),所以使用 strsplit()函數(shù)對(duì)數(shù)據(jù)進(jìn)行處理,準(zhǔn)確提取出書名。
首先將第一列數(shù)據(jù)賦值給 title,觀察數(shù)據(jù)類型和格式,使用 strsplit()函數(shù)以空格作為分隔符,將 title 分隔成若干小片段,之后使用 for 循環(huán)語(yǔ)句將分割后的小片段提取出第二部分(觀察數(shù)據(jù)發(fā)現(xiàn)第二部分為書名),代碼及結(jié)果如下

title <- a[,1] title abc <- strsplit(title,' ') for (i in 1:300) a[i,1] <- abc[[i]][2]

2. 價(jià)格中刪去“¥”并轉(zhuǎn)化數(shù)據(jù)類型

起初嘗試 sub, gsub 等方法,并沒有好的效果,之后想到 substr()函數(shù),直接提取從第二位開始的值,免去了字符修改的麻煩。轉(zhuǎn)化之后數(shù)據(jù)變成了字符類型,用as.numeric()對(duì)數(shù)據(jù)進(jìn)行強(qiáng)制轉(zhuǎn)化。使用定價(jià)-售價(jià)計(jì)算差值為后面的數(shù)據(jù)分析做準(zhǔn)備。

3. 折扣和評(píng)論數(shù)轉(zhuǎn)為數(shù)值型

數(shù)據(jù)中折扣的是(*.**折),帶有一個(gè)括號(hào)和一個(gè)漢字,可以使用 sub()函數(shù)先后去掉“(”、“折”、“)”,再用 as.numeric()對(duì)數(shù)據(jù)進(jìn)行強(qiáng)制轉(zhuǎn)化。

對(duì)評(píng)論數(shù)的操作也是如此,評(píng)論數(shù)后面多了“條評(píng)論”三個(gè)字符,使用 sub()函數(shù)將其替換為空值,用 as.numeric()對(duì)數(shù)據(jù)進(jìn)行轉(zhuǎn)化即可。

a[,8] <- as.numeric(sub('條評(píng)論','',a[,8]))

4. 出版時(shí)間的轉(zhuǎn)化和判斷

查看爬取的出版時(shí)間數(shù)據(jù),在時(shí)間前面有“/”,使用 gsub()將“/”替換為空值,刪去“/”,之后 as.Date()轉(zhuǎn)化為日期類型。使用 class()查看數(shù)據(jù)格式,在轉(zhuǎn)化完成后再用 class()觀察是否轉(zhuǎn)換成功。
在每個(gè)變量名前都鍵入一次 a$ 很麻煩。函數(shù) attach()可將數(shù)據(jù)框添加到 R 的搜索路徑中。R 在遇到一個(gè)變量名以后,將檢查搜索路徑中的數(shù)據(jù)框,以定位到這個(gè)變量。函數(shù) detach()將數(shù)據(jù)框從搜索路徑中移除。

> attach(a) > class(出版時(shí)間) [1] "character" > adate <- gsub('[/]','',出版時(shí)間) > #轉(zhuǎn)為日期類型 > a$出版時(shí)間 <- as.Date(adate) > class(a[,10]) [1] "Date" > detach(a)

(四)缺失值的處理

1. 滿減和折扣

滿減和折扣兩列有很多缺失值,大部分的數(shù)據(jù)缺失且這部分不太具有統(tǒng)計(jì)價(jià)值,所以將這兩列刪去。首先%in%返回邏輯型變量,使用運(yùn)算符!將邏輯值反轉(zhuǎn),之后 a[ ]將剩余變量保留,即剔除滿減和折扣。

2. 出版時(shí)間數(shù)據(jù)缺失

將沒有出版時(shí)間數(shù)據(jù)的行刪去,使用 is.na()找出缺失值所在的位置,!將邏輯值反轉(zhuǎn),去除邏輯值為 FALSE 的行。

new <- a[!is.na(a$出版時(shí)間),]

3. 出版社的缺失

這種缺失形式是“出版社”三個(gè)字的缺失,需要把“出版社”補(bǔ)充完整,方便數(shù)據(jù)的分析統(tǒng)計(jì)。觀察數(shù)據(jù)發(fā)現(xiàn),缺失的字符串中字符數(shù)量均小于 5,所以使用 nchar()函數(shù)統(tǒng)計(jì)字符數(shù)量,并和 5 作比較,以邏輯變量找出缺失變量的位置。
nchar(a[,9])<5 返回字符數(shù)小于五的邏輯變量,將之作為行標(biāo)在數(shù)據(jù)框中尋找字符的位置:a[nchar(a[,9])<5,9] ,之后選擇使用 paste()函數(shù)連接字符串paste( b[nchar(b[,9])<5,9], “出版社”, sep =‘’),連接后如圖所示結(jié)果
填補(bǔ)完成后將數(shù)據(jù)放回?cái)?shù)據(jù)框,將 paste()生成的值賦值給 a[nchar(a[,9])<5,9],出版社數(shù)據(jù)填補(bǔ)完成。

(五)結(jié)果的保存

剛開始數(shù)據(jù)是以 csv 文件格式保存的,所以在數(shù)據(jù)清洗后,也將數(shù)據(jù)保存為 .csv文件(逗號(hào)分隔符文件),命名為 new_dangdang.csv,保存在工作目錄中。數(shù)據(jù)清洗結(jié)果如下圖所示。

三、數(shù)據(jù)分析

(一)出版社數(shù)據(jù)

對(duì)出版社數(shù)據(jù)進(jìn)行分析,統(tǒng)計(jì)各個(gè)出版社出現(xiàn)的頻數(shù),以詞頻統(tǒng)計(jì),詞云圖的形式,找出出現(xiàn)頻率最高的五家出版社。
詞云圖需要下載 wordcloud2 包,照常使用 install.packages(“wordcloud2”)下載安裝包文件,library(wordcloud2)將包導(dǎo)入,publish <- table(b$出版社)做出出版社的統(tǒng)計(jì)表并賦值給 publish,之后就可以利用 publish 畫詞云圖,詞頻排序統(tǒng)計(jì),柱狀圖等等。詞頻統(tǒng)計(jì)中加入 decreasing = T 表示按照降序排列。

install.packages("wordcloud2") library(wordcloud2) publish <- table(b$出版社) wordcloud2(publish, size=0.4,fontFamily = "微軟雅黑",color="random-light", shuffle = TRUE) sort(publish, decreasing = T)


詞頻統(tǒng)計(jì)與詞云圖相比,詞云圖剔除了復(fù)雜的文本信息,使用字號(hào)的大小來展示出現(xiàn)頻率,更加直觀同時(shí)也是結(jié)果顯示更加突出。從圖中即可看出,出現(xiàn)頻率最高的五家出版社分別是人民郵電出版社、機(jī)械工業(yè)出版社、清華大學(xué)出版社、電子工業(yè)出版社和北京大學(xué)出版社。由出版社的統(tǒng)計(jì)分析也可以更加確定人民郵電出版社的 R 語(yǔ)言學(xué)習(xí)參考更受消費(fèi)者喜愛。

(二)日期時(shí)間的比較

在研究出版時(shí)間前要先把時(shí)間值轉(zhuǎn)化為 date 類型,將當(dāng)前的日期使用函數(shù)Sys.Date()提取出來,然后將當(dāng)前時(shí)間與出版時(shí)間做差就能得出出版時(shí)間的時(shí)間差,除此之外,也可以使用 difftime(now , b[,8] , units=“days”)來提取,units 參數(shù)的值可以為“auto”, “secs”, “mins”, “hours”, “days”, “weeks”,單位選擇上更靈活。用 max()函數(shù)也可以看出最早的一本書距離現(xiàn)在的時(shí)間,在函數(shù)中加入 na.rm = T可以剔除缺失值的影響。

b$出版時(shí)間 <- as.Date(b[,8]) now <-Sys.Date() 10 days <- now-b[,8] weeks <- difftime(now , b[,8] , units="weeks") max(days,na.rm = T)

(三)分析評(píng)論數(shù)

使用 comment <- subset(b,評(píng)論數(shù)>0,select=c(書名,評(píng)論數(shù))) 將書名和評(píng)論數(shù)
所在的列提取出來,要求評(píng)論數(shù)大于 0,之后用 comment[order(-comment$評(píng)論
數(shù)),] 降序排列,結(jié)果如下圖所示
cat()函數(shù)和 min() ,max()函數(shù)提取評(píng)論數(shù)的最大最小值。

> cat("評(píng)論數(shù)的最大值是:",max(comment$評(píng)論數(shù)),'\t') 評(píng)論數(shù)的最大值是: 20065 > cat("評(píng)論數(shù)的最小值是:",min(comment$評(píng)論數(shù)),'\t') 評(píng)論數(shù)的最小值是: 1

(四)基本作圖與數(shù)據(jù)統(tǒng)計(jì)

為了方便多次對(duì)不同數(shù)據(jù)做圖,自編函數(shù) myfunction,滿足畫圖需求,將數(shù)據(jù)和字符導(dǎo)入函數(shù)中,數(shù)據(jù)是畫圖的數(shù)據(jù)來源,字符使用 paste 函數(shù)與圖表名稱連接作為新的名稱,同時(shí)字符也是 Y 軸的標(biāo)簽。

myfunction <- function(x,y){ plot(x,main=paste(y,"散點(diǎn)圖",''),xlab="book",ylab=y) boxplot(x,main=paste(y,"箱線圖",''),ylab=y) } myfunction(b$售價(jià),"售價(jià)") myfunction(b$折扣,'折扣') myfunction(b$評(píng)論數(shù),'評(píng)論數(shù)')

對(duì)數(shù)據(jù)做基本的數(shù)據(jù)統(tǒng)計(jì),統(tǒng)計(jì)得出最大值、最小值、均值、四分位數(shù)。缺失值等數(shù)據(jù)。

(五)根據(jù)價(jià)格,標(biāo)簽,評(píng)論數(shù)對(duì)書籍打分

先將這幾列數(shù)據(jù)提取出來,使用 apply 對(duì)售價(jià)和評(píng)論數(shù)進(jìn)行均值為 0,標(biāo)準(zhǔn)差為 1 的標(biāo)準(zhǔn)化。對(duì)于標(biāo)簽欄,先對(duì)“自營(yíng)”、“包郵”進(jìn)行打分,使用 cbind 連接兩個(gè)數(shù)據(jù)框并刪掉多余的列。attach,detach 上文中已有介紹。合并成一張表后將標(biāo)簽值轉(zhuǎn)化為數(shù)值型,之后按照標(biāo)簽 20%,售價(jià) 30%,評(píng)論 50%進(jìn)行分?jǐn)?shù)加總,售價(jià)前面符號(hào)是減號(hào)。得出結(jié)果后將數(shù)據(jù)連接按照降序排列,排序結(jié)果如下圖所示。

四、分析總結(jié)

通過對(duì)數(shù)據(jù)的清洗,作圖、評(píng)級(jí)等統(tǒng)計(jì)分析,得出在當(dāng)前評(píng)分方式下最值得信賴的幾本圖書。可以根據(jù)此分析作為選擇基礎(chǔ),增加些其他的需求能夠得出相對(duì)較好的圖書選擇,對(duì)圖書資料的選擇購(gòu)買有一定的指導(dǎo)作用。

五、完整代碼

install.packages("reshape") install.packages("wordcloud2") getwd() #查看工作目錄 setwd("D:/sea20/documents") #更改工作目錄 getwd() #導(dǎo)入數(shù)據(jù) 12 a <- read.table("F:/dangdang.csv",header = T,sep = ",",encoding = "UTF-8") head(a) names(a) #變量重命名 fix(a) names(a)[1] <- "書名" search() #顯示哪些包已加載可使用 library(reshape) a <- rename(a,c(評(píng)論 = "評(píng)論數(shù)",作者 9 = "出版時(shí)間",作者 11 = "出版社")) names(a) #書名的提取 title <- a[,1] title abc <- strsplit(title,' ') for (i in 1:300) a[i,1] <- abc[[i]][2] #去掉價(jià)格中的¥ a[,2] <- as.numeric(substr(a[,2],2,10)) a[,3] <- as.numeric(substr(a[,3],2,10)) different <- a$定價(jià)-a$售價(jià) #去掉折扣 zhekou <- a[,4] t1 <- sub('[(]','',zhekou) t2 <- sub('[折]','',t1) t3 <- sub('[)]','',t2) t4 <- substr(t3,2,5) a[,4] <- as.numeric(t4) #評(píng)論數(shù)轉(zhuǎn)數(shù)值型 a[,8] <- as.numeric(sub('條評(píng)論','',a[,8])) #出版時(shí)間 attach(a) class(出版時(shí)間) adate <- gsub('[/]','',出版時(shí)間) a$出版時(shí)間 <- as.Date(adate) class(a[,10]) detach(a) #刪除列,滿減&折扣 b1 <- names(a) %in% c('滿減','搶購(gòu)活動(dòng)') a <- a[!b1] names(a) head(a) #將沒有出版時(shí)間的數(shù)的行刪去 new <- a[!is.na(a$出版時(shí)間),] is.na(a$出版時(shí)間) #出版社的填補(bǔ) 13 a[nchar(a[,9])<5,9] a[nchar(a[,9])<5,9] <-paste(a[nchar(a[,9])<5,9],"出版社",sep ='') write.table(a,"new_dangdang.csv",sep = ",",row.names= F) #文件存儲(chǔ) b <- read.csv("D:/sea20/documents/new_dangdang.csv",header=T,sep = ",") #出版社的分析 library(wordcloud2) publish <- table(b$出版社) wordcloud2(publish,size=0.4,fontFamily = "微軟雅黑",color="random-light",shuffle = TRUE) sort(publish,decreasing = T) #日期時(shí)間的比較 b$出版時(shí)間 <- as.Date(b[,8]) now <-Sys.Date() days <- now-b[,8] weeks <- difftime(now , b[,8] , units="weeks") max(days,na.rm = T) #分析評(píng)論數(shù) comment <- subset(b,評(píng)論數(shù)>0,select=c(書名,評(píng)論數(shù))) sort(comment$評(píng)論數(shù),decreasing =T) cat("評(píng)論數(shù)的最大值是:",max(comment$評(píng)論數(shù)),'\t') cat("評(píng)論數(shù)的最小值是:",min(comment$評(píng)論數(shù)),'\t') comment[order(-comment$評(píng)論數(shù)),] #基本作圖與數(shù)據(jù)統(tǒng)計(jì) myfunction <- function(x,y){ plot(x,main=paste(y,"散點(diǎn)圖",''),xlab="book",ylab=y) boxplot(x,main=paste(y,"箱線圖",''),ylab=y) } myfunction(b$售價(jià),"售價(jià)") myfunction(b$折扣,'折扣') myfunction(b$評(píng)論數(shù),'評(píng)論數(shù)') vars <- c("售價(jià)","折扣","評(píng)論數(shù)") summary(b[vars]) #評(píng)分 attach(b) new <- subset(b,評(píng)論數(shù)>0,select=c(書名,售價(jià),標(biāo)簽,評(píng)論數(shù))) new[,c(2,4)] <- apply(new[,c(2,4)],2,scale) label <- new[,c(1,3)] for (i in 1:102) if (label[i,2]=="自營(yíng)") label[i,2]<- 5 else if(label[i,2]==" 包郵") label[i,2]<- 3 else label[i,2] <-0 total <- cbind(new,label) total <- total[,-c(3,5)] detach(b) attach(total) 14 total[,4] <- scale(as.numeric(標(biāo)簽)) grade <- 標(biāo)簽*0.2+評(píng)論數(shù)*0.5-售價(jià)*0.3 total <- cbind(total,grade) total <- total[order(-grade),] detach(total)

總結(jié)

以上是生活随笔為你收集整理的当当网 R 语言学习资料统计分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。