Thử tools: trải nghiệm GitKraken và PyCharm VCS Git

Vì yêu cầu công việc mà H đã chuyển qua dùng Ubuntu gần như 100% hơn một năm nay. Lúc mới đầu xài cũng rất khó chịu vì các tool trên Ubuntu khá chậm và đôi khi rất cùi, không được ổn định như ở bên Windows. Nhưng dần dà mọi thứ cũng bắt đầu quen dần và ổn hơn. Riết giờ ghiền xài Ubuntu hơn là mở Windows. Haha, cố tìm mọi cách để có thể làm mọi việc trên chiếc Ubuntu của mình. 😀

Một trong những cái mà cũng phải mất một thời gian sử dụng thì H mới tìm được cho mình một công cụ ưng ý đó chính là Git tool. Trên Windows thì có những tool khá mạnh như Tortoise Git hay Source Tree, nhưng trên Ubuntu thì có vẻ rất khó để tìm một tool git có giao diện thân thiện và hỗ trợ merge code tốt. Có 2 công cụ mà H cảm thấy ưng ý nhất muốn giới thiệu với anh em để ai cũng xài Ubuntu có thể thử nghiệm nhé.

GitKraken

PyCharm

Note một số điểm ưng ý và chưa ưng ý lắm ở 2 tool này nhé:

  • Giao diện H cho là thân thiện và chỉnh chu nhất trong các tool Git trên Ubuntu.
  • GitKraken có thể so với Source Tree trên Windows về mặt UI trực quan về tổng quan các branch đang working, remote branh, tag, thêm tính năng Stash/Pop rất trực quan và dễ xài.
  • Công cụ merge code thì H đánh giá PyCharm VCS Git rất là good, tốt hơn cả GitKraken (phiên bản Free, phiên bản trả phí H chưa có sử dụng nên không biết).
  • Điểm cộng nữa là PyCharm VCS Git nó nằm trong PyCharm luôn nên rất chi là tiện cho đồng chí nào code Python. Không những vậy mà H thấy IDE nào của JetBrains cũng đều có tích hợp tool này, tuyệt vời. 😀

Qua trải nghiệm, H khuyên anh em nên kết hợp vừa sử dụng một tool có UI tốt để thao tác cho tiện + tool tích hợp sẵn trong IDE có thể giúp anh em merge code, resolve conflict dễ dàng. Với anh em code Python thì 2 tool trên rất đáng để thử nhé. 😀

Chúc anh em thật vui và enjoy coding nhé !

Tự học R Series: giới thiệu sơ về các cấu trúc điều khiển

Trong số này H sẽ điểm sơ qua một số cấu trúc điều khiển cơ bản trong R. Tương tự như những ngôn ngữ khác, R cũng tuân thủ một số nguyên lý cơ bản của một ngôn ngữ lập trình bao gồm khai báo biến, if-else, vòng lặp for/while, các lệnh nhảy break/continue, ..

Khai báo biến:

Trong R việc khai báo và gán giá trị cho một biến kiểu như sau, bạn lưu ý dấu gán nhé “<-“. Nhiều ngôn ngữ khác sử dụng dấu “=”.

A <- 15
B <- 1:20
C <- ncol(X)

Điều kiện If-ELSE:

Cấu trúc này khá chuẩn và giống với đại đa số các ngôn ngữ cấp cao hiện nay.

if(<condition>) {
 ## do something
} else {
 ## do something else
}
if(<condition1>) {
 ## do something
} else if(<condition2>) {
 ## do something different
} else {
 ## do something different
}

Vòng lặp FOR:

Vòng lặp for với số bước lặp biết trước, có rất nhiều cách trong R để implement vòng lặp for, bên dưới là một số cách.

x <- c("Alice", "Bob", "Steven", "Don")
for(i in 1:4) {
 print(x[i])
}
for(i in seq_along(x)) {
 print(x[i])
}
for(name in x) {
 print(name)
}
for(i in 1:4) print(x[i])

Tất nhiên là chúng ta hoàn toàn có thể viết các vòng lặp for lồng nhau (nested for loop)

Vòng lặp WHILE:

Vòng lặp while sẽ chạy cho đến khi nào điều kiện không còn đúng nữa thì dừng. Mỗi lần lặp xong thì sẽ tiếp tục kiểm tra điều kiện còn đúng không?

count <- 0
while(count < 10) {
 print(count)
 count <- count + 1
}

Ngoài ra trong R còn có một cấu trúc lặp không xác định là REPEAT, loại lặp này sẽ lặp mãi cho đến khi nào có lệnh nhảy xuất hiện.

Lệnh nhảy BREAK / NEXT / RETURN

Lệnh break để thoát khỏi vòng lặp, lệnh next (ở một số ngôn ngữ khác là lệnh continue) để bỏ qua bước lặp và nhảy qua bước tiếp theo.

for(i in 1:100) {
 if(i <= 20) {
 ## Skip the first 20 iterations
 next
 }
 ## Do something here
}

Điểm sơ một số cấu trúc điều khiển cơ bản ở trong R để anh em đọc có thể nắm cơ bản. Các cấu trúc này H nghĩ nó khá giống các ngôn ngữ cấp cao anh em đang code nên không có gì khó khăn khi tiếp cận.

Chúc anh em thật vui và nhiều sức khỏe !

Tự học Data Science: những công cụ cơ bản

Cũng bẳng đi mấy tháng không có thời gian để viết tiếp blog như đã hẹn trong lòng. 😀 Nay chột dạ, tìm một chủ đề đang theo đuổi để viết. Vừa để note lại những cái đang tìm hiểu, vừa chia sẻ với các bạn (những bạn cùng chí hướng).

0_rNapZQnyP5EBLYli

Trong bài này H sẽ note lại một số công cụ mà cộng đồng data scientist thường hay sử dụng để bắt đầu công việc của mình.

Đầu tiên, H điểm sơ một số công việc mà một data scientist sẽ làm:

  • Đặt ra những câu hỏi cho bài toán cần xử lý.
  • Xác định ý tưởng về tập dữ liệu sẽ làm việc.
  • Xác định nguồn dữ liệu mà anh ấy/cô ấy có thể có (có quyền truy cập được).
  • Thu thập dữ liệu, có thể là tự code hoặc dùng các công cụ có sẵn.
  • Làm sạch dữ liệu, loại bỏ những dữ liệu gây nhiễu.
  • Phân tích dữ liệu.
  • Xây dựng model và hệ thống dự đoán. Có thể sẽ làm các biểu đồ để thể hiện các dự báo.
  • Đọc kết quả dự báo và truyền tải tới những bộ phận liên quan.

Và để làm được những việc này thì data scientist cần có sự hỗ trợ từ nhiều công cụ khác nhau để có thể nhanh chóng đạt kết quả cuối cùng.

Những công cụ thường sử dụng bao gồm:

1. Công cụ để thu thập dữ liệu:

  • Dữ liệu có thể là cơ sở dữ liệu quan hệ MySQL, SQL Server, Oracle,…Chúng ta có một số tool kết nối nhiều loại CSDL (trong code gọi là adapter), trực quan thì có các SQL Management như SQL Management Studio, Data Grip,…Đặc biệt lúc trước H có sử dụng một công cụ gọi là Talend Data Intergration. Tool này rất mạnh, anh em có nhu cầu thì tìm hiểu sử dụng nhé.
  • Dữ liệu dạng file text hay excel (CSV) có thể được import vào để phân tích, các file text này có cấu trúc và được hiểu bởi các công cụ như R hay Octave.
  • Mạnh hơn nữa có thể dùng tới Hadoop hay Apache Spark.
  • Về tự lập trinh có thể dùng ngôn ngữ R, Python, Octave để code.

2. Công cụ để phân tích dữ liệu, xây dựng model và dự đoán:

  • R Studio là một IDE rất mạnh để bạn có thể code ngôn R. Dùng R để phân tích dữ liệu bạn thu thập được.
  • Octave cũng là một IDE rất mạnh, cái này thì thiên về xử lý toán học hơn và bạn sẽ cảm thấy rất thích nếu biết nhiều về ma trận, vector.

3. Công cụ để xây dựng biểu đồ trực quan:

  • Các IDE như R Studio hay Octave và thậm chí là các thư viện của Python cũng hỗ trợ bạn xuất các biểu đồ rất tốt.
  • Một công cụ mà H nghĩ rất mạnh và cũng dễ sử dụng là Tableau.

4. Các công cụ hỗ trợ khác:

  • Nếu bạn sử dụng môi trường Linux hoặc Mac, bạn cũng cần rành rọt các câu lệnh command line để giúp thao tác nhanh chóng thay vì phụ thuộc vào UI.
  • Git để bạn có thể lưu trữ và chia sẻ code với những người cùng làm việc với bạn. Và GitHub hay GitLab rất là good.

Sơ sơ như vậy để các bạn hình dung về một phần công việc của một data scientist và những công cụ mà H biết. Và một lời khuyên chân thành là bạn không nên tiếc tiền bỏ ra để có thể mua GitHub hay Tableau vì đơn giản nó giúp cho công việc của bạn diễn ra trôi chảy và tập trung vào mục tiêu quan trọng hơn.

Chúc các bạn một ngày vui nhé !

Python Series: lâu lắm rồi mới lại “thông dịch”

Từ cái hồi ngày đầu mới ra trường làm việc với PHP, sau đó chuyển qua .Net cũng được chừng vài năm thì nay lại có dịp quay lại với kiểu ngôn ngữ viết sao cũng được, muốn gán kiểu dữ liệu gì thì gán. 😀

python-7be70baaac

Trầy trật hỏm rài giờ post bài để chia sẻ cảm nhận của mình về Python phiên bản 2, phiên bản 3 H chưa có tiếp cận nên cũng không rõ nó như thế nào. Có lẽ có những cải tiến để khắc phục mấy điểm yếu của Python 2. 😀

Nói về Python thì có vài điểm sau:

1. Code dễ viết

2. Cũng có định nghĩa class, functional. Khi sử dụng thì gọi hàm import cái đó vào.

3. Biến thì không cần khai báo kiểu, các function có thể trả ra nhiều biến dạng tuble. Điểm này thì có thể nó tương đồng với khái niệm “out variable” của C#, nhưng cách dùng này thì tiện hơn.

4. Code chạy từ trên xuống dưới nên đôi khi nếu bạn viết sai syntax gì đó thì gặp đúng case if else thì mới phát hiện có bug thay vì ngay tại lúc build như code biên dịch C#, Java.

5. Có nhiều framework để các bạn tiếp cận như Django, Flask, …Code theo framework thì căn bản sẽ giúp các bạn phát triển nhanh ứng dụng mà không phải code nhiều thứ từ đầu. 😀 Điểm này không có gì đặc sắc, nó cũng tương tự với các ngôn ngữ khác như C# có ServiceStack, Entity, Java có Spring,…

6. Hiện tại xu hướng làm trong lĩnh vực machine learning đang lên, và Python là một trong những ngôn ngữ hỗ trợ tiếp cận mảng này tốt nhất (vì có cộng đồng đủ đông support). Anh em học ngôn ngữ này cũng là một lợi thế. 😀

Cơ bản vậy, anh em muốn smoke qua Python thì có thể lên https://www.w3schools.com/python/default.asp

Để ôn lại tí về sự khác nhau giữa thông dịch và biên dịch thì anh em tham khảo link này https://medium.com/@thangtmc73/ngon-ngu-thong-dich-va-ngon-ngu-bien-dich-f5950edb5ac5

Chúc anh em sức khỏe và thành công !

Enjoy with code !!!

 

Tự học R Series: xử lý dữ liệu nhanh hơn với Apache Spark

Trong số này H sẽ chia sẻ với anh em về việc H đã ứng dụng Apache Spark như thế nào vào trong việc xử lý dữ liệu với project phân tích mà H đã đề cập ở bài trước.

Về định nghĩa: “Apache Spark là một công cụ phân tích hợp nhất để xử lý dữ liệu quy mô lớn.”. Anh em có thể tìm hiểu chi tiết ở https://spark.apache.org/

Lý do H xài Spark xuất phát từ việc H cần get một lượng dữ liệu lớn, tính ra là cỡ hơn 2 triệu record lên từ MySQL. Lúc đầu, H dùng Python để query dữ liệu lên, tính toán và vẽ biểu đồ trên view. Tuy nhiên, sau khi implement thì không chạy được vì timeout quá 30s mà chưa tính toán xong. Loay hoay mãi H mới tìm được cách cài đặt Apache Spark và dùng function read từ JDBC vào Spark để tính toán.

spark_read_jdbc(
sc,
“timeouts”,
options = list(
url = “jdbc:mysql://127.0.0.1:3306/LabTest”,
user = “lab_demo”,
password = “password”
dbtable = “(select id, merchant_id, query_time, total_order, total_timeout from merchant_order where total_order > 0) tmp”,
partitionColumn = “id”,
lowerBound = 1L,
upperBound = 2000000L,
numPartitions = 100L
)
)

Với câu lệnh này, H đã load nguyên cái bảng order lên Spark và sau đó query dữ liệu trên bảng timeouts.

data <-
dbGetQuery(
sc,
“select d.merchant_id, c.name, c.latitude, c.longitude, d.total_timeout
from timeouts d
join merchants b on d.merchant_id = b.id
join districts c on b.district_id = c.id”
) %>% filter(!is.na(total_timeout))

Dữ liệu query được đưa vào dataframe data và sau đó bạn có thể tính toán linear, summary các kiểu

reg <- lm(total_timeout ~ total_outofstock, data = data)
t <- summary(reg)
t

Các query Spark anh em có thể viết rất dễ vì nó tương tự câu lệnh SQL, chỉ cần anh em đã quen SQL thì có thể viết các câu query Spark thông qua SQL Interface.

Code R cộng với Apache Spark trên R Studio sẽ giúp anh em nhanh chóng nắm bắt và xử lý nhanh phân tích và report biểu đồ.

Chúc anh em sức khỏe và enjoy với bài chia sẻ này nhé !