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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

df python 增加数据_【Note】关于玩转数据处理R语言120题的注解(P1-P50)

發(fā)布時(shí)間:2024/9/30 python 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 df python 增加数据_【Note】关于玩转数据处理R语言120题的注解(P1-P50) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言:

這是關(guān)于張敬信老師@張敬信的專欄R&Python數(shù)據(jù)科學(xué)中的文章:玩轉(zhuǎn)數(shù)據(jù)處理120題(R語言tidyverse版本)的個(gè)人自學(xué)筆記。敬信老師是我本科期間的恩師之一,非常感謝他提供的學(xué)習(xí)資源。
題目和主要代碼均為敬信老師的原文內(nèi)容,除此之外的注解為個(gè)人補(bǔ)充,如有錯(cuò)誤,感激指正。
原來打算把敬信老師的120題在一篇文章中匯總出來,可是第一次在知乎上寫長(zhǎng)文,我發(fā)現(xiàn)在網(wǎng)頁上寫太容易出現(xiàn)亂碼了,時(shí)不時(shí)就一長(zhǎng)串亂碼,真的害怕碼了半天的字就沒了。于是寫到第50題就趕緊保存,然后另起一篇。不知道這是瀏覽器的原因還是知乎自己的原因,希望有人能不吝賜教。

#0(準(zhǔn)備):需要的包

install.packages("tidyverse") install.packages("zoo") install.packages("writexl") library(tidyverse) library(zoo) library(writexl)

#1(創(chuàng)建數(shù)據(jù)):創(chuàng)建數(shù)據(jù)框df

敬信老師:

df = tibble(grammer = c("Python","C","Java","GO", NA,"SQL","PHP","Python"), score = c(1,2,NA,4,5,6,7,10))# 創(chuàng)建數(shù)據(jù)框,包含有g(shù)rammer列,score列,屬性為 a tibble: 8*2

#2(篩選行):提取含有字符串python的行

敬信老師:

df %>%filter(grammer=="Python")# 提取所有g(shù)rammer列為python的行

敬信老師在這里用的是filter函數(shù)(篩選函數(shù)),允許對(duì)數(shù)據(jù)集取子集,第一個(gè)參數(shù)是數(shù)據(jù)框的名字(此處由于通過管道函數(shù)給定數(shù)據(jù)框?yàn)閐f),之后的參數(shù)是用于過濾數(shù)據(jù)框的表達(dá)式。

#3(查看列名):輸出df的所有列名

敬信老師:

names(df)

#4(修改列名):修改第二列列名為popularity

敬信老師:

df = df %>%rename(popularity = score)# 重命名函數(shù)rename()

#5(統(tǒng)計(jì)頻數(shù)):統(tǒng)計(jì)grammer列中每一種編程語言出現(xiàn)的次數(shù)

敬信老師:

df %>%count(grammer)# 計(jì)數(shù)函數(shù)count()

#6(缺失值處理):將空值用上下值的平均值填充

敬信老師:

df = df %>%mutate(popularity = zoo::na.approx(popularity))# na.approx (in zoo package):計(jì)算插值替換NA值

敬信老師在這里用的是mutate函數(shù),關(guān)于mutate函數(shù)補(bǔ)充如下:

# 刪除grammer列的數(shù)據(jù),即將null值賦予列 df %>%mutate(grammer=NULL)

#7(篩選行):提取popularity列中值大于3的行

敬信老師:

df %>%filter(popularity > 3)

#8(數(shù)據(jù)去重):按grammer列進(jìn)行去重

敬信老師:

df %>%distinct(grammer, .keep_all = TRUE)# distinct()過濾多余的重復(fù)記錄只保留一條# .keep_all = TRUE顯示所有的變量, = FALSE只顯示降重列

#9(數(shù)據(jù)計(jì)算):計(jì)算popularity列平均值

敬信老師:

df %>%summarise(popularity_avg = mean(popularity))# summarise()創(chuàng)建新的data frame# 可以實(shí)現(xiàn)分類匯總,見#24

#10(格式轉(zhuǎn)換):將grammer列轉(zhuǎn)換為序列

敬信老師:

df$grammer

#11(數(shù)據(jù)保存):將數(shù)據(jù)框保存為Excel

敬信老師:

writexl::write_xlsx(df, "filename.xlsx")

#12(數(shù)據(jù)查看):查看數(shù)據(jù)的行數(shù)列數(shù)

敬信老師:

dim(df)

#13(篩選行):提取popularity列值大于3小于7的行

敬信老師:

df %>%filter(popularity > 3 & popularity < 7)

#14(調(diào)整列位置):交互兩列的位置

敬信老師:

df %>%select(popularity, grammer)# select()僅保留提到的變量

#15(篩選行):提取popularity列最大值所在的行

敬信老師:

df %>%filter(popularity == max(popularity))

#16(查看數(shù)據(jù)):查看最后幾行數(shù)據(jù)

敬信老師:

tail(df) head(df) # tail默認(rèn)最后6行,head默認(rèn)前6行

#17(修改數(shù)據(jù)):刪除最后一行數(shù)據(jù)

敬信老師:

df %>% slice(-n())# 刪除第n行的數(shù)據(jù),即最后一行的數(shù)據(jù)

敬信老師在這里用的是slice函數(shù),關(guān)于slice函數(shù)補(bǔ)充如下:

# 如果選擇某一特定行數(shù)據(jù),例如選取第三行: df %>% slice(3) # 如果刪去某一特定行數(shù)據(jù),例如刪去第三行: df %>% slice(-3) # 如果選擇特定幾行數(shù)據(jù),例如選取第3-5行: df %>% slice(3:5) # 如果刪去特定幾行數(shù)據(jù),例如刪除第3-5行: df %>% slice(-(3:5))

#18(修改數(shù)據(jù)):添加一行數(shù)據(jù):"Perl", 6

敬信老師:

newrow = tibble(grammer="Perl", popularity=6)# 定義新的newrow,a tibble:1*2 df %>%bind_rows(newrow)# 使用bind_rows(),合并兩個(gè)tibble

#19(數(shù)據(jù)整理):對(duì)數(shù)據(jù)按popularity列值從到大到小排序

敬信老師:

df %>%arrange(desc(popularity))

敬信老師在這里用的是arrange函數(shù)(排序函數(shù)),關(guān)于arrange函數(shù)補(bǔ)充如下:

# 對(duì)數(shù)據(jù)按popularity列值從到小到大排序 df %>%arrange(popularity)

#20(字符統(tǒng)計(jì)):統(tǒng)計(jì)grammer列每個(gè)字符串的長(zhǎng)度

敬信老師:

df %>%mutate(strlen = str_length(grammer)# 使用mutate()函數(shù)對(duì)數(shù)據(jù)進(jìn)行增加列# 定義strlen為新列,賦值為grammer的字符串長(zhǎng)度

Excel數(shù)據(jù):https://pan.baidu.com/s/1-J-wGj1_5-kaByvyhDGOHA 提取碼:42yk

#21(讀取數(shù)據(jù)):讀取本地Excel數(shù)據(jù)

敬信老師:

df = readxl::read_xlsx("21-50數(shù)據(jù).xlsx") # 需要保證數(shù)據(jù)在當(dāng)前路徑,可通過setwd()設(shè)置

#22(查看數(shù)據(jù)):查看df數(shù)據(jù)的前幾行(后幾行)

敬信老師:

head(df) # 查看前幾行 tail(df) # 查看后幾行

#23(數(shù)據(jù)計(jì)算):將salary列數(shù)據(jù)轉(zhuǎn)換為最大值與最小值的平均值

敬信老師:

df = df %>%separate(salary, into = c("low", "high"), sep = "-") # 先將salary列分成兩列l(wèi)ow和high%>% mutate(salary = (parse_number(low) + parse_number(high)) * 1000 / 2)# 將low和high兩列的數(shù)字部分運(yùn)算,賦值給salary# parse_number()指提取變量中的數(shù)字部分%>%select(-c(low, high))# 刪除low和high列# 也可以用#20的mutate函數(shù)刪除列

#24(分組匯總):根據(jù)學(xué)歷分組,并計(jì)算平均薪資

敬信老師:

df %>% group_by(education) # 將數(shù)據(jù)中的education相同取值的數(shù)據(jù)進(jìn)行分組聚類,tiblle屬性包括有Groups: education [4]%>% summarise(salary_avg = mean(salary))# 創(chuàng)建新的數(shù)據(jù)框data frame,包含有g(shù)roup,salary_avg

敬信老師在這里用的是summarise函數(shù)(聚合函數(shù)),關(guān)于summarise函數(shù)補(bǔ)充如下:

# 創(chuàng)建新的數(shù)據(jù)框data frame,命名為salary,包含有g(shù)roup,salary_avg,salary_max,salary_min salary=df %>% group_by(education) %>% summarise(salary_avg = mean(salary),salary_max=max(salary),salary_min=min(salary))

#25(時(shí)間轉(zhuǎn)換):將createTime列轉(zhuǎn)換為"月-日"

敬信老師:

library(lubridate)# 加載lubridate包 df %>% mutate(createTime = str_c(month(createTime), "-", day(createTime)))# 增加列createTime,包含有月份-日期# str_c合并字符串

#26(查看數(shù)據(jù)):查看數(shù)據(jù)結(jié)構(gòu)信息

敬信老師:

df %>% glimpse()# 查看數(shù)據(jù)結(jié)構(gòu)信息 object.size(df)# 查看對(duì)象占用內(nèi)存

#27(查看數(shù)據(jù)):查看數(shù)據(jù)匯總信息

敬信老師:

summary(df)

#28(修改列):新增一列將salary離散化為三水平值

敬信老師:

df = df %>%mutate(class = case_when(salary >= 0 & salary < 5000 ~ "低",salary >= 5000 & salary < 20000 ~ "中", TRUE ~ "高")) # 如果salary的取值在[0,5000),賦值class=低;# 如果salary的取值在[5000,20000),賦值class=中;# 如果salary的取值在[20000,+∞),賦值class=高;# TRUE的效果是其它,等效于salry>=20000

敬信老師在這里用的是case_when函數(shù),允許定義多個(gè)if_else()語句,等效于SQL中CASE WHEN 語句。

#29(數(shù)據(jù)整理):按salary列對(duì)數(shù)據(jù)降序排列

敬信老師:

df %>% arrange(desc(salary))# 同#19

#30(篩選行):提取第33行數(shù)據(jù)

敬信老師:

df[33,] # 提取df數(shù)據(jù)框的第33行,所有列 # 或者 df %>% slice(33)

#31(數(shù)據(jù)計(jì)算):計(jì)算salary列的中位數(shù)

敬信老師:

median(df$salary) # 對(duì)df中的salary列求中位數(shù) # 或者如下 df %>% summarise(salary_med = median(salary))# 創(chuàng)建新的tibble 1*1,將salary列的中位數(shù)賦值給salary_med

#32(數(shù)據(jù)可視化):繪制salary列的頻率分布直方圖

敬信老師:

df %>%ggplot(aes(x = salary)) +geom_histogram(bins = 10)# salary設(shè)定為x軸繪圖,設(shè)定圖形格式為直方圖,分為10組

#33(數(shù)據(jù)可視化):繪制salary的頻率密度曲線圖

敬信老師:

df %>%ggplot(aes(x = salary)) +geom_density()# 同#32,設(shè)定圖形格式為密度曲線

#34(數(shù)據(jù)刪除):刪除列class

敬信老師:

df %>% select(-class) # 選擇class列刪除 # 或者同#6的補(bǔ)充,給class列賦空值即刪去,如下 df %>%mutate(class = NULL)

#35(數(shù)據(jù)操作):將df的第1列與第2列合并為新的一列

敬信老師:

df %>% unite("newcol", 1:2, sep = " ")

敬信老師在這里用的是unite函數(shù),關(guān)于unite函數(shù)的補(bǔ)充如下:

# "newcol"為合并列的新命名,1:2為合并1、2列,sep = " "為合并中間間隔空格 # 合并命名為newcol,1、2、3列,合并列由逗號(hào)區(qū)分,如下 df %>% unite("newcol", 1:2, sep = " ")

#36(數(shù)據(jù)操作):將education列與第salary列合并為新的一列

敬信老師:

df %>% unite("newcol", c(education, salary), sep = " ")# 同#35

#37(數(shù)據(jù)計(jì)算):計(jì)算salary最大值與最小值之差

敬信老師:

max(df$salary) - min(df$salary)

#38(數(shù)據(jù)操作):將第一行與最后一行拼接

敬信老師:

bind_rows(df[1,], df[nrow(df),]) # 第一行df[1,] # 最后一行df[nrow(df),]

#39(數(shù)據(jù)操作):將第8行添加到末尾

敬信老師:

bind_rows(df, df[8,]) #將第八行合并至末尾,同#38 %>% tail()# 顯示末尾行

#40(查看數(shù)據(jù)):查看每一列的數(shù)據(jù)類型

敬信老師:

df %>% glimpse()# 同#26

#41(數(shù)據(jù)操作):將createTime列設(shè)置為行索引

敬信老師:

df %>% distinct(createTime, .keep_all = TRUE) %>% column_to_rownames("createTime")

#42(數(shù)據(jù)創(chuàng)建):生成一個(gè)和df長(zhǎng)度相同的隨機(jī)數(shù)數(shù)據(jù)框

敬信老師:

df1 = tibble(rnums = sample.int(10, nrow(df), replace = TRUE)) df1 # 創(chuàng)建這樣的一個(gè)tibble數(shù)據(jù)框,將隨機(jī)數(shù)賦值給irnums,要求為:數(shù)據(jù)為10以內(nèi)正整數(shù),數(shù)量同df,可以重復(fù)

#43(數(shù)據(jù)連接):將上面生成的數(shù)據(jù)框與df按列合并

敬信老師:

df = bind_cols(df, df1) df

#44(修改列):生成新列new為salary列減去隨機(jī)數(shù)列

敬信老師:

df = df %>% mutate(new = salary - rnums)

#45(檢查缺失值):檢查數(shù)據(jù)中是否含有任何缺失值

敬信老師:

anyNA(df)

#46(類型轉(zhuǎn)換):將rnums列的類型轉(zhuǎn)換為浮點(diǎn)數(shù)

敬信老師:

df %>% mutate(rnums = as.double(rnums))# rnums為int型,使用as.double進(jìn)行轉(zhuǎn)換,其他形式也類比

#47(數(shù)據(jù)匯總):計(jì)算salary列大于10000的次數(shù)

敬信老師:

df %>% count(salary > 10000)# 同#5# 或者利用summarise函數(shù)進(jìn)行匯總,如下 df %>% summarise(n = sum(salary > 10000))

#48(統(tǒng)計(jì)頻數(shù)):查看每種學(xué)歷出現(xiàn)的次數(shù)

敬信老師:

df %>% count(education)# 同#5# 或者table(df$education)

#49(數(shù)據(jù)匯總):查看education列共有幾種學(xué)歷

敬信老師:

df %>% distinct(education) # 同#8,此題默認(rèn).keep_all = FALSE,也就是除去education都不顯示

#50(篩選行):提取salary與new列之和大于60000的最后3行

敬信老師:

df %>% filter(salary + new > 60000) # filter過濾出salary+new>6000的行 %>% slice((n()-2):n()) # slice選擇其中的后三行

參考資料:

1.張敬信:玩轉(zhuǎn)數(shù)據(jù)處理120題之P1-P20(R語言tidyverse版本)

2.張敬信:玩轉(zhuǎn)數(shù)據(jù)處理120題之P21-P50(R語言tidyverse版本)

3. molearner:dplyr 數(shù)據(jù)操作 列操作(select / mutate)

4.小橙子:數(shù)據(jù)整理—dplyr包(summarise系列)

5.王詩翔:【r<-數(shù)據(jù)分析】使用dplyr(1):介紹與filter操作

6.張丹:R語言時(shí)間序列基礎(chǔ)庫zoo

7.張丹:R語言數(shù)據(jù)科學(xué)新類型tibble

8.g863402758:R語言數(shù)據(jù)類型轉(zhuǎn)化

總結(jié)

以上是生活随笔為你收集整理的df python 增加数据_【Note】关于玩转数据处理R语言120题的注解(P1-P50)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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