[SHORT SHARE] CON ĐƯỜNG HỌC KHOA HỌC DỮ LIỆU CỦA MỘT SINH VIÊN KINH TẾ
Helu cả nhà, nhân dịp bài đăng về Data Scientist được quá trời bạn quan tâm và hỏi chị về con đường trở thành nhà khoa học dữ liệu, nay chị giới thiệu cho các em bài viết của một bạn học trái ngành nhé. :D
Bật mí nhỏ là ngày xưa chị cũng học Tài chính ngân hàng ở FTU sau đó chuyển qua làm security cho Microsoft và Facebook, nên việc trái ngành là hoàn toàn có thể nha. Nhưng schofans sẽ phải cố gắng nhiều lắm đấy!!
📘 Bạn Giang Phương Hoa từng học Đại học Ngoại Thương Hà Nội, học Thạc sỹ tại Imperial College London, hiện đang làm việc tại Microsoft AI Research London chia sẻ về con đường trở thành Data Scientist của mình.
Chào cả nhà,
Cảm ơn anh Tiệp đã tạo cơ hội cho mình viết bài này để chia sẻ. Follow Forum Machine Learning cơ bản đã lâu mà chưa đóng góp được gì nhiều.
Dạo gần đây mình có gặp nhiều bạn trẻ muốn theo nghề Data Science và PM mình hỏi về con đường mình đến với Data Science và bắt đầu học Machine Learning như thế nào. Vì thế mình đã xin phép anh Tiệp để viết bài ở đây, chia sẻ cùng mọi người và hy vọng sẽ giúp ích cho các bạn đang tự học Data Science, hoặc có background trái ngành trái nghề và muốn làm Data Science một cách nghiêm túc. Bài viết sẽ rất vớ vẩn với các chuyên gia 😊.
Đây là con đường không hề dễ dàng nếu bạn không học Khoa học máy tính hay Toán từ bậc ĐH nhưng cũng không có nghĩa là không thể. **Everything is impossible until you do it.**
📘 Học Ngoại Thương HN
Con đường mình đến với Data Science không hề bằng phẳng và mình tin nhiều bạn ở đây cũng vậy. Mình học Ngoại Thương chuyên ngành Tài chính. Cũng tự coi là có chút background về Toán Cao Cấp và Xác suất thống kê nhưng sẽ chỉ là muối bỏ bể so với các bạn học bài bản về Toán Lý Thuyết hay Xác suất thống kê. Rất may là trong quá trình học Ngoại Thương thì mình nhận ra môn học mà mình yêu thích nhất là môn Phân tích dữ liệu tài chính. Cảm giác nhìn những con số rồi tìm tòi ra một ý tưởng gì đó mới rồi trình bày bảng biểu vô cùng hấp dẫn (mãi sau này mình mới biết khái niệm đó gọi là insights 😊). Vì thế mình có tham gia một số cuộc thi sinh viên về phân tích dữ liệu.
📘 Nielsen Case Competition
Hồi đó hình như chỉ có Nielsen Case Competition–cuộc thi dành cho sinh viên của Nielsen, một công ty data consulting khá lớn tại Mỹ. Mình cũng may mắn cùng với các bạn trong nhóm giành giải của cuộc thi đó và bắt đầu đầu quân cho Nielsen để làm Chuyên viên phân tích dữ liệu 😊–Insight Analyst. Thời gian làm việc cho Nielsen là thời gian mình luôn cảm thấy là thời gian tạo một nền tảng vững chắc cho bản thân trong nghề làm Analyst. Nếu bạn google Nielsen thì Nielsen là một công ty nghiên cứu thị trường truyền thống, dữ liệu cung cấp chủ yếu bằng survey và phỏng vấn người tiêu dùng. Thời đó khái niệm Dữ liệu lớn hay là Khoa học máy tính vẫn còn xa vời với mình. Nhưng chính từ thời gian làm việc giống như một nhân viên tư vấn dữ liệu đã giúp mình hiểu được ứng dụng thực sự của dữ liệu là gì? Làm sao để dữ liệu có ích cho doanh nghiệp? Mình cũng học được cách từ một câu hỏi lớn và mơ hồ, làm sao để chia nhỏ câu hỏi đó thành những câu hỏi nhỏ hơn mà bạn có thể translate (phiên dịch) thành một câu hỏi có thể trả lời bằng dữ liệu sẵn có? Mình cũng hiểu khái niệm connecting the dots (xâu chuỗi) dữ liệu là gì? Vì vậy, đừng tự nghĩ rằng công việc mình đang làm không có gì hấp dẫn, không có gì liên quan đến Machine Learning hay Dữ liệu lớn mà nản lòng. Nhiều lúc bạn sẽ ngạc nhiên về những gì bạn học được từ các dirty jobs trong cuộc sống.
📘 Bắt đầu con đường học Khoa học dữ liệu
Sau một thời gian làm việc ở Nielsen thì mình nhận thấy hạn chế của các phương pháp nghiên cứu truyền thống (limited samples, biased trong cách đặt câu hỏi và trả lời). Vì thế mình bắt đầu tìm hiểu phương pháp mới để có thể thực sự phân tích user behavior mà không cần phải “hỏi” họ. Và thế là mình khám phá ra một thế giới mới là Khoa học dữ liệu (Data Science-DS). Thời điểm mình bắt đầu tìm hiểu về DS và học về DS thì mọi thứ còn khá mới mẻ (2013) cũng chưa có nhiều các khóa học open source như bây giờ. Mình hoàn toàn tự học mọi thứ từ xác suất thống kê (may mà trong công việc cũng có dùng), toán, lập trình, hệ thống dữ liệu. Mình hiểu là với các bạn không có nền tảng về Khoa học máy tính như mình, việc các bạn làm một cách bản năng là cố gắng lấp đầy lỗ hổng về lĩnh vực này càng nhiều càng tốt. Vì thế, các bạn sẽ cố gắng học Python, học R hay học các ngôn ngữ lập trình. Điều này dẫn đến một hệ quả là các bạn bị tool-driven. Học Python không khó, bỏ ra 6 tháng học một cách tập trung, các bạn sẽ viết được những dòng codes như mẫu. Nhưng điều mình hay gặp đó là các bạn học Python hay R như Kinh Thánh vậy. Nhiều bạn nghĩ rằng chỉ cần biết Python hay R là có thể làm được phân tích dữ liệu rồi. Thực ra thì không phải. Mình rất may mắn là trong thời kỳ đầu bắt đầu học, cảm thấy hoang mang quá thì một lần đi gặp khách hàng, gặp một bạn đã làm quantitative analyst ở Wall Street nhiều năm. Bạn ấy thấy mình ôm một quyển Python Fundamentals dầy cộp thì mới bảo “Mày nên học cách nghĩ, đừng học cách làm vội”. Chỉ một câu nói nhỏ mà mình nghĩ là có thể trao thưởng huy chương cho bạn ấy vì đã cứu rỗi cuộc đời mình. 😊. Và quyển sách đã thay đổi cuộc đời mình là How to think like a Computer Scientist. Mình đã có dịp gặp tác giả của cuốn sách này và nói với anh ấy là “You saved my life. 😊”.
✏ Thực sự thì đối với người học trái ngành, trái nghề, vấn đề lớn nhất là thay đổi cách suy nghĩ và sự tự ti. Bạn có xuất phát điểm không giống người khác và thế là tìm mọi cách để làm được NHƯ người ta mà quên mất mục đích ban đầu của mình là gì. Sau khi đọc cuốn sách trên thì mình hiểu ra vấn đề vì sao mình học Python đến hai tháng mà vẫn rất thụ động, chỉ có thể viết những gì code mẫu mà gặp vấn đề mới thì chịu. Đó là vì mình không suy nghĩ theo cách máy tính có thể suy nghĩ. Vì không think the language nên mình cũng không thể speak the language. Điều này cũng giống như lúc bạn học Tiếng Anh hay ngoại ngữ vậy, không hiểu cách tư duy của ngôn ngữ thì bạn sẽ thành học vẹt. Vì thế mình dành hẳn ba tháng chỉ để học computational thinking và computer logic, về những thứ như directory, class, variables, binary operations, algorithmic thinking, big O notation, v.v.. Điểm này sẽ không thể nào so sánh được với các bạn học Khoa học máy tính trong 3-4 năm nhưng cũng đủ để mình học lập trình một cách đúng hướng (programming in the right way). Mình đã nói chuyện với nhiều bạn tự học programming và nhiều bạn bị cuốn theo cách học Google knowledge–có vấn đề gì thì google–stackoverflows có câu trả lời sẵn. Cuối cùng thì chương trình cũng vẫn chạy, các bạn vẫn thấy hạnh phúc, nhưng lần sau gặp vấn đề khác các bạn không tự trả lời được. Cũng giống như hồi nhỏ ở trường học “How are you?” và trả lời “I’m fine, thank you”. Đến lúc người ta hỏi “How do you feel today?” thì không biết trả lời thế nào.
✏ Lập trình cũng chỉ là công cụ. Cái cốt lõi của Data Science và Machine Learning (ML) vẫn là Toán và Xác suất thống kê. Về điểm này thì forum và cuốn sách của anh Tiệp sẽ rất hữu ích. Nền tảng Toán của mình không tệ vì cũng từng học chuyên Toán. Tuy nhiên, cũng giống như câu chuyện lập trình thì mình cảm thấy cũng cần học ML bằng cách think in ML ways. Các thuật toán quan trọng trong ML hầu như đều đã được viết và tạo thành thư viện nên vài bạn có thể lười chỉ cần from sckitlearn import * và thế là ung dung chạy một cái chương trình ML. Nhưng để thực sự làm DS/ML thì nhiều khi nên bắt đầu ôn lại khái niệm đạo hàm, ma trận và toán cơ bản.
📘 Học Thạc sỹ tại Imperial College London
Một điểm nữa mà nhiều bạn rất hay quên hoặc bỏ qua khi học DS vì nghĩ nó nhàm chán đó là database structure và data manipulation. Mình cũng vấp phải vấn đề tương tự khi mình bắt đầu học Thạc sỹ về Data Science ở Imperial College London. Ngay Kỳ 1 thì trong chương trình có một môn học mà rất nhiều bạn bỏ lớp (mình cũng cúp cua mấy lần) đó là Database Admin. Môn này phải nói là cực kỳ chán vì nó sẽ không có kết quả ngay cho bạn như khi bạn chạy môt chương trình máy tính hay vẽ biểu đồ, đem lại cảm giác cực kỳ cool vì I did something. Tuy nhiên khi bắt đầu thực sự làm dự án nghiên cứu ở Data Science Institute in Imperial College (mình làm cộng tác viên) thì mình có thể thực sự hiểu được tầm quan trọng kinh khủng của môn này. Bạn không thể thi triển được thuật toán hay tối ưu hóa thuật toán nếu không hiểu cấu trúc dữ liệu hay database relation, handle missing values, organizing the table in long/wide format, normalization of the database, etc.** Những việc nhỏ nhặt, *dirty jobs, tốn thời gian vậy thực ra là vô cùng quan trọng. Khi bạn hiểu cấu trúc dữ liệu thì bạn mới quay lại bước 1 được: Từ câu hỏi lớn làm sao để thi triển ra nhiều câu hỏi nhỏ và trả lời? Rốt cuộc thì DS chính là công cụ để trả lời câu hỏi mà thôi. Đừng quên mục đích ban đầu!
📘 Microsoft AI Research
Sau rất nhiều chông gai thì bây giờ mình được gọi là data scientist tại Microsoft AI Research. Chặng đường học thì vẫn còn rất dài, bây giờ mình vẫn phải đọc forum Machine Learning thường xuyên để hiểu thêm. Dưới đây là một ít bài học mình đã đúc kết sau 4 năm ròng rã mất nhiều máu (ngã cầu thang mấy lần vì mải nghĩ) và nước mắt (khó quá làm thế nào), hy vọng sẽ giúp ích cho nhiều bạn có nền tảng giống mình.
⚠️ Đừng chạy theo buzzwords, cuộc sống nhiều cám dỗ, hãy bắt đầu từ những thứ căn bản nhất. Thinking và mindset là những thứ quan trọng nhất. Python hay R hay Java cũng chỉ là công cụ.
⚠️ Machine Learning là học máy, trước khi làm ML nếu bạn không có nền tảng về Computer Science thì hãy thử tìm hiểu về Computational thinking và computer logic.
⚠️ Data science rất rộng lớn. Hãy thử nghĩ về một mảng nhỏ mà bạn muốn theo đuổi: nhiều người có thể theo đuổi Optimization, mình thì chọn cho mình con đường đã đưa mình đến với DS ngay từ đầu: User Behavior Analytics. Điều này sẽ giúp các bạn định hình và tập trung vào những mảng lý thuyết liên quan mật thiết đến mảng này. Nghe có vẻ thực dụng nhưng mình chủ yếu tìm hiểu về các mô hình/thuật toán liên quan đến time series, sequential pattern mining, pattern recognition, clustering/classification, association mining, etc. vì đây sẽ là những thứ giúp bạn tìm hiểu về User Behavior. Các thuật toán simulation như Monte Carlo hay các thuật toán tối ưu khác mình không biết quá sâu.
📘 Chúc mọi người học Machine Learning vui. 😊
Nguồn: Machine Learning Cơ Bản
Hết rồi, các em đã có cái nhìn rõ ràng hơn về ngành khoa học này chưa?
❤ Tag và chia sẻ bài viết đến bạn bè em nhé ❤
#HannahEd #duhoc #hocbong #sanhocbong #scholarshipforVietnamesestudents
同時也有8部Youtube影片,追蹤數超過12萬的網紅prasertcbs,也在其Youtube影片中提到,ดาวน์โหลด Jupyter Notebook ที่ใช้ในคลิปได้ที่: https://github.com/prasertcbs/pandas/blob/main/pandas_clean_multilevel_table.ipynb เชิญสมัครเป็นสมาชิกข...
「data table r」的推薦目錄:
- 關於data table r 在 Scholarship for Vietnamese students Facebook 的最佳貼文
- 關於data table r 在 prasertcbs Youtube 的最讚貼文
- 關於data table r 在 prasertcbs Youtube 的精選貼文
- 關於data table r 在 prasertcbs Youtube 的最佳貼文
- 關於data table r 在 [心得] 資料整理套件介紹-第一章data.table - 看板R_Language 的評價
- 關於data table r 在 7 探索式資料分析| 資料科學與R語言 - 曾意儒Yi-Ju Tseng 的評價
- 關於data table r 在 R's data.table package extends data.frame - GitHub 的評價
- 關於data table r 在 Data Transformation with data.table : : CHEAT SHEET - GitHub 的評價
- 關於data table r 在 Vlookup with data.table in R - Stack Overflow 的評價
- 關於data table r 在 Data Transformation with data.table [Cheat Sheet] - Pinterest 的評價
data table r 在 prasertcbs Youtube 的最讚貼文
ดาวน์โหลด Jupyter Notebook ที่ใช้ในคลิปได้ที่: https://github.com/prasertcbs/pandas/blob/main/pandas_clean_multilevel_table.ipynb
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
playlist สอน Jupyter Notebook ► https://www.youtube.com/playlist?list=PLoTScYm9O0GErrygsfQtDtBT4CloRkiDx
playlist สอน Python สำหรับ data science ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFVfRk_MmZt0vQXNIi36LUz
playlist สอน seaborn ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGC9QvLlrQGvMYatTjnOUwR
playlist สอน matplotlib ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGRvUsTmO8MQUkIuM1thTCf
playlist สอนภาษาไพธอน Python เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
playlist สอนภาษาไพธอน Python OOP ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEIZzlTKPUiOqkewkWmwadW
playlist สอน Python 3 GUI ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFB1Y3cCmb9aPD5xRB1T11y
playlist สอนการใช้งานโปรแกรม R: https://www.youtube.com/playlist?list=PLoTScYm9O0GGSiUGzdWbjxIkZqEO-O6qZ
playlist สอนภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVIC
#prasertcbs #pandas #googlesheets
data table r 在 prasertcbs Youtube 的精選貼文
ดาวน์โหลด Jupyter Notebook ที่ใช้ในคลิปได้ที่: https://github.com/prasertcbs/pandas/blob/main/pandas_dataframe_to_html_markdown.ipynb
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
playlist สอน Jupyter Notebook ► https://www.youtube.com/playlist?list=PLoTScYm9O0GErrygsfQtDtBT4CloRkiDx
playlist สอน Python สำหรับ data science ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFVfRk_MmZt0vQXNIi36LUz
playlist สอน seaborn ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGC9QvLlrQGvMYatTjnOUwR
playlist สอน matplotlib ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGRvUsTmO8MQUkIuM1thTCf
playlist สอนภาษาไพธอน Python เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
playlist สอนภาษาไพธอน Python OOP ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEIZzlTKPUiOqkewkWmwadW
playlist สอน Python 3 GUI ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFB1Y3cCmb9aPD5xRB1T11y
playlist สอนการใช้งานโปรแกรม R: https://www.youtube.com/playlist?list=PLoTScYm9O0GGSiUGzdWbjxIkZqEO-O6qZ
playlist สอนภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVIC
#prasertcbs #pandas #googlesheets
data table r 在 prasertcbs Youtube 的最佳貼文
เชิญสมัครเป็นสมาชิกของช่องนี้ได้ที่ ► https://www.youtube.com/subscription_center?add_user=prasertcbs
สอน JupyterLab ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEour5CiwfSnoutg3RyA76O
สอน Jupyter Notebook ► https://www.youtube.com/playlist?list=PLoTScYm9O0GErrygsfQtDtBT4CloRkiDx
สอน Pandas ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGsOHPCeufxCLt-uGU5Rsuj
สอน Machine learning ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH_3VrwwnQafwWQ6ibKnEtU
สอน Python สำหรับ data science ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFVfRk_MmZt0vQXNIi36LUz
สอน Numpy ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFNEpzsCBEnkUwgAwOu_PWw
สอน matplotlib ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGRvUsTmO8MQUkIuM1thTCf
สอน seaborn ► https://www.youtube.com/playlist?list=PLoTScYm9O0GGC9QvLlrQGvMYatTjnOUwR
สอนภาษาไพธอน Python เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GH4YQs9t4tf2RIYolHt_YwW
สอนภาษาไพธอน Python OOP ► https://www.youtube.com/playlist?list=PLoTScYm9O0GEIZzlTKPUiOqkewkWmwadW
สอน Python 3 GUI ► https://www.youtube.com/playlist?list=PLoTScYm9O0GFB1Y3cCmb9aPD5xRB1T11y
สอนการใช้งานโปรแกรม R: https://www.youtube.com/playlist?list=PLoTScYm9O0GGSiUGzdWbjxIkZqEO-O6qZ
สอนภาษา R เบื้องต้น ► https://www.youtube.com/playlist?list=PLoTScYm9O0GF6qjrRuZFSHdnBXD2KVIC
#prasertcbs_jupyterlab #preasertcbs_ds
data table r 在 7 探索式資料分析| 資料科學與R語言 - 曾意儒Yi-Ju Tseng 的推薦與評價
7.2 data.table. data.table是data.frame資料框型別的延伸,如要使用必須安裝並載入data.table(Dowle ... ... <看更多>
data table r 在 R's data.table package extends data.frame - GitHub 的推薦與評價
data.table is widely used by the R community. It is being directly used by hundreds of CRAN and Bioconductor packages, and indirectly by thousands. It is ... ... <看更多>
data table r 在 [心得] 資料整理套件介紹-第一章data.table - 看板R_Language 的推薦與評價
data.table包含的東西很多
但是很多東西都可以被plyr, dplyr的function取代
所以data.table很多function,我都不太熟
這裡簡單介紹一下data.table
如果你想要了解更多,請自行去看manual
要了解data.table,我們可以先從package的description來看
"Fast aggregation of large data (e.g. 100GB in RAM), fast ordered joins,
fast add/modify/delete of columns by group using no copies at all, list
columns and a fast file reader (fread). Offers a natural and flexible syntax,
for faster development."
簡單翻譯一下,大資料(例如,記憶體中大小為100GB的資料)的在不創建複本下,根據
類別(group)變數進行快速整合、排列、合併、增加/修改/刪除行資料等動作。...
重點就在不創建複本,因為R修改data.frame時,會先複製一次再修改,
然後傳回複本,因此,會浪費不少記憶體,而且很容易拖累速度,因此,
data.table提供這方面更有效率的操作。
(這方面的速度比較可以參考#1LeXNCKV (R_Language) [分享] 資料數據處理修改)
1. data.table
這個函數基本上data.frame使用差不多,而且data.frame的參數都可以放進
像是很常用到的stringsAsFactors,只是data.table預設是FALSE,
這點跟data.frame不同,使用上需要注意,範例如下:
` R
t = data.table(a = LETTERS[1:3])
str(t)
# Classes ‘data.table’ and 'data.frame': 3 obs. of 1 variable:
# $ a: chr "A" "B" "C"
# - attr(*, ".internal.selfref")=<externalptr>
t2 = data.frame(a = LETTERS[1:3])
str(t2)
# 'data.frame': 3 obs. of 1 variable:
# $ a: Factor w/ 3 levels "A","B","C": 1 2 3
`
第二個差異是data.table不包含rownames,
在轉換data.frame到data.table時,要注意這點
下一章會提到把rowname轉成column的函數
附註一條:data.table都包含data.frame的class
可以用在data.frame的方法都可以在data.table上實現
但是data.table還多了一個引數 "key",我對它的解讀是一種索引的概念
而透過索引的動作都會被加速。
key可以是一個變數,也可以是多個變數,這點看個人使用。
再來,就是data.table的'[',這部分跟data.frame不太一樣
所以需要特別說明,但是這部分,我自己也不是很熟悉,我只能大概講過
a. 我們很常在data.frame做取多行的動作,在data.table是不可行的,舉例:
` R
vars = data.frame(X = rnorm(3), Y = rnorm(3), Z = rnorm(3))
vars[,1:2]
# X Y
# 1 -0.5677575 2.1831285
# 2 -0.7161529 0.3714633
# 3 1.2665120 0.7837508
vars_dt = data.table(vars)
vars_dt[,1:2]
# [1] 1 2
`
但是你想這麼做,怎麼辦? 加上with=FALSE就好了,或是用list包住column name
` R
vars_dt[,1:2,with=FALSE]
# X Y
# 1: -0.5677575 2.1831285
# 2: -0.7161529 0.3714633
# 3: 1.2665120 0.7837508
vars_dt[j=list(X, Y)]
# X Y
# 1: -0.5677575 2.1831285
# 2: -0.7161529 0.3714633
# 3: 1.2665120 0.7837508
`
剩下像是by, .SD, .SDcols等自行?data.table查看吧
data.table的部分就先說明到這,接下來,講一些相關的function
b. setkey: 改變key的值, setnames: 改變column name,但是一樣不製造複本
c. copy: 製造data.table的複本
d. setDF: 在不製作複本下,把data.table的class改為data.frame
舉例:
` R
DT = data.table(X = rnorm(3), Y = rnorm(3))
str(DT)
# Classes ‘data.table’ and 'data.frame': 3 obs. of 2 variables:
# $ X: num -1.3738 0.167 -0.0578
# $ Y: num 0.487 1.728 0.646
# - attr(*, ".internal.selfref")=<externalptr>
setDF(DT)
str(DT)
# 'data.frame': 3 obs. of 2 variables:
# $ X: num -1.3738 0.167 -0.0578
# $ Y: num 0.487 1.728 0.646
DT = data.table(X = rnorm(3), Y = rnorm(3))
tracemem(DT)
# [1] "<0000000006A1BE28>"
setDF(DT) # 沒有複製的動作
DF = data.frame(DT)
retracemem(DF, retracemem(DT))
# tracemem[<0000000006A1BE28> -> 0x00000000061ec928]:
## 記憶體位置就發生改變了,就複製了DT一次
`
這部分可能不太懂,不過沒關係,記住一點,要轉成data.frame用setDF就好
e. setDT: setDF的反向
f. duplicated, unique
duplicated提供一個跟data.table列數相等長度的邏輯值向量,
TRUE代表前面有一樣的列,FALSE代表沒有
unique則是留下沒有重複的列,舉例來說:
` R
set.seed(100)
DT = data.table(A = rbinom(5, 1, 0.5), B = rbinom(5, 1, 0.5))
# A B
# 1: 0 0
# 2: 0 1
# 3: 1 0
# 4: 0 1
# 5: 0 0
duplicated(DT)
# [1] FALSE FALSE FALSE TRUE TRUE
unique(DT)
# A B
# 1: 0 0
# 2: 0 1
# 3: 1 0
DT[!duplicated(DT)]
# A B
# 1: 0 0
# 2: 0 1
# 3: 1 0
`
不過unique還有更多功能,它可以選擇變數做unique,舉例來說:
` R
unique(DT, by = "A")
# A B
# 1: 0 0
# 2: 1 0
unique(DT, by = "B")
# A B
# 1: 0 0
# 2: 0 1
`
順便一提,dplyr的distinct,如果你input的class是data.table
它就是用unique做的
` R
library(dplyr)
distinct(DT)
# A B
# 1: 0 0
# 2: 0 1
# 3: 1 0
`
你如果想看distinct怎麼做,可以在R上面打dplyr:::distinct_.data.table
> dplyr:::distinct_.data.table
function (.data, ..., .dots)
{
dist <- distinct_vars(.data, ..., .dots = .dots)
if (length(dist$vars) == 0) {
unique(dist$data)
}
else {
unique(dist$data, by = dist$vars)
}
}
之後提到distinct,我們再來講distinct
其他相關function像是subset, setcolorder, setorder (setorderv)
對這三個function有興趣,再去看manual,不贅述
這三個對應到dplyr的filter, select, arrange,之後我們會再提到這些
g. transform: 改變column的屬性、值等,舉例來說:
` R
DT = data.table(a = 1:3, b = 2:4, c = LETTERS[1:3])
DT2 = copy(DT)
DT[, b := b**2]
DT2 %<>% transform(b = b**2)
all.equal(DT, DT2) # TRUE
DT %<>% transform(c = as.factor(c))
str(DT)
# Classes ‘data.table’ and 'data.frame': 3 obs. of 3 variables:
# $ a: int 1 2 3
# $ b: num 4 9 16
# $ c: Factor w/ 3 levels "A","B","C": 1 2 3
# - attr(*, ".internal.selfref")=<externalptr>
`
h. set: 用來變更特定column,某些列的值,舉個簡單的例子
` R
DT = data.table(a = 1:3, b = 2:4)
DT2 = copy(DT)
DT[, b := 1]
set(DT2,, "b", value = 1)
all.equal(DT, DT2) # TRUE
`
一般來說都用'['來做,但是你如果需要用到for再來完成,再用set
還有一個function是 J,這裡就不提了,一樣請洽manual
最後,還有一個operator,':=',它是用來擴增data.table的column,
同樣,也不創造複本,這樣可以更快的增加column
那如果刪除怎麼辦?還記得前面學過 DT[, list('X', 'Y')],就用這個
再來,我們講一些data.table中其他function
2. fread
功能可以用來取代read.table, read.csv
它可以用多種separate去分割columns,然後讀入R
而且讀入速度比read.table, read.csv快很多
但是注意,不規則的檔案會讀入失敗
這裡提幾個參數:
a. sep: column跟column之間的分隔,如果是csv就是',',
如果是tab separated values就是'\t'
b. na.strings: 視作NA的字串,它可以是一個vector
c. stringsAsFactors:是否要把字串轉成factor,預設是否
d. colClasses:各行的classes,可以自行設定
我愛用fread還有一個原因,第一個input可以直接放我要讀的字串,
但是read.table需要經過其他的方式,有點麻煩(我懶得記,其實沒記過)
舉例來說
` R
text = "a b
1 2
3 4"
DT = fread(text)
setDF(DT) # 轉成data.frame,前面學過,還記得嗎?
DF = read.table(header = TRUE, text = text) # text format
DF2 = read.table(textConnection(text), header = TRUE) # file format
all.equal(DT, DF) # TRUE
all.equal(DT, DF2) # TRUE
`
fread很適合拿來讀大資料,所以有必要把table輸出成text
用文字方式處理時,讀入就變得很方便,可見 #1LegOjwB (R_Language)
還剩下 dcast.data.table, melt 跟 merge
它們會留到之後跟tidyr一起介紹
下一章重點會放在dplyr
補充:
key,我也不是很熟悉,也很少用,因此,我這裡介紹的很少
如果對key有興趣,可能需要自行研究
[關鍵字]: data.table, reshape2
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.205.27.107
※ 文章網址: https://www.ptt.cc/bbs/R_Language/M.1437467101.A.E6D.html
... <看更多>