Cú pháp Python R

Tôi là một người dùng R cuồng nhiệt và hiếm khi sử dụng bất kỳ thứ gì khác để phân tích và trực quan hóa dữ liệu. Nhưng trong khi R là lựa chọn của tôi, trong một số trường hợp,

Đó là lý do tại sao tôi muốn xem R và Python hoạt động như thế nào khi so sánh trực tiếp một phân tích đại diện cho những gì tôi thường làm việc với

kết luận

Nói chung, mã Python có thể dễ dàng được dịch sang R và có thể so sánh về độ dài và tính đơn giản giữa hai ngôn ngữ. Mặc dù cú pháp của Python vốn đã sạch hơn/gọn gàng hơn, nhưng chúng ta có thể sử dụng các gói triển khai đường ống trong R và đạt được kết quả tương tự [mặc dù cú pháp được phân tách bằng dấu chấm của Python vẫn dễ gõ hơn nhiều so với sử dụng toán tử đường ống của magrittr]. Đối với vẽ đồ thị và trực quan hóa, tôi vẫn nghĩ rằng ggplot2 của R là hàng đầu về cả cú pháp, khả năng tùy chỉnh và kết quả [phải thừa nhận rằng tôi không biết matplotlib cũng như ggplot]. Về chức năng, tôi không thể tìm thấy sự khác biệt lớn giữa hai ngôn ngữ và tôi có thể nói rằng cả hai đều có giá trị riêng. Đối với tôi, R trở nên tự nhiên hơn vì đó là thứ tôi thông thạo hơn, nhưng tôi có thể hiểu tại sao Python cũng có sức hấp dẫn và tôi nghĩ mình sẽ nỗ lực hơn nữa để sử dụng cả hai ngôn ngữ trong các dự án tương lai của mình

R và Python

R và Python đều là ngôn ngữ nguồn mở được sử dụng trong nhiều lĩnh vực phân tích dữ liệu. Sự khác biệt chính của chúng là R có truyền thống hướng đến phân tích thống kê, trong khi Python thì tổng quát hơn. Cả hai đều bao gồm một bộ sưu tập lớn các gói cho các tác vụ cụ thể và có một cộng đồng đang phát triển cung cấp hỗ trợ và hướng dẫn trực tuyến

Để có cái nhìn tổng quan về các điểm mạnh và điểm yếu tương ứng của ngôn ngữ, hãy xem

Phân tích so sánh dữ liệu bộ gen

Để so sánh trực tiếp R và Python, tôi đang theo dõi “Giới thiệu toàn diện về bộ gen của bạn với ngăn xếp SciPy” của Zhuyi Xue [với một số điều chỉnh nhỏ ở đây và ở đó]. Anh ấy giới thiệu rất hay về dữ liệu nên tôi sẽ không nhắc lại ở đây mà tập trung vào phần so sánh giữa các dòng code

Đối với R, tôi đang làm việc với RStudio, đối với Python với Anaconda và Spyder

con trăn

Đối với phân tích này, chúng tôi cần ngăn xếp SciPy với gấu trúc để sắp xếp dữ liệu và matplotlib để trực quan hóa. Anaconda đã đi kèm với tất cả các gói mà chúng tôi cần. Đầu tiên Zhuyi Xue nhập pandas dưới dạng “pd”, để chúng ta có thể gọi hàm pandas bằng cách thêm tiền tố cho chúng là “pd. ”

R

Mặc dù mã có thể được sao chép với cơ sở R, nhưng tôi thích dplyr hơn để sắp xếp dữ liệu và ggplot2 để trực quan hóa

library[dplyr]
library[ggplot2]

Đọc trong dữ liệu

Đọc dữ liệu dễ dàng trong cả R và Python. Mã chúng ta cần đọc trong tệp có thể so sánh giữa R và Python. Zhuyi Xue đã chỉ định "nén = 'gzip'", nhưng điều này sẽ không cần thiết vì mặc định là suy ra nó từ hậu tố tệp

Một điểm khác biệt lớn trong cú pháp chung mà chúng ta có thể thấy ở đây. Các giá trị đúng/sai kiểu Boolean được viết hoa toàn bộ trong chữ R [TRUE/FALSE], trong khi Python sử dụng cách viết hoa chữ cái đầu tiên [True/False]. Nguyên tắc tương tự áp dụng cho “không”

con trăn

df = pd.read_csv['Homo_sapiens.GRCh38.85.gff3.gz', 
                         compression = 'gzip',
                         sep = '\t', 
                         comment = '#', 
                         low_memory = False,
                         header = None, 
                         names = ['seqid', 'source', 'type', 'start', 'end', 'score', 'strand', 'phase', 'attributes']]
df.head[]

R

df %”. Mặc dù biểu tượng này không dễ gõ, nhưng chức năng của nó thường vượt trội so với cơ sở R, đặc biệt nếu bạn cần chạy nhiều chức năng trên một khung dữ liệu. Tuy nhiên, chỉ với một hoặc hai chức năng, tôi thường giữ cơ sở R vì nó ngắn hơn

con trăn

df.seqid.unique[] # alternatively: df['seqid'].unique[]

R

##   [1] 1          10         11         12         13         14        
##   [7] 15         16         17         18         19         2         
##  [13] 20         21         22         3          4          5         
##  [19] 6          7          8          9          GL000008.2 GL000009.2
##  [25] GL000194.1 GL000195.1 GL000205.2 GL000208.1 GL000213.1 GL000214.1
##  [31] GL000216.2 GL000218.1 GL000219.1 GL000220.1 GL000221.1 GL000224.1
##  [37] GL000225.1 GL000226.1 KI270302.1 KI270303.1 KI270304.1 KI270305.1
##  [43] KI270310.1 KI270311.1 KI270312.1 KI270315.1 KI270316.1 KI270317.1
##  [49] KI270320.1 KI270322.1 KI270329.1 KI270330.1 KI270333.1 KI270334.1
##  [55] KI270335.1 KI270336.1 KI270337.1 KI270338.1 KI270340.1 KI270362.1
##  [61] KI270363.1 KI270364.1 KI270366.1 KI270371.1 KI270372.1 KI270373.1
##  [67] KI270374.1 KI270375.1 KI270376.1 KI270378.1 KI270379.1 KI270381.1
##  [73] KI270382.1 KI270383.1 KI270384.1 KI270385.1 KI270386.1 KI270387.1
##  [79] KI270388.1 KI270389.1 KI270390.1 KI270391.1 KI270392.1 KI270393.1
##  [85] KI270394.1 KI270395.1 KI270396.1 KI270411.1 KI270412.1 KI270414.1
##  [91] KI270417.1 KI270418.1 KI270419.1 KI270420.1 KI270422.1 KI270423.1
##  [97] KI270424.1 KI270425.1 KI270429.1 KI270435.1 KI270438.1 KI270442.1
## [103] KI270448.1 KI270465.1 KI270466.1 KI270467.1 KI270468.1 KI270507.1
## [109] KI270508.1 KI270509.1 KI270510.1 KI270511.1 KI270512.1 KI270515.1
## [115] KI270516.1 KI270517.1 KI270518.1 KI270519.1 KI270521.1 KI270522.1
## [121] KI270528.1 KI270529.1 KI270530.1 KI270538.1 KI270539.1 KI270544.1
## [127] KI270548.1 KI270579.1 KI270580.1 KI270581.1 KI270582.1 KI270583.1
## [133] KI270584.1 KI270587.1 KI270588.1 KI270589.1 KI270590.1 KI270591.1
## [139] KI270593.1 KI270706.1 KI270707.1 KI270708.1 KI270709.1 KI270710.1
## [145] KI270711.1 KI270712.1 KI270713.1 KI270714.1 KI270715.1 KI270716.1
## [151] KI270717.1 KI270718.1 KI270719.1 KI270720.1 KI270721.1 KI270722.1
## [157] KI270723.1 KI270724.1 KI270725.1 KI270726.1 KI270727.1 KI270728.1
## [163] KI270729.1 KI270730.1 KI270731.1 KI270732.1 KI270733.1 KI270734.1
## [169] KI270735.1 KI270736.1 KI270737.1 KI270738.1 KI270739.1 KI270740.1
## [175] KI270741.1 KI270742.1 KI270743.1 KI270744.1 KI270745.1 KI270746.1
## [181] KI270747.1 KI270748.1 KI270749.1 KI270750.1 KI270751.1 KI270752.1
## [187] KI270753.1 KI270754.1 KI270755.1 KI270756.1 KI270757.1 MT        
## [193] X          Y         
## 194 Levels: 1 10 11 12 13 14 15 16 17 18 19 2 20 21 22 3 4 5 6 7 8 .. Y

# with dplyr:
# df %>% select[seqid] %>% unique

  • có bao nhiêu seqids độc đáo?

Để có được số lượng mục nhập duy nhất trong cột “seqid”, chúng ta chỉ cần nối thêm “. shape” vào mã Python ở trên. Trong R, chúng ta có thể bọc mã R ở trên bằng hàm “length[]” hoặc sử dụng dplyr và piping thay thế. Nếu chúng ta sử dụng cái sau, chúng ta cần sử dụng hàm “nrow[]” vì cơ sở R trả về một vectơ, trong khi dplyr trả về một khung dữ liệu. Ở đây, chúng ta có thể thấy rằng với hai chức năng, sử dụng dplyr vẫn còn nhiều mã hơn một chút nhưng nó đã trông gọn gàng hơn nhiều

con trăn

R

# with dplyr:
# df %>% select[seqid] %>% unique %>% nrow

Để đếm tần suất của từng mục nhập duy nhất trong cột “nguồn”, chúng tôi sử dụng hàm “value_counts[]” trong Python và hàm “table[]” trong R. Hai chức năng này khác nhau về cách chúng sắp xếp bảng đầu ra. value_counts[] sắp xếp theo tần suất giảm dần, trong khi R sắp xếp các biến theo thứ tự bảng chữ cái. Để sắp xếp thứ tự dữ liệu như trong Python, chúng ta cần thêm hàm “sort[]” vào mã R của mình

con trăn

R

________số 8

## 
##         havana ensembl_havana        ensembl              .        mirbase 
##        1441093         745065         228212         182510           4701 
##         GRCh38          insdc 
##            194             74

df = pd.read_csv['Homo_sapiens.GRCh38.85.gff3.gz', 
                         compression = 'gzip',
                         sep = '\t', 
                         comment = '#', 
                         low_memory = False,
                         header = None, 
                         names = ['seqid', 'source', 'type', 'start', 'end', 'score', 'strand', 'phase', 'attributes']]
df.head[]
0

Bao nhiêu bộ gen không hoàn chỉnh?

Chúng tôi hiện đang đặt lại khung dữ liệu ban đầu của mình và gán cho nó một tên đối tượng mới bằng “ = “ hoặc “ % select[seqid] %>% unique

5

# with dplyr:
# df %>% select[seqid] %>% unique
6

Và bây giờ chúng tôi sản xuất cốt truyện cuối cùng. một biểu đồ đường của chiều dài nhiễm sắc thể theo số lượng gen trên mỗi nhiễm sắc thể. Đối với Python, chúng tôi lại sử dụng matplotlib và đối với R các gói ggplot2. Bởi vì Zhuyi Xue tạo một khung dữ liệu mới và điều chỉnh phần nào cốt truyện, mã ggplot2 của chúng tôi ở đây đơn giản và gọn gàng hơn

\r trong Python là gì?

Trong các chuỗi Python, dấu gạch chéo ngược "\" là một ký tự đặc biệt, còn được gọi là ký tự "thoát". Nó được sử dụng để đại diện cho các ký tự khoảng trắng nhất định. "\t" là một tab, "\n" là một dòng mới và "\r" là dấu xuống dòng .

F và r trong Python là gì?

Ký tự 'f' ở đầu chuỗi ký tự tương tự như cách Python sử dụng 'b' để biểu thị chuỗi byte hoặc tiền tố 'r' cho chuỗi thô . Sự dễ dàng của chuỗi f là bạn bắt đầu chuỗi mà bạn muốn định dạng bằng f và theo sau là chuỗi.

Làm cách nào để sử dụng nhập lại trong Python?

Python có một mô-đun tên là re để làm việc với RegEx. Đây là một ví dụ. nhập lại mẫu = '^a. s$' test_string = 'vực thẳm' kết quả = lại. khớp [mẫu, test_string] nếu kết quả. print["Tìm kiếm thành công. "] khác. print["Tìm kiếm không thành công. "]

Làm cách nào để định dạng chuỗi thô Python?

Chuỗi thô Python được tạo bằng cách tiền tố một chuỗi ký tự bằng 'r' hoặc 'R' . Chuỗi thô Python xử lý dấu gạch chéo ngược [\] dưới dạng ký tự bằng chữ. Điều này hữu ích khi chúng ta muốn có một chuỗi chứa dấu gạch chéo ngược và không muốn nó được coi là một ký tự thoát.

Chủ Đề