ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ด้วยการค้นหา R หรือ Python บนอินเทอร์เน็ต คุณจะพบบทความหลายล้านบทความและการอภิปรายหลายกิโลเมตรในหัวข้อใดดีกว่า เร็วกว่า และสะดวกกว่าในการทำงานกับข้อมูล แต่น่าเสียดายที่บทความและข้อโต้แย้งเหล่านี้ไม่มีประโยชน์อย่างยิ่ง

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

วัตถุประสงค์ของบทความนี้คือเพื่อเปรียบเทียบเทคนิคการประมวลผลข้อมูลขั้นพื้นฐานในแพ็คเกจยอดนิยมของทั้งสองภาษา และช่วยให้ผู้อ่านเข้าใจสิ่งที่พวกเขายังไม่รู้ได้อย่างรวดเร็ว สำหรับผู้ที่เขียนด้วย Python โปรดดูวิธีทำสิ่งเดียวกันใน R และในทางกลับกัน

ในระหว่างบทความนี้ เราจะวิเคราะห์ไวยากรณ์ของแพ็คเกจยอดนิยมใน R เหล่านี้คือแพ็คเกจที่รวมอยู่ในไลบรารี tidyverseและก็แพ็คเกจด้วย data.table. และเปรียบเทียบไวยากรณ์ด้วย pandasแพ็คเกจวิเคราะห์ข้อมูลยอดนิยมใน Python

เราจะดำเนินการทีละขั้นตอนผ่านเส้นทางการวิเคราะห์ข้อมูลทั้งหมด ตั้งแต่การโหลดไปจนถึงการดำเนินการฟังก์ชันหน้าต่างการวิเคราะห์โดยใช้ Python และ R

Содержание

บทความนี้สามารถใช้เป็นเอกสารสรุปได้หากคุณลืมวิธีดำเนินการประมวลผลข้อมูลในแพ็คเกจใดแพ็คเกจหนึ่งที่อยู่ระหว่างการพิจารณา

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

  1. ความแตกต่างทางไวยากรณ์หลักระหว่าง R และ Python
    1.1. การเข้าถึงฟังก์ชั่นแพ็คเกจ
    1.2. งานที่มอบหมาย
    1.3. การจัดทำดัชนี
    1.4. วิธีการและ OOP
    1.5. ไปป์ไลน์
    1.6. โครงสร้างข้อมูล
  2. คำสองสามคำเกี่ยวกับแพ็คเกจที่เราจะใช้
    2.1. เรียบร้อย
    2.2. ตารางข้อมูล
    2.3. หมีแพนด้า
  3. กำลังติดตั้งแพ็คเกจ
  4. กำลังโหลดข้อมูล
  5. การสร้างดาต้าเฟรม
  6. การเลือกคอลัมน์ที่คุณต้องการ
  7. การกรองแถว
  8. การจัดกลุ่มและการรวมกลุ่ม
  9. ยูเนี่ยนตารางแนวตั้ง (UNION)
  10. การรวมตารางแนวนอน (JOIN)
  11. ฟังก์ชันหน้าต่างพื้นฐานและคอลัมน์จากการคำนวณ
  12. ตารางความสัมพันธ์ระหว่างวิธีการประมวลผลข้อมูลใน R และ Python
  13. ข้อสรุป
  14. แบบสำรวจสั้นๆ เกี่ยวกับแพ็คเกจที่คุณใช้

หากคุณสนใจในการวิเคราะห์ข้อมูล คุณอาจพบ my โทรเลข и YouTube ช่อง. เนื้อหาส่วนใหญ่เกี่ยวกับภาษา R

ความแตกต่างทางไวยากรณ์หลักระหว่าง R และ Python

เพื่อให้ง่ายต่อการเปลี่ยนจาก Python เป็น R หรือกลับกัน ฉันจะให้ประเด็นหลักสองสามข้อที่คุณต้องใส่ใจ

การเข้าถึงฟังก์ชั่นแพ็คเกจ

เมื่อโหลดแพ็กเกจลงใน R แล้ว คุณไม่จำเป็นต้องระบุชื่อแพ็กเกจเพื่อเข้าถึงฟังก์ชันต่างๆ ในกรณีส่วนใหญ่ สิ่งนี้ไม่เป็นเรื่องปกติใน R แต่ก็สามารถยอมรับได้ คุณไม่จำเป็นต้องนำเข้าแพ็คเกจเลยหากคุณต้องการฟังก์ชันอย่างใดอย่างหนึ่งในโค้ดของคุณ แต่เพียงแค่เรียกมันโดยระบุชื่อของแพ็คเกจและชื่อของฟังก์ชัน ตัวคั่นระหว่างชื่อแพ็คเกจและฟังก์ชันใน R คือทวิภาคคู่ package_name::function_name().

ในทางกลับกัน ใน Python การเรียกใช้ฟังก์ชันของแพ็กเกจโดยการระบุชื่ออย่างชัดเจนถือเป็นคลาสสิก เมื่อดาวน์โหลดแพ็คเกจ โดยปกติแล้วจะมีการตั้งชื่อให้สั้นลง เช่น pandas โดยปกติจะใช้นามแฝง pd. ฟังก์ชันแพ็คเกจเข้าถึงได้ผ่านจุด package_name.function_name().

งานที่มอบหมาย

ใน R เป็นเรื่องปกติที่จะใช้ลูกศรเพื่อกำหนดค่าให้กับวัตถุ obj_name <- valueแม้ว่าจะอนุญาตให้ใช้เครื่องหมายเท่ากับเพียงเครื่องหมายเดียว แต่เครื่องหมายเท่ากับใน R ใช้เพื่อส่งผ่านค่าไปยังอาร์กิวเมนต์ของฟังก์ชันเป็นหลัก

ใน Python การมอบหมายงานทำได้โดยใช้เครื่องหมายเท่ากับเพียงอันเดียว obj_name = value.

การจัดทำดัชนี

นอกจากนี้ยังมีความแตกต่างที่สำคัญมากที่นี่ ใน R การจัดทำดัชนีเริ่มต้นที่หนึ่งและรวมองค์ประกอบที่ระบุทั้งหมดในช่วงผลลัพธ์

ใน Python การทำดัชนีเริ่มต้นจากศูนย์และช่วงที่เลือกจะไม่รวมองค์ประกอบสุดท้ายที่ระบุในดัชนี ดังนั้นการออกแบบ x[i:j] ใน Python จะไม่รวมองค์ประกอบ j

นอกจากนี้ยังมีความแตกต่างในการจัดทำดัชนีเชิงลบในรูปแบบ R x[-1] จะส่งกลับองค์ประกอบทั้งหมดของเวกเตอร์ ยกเว้นองค์ประกอบสุดท้าย ใน Python สัญกรณ์ที่คล้ายกันจะส่งกลับเฉพาะองค์ประกอบสุดท้ายเท่านั้น

วิธีการและ OOP

R ใช้ OOP ในแบบของตัวเอง ฉันเขียนเกี่ยวกับสิ่งนี้ในบทความ "OOP ในภาษา R (ตอนที่ 1): คลาส S3". โดยทั่วไป R เป็นภาษาที่ใช้งานได้ และทุกอย่างในนั้นถูกสร้างขึ้นจากฟังก์ชัน ดังนั้น ตัวอย่างเช่น สำหรับผู้ใช้ Excel ให้ไปที่ tydiverse มันจะง่ายกว่า pandas. แม้ว่านี่อาจเป็นความเห็นส่วนตัวของฉัน

กล่าวโดยสรุป วัตถุใน R ไม่มีวิธีการ (ถ้าเราพูดถึงคลาส S3 แต่มีการใช้งาน OOP อื่น ๆ ที่พบได้น้อยกว่ามาก) มีเพียงฟังก์ชันทั่วไปเท่านั้นที่ประมวลผลต่างกันขึ้นอยู่กับคลาสของอ็อบเจ็กต์

ไปป์ไลน์

บางทีนี่อาจเป็นชื่อสำหรับ pandas มันจะไม่ถูกต้องทั้งหมด แต่ฉันจะพยายามอธิบายความหมาย

เพื่อไม่ให้บันทึกการคำนวณระดับกลางและไม่สร้างวัตถุที่ไม่จำเป็นในสภาพแวดล้อมการทำงานคุณสามารถใช้ไปป์ไลน์ชนิดหนึ่งได้ เหล่านั้น. ส่งผลการคำนวณจากฟังก์ชันหนึ่งไปยังฟังก์ชันถัดไป และไม่บันทึกผลลัพธ์ระดับกลาง

ลองใช้ตัวอย่างโค้ดต่อไปนี้ โดยที่เราจัดเก็บการคำนวณขั้นกลางไว้ในออบเจ็กต์ที่แยกจากกัน:

temp_object <- func1()
temp_object2 <- func2(temp_object )
obj <- func3(temp_object2 )

เราทำการดำเนินการ 3 ครั้งตามลำดับ และผลลัพธ์ของการดำเนินการแต่ละรายการจะถูกบันทึกไว้ในออบเจ็กต์ที่แยกจากกัน แต่จริงๆ แล้ว เราไม่ต้องการวัตถุตัวกลางเหล่านี้

หรือแย่กว่านั้น แต่ผู้ใช้ Excel คุ้นเคยมากกว่า

obj  <- func3(func2(func1()))

ในกรณีนี้ เราไม่ได้บันทึกผลการคำนวณขั้นกลาง แต่การอ่านโค้ดที่มีฟังก์ชันซ้อนกันนั้นไม่สะดวกอย่างยิ่ง

เราจะดูหลายวิธีในการประมวลผลข้อมูลใน R และดำเนินการที่คล้ายกันในวิธีที่ต่างกัน

ท่อส่งในห้องสมุด tidyverse ดำเนินการโดยผู้ปฏิบัติงาน %>%.

obj <- func1() %>% 
            func2() %>%
            func3()

ดังนั้นเราจึงนำผลงานมา func1() และส่งต่อเป็นอาร์กิวเมนต์แรกให้ func2()จากนั้นเราจะส่งผลลัพธ์ของการคำนวณนี้เป็นอาร์กิวเมนต์แรก func3(). และท้ายที่สุด เราก็เขียนการคำนวณทั้งหมดที่ทำลงในวัตถุ obj <-.

ทั้งหมดข้างต้นแสดงให้เห็นได้ดีกว่าคำพูดจากมีมนี้:
ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

В data.table โซ่ก็ใช้ในลักษณะเดียวกัน

newDT <- DT[where, select|update|do, by][where, select|update|do, by][where, select|update|do, by]

ในวงเล็บเหลี่ยมแต่ละอัน คุณสามารถใช้ผลลัพธ์ของการดำเนินการก่อนหน้าได้

В pandas การดำเนินการดังกล่าวจะถูกคั่นด้วยจุด

obj = df.fun1().fun2().fun3()

เหล่านั้น. เรายึดโต๊ะของเรา df และใช้วิธีของเธอ fun1()จากนั้นเราจะใช้วิธีการกับผลลัพธ์ที่ได้รับ fun2()หลังจาก fun3(). ผลลัพธ์ที่ได้จะถูกบันทึกลงในออบเจ็กต์ obj .

โครงสร้างข้อมูล

โครงสร้างข้อมูลใน R และ Python คล้ายกัน แต่มีชื่อต่างกัน

ลักษณะ
ชื่อในร
ชื่อในภาษา Python/pandas

โครงสร้างตาราง
data.frame, data.table, tibble
ดาต้าเฟรม

รายการค่ามิติเดียว
เวกเตอร์
ซีรีส์ในรูปแบบแพนด้าหรือรายการใน Python ล้วนๆ

โครงสร้างที่ไม่ใช่ตารางหลายระดับ
รายการ
พจนานุกรม (ดิก)

เราจะดูคุณสมบัติและความแตกต่างอื่นๆ ในด้านไวยากรณ์ด้านล่างนี้

คำสองสามคำเกี่ยวกับแพ็คเกจที่เราจะใช้

ก่อนอื่น ฉันจะบอกคุณเล็กน้อยเกี่ยวกับแพ็คเกจที่คุณจะคุ้นเคยในบทความนี้

เรียบร้อย

เว็บไซต์อย่างเป็นทางการ: tidyverse.org
ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง
ห้องสมุด tidyverse เขียนโดย Hedley Wickham นักวิทยาศาสตร์วิจัยอาวุโสของ RStudio tidyverse ประกอบด้วยชุดแพ็คเกจที่น่าประทับใจที่ทำให้การประมวลผลข้อมูลง่ายขึ้น โดย 5 รายการรวมอยู่ในการดาวน์โหลด 10 อันดับแรกจากที่เก็บ CRAN

แกนกลางของไลบรารีประกอบด้วยแพ็คเกจดังต่อไปนี้: ggplot2, dplyr, tidyr, readr, purrr, tibble, stringr, forcats. แต่ละแพ็คเกจเหล่านี้มีวัตถุประสงค์เพื่อแก้ไขปัญหาเฉพาะ ตัวอย่างเช่น dplyr สร้างขึ้นเพื่อการจัดการข้อมูล tidyr เพื่อนำข้อมูลมาอยู่ในรูปแบบที่เรียบร้อย stringr ช่วยลดความยุ่งยากในการทำงานกับสตริงและ ggplot2 เป็นหนึ่งในเครื่องมือสร้างภาพข้อมูลที่ได้รับความนิยมมากที่สุด

ความได้เปรียบ tidyverse คือความเรียบง่ายและไวยากรณ์ที่อ่านง่าย ซึ่งคล้ายกับภาษาคิวรี SQL ในหลายๆ ด้าน

ตารางข้อมูล

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลังเว็บไซต์อย่างเป็นทางการ: r-datatable.com

โดยผู้เขียน data.table คือ Matt Dole จาก H2O.ai

ห้องสมุดเปิดตัวครั้งแรกเกิดขึ้นในปี พ.ศ. 2006

ไวยากรณ์ของแพ็คเกจไม่สะดวกเท่ากับใน tidyverse และชวนให้นึกถึงดาต้าเฟรมแบบคลาสสิกใน R มากขึ้น แต่ในขณะเดียวกันก็ขยายฟังก์ชันการทำงานอย่างมีนัยสำคัญ

การจัดการทั้งหมดกับตารางในแพ็คเกจนี้จะอธิบายไว้ในวงเล็บเหลี่ยมและหากคุณแปลไวยากรณ์ data.table ใน SQL คุณจะได้รับสิ่งนี้: data.table[ WHERE, SELECT, GROUP BY ]

จุดแข็งของแพ็คเกจนี้คือความเร็วในการประมวลผลข้อมูลจำนวนมาก

หมีแพนด้า

เว็บไซต์อย่างเป็นทางการ: pandas.pydata.org ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ชื่อของห้องสมุดมาจากคำว่า "ข้อมูลแผง" ทางเศรษฐมิติ ซึ่งใช้เพื่ออธิบายชุดข้อมูลที่มีโครงสร้างหลายมิติ

โดยผู้เขียน pandas คืออเมริกัน เวส แมคคินนีย์

เมื่อพูดถึงการวิเคราะห์ข้อมูลใน Python ก็เท่าเทียมกัน pandas เลขที่ แพ็คเกจระดับสูงแบบมัลติฟังก์ชั่นที่ช่วยให้คุณดำเนินการจัดการข้อมูลตั้งแต่การโหลดข้อมูลจากแหล่งใด ๆ ไปจนถึงการแสดงภาพ

การติดตั้งแพ็คเกจเพิ่มเติม

แพ็คเกจที่กล่าวถึงในบทความนี้ไม่รวมอยู่ในการแจกแจง R และ Python พื้นฐาน แม้ว่าจะมีข้อแม้เล็กน้อย แต่ถ้าคุณได้ติดตั้งการกระจายของ Anaconda แล้ว ให้ติดตั้งเพิ่มเติม pandas ไม่จำเป็น

การติดตั้งแพ็คเกจใน R

หากคุณเปิดสภาพแวดล้อมการพัฒนา RStudio อย่างน้อยหนึ่งครั้ง คุณอาจรู้วิธีติดตั้งแพ็คเกจที่จำเป็นใน R อยู่แล้ว หากต้องการติดตั้งแพ็คเกจ ให้ใช้คำสั่งมาตรฐาน install.packages() โดยการรันโดยตรงใน R เอง

# установка пакетов
install.packages("vroom")
install.packages("readr")
install.packages("dplyr")
install.packages("data.table")

หลังการติดตั้ง จำเป็นต้องเชื่อมต่อแพ็คเกจ ซึ่งโดยส่วนใหญ่จะใช้คำสั่ง library().

# подключение или импорт пакетов в рабочее окружение
library(vroom)
library(readr)
library(dplyr)
library(data.table)

การติดตั้งแพ็คเกจใน Python

ดังนั้นหากคุณติดตั้ง Python บริสุทธิ์ไว้แล้ว pandas คุณต้องติดตั้งด้วยตนเอง เปิดบรรทัดคำสั่งหรือเทอร์มินัล ขึ้นอยู่กับระบบปฏิบัติการของคุณ และป้อนคำสั่งต่อไปนี้

pip install pandas

จากนั้นเรากลับไปที่ Python และนำเข้าแพ็คเกจที่ติดตั้งด้วยคำสั่ง import.

import pandas as pd

กำลังโหลดข้อมูล

การทำเหมืองข้อมูลเป็นหนึ่งในขั้นตอนที่สำคัญที่สุดในการวิเคราะห์ข้อมูล หากต้องการ ทั้ง Python และ R จะทำให้คุณมีโอกาสมากมายในการรับข้อมูลจากแหล่งต่างๆ เช่น ไฟล์ในเครื่อง ไฟล์จากอินเทอร์เน็ต เว็บไซต์ และฐานข้อมูลทุกประเภท

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ตลอดทั้งบทความเราจะใช้ชุดข้อมูลหลายชุด:

  1. ดาวน์โหลดสองครั้งจาก Google Analytics
  2. ชุดข้อมูลผู้โดยสารไททานิค

ข้อมูลทั้งหมดอยู่ในของฉัน GitHub ในรูปแบบไฟล์ csv และ tsv เราจะขอได้จากที่ไหน?

กำลังโหลดข้อมูลลงใน R: tidyverse, vroom, readr

เพื่อโหลดข้อมูลเข้าห้องสมุด tidyverse มีสองแพ็คเกจ: vroom, readr. vroom ทันสมัยมากขึ้นแต่ในอนาคตอาจมีการรวมแพ็คเกจเข้าด้วยกัน

อ้างจาก เอกสารราชการ vroom.

vroom กับ เครื่องอ่าน
ปล่อยของอะไร. vroom หมายถึงสำหรับ readr? สำหรับตอนนี้เราวางแผนที่จะให้ทั้งสองแพ็คเกจพัฒนาแยกกัน แต่มีแนวโน้มว่าเราจะรวมแพ็คเกจเข้าด้วยกันในอนาคต ข้อเสียอย่างหนึ่งของการอ่านแบบขี้เกียจของ vroom คือปัญหาข้อมูลบางอย่างไม่สามารถรายงานล่วงหน้าได้ ดังนั้นวิธีที่ดีที่สุดในการรวมปัญหาเหล่านี้เข้าด้วยกันต้องอาศัยการพิจารณาอย่างรอบคอบ

vroom กับ reader
การปล่อยหมายถึงอะไร? vroom สำหรับ readr? ในขณะนี้เราวางแผนที่จะพัฒนาทั้งสองแพ็คเกจแยกกัน แต่อาจจะรวมเข้าด้วยกันในอนาคต ข้อเสียอย่างหนึ่งของการอ่านหนังสือแบบขี้เกียจ vroom คือปัญหาบางอย่างเกี่ยวกับข้อมูลไม่สามารถรายงานล่วงหน้าได้ ดังนั้นคุณต้องคิดถึงวิธีที่ดีที่สุดในการรวมเข้าด้วยกัน

ในบทความนี้เราจะดูแพ็คเกจการโหลดข้อมูลทั้งสองแบบ:

กำลังโหลดข้อมูลลงในแพ็คเกจ R: vroom

# install.packages("vroom")
library(vroom)

# Чтение данных
## vroom
ga_nov  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- vroom("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

กำลังโหลดข้อมูลลงใน R: reader

# install.packages("readr")
library(readr)

# Чтение данных
## readr
ga_nov  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- read_tsv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

ในแพ็คเกจ vroomโดยไม่คำนึงถึงรูปแบบข้อมูล csv / tsv การโหลดจะดำเนินการโดยฟังก์ชันที่มีชื่อเดียวกัน vroom(), ในแพ็คเกจ readr เราใช้ฟังก์ชันที่แตกต่างกันสำหรับแต่ละรูปแบบ read_tsv() и read_csv().

กำลังโหลดข้อมูลลงใน R: data.table

В data.table มีฟังก์ชั่นสำหรับโหลดข้อมูล fread().

กำลังโหลดข้อมูลลงในแพ็คเกจ R: data.table

# install.packages("data.table")
library(data.table)

## data.table
ga_nov  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_nowember.csv")
ga_dec  <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/ga_december.csv")
titanic <- fread("https://raw.githubusercontent.com/selesnow/publications/master/data_example/r_python_data/titanic.csv")

กำลังโหลดข้อมูลใน Python: pandas

หากเราเปรียบเทียบกับแพ็คเกจ R ในกรณีนี้ไวยากรณ์จะใกล้เคียงที่สุด pandas จะ readr, เพราะ pandas สามารถขอข้อมูลจากที่ไหนก็ได้และมีฟังก์ชั่นครบชุดในแพ็คเกจนี้ read_*().

  • read_csv()
  • read_excel()
  • read_sql()
  • read_json()
  • read_html()

และฟังก์ชันอื่นๆ อีกมากมายที่ออกแบบมาเพื่ออ่านข้อมูลจากรูปแบบต่างๆ แต่สำหรับจุดประสงค์ของเราก็เพียงพอแล้ว read_table() หรือ read_csv() ใช้อาร์กิวเมนต์ กันยายน เพื่อระบุตัวคั่นคอลัมน์

กำลังโหลดข้อมูลใน Python: pandas

import pandas as pd

ga_nov  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_nowember.csv", sep = "t")
ga_dec  = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/ga_december.csv", sep = "t")
titanic = pd.read_csv("https://raw.githubusercontent.com/selesnow/publications/master/data_example/russian_text_in_r/titanic.csv")

การสร้างดาต้าเฟรม

ตาราง มหึมาที่เราโหลดมาก็มีสนาม เพศซึ่งจัดเก็บตัวระบุเพศของผู้โดยสาร

แต่เพื่อความสะดวกในการนำเสนอข้อมูลในแง่ของเพศของผู้โดยสาร คุณควรใช้ชื่อแทนรหัสเพศ

ในการดำเนินการนี้ เราจะสร้างไดเร็กทอรีขนาดเล็ก ซึ่งเป็นตารางที่จะมีเพียง 2 คอลัมน์ (รหัสและชื่อเพศ) และ 2 แถวตามลำดับ

การสร้างดาต้าเฟรมใน R: tidyverse, dplyr

ในตัวอย่างโค้ดด้านล่าง เราสร้าง dataframe ที่ต้องการโดยใช้ฟังก์ชัน tibble() .

การสร้างดาต้าเฟรมใน R: dplyr

## dplyr
### создаём справочник
gender <- tibble(id = c(1, 2),
                 gender = c("female", "male"))

การสร้างดาต้าเฟรมใน R: data.table

การสร้างดาต้าเฟรมใน R: data.table

## data.table
### создаём справочник
gender <- data.table(id = c(1, 2),
                    gender = c("female", "male"))

การสร้างดาต้าเฟรมใน Python: pandas

В pandas การสร้างเฟรมนั้นดำเนินการในหลายขั้นตอน ขั้นแรกเราจะสร้างพจนานุกรม จากนั้นเราจะแปลงพจนานุกรมให้เป็นดาต้าเฟรม

การสร้างดาต้าเฟรมใน Python: pandas

# создаём дата фрейм
gender_dict = {'id': [1, 2],
               'gender': ["female", "male"]}
# преобразуем словарь в датафрейм
gender = pd.DataFrame.from_dict(gender_dict)

การเลือกคอลัมน์

ตารางที่คุณทำงานด้วยอาจมีข้อมูลหลายสิบหรือหลายร้อยคอลัมน์ แต่ตามกฎแล้วเพื่อดำเนินการวิเคราะห์ คุณไม่จำเป็นต้องมีคอลัมน์ทั้งหมดที่มีอยู่ในตารางต้นฉบับ

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ดังนั้นหนึ่งในการดำเนินการแรกๆ ที่คุณจะดำเนินการกับตารางต้นฉบับคือการล้างข้อมูลที่ไม่จำเป็นและเพิ่มหน่วยความจำที่ข้อมูลนี้ครอบครอง

การเลือกคอลัมน์ใน R: tidyverse, dplyr

วากยสัมพันธ์ dplyr คล้ายกับภาษาคิวรี SQL มาก หากคุณคุ้นเคย คุณจะเชี่ยวชาญแพ็คเกจนี้ได้อย่างรวดเร็ว

หากต้องการเลือกคอลัมน์ ให้ใช้ฟังก์ชัน select().

ด้านล่างนี้เป็นตัวอย่างของโค้ดที่คุณสามารถเลือกคอลัมน์ได้ด้วยวิธีต่อไปนี้:

  • แสดงรายการชื่อของคอลัมน์ที่ต้องการ
  • อ้างถึงชื่อคอลัมน์โดยใช้นิพจน์ทั่วไป
  • ตามประเภทข้อมูลหรือคุณสมบัติอื่นใดของข้อมูลที่มีอยู่ในคอลัมน์

การเลือกคอลัมน์ใน R: dplyr

# Выбор нужных столбцов
## dplyr
### выбрать по названию столбцов
select(ga_nov, date, source, sessions)
### исключь по названию столбцов
select(ga_nov, -medium, -bounces)
### выбрать по регулярному выражению, стобцы имена которых заканчиваются на s
select(ga_nov, matches("s$"))
### выбрать по условию, выбираем только целочисленные столбцы
select_if(ga_nov, is.integer)

การเลือกคอลัมน์ใน R: data.table

การดำเนินงานเดียวกันใน data.table มีการดำเนินการแตกต่างออกไปเล็กน้อย ในตอนต้นของบทความ ฉันได้ให้คำอธิบายว่าอาร์กิวเมนต์ใดอยู่ในวงเล็บเหลี่ยม data.table.

DT[i,j,by]

ที่ไหน:
ฉัน - ที่ไหนเช่น กรองตามแถว
j - เลือก|อัปเดต|ทำ เช่น การเลือกคอลัมน์และการแปลง
โดย - การจัดกลุ่มข้อมูล

การเลือกคอลัมน์ใน R: data.table

## data.table
### выбрать по названию столбцов
ga_nov[ , .(date, source, sessions) ]
### исключь по названию столбцов
ga_nov[ , .SD, .SDcols = ! names(ga_nov) %like% "medium|bounces" ]
### выбрать по регулярному выражению
ga_nov[, .SD, .SDcols = patterns("s$")]

ตัวแปร .SD ช่วยให้คุณเข้าถึงทุกคอลัมน์และ .SDcols กรองคอลัมน์ที่ต้องการโดยใช้นิพจน์ทั่วไปหรือฟังก์ชันอื่นๆ เพื่อกรองชื่อคอลัมน์ที่คุณต้องการ

การเลือกคอลัมน์ใน Python, pandas

เพื่อเลือกคอลัมน์ตามชื่อใน pandas แค่ระบุรายชื่อก็พอแล้ว และหากต้องการเลือกหรือแยกคอลัมน์ตามชื่อโดยใช้นิพจน์ทั่วไป คุณต้องใช้ฟังก์ชันต่างๆ drop() и filter()และการโต้แย้ง แกน = 1ซึ่งคุณระบุว่าจำเป็นต้องประมวลผลคอลัมน์แทนที่จะเป็นแถว

หากต้องการเลือกฟิลด์ตามประเภทข้อมูล ให้ใช้ฟังก์ชัน select_dtypes()และเข้าสู่การโต้แย้ง ประกอบด้วย หรือ ไม่รวม ส่งรายการประเภทข้อมูลที่สอดคล้องกับฟิลด์ที่คุณต้องการเลือก

การเลือกคอลัมน์ใน Python: pandas

# Выбор полей по названию
ga_nov[['date', 'source', 'sessions']]
# Исключить по названию
ga_nov.drop(['medium', 'bounces'], axis=1)
# Выбрать по регулярному выражению
ga_nov.filter(regex="s$", axis=1)
# Выбрать числовые поля
ga_nov.select_dtypes(include=['number'])
# Выбрать текстовые поля
ga_nov.select_dtypes(include=['object'])

การกรองแถว

ตัวอย่างเช่น ตารางต้นฉบับอาจมีข้อมูลหลายปี แต่คุณจะต้องวิเคราะห์เฉพาะเดือนที่แล้วเท่านั้น อีกครั้งที่บรรทัดเพิ่มเติมจะทำให้กระบวนการประมวลผลข้อมูลช้าลงและทำให้หน่วยความจำพีซีอุดตัน

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

การกรองแถวใน R: tydyverse, dplyr

В dplyr ฟังก์ชันนี้ใช้เพื่อกรองแถว filter(). โดยจะใช้ dataframe เป็นอาร์กิวเมนต์แรก จากนั้นคุณจึงแสดงรายการเงื่อนไขการกรอง

เมื่อเขียนนิพจน์เชิงตรรกะเพื่อกรองตาราง ในกรณีนี้ ให้ระบุชื่อคอลัมน์โดยไม่ต้องใส่เครื่องหมายคำพูดและไม่ประกาศชื่อตาราง

เมื่อใช้นิพจน์เชิงตรรกะหลายรายการในการกรอง ให้ใช้ตัวดำเนินการต่อไปนี้:

  • & หรือลูกน้ำ - ตรรกะ AND
  • | - ตรรกะหรือ

การกรองแถวใน R: dplyr

# фильтрация строк
## dplyr
### фильтрация строк по одному условию
filter(ga_nov, source == "google")
### фильтр по двум условиям соединённым логическим и
filter(ga_nov, source == "google" & sessions >= 10)
### фильтр по двум условиям соединённым логическим или
filter(ga_nov, source == "google" | sessions >= 10)

การกรองแถวใน R: data.table

อย่างที่ฉันเขียนไว้ข้างต้นแล้วใน data.table ไวยากรณ์การแปลงข้อมูลอยู่ในวงเล็บเหลี่ยม

DT[i,j,by]

ที่ไหน:
ฉัน - ที่ไหนเช่น กรองตามแถว
j - เลือก|อัปเดต|ทำ เช่น การเลือกคอลัมน์และการแปลง
โดย - การจัดกลุ่มข้อมูล

อาร์กิวเมนต์นี้ใช้เพื่อกรองแถว iซึ่งมีตำแหน่งแรกในวงเล็บเหลี่ยม

เข้าถึงคอลัมน์ได้โดยใช้นิพจน์เชิงตรรกะโดยไม่มีเครื่องหมายคำพูดและไม่ต้องระบุชื่อตาราง

นิพจน์เชิงตรรกะมีความสัมพันธ์กันในลักษณะเดียวกับใน dplyr ผ่านตัวดำเนินการ & และ |

การกรองแถวใน R: data.table

## data.table
### фильтрация строк по одному условию
ga_nov[source == "google"]
### фильтр по двум условиям соединённым логическим и
ga_nov[source == "google" & sessions >= 10]
### фильтр по двум условиям соединённым логическим или
ga_nov[source == "google" | sessions >= 10]

การกรองสตริงใน Python: pandas

กรองตามแถวใน pandas คล้ายกับการกรองเข้า data.tableและทำในวงเล็บเหลี่ยม

ในกรณีนี้การเข้าถึงคอลัมน์จำเป็นต้องระบุชื่อของ dataframe จากนั้นสามารถระบุชื่อคอลัมน์ในเครื่องหมายคำพูดในวงเล็บเหลี่ยม (ตัวอย่าง df['col_name']) หรือไม่มีเครื่องหมายคำพูดหลังช่วงเวลา (ตัวอย่าง df.col_name).

หากคุณต้องการกรอง dataframe ตามเงื่อนไขหลายประการ แต่ละเงื่อนไขจะต้องอยู่ในวงเล็บ เงื่อนไขลอจิกเชื่อมโยงถึงกันโดยตัวดำเนินการ & и |.

การกรองสตริงใน Python: pandas

# Фильтрация строк таблицы
### фильтрация строк по одному условию
ga_nov[ ga_nov['source'] == "google" ]
### фильтр по двум условиям соединённым логическим и
ga_nov[(ga_nov['source'] == "google") & (ga_nov['sessions'] >= 10)]
### фильтр по двум условиям соединённым логическим или
ga_nov[(ga_nov['source'] == "google") | (ga_nov['sessions'] >= 10)]

การจัดกลุ่มและการรวมกลุ่มของข้อมูล

การดำเนินการที่ใช้กันมากที่สุดอย่างหนึ่งในการวิเคราะห์ข้อมูลคือการจัดกลุ่มและการรวมกลุ่ม

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ไวยากรณ์สำหรับการดำเนินการเหล่านี้กระจัดกระจายอยู่ในแพ็คเกจทั้งหมดที่เราตรวจสอบ

ในกรณีนี้ เราจะใช้ dataframe เป็นตัวอย่าง มหึมาและคำนวณจำนวนและราคาเฉลี่ยของตั๋วขึ้นอยู่กับชั้นโดยสาร

การจัดกลุ่มและการรวมข้อมูลใน R: tidyverse, dplyr

В dplyr ฟังก์ชันนี้ใช้สำหรับการจัดกลุ่ม group_by()และเพื่อการรวมตัวกัน summarise(). ในความเป็นจริง, dplyr มีฟังก์ชั่นทั้งตระกูล summarise_*()แต่จุดประสงค์ของบทความนี้คือเพื่อเปรียบเทียบไวยากรณ์พื้นฐาน ดังนั้นเราจะไม่เข้าไปในป่าแบบนั้น

ฟังก์ชันการรวมพื้นฐาน:

  • sum() — ผลรวม
  • min() / max() – ค่าต่ำสุดและสูงสุด
  • mean() - เฉลี่ย
  • median() — ค่ามัธยฐาน
  • length() - ปริมาณ

การจัดกลุ่มและการรวมกลุ่มใน R: dplyr

## dplyr
### группировка и агрегация строк
group_by(titanic, Pclass) %>%
  summarise(passangers = length(PassengerId),
            avg_price  = mean(Fare))

ในฟังก์ชั่น group_by() เราผ่านตารางเป็นอาร์กิวเมนต์แรก มหึมาแล้วระบุเขตข้อมูล พีคลาสโดยที่เราจะจัดกลุ่มตารางของเรา ผลลัพธ์ของการดำเนินการนี้โดยใช้ตัวดำเนินการ %>% ส่งผ่านเป็นอาร์กิวเมนต์แรกของฟังก์ชัน summarise()และเพิ่มอีก 2 ช่อง คือ ผู้โดยสาร и ราคาเฉลี่ย_ราคา. ในขั้นแรกให้ใช้ฟังก์ชัน length() คำนวณจำนวนตั๋วและในวินาทีโดยใช้ฟังก์ชัน mean() ได้รับราคาตั๋วเฉลี่ย

การจัดกลุ่มและการรวมข้อมูลใน R: data.table

В data.table อาร์กิวเมนต์นี้ใช้สำหรับการรวมกลุ่ม j ซึ่งมีตำแหน่งที่สองในวงเล็บเหลี่ยมและสำหรับการจัดกลุ่ม by หรือ keybyซึ่งมีตำแหน่งที่สาม

รายการฟังก์ชันการรวมในกรณีนี้จะเหมือนกับที่อธิบายไว้ในนั้น dplyr, เพราะ เหล่านี้เป็นฟังก์ชันจากไวยากรณ์ R พื้นฐาน

การจัดกลุ่มและการรวมกลุ่มใน R: data.table

## data.table
### фильтрация строк по одному условию
titanic[, .(passangers = length(PassengerId),
            avg_price  = mean(Fare)),
        by = Pclass]

การจัดกลุ่มและการรวมข้อมูลใน Python: pandas

การจัดกลุ่มเข้า pandas คล้ายกับ dplyrแต่การรวมตัวไม่เหมือนกัน dplyr ไม่เลย data.table.

หากต้องการจัดกลุ่มให้ใช้วิธี groupby()ซึ่งคุณจะต้องส่งรายการคอลัมน์ที่จะใช้จัดกลุ่มดาต้าเฟรมเข้าไป

สำหรับการรวมคุณสามารถใช้วิธีนี้ได้ agg()ซึ่งรับพจนานุกรม ปุ่มพจนานุกรมคือคอลัมน์ที่คุณจะใช้ฟังก์ชันการรวมและค่าคือชื่อของฟังก์ชันการรวม

ฟังก์ชันการรวมกลุ่ม:

  • sum() — ผลรวม
  • min() / max() – ค่าต่ำสุดและสูงสุด
  • mean() - เฉลี่ย
  • median() — ค่ามัธยฐาน
  • count() - ปริมาณ

ฟังก์ชัน reset_index() ในตัวอย่างด้านล่างนี้ใช้เพื่อรีเซ็ตดัชนีที่ซ้อนกันอยู่ pandas ค่าเริ่มต้นเป็นหลังจากการรวบรวมข้อมูล

สัญญลักษณ์ ช่วยให้คุณเลื่อนไปยังบรรทัดถัดไป

การจัดกลุ่มและการรวมกลุ่มใน Python: pandas

# группировка и агрегация данных
titanic.groupby(["Pclass"]).
    agg({'PassengerId': 'count', 'Fare': 'mean'}).
        reset_index()

การรวมตารางในแนวตั้ง

การดำเนินการที่คุณรวมตารางตั้งแต่ XNUMX ตารางขึ้นไปที่มีโครงสร้างเดียวกัน ข้อมูลที่เราโหลดมีตาราง ga_nov и ga_dec. ตารางเหล่านี้มีโครงสร้างเหมือนกัน กล่าวคือ มีคอลัมน์เหมือนกันและมีประเภทข้อมูลในคอลัมน์เหล่านี้

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

นี่คือการอัปโหลดจาก Google Analytics สำหรับเดือนพฤศจิกายนและธันวาคม ในส่วนนี้เราจะรวมข้อมูลนี้ไว้ในตารางเดียว

การรวมตารางในแนวตั้งใน R: tidyverse, dplyr

В dplyr คุณสามารถรวม 2 ตารางเป็นหนึ่งเดียวโดยใช้ฟังก์ชัน bind_rows()โดยส่งตารางเป็นอาร์กิวเมนต์

การกรองแถวใน R: dplyr

# Вертикальное объединение таблиц
## dplyr
bind_rows(ga_nov, ga_dec)

การรวมตารางในแนวตั้งใน R: data.table

ไม่มีอะไรซับซ้อน ลองใช้ดูสิ rbind().

การกรองแถวใน R: data.table

## data.table
rbind(ga_nov, ga_dec)

การรวมตารางในแนวตั้งใน Python: pandas

В pandas ฟังก์ชั่นนี้ใช้ในการรวมตาราง concat()ซึ่งคุณจะต้องส่งรายการเฟรมเพื่อรวมเข้าด้วยกัน

การกรองสตริงใน Python: pandas

# вертикальное объединение таблиц
pd.concat([ga_nov, ga_dec])

การรวมตารางแนวนอน

การดำเนินการที่คอลัมน์จากคอลัมน์ที่สองถูกเพิ่มลงในตารางแรกโดยใช้คีย์ มักใช้เมื่อเพิ่มตารางข้อเท็จจริง (เช่น ตารางที่มีข้อมูลการขาย) ด้วยข้อมูลอ้างอิงบางส่วน (เช่น ต้นทุนของผลิตภัณฑ์)

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

การรวมมีหลายประเภท:

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

ในตารางที่โหลดไว้ก่อนหน้านี้ มหึมา เรามีคอลัมน์ เพศซึ่งสอดคล้องกับรหัสเพศของผู้โดยสาร:

1 - เพศหญิง
2 - ชาย

นอกจากนี้เรายังได้สร้างตาราง - หนังสืออ้างอิง เพศ. เพื่อการนำเสนอข้อมูลเกี่ยวกับเพศของผู้โดยสารได้สะดวกยิ่งขึ้น เราจำเป็นต้องเพิ่มชื่อเพศจากไดเร็กทอรี เพศ ไปที่โต๊ะ มหึมา.

รวมตารางแนวนอนใน R: tidyverse, dplyr

В dplyr มีฟังก์ชันมากมายสำหรับการเข้าร่วมในแนวนอน:

  • inner_join()
  • left_join()
  • right_join()
  • full_join()
  • semi_join()
  • nest_join()
  • anti_join()

ที่ใช้กันมากที่สุดในการปฏิบัติของฉันคือ left_join().

เนื่องจากเป็นอาร์กิวเมนต์สองตัวแรก ฟังก์ชันที่แสดงไว้ด้านบนจึงต้องใช้สองตารางเพื่อรวมเข้าด้วยกัน และเป็นอาร์กิวเมนต์ที่สาม by คุณต้องระบุคอลัมน์ที่จะเข้าร่วม

เข้าร่วมตารางแนวนอนใน R: dplyr

# объединяем таблицы
left_join(titanic, gender,
          by = c("Sex" = "id"))

การรวมตารางแนวนอนใน R: data.table

В data.table คุณต้องเข้าร่วมตารางด้วยคีย์โดยใช้ฟังก์ชัน merge().

อาร์กิวเมนต์เพื่อผสานฟังก์ชัน () ใน data.table

  • x, y — ตารางสำหรับการเข้าร่วม
  • โดย — คอลัมน์ที่เป็นกุญแจสำคัญในการรวมหากมีชื่อเหมือนกันในทั้งสองตาราง
  • by.x, by.y — ชื่อของคอลัมน์ที่จะรวม หากมีชื่อที่แตกต่างกันในตาราง
  • all, all.x, all.y — ประเภทการรวม all จะส่งคืนแถวทั้งหมดจากทั้งสองตาราง all.x สอดคล้องกับการดำเนินการ LEFT JOIN (จะปล่อยแถวทั้งหมดของตารางแรก) all.y — สอดคล้องกับ การดำเนินการ RIGHT JOIN (จะออกจากแถวทั้งหมดของ table ที่สอง)

การรวมตารางแนวนอนใน R: data.table

# объединяем таблицы
merge(titanic, gender, by.x = "Sex", by.y = "id", all.x = T)

เข้าร่วมตารางแนวนอนใน Python: pandas

รวมทั้งใน data.tableใน pandas ฟังก์ชั่นนี้ใช้ในการรวมตาราง merge().

อาร์กิวเมนต์ของฟังก์ชัน merge() ในแพนด้า

  • อย่างไร — ประเภทการเชื่อมต่อ: ซ้าย, ขวา, ด้านนอก, ด้านใน
  • on — คอลัมน์ที่เป็นคีย์หากมีชื่อเหมือนกันในทั้งสองตาราง
  • left_on, right_on — ชื่อของคอลัมน์หลัก หากมีชื่อต่างกันในตาราง

เข้าร่วมตารางแนวนอนใน Python: pandas

# объединяем по ключу
titanic.merge(gender, how = "left", left_on = "Sex", right_on = "id")

ฟังก์ชันหน้าต่างพื้นฐานและคอลัมน์จากการคำนวณ

ฟังก์ชันหน้าต่างมีความหมายคล้ายกับฟังก์ชันการรวม และมักใช้ในการวิเคราะห์ข้อมูลด้วย แต่ต่างจากฟังก์ชันการรวมกลุ่ม ฟังก์ชันหน้าต่างไม่เปลี่ยนจำนวนแถวของดาต้าเฟรมขาออก

ภาษาใดให้เลือกสำหรับการทำงานกับข้อมูล - R หรือ Python ทั้งคู่! การย้ายจากแพนด้าไปยัง tidyverse และ data.table และด้านหลัง

โดยพื้นฐานแล้ว เมื่อใช้ฟังก์ชัน window เราจะแบ่ง dataframe ที่เข้ามาออกเป็นส่วน ๆ ตามเกณฑ์บางประการ เช่น ตามค่าของฟิลด์หรือหลายฟิลด์ และเราทำการคำนวณทางคณิตศาสตร์ในแต่ละหน้าต่าง ผลลัพธ์ของการดำเนินการเหล่านี้จะถูกส่งกลับในแต่ละบรรทัด เช่น โดยไม่ต้องเปลี่ยนจำนวนแถวทั้งหมดในตาราง

ตัวอย่างเช่น เรามาจัดโต๊ะกันดีกว่า มหึมา. เราสามารถคำนวณราคาของตั๋วแต่ละใบที่อยู่ในชั้นโดยสารได้เป็นเปอร์เซ็นต์

ในการดำเนินการนี้ เราจำเป็นต้องได้รับค่าใช้จ่ายรวมของตั๋วในแต่ละบรรทัดสำหรับชั้นห้องโดยสารปัจจุบันที่มีตั๋วในบรรทัดนี้ จากนั้นหารราคาของตั๋วแต่ละใบด้วยราคารวมของตั๋วทั้งหมดในชั้นห้องโดยสารเดียวกัน .

ฟังก์ชั่นหน้าต่างใน R: tidyverse, dplyr

หากต้องการเพิ่มคอลัมน์ใหม่โดยไม่ต้องใช้การจัดกลุ่มแถวใน dplyr ทำหน้าที่ mutate().

คุณสามารถแก้ไขปัญหาที่อธิบายไว้ข้างต้นได้โดยการจัดกลุ่มข้อมูลตามฟิลด์ พีคลาส และสรุปฟิลด์ในคอลัมน์ใหม่ ค่าโดยสาร. ถัดไป ยกเลิกการจัดกลุ่มตารางและหารค่าของฟิลด์ ค่าโดยสาร กับสิ่งที่เกิดขึ้นในขั้นตอนที่แล้ว

ฟังก์ชั่นหน้าต่างใน R: dplyr

group_by(titanic, Pclass) %>%
  mutate(Pclass_cost = sum(Fare)) %>%
  ungroup() %>%
  mutate(ticket_fare_rate = Fare / Pclass_cost)

ฟังก์ชั่นหน้าต่างใน R: data.table

อัลกอริธึมการแก้ปัญหายังคงเหมือนกับใน dplyrเราต้องแยกตารางออกเป็นหน้าต่างตามฟิลด์ พีคลาส. ส่งออกจำนวนเงินสำหรับกลุ่มที่สอดคล้องกับแต่ละแถวในคอลัมน์ใหม่ และเพิ่มคอลัมน์ที่เราคำนวณส่วนแบ่งต้นทุนของตั๋วแต่ละใบในกลุ่ม

หากต้องการเพิ่มคอลัมน์ใหม่เข้าไป data.table มีผู้ดำเนินการอยู่ :=. ด้านล่างนี้เป็นตัวอย่างการแก้ปัญหาโดยใช้แพ็คเกจ data.table

ฟังก์ชั่นหน้าต่างใน R: data.table

titanic[,c("Pclass_cost","ticket_fare_rate") := .(sum(Fare), Fare / Pclass_cost), 
        by = Pclass]

ฟังก์ชั่นหน้าต่างใน Python: pandas

วิธีหนึ่งในการเพิ่มคอลัมน์ใหม่ pandas - ใช้ฟังก์ชั่น assign(). เราจะใช้ฟังก์ชันนี้ในการสรุปราคาตั๋วตามชั้นโดยสารโดยไม่จัดกลุ่มแถว transform().

ด้านล่างนี้เป็นตัวอย่างของโซลูชันที่เราเพิ่มลงในตาราง มหึมา 2 คอลัมน์เดียวกัน

ฟังก์ชั่นหน้าต่างใน Python: pandas

titanic.assign(Pclass_cost      =  titanic.groupby('Pclass').Fare.transform(sum),
               ticket_fare_rate = lambda x: x['Fare'] / x['Pclass_cost'])

ตารางการติดต่อฟังก์ชันและวิธีการ

ด้านล่างนี้เป็นตารางการติดต่อระหว่างวิธีดำเนินการต่าง ๆ กับข้อมูลในแพ็คเกจที่เราพิจารณา

ลักษณะ
เรียบร้อย
ตารางข้อมูล
หมีแพนด้า

กำลังโหลดข้อมูล
vroom()/ readr::read_csv() / readr::read_tsv()
fread()
read_csv()

การสร้างดาต้าเฟรม
tibble()
data.table()
dict() + from_dict()

การเลือกคอลัมน์
select()
ข้อโต้แย้ง jตำแหน่งที่สองในวงเล็บเหลี่ยม
เราผ่านรายการคอลัมน์ที่ต้องการในวงเล็บเหลี่ยม / drop() / filter() / select_dtypes()

การกรองแถว
filter()
ข้อโต้แย้ง i, ตำแหน่งแรกในวงเล็บเหลี่ยม
เราแสดงรายการเงื่อนไขการกรองในวงเล็บเหลี่ยม / filter()

การจัดกลุ่มและการรวมกลุ่ม
group_by() + summarise()
ข้อโต้แย้ง j + by
groupby() + agg()

ยูเนี่ยนตารางแนวตั้ง (UNION)
bind_rows()
rbind()
concat()

การรวมตารางแนวนอน (JOIN)
left_join() / *_join()
merge()
merge()

ฟังก์ชันหน้าต่างพื้นฐานและการเพิ่มคอลัมน์จากการคำนวณ
group_by() + mutate()
ข้อโต้แย้ง j โดยใช้ตัวดำเนินการ := + อาร์กิวเมนต์ by
transform() + assign()

ข้อสรุป

บางทีในบทความที่ฉันอธิบายไว้ไม่ใช่การใช้งานการประมวลผลข้อมูลที่เหมาะสมที่สุดดังนั้นฉันจะดีใจถ้าคุณแก้ไขข้อผิดพลาดในความคิดเห็นหรือเพียงเสริมข้อมูลที่ให้ไว้ในบทความด้วยเทคนิคอื่น ๆ สำหรับการทำงานกับข้อมูลใน R / Python

ดังที่ฉันเขียนไว้ข้างต้น จุดประสงค์ของบทความนี้ไม่ใช่เพื่อกำหนดความคิดเห็นว่าภาษาใดดีกว่า แต่เพื่อลดความซับซ้อนของโอกาสในการเรียนรู้ทั้งสองภาษา หรือหากจำเป็น ย้ายระหว่างภาษาเหล่านั้น

หากคุณชอบบทความนี้ฉันยินดีที่จะมีสมาชิกใหม่ของฉัน YouTube и โทรเลข ช่อง.

Опрос

คุณใช้แพ็คเกจใดต่อไปนี้ในการทำงานของคุณ?

ในความคิดเห็นคุณสามารถเขียนเหตุผลที่คุณเลือกได้

เฉพาะผู้ใช้ที่ลงทะเบียนเท่านั้นที่สามารถเข้าร่วมในการสำรวจได้ เข้าสู่ระบบ, โปรด.

คุณใช้แพ็คเกจการประมวลผลข้อมูลใด (คุณสามารถเลือกได้หลายตัวเลือก)

  • ลด 45,2%เป็นระเบียบเรียบร้อย19

  • ลด 33,3%ข้อมูล.table14

  • ลด 54,8%หมีแพนด้า23

ผู้ใช้ 42 คนโหวต ผู้ใช้ 9 รายงดออกเสียง

ที่มา: will.com

เพิ่มความคิดเห็น