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, Show Đó 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ậnNó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à PythonR 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
Đọ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
R
kiểm tra dữ liệuĐiều đầu tiên chúng tôi muốn biết từ dữ liệu là có bao nhiêu mục nhập duy nhất trong cột “seqid” Ở đây, chúng ta đã có thể thấy sự khác biệt chính về cú pháp giữa R và Python Python nối tên đối tượng (“df) với tên cột và các chức năng mà chúng ta muốn chạy trên cột này theo cách tuần tự, được phân tách bằng dấu chấm. Cơ sở R sử dụng các hàm lồng nhau, trong đó mỗi hàm được gọi với “function_name()” và chúng tôi chỉ định các cột với “object_name$column_name” Tuy nhiên, cả R và Python cũng có thể gọi các cột trong một khung dữ liệu bằng “[ ]” với điểm khác biệt là Python theo mặc định tập hợp con các cột dữ liệu df[“seqid”], trong khi R luôn cần thông số chỉ mục cho các hàng và cột, được phân tách bằng “, . e. g. df[, “seqid”] sẽ tập hợp con mỗi hàng và chỉ cột có tên “seqid” Việc gọi hàm tuần tự thực sự rất tiện dụng, nó làm cho mã dễ đọc và dễ hiểu hơn so với rất nhiều hàm và dấu ngoặc đan xen. Nhưng mặc dù đây không phải là khái niệm về cơ sở R, nhưng dplyr sử dụng nguyên tắc magrittr của các hàm xâu chuỗi với ký hiệu ống “%>%”. 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
R
Để 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
Để đế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
0Bao 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 “ <- “ Để tập hợp con khung dữ liệu để chỉ giữ các hàng có nội dung “GRCh38” trong cột “nguồn”, có một số cách để thực hiện việc này trong R. cách có thể so sánh trực tiếp với cách nó được thực hiện trong Python cũng là sử dụng chỉ mục dấu ngoặc vuông. Tuy nhiên, có hai giải pháp thanh lịch hơn. 1) hàm cơ sở R “subset()” hoặc dplyr “filter()”. Nhưng với ví dụ ngắn này, không có sự khác biệt lớn giữa ba Python “shape” cung cấp cho chúng ta thông tin giống như hàm R “dim()”. khung dữ liệu của chúng tôi có bao nhiêu hàng và cột Để xem trước một tập hợp con ngẫu nhiên gồm 10 hàng từ khung dữ liệu của chúng tôi, chúng tôi sử dụng hàm “sample()” của Python và hàm “sample_n()” của dplyr con trăn 1R 2 3 4
Bây giờ chúng tôi muốn tạo một cột mới có tên là “chiều dài”. Nó phải chứa chiều dài gen, tôi. e. khoảng cách trong các cặp cơ sở giữa điểm bắt đầu và điểm kết thúc trên nhiễm sắc thể ("cột bắt đầu" và "cột" kết thúc). Trong R, trước tiên chúng ta không cần sao chép khung dữ liệu nhưng phần còn lại của mã rất giống nhau. chúng tôi xác định tên cột mới cho khung dữ liệu và gán giá trị của nó bằng cách trừ các giá trị của “bắt đầu” khỏi các giá trị của cột “kết thúc” (+1). Ở đây, chúng ta có thể thấy lại rằng trong Python, chúng ta sử dụng dấu chấm để xác định cột, trong khi R sử dụng ký hiệu Đô la Tổng của tất cả các độ dài được tính bằng hàm “sum()” trong cả hai ngôn ngữ con trăn 5R 6Tiếp theo, chúng tôi muốn tính tỷ lệ bộ gen không nằm trên cụm nhiễm sắc thể chính. Đối với điều đó, trước tiên chúng tôi xác định một chuỗi ký tự với các nhiễm sắc thể chính. 1 đến 23, X, Y và MT (nhiễm sắc thể ty thể). Xác định chuỗi này dễ dàng hơn một chút trong R Chúng tôi sẽ sử dụng chuỗi này để tính tổng độ dài của khung dữ liệu được đặt con và chia nó cho tổng độ dài của toàn bộ khung dữ liệu. Đối với cài đặt con, chúng tôi sử dụng hàm “isin()” của Python, tương ứng với “%in%” của R con trăn 7R 8Có bao nhiêu gen?Ở đây, chúng tôi lại sử dụng các chức năng tương tự như trên để thiết lập khung dữ liệu, yêu cầu kích thước của nó, in 10 dòng ngẫu nhiên và yêu cầu tần suất của từng mục duy nhất trong cột "loại". Đối với cái sau, tôi đang sử dụng cơ sở R trên dplyr, vì gõ nhanh hơn con trăn 9R 0 1 2 3Bây giờ chúng tôi muốn tập hợp con khung dữ liệu thành các hàng có thuộc tính “gen” trong cột “loại”, xem 10 dòng ngẫu nhiên từ cột “thuộc tính” và lấy kích thước khung dữ liệu con trăn 4R 5 6
Tôi không biết liệu có cách nào dễ dàng hơn trong Python hay không nhưng trong R, chúng ta không cần tạo các hàm trợ giúp lớn xung quanh nó. Chúng ta có thể chỉ cần sử dụng “gsub()” để xác định biểu thức chính quy cho những gì chúng ta muốn trích xuất. Điều này làm cho mã R ngắn hơn và dễ hiểu hơn. Sau đó, chúng tôi bỏ cột "thuộc tính" ban đầu Để xem khung dữ liệu, lần này chúng tôi sử dụng “head()” con trăn 7R 8 9Tiếp theo, chúng tôi muốn biết có bao nhiêu tên gen và ID gen duy nhất. Như trên chúng ta sử dụng các hàm “unique()”, “shape()” (Python) và “length()” (R) Bảng đếm tên gen lại có thể được lấy bằng hàm R “table()”, mặc dù Zhu Yi Xue sử dụng cách tiếp cận hơi khác. đầu tiên anh ấy nhóm cột “gene_name”, sau đó đếm và sắp xếp Cuối cùng, chúng ta có thể tính toán tỷ lệ các gen xuất hiện nhiều hơn một lần và chúng ta có thể xem xét kỹ hơn về gen SCARNA20 con trăn 0R 1 2 3 4 5 6 7 8 9Bao lâu là một gen điển hình?Để tính độ dài của gen, chúng tôi sử dụng mã giống như trước đây. Tóm tắt của R () không hoàn toàn giống với mô tả () của Python nhưng nó đủ gần con trăn 0R 1 2Bây giờ chúng tôi tạo biểu đồ đầu tiên, hiển thị biểu đồ chiều dài gen. Trong cơ sở R, bạn thực sự không thể vẽ biểu đồ với thang đo trục y logarit (ít nhất là không phải không điều chỉnh thủ công đầu ra hist() nhưng dù sao thì nó cũng không được khuyến nghị vì 0 sẽ trở thành -Inf). Nhưng chúng ta có thể làm điều đó dễ dàng với ggplot2 với “scale_y_log10()”. Mã chúng tôi cần cho ggplot2 dài hơn một chút so với matplotlib. Tất nhiên, chúng tôi có thể tùy chỉnh thêm cốt truyện của mình nhưng hiện tại, hãy giữ cho nó đơn giản con trăn 3R 4Bây giờ, chúng tôi tập hợp con khung dữ liệu để chỉ giữ các hàng trong đó cột "độ dài" chứa các giá trị lớn hơn 2 triệu và sắp xếp nó theo chiều dài gen giảm dần. Để xem các gen ngắn nhất, chúng tôi sắp xếp khung dữ liệu gốc và xem 6 hàng đầu tiên. Thay vì “sort()”, lần này chúng tôi sử dụng chức năng “arrange()” của dplyr (trước đây tôi không sử dụng chức năng này vì nó chỉ có thể được áp dụng cho các khung dữ liệu) con trăn 5R 6 7 8 9Phân bố gen giữa các nhiễm sắc thểSố lượng gen trên mỗi nhiễm sắc thể được tính bằng các hàm “subset()”, “table()” và “sort()” như đã mô tả trước đó con trăn 0R 1 2Để xem tất cả các gen nằm trên nhiễm sắc thể của ty thể, chúng tôi đặt khung dữ liệu đầu tiên theo hai điều kiện. Trong cả R và Python, điều này được thực hiện với ký hiệu dấu và nhưng trong R, chúng ta không cần dấu ngoặc xung quanh các điều kiện riêng lẻ con trăn 3R 4 5Chúng ta cũng có thể lấy độ dài nhiễm sắc thể từ khung dữ liệu. Chúng tôi lại tập hợp lại chỉ các nhiễm sắc thể chính, sau đó loại bỏ các cột không mong muốn và sắp xếp theo độ dài con trăn 6R 7 8Bây giờ, chúng tôi hợp nhất khung dữ liệu với số lượng gen trên mỗi nhiễm sắc thể với khung dữ liệu có độ dài nhiễm sắc thể. Bởi vì hàm “table()” của R tạo ra một vectơ, trước tiên chúng ta cần chuyển đổi nó thành một khung dữ liệu và xác định tên cột. Sau đó, chúng ta sử dụng hàm “merge()” và trỏ đến tên cột muốn gộp theo con trăn 9R 0 1 2 3Để tính toán mối tương quan giữa chiều dài và số lượng gen, chúng tôi đặt khung dữ liệu đã hợp nhất thành hai cột đó và sử dụng hàm “corr()” (Python) hoặc “cor()” (R) con trăn 4R 5 6Và 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. |