-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.json
1 lines (1 loc) · 306 KB
/
index.json
1
[{"authors":["admin"],"categories":null,"content":"Welcome to my world! Tôi là Cường, hiện đang là nghiên cứu sinh chuyên ngành phân tích hệ thống, quản lý và xử lý thông tin tại trường Đại học Tổng hợp Kỹ thuật Quốc gia Volgograd (Volgograd Technical State University), Liên Bang Nga. Mục đích chính tôi tạo blog này là để hệ thống lại và chia sẻ kiến thức về khoa học dữ liệu với R và Python. Các bạn có thể theo dõi trang Khoa học dữ liệu với R và Python để nhận thông tin cập nhật các bài viết mới từ blog.\n","date":1598486400,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":1598486400,"objectID":"2525497d367e79493fd32b198b28f040","permalink":"/author/cuong-sai/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/author/cuong-sai/","section":"authors","summary":"Welcome to my world! Tôi là Cường, hiện đang là nghiên cứu sinh chuyên ngành phân tích hệ thống, quản lý và xử lý thông tin tại trường Đại học Tổng hợp Kỹ thuật Quốc gia Volgograd (Volgograd Technical State University), Liên Bang Nga.","tags":null,"title":"Cuong Sai","type":"authors"},{"authors":["Quyen Vo"],"categories":null,"content":"Quyen Vo là vợ Cuong Sai, hiện tại đang là nghiên cứu sinh ngành công nghệ hóa học\n","date":-62135596800,"expirydate":-62135596800,"kind":"term","lang":"en","lastmod":-62135596800,"objectID":"a37c4b8322b67e84dff27826fcdca5a1","permalink":"/author/quyen-vo/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/author/quyen-vo/","section":"authors","summary":"Quyen Vo là vợ Cuong Sai, hiện tại đang là nghiên cứu sinh ngành công nghệ hóa học","tags":null,"title":"Quyen Vo","type":"authors"},{"authors":null,"categories":["Python","R"],"content":"\rNội dung của bài bao gồm:\n1. Cài đặt môi trường làm việc để kết hợp R và Python.\n2. So sánh R interface và Python interface cho keras với bài toán MNIST nổi tiếng.\n1 Cài đặt\r1.1 Cài đặt keras và tensorflow trong R\nĐể cài đặt Keras và Tensorflow trong R các bạn dùng các lệnh sau:\ninstall.packages(\u0026quot;keras\u0026quot;)\rinstall.packages(“tensorflow”)\rlibrary(keras)\rinstall_keras()\r1.2 Cài đặt keras và tensorflow trong Python (sử dụng anaconda)\nĐể làm việc về khoa học dữ liệu với ngôn ngữ Python, một cách đơn giản nhất là tải về và cài đặt Anaconda - nền tảng (platform) mã nguồn mở về khoa học dữ liệu thông dụng nhất hiện nay hỗ trợ làm việc với Python và R. Nếu chưa biết cách sử dụng R trong Anaconda thì các bạn có thể đọc bài hướng dẫn trước tại đây. Download và cài đặt Anaconda tại đây\nLưu ý: trong khi cài các đặt bạn nhớ là tích vào mục Add Anaconda to my PATH environment variable.\nSau khi đã cài xong Anaconda, các bạn vào Anaconda Prompt để tạo một môi trường mới chứa các thư viện cần thiết như sau:\nconda create -n r-env python=3.7 scikit-learn pandas numpy matplotlib keras tensorflow\rCâu lệnh trên có nghĩa là:\n\rKhởi tạo môi trường anaconda mới với tên r-env\rCài python phiên bản 3.7 với các thư viện scikit-learn, pandas, numpy, matplotlib, keras và tensorflow cho môi trường này\r\rKiểm tra xem môi trường r-env đã được tạo trong Anaconda chưa bằng lệnh conda env list:\n1.3 Thiết lập môi trường làm việc để sử dụng kết hợp R và Python trong R\nĐể sử dụng Python trong R chúng ta sử dụng gói reticulate. Để biết cách kết hợp R và Python trong R các bạn có thể đọc bài trước tại đây.\nNạp thư viện reticulate và sử dụng hàm conda_list() để kiểm tra danh sách môi trường Anaconda:\nlibrary(reticulate)\rconda_list()\r## name python\r## 1 r-env C:\\\\Users\\\\svcuo\\\\Anaconda3\\\\envs\\\\r-env\\\\python.exe\rVậy là đã có môi trường r-env mới khởi tạo. Để chọn môi trường này sử dụng trong R chúng ta sử dụng hàm use_condaenv():\nuse_condaenv(\u0026quot;r-env\u0026quot;)\r\r2. So sánh R interface và Python interface cho keras với bài toán MNIST nổi tiếng\rChú ý: do sử dụng kết hợp R và Python trong cùng một R Notebook nên tôi sẽ chú thích R với mỗi R code chunk và Python với mỗi Python code chunk.\n2.1 Sử dụng R interface cho keras\rNạp tập dữ liệu MNIST từ keras:\n# R code\rlibrary(keras)\rmnist \u0026lt;- dataset_mnist()\rtrain_images \u0026lt;- mnist$train$x\rtrain_labels \u0026lt;- mnist$train$y\rtest_images \u0026lt;- mnist$test$x\rtest_labels \u0026lt;- mnist$test$y\rKiểm tra dữ liệu:\n# R code\rdim(train_images)\r## [1] 60000 28 28\rdim(train_labels)\r## [1] 60000\rdim(test_images)\r## [1] 10000 28 28\rdim(test_labels)\r## [1] 10000\rThử hiển thị 5th digit:\n# R code\rdigit \u0026lt;- train_images[5,,]\rplot(as.raster(digit, max = 255))\rHướng dẫn thao tác với tensors trong R:\n# R code\rslice1 \u0026lt;- train_images[10:99,,]\rdim(slice1)\r## [1] 90 28 28\r# R code\rslice2 \u0026lt;- train_images[10:99,1:28,1:28]\rdim(slice2)\r## [1] 90 28 28\rslice3 \u0026lt;- train_images[, 15:28, 15:28]\rdim(slice3)\r## [1] 60000 14 14\rThiết kế cấu trúc network model:\n# R code\rmodel \u0026lt;- keras_model_sequential() %\u0026gt;%\rlayer_dense(units = 512, activation = \u0026quot;relu\u0026quot;, input_shape = c(28 * 28)) %\u0026gt;%\rlayer_dense(units = 10, activation = \u0026quot;softmax\u0026quot;)\rModel Summary :\n# R code\rsummary(model)\r## Model: \u0026quot;sequential\u0026quot;\r## ________________________________________________________________________________\r## Layer (type) Output Shape Param # ## ================================================================================\r## dense (Dense) (None, 512) 401920 ## ________________________________________________________________________________\r## dense_1 (Dense) (None, 10) 5130 ## ================================================================================\r## Total params: 407,050\r## Trainable params: 407,050\r## Non-trainable params: 0\r## ________________________________________________________________________________\rBước tiếp theo, compile model với loss function, optimizer và metrics tương ứng:\nmodel %\u0026gt;% compile(\roptimizer = \u0026quot;rmsprop\u0026quot;,\rloss = \u0026quot;categorical_crossentropy\u0026quot;,\rmetrics = c(\u0026quot;accuracy\u0026quot;))\rChuẩn bị dữ liệu để huấn luyện mô hình:\ntrain_images \u0026lt;- array_reshape(train_images, c(60000, 28 * 28))\rtrain_images \u0026lt;- train_images / 255\rtest_images \u0026lt;- array_reshape(test_images, c(10000, 28 * 28))\rtest_images \u0026lt;- test_images / 255\rtrain_labels \u0026lt;- to_categorical(train_labels)\rtest_labels \u0026lt;- to_categorical(test_labels)\rHuấn luyện mô hình:\nmodel %\u0026gt;% fit(\rtrain_images, train_labels, epochs = 5, batch_size = 128)\rĐánh giá độ chính xác của mô hình:\nmetrics \u0026lt;- model %\u0026gt;% evaluate(test_images, test_labels)\rmetrics\r## $loss\r## [1] 0.06532291\r## ## $accuracy\r## [1] 0.9802\rDự đoán với dữ liệu mới:\nmodel %\u0026gt;% predict_classes(test_images[1:10,])\r## [1] 7 2 1 0 4 1 4 9 5 9\r2.2 Sử dụng Python interface cho keras trong môi trường R\nNạp tập dữ liệu MNIST từ keras:\n# Python\rfrom keras.datasets import mnist\r## Using TensorFlow backend.\r(train_images, train_labels), (test_images, test_labels) = mnist.load_data()\rKiểm tra dữ liệu:\n# Python\rtrain_images.shape\r## (60000, 28, 28)\r# Python\rtrain_labels.shape\r## (60000,)\r# Python\rtest_images.shape\r## (10000, 28, 28)\r# Python\rtest_labels.shape\r## (10000,)\rThiết kế cấu trúc network model:\n# Python\rfrom keras import models\rfrom keras import layers\rmodel = models.Sequential()\rmodel.add(layers.Dense(512, activation=\u0026#39;relu\u0026#39;, input_shape=(28 * 28,)))\rmodel.add(layers.Dense(10, activation=\u0026#39;softmax\u0026#39;))\rCompile model với loss function, optimizer và metrics tương ứng:\n# Python\rmodel.compile(optimizer=\u0026#39;rmsprop\u0026#39;,\rloss=\u0026#39;categorical_crossentropy\u0026#39;,\rmetrics=[\u0026#39;accuracy\u0026#39;])\rChuẩn bị dữ liệu để huấn luyện mô hình:\n# Python\rtrain_images = train_images.reshape((60000, 28 * 28))\rtrain_images = train_images.astype(\u0026#39;float32\u0026#39;) / 255\rtest_images = test_images.reshape((10000, 28 * 28))\rtest_images = test_images.astype(\u0026#39;float32\u0026#39;) / 255\r# Python\rfrom keras.utils import to_categorical\rtrain_labels = to_categorical(train_labels)\rtest_labels = to_categorical(test_labels)\rHuấn luyện mô hình:\n# Python\rmodel.fit(train_images, train_labels, epochs=5, batch_size=128)\rĐánh giá độ chính xác của mô hình:\n# Python\rtest_loss, test_acc = model.evaluate(test_images, test_labels)\rprint(\u0026#39;test_acc:\u0026#39;, test_acc)\r## test_acc: 0.980400025844574\rDự đoán với dữ liệu mới:\n# Python\rmodel.predict_classes(test_images[:10,:])\r## array([7, 2, 1, 0, 4, 1, 4, 9, 5, 9], dtype=int64)\r\r\r","date":1598918400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598941956,"objectID":"3c8e943fb6c8b29fec51dc108d4e8bbc","permalink":"/post/r-python-machine-learning/","publishdate":"2020-09-01T00:00:00Z","relpermalink":"/post/r-python-machine-learning/","section":"post","summary":"Nội dung của bài bao gồm:\n1. Cài đặt môi trường làm việc để kết hợp R và Python.\n2. So sánh R interface và Python interface cho keras với bài toán MNIST nổi tiếng.","tags":["R Markdown","Machine Learning","Deep Learning","Keras","Tensorflow"],"title":"Cách dùng keras và tensorflow trong R. So sánh R interface và Python interface cho keras.","type":"post"},{"authors":[],"categories":["R","Python"],"content":"\rĐể cài đặt và sử dụng R + r-essentials packages trong Jupyter Notebook có 2 cách sau:\nCách 1: Dùng Anaconda Navigation\rBước 1. Mở Anaconda Navigator\nBước 2. Chọn Environments để tạo môi trường Anaconda mới. Click Create và tích chọn r cũng như phiên bản Python cần thiết:\nBước 3. Mở Jupyter Notebook trong môi trường mới tạo có chứa R package:\n\rCách 2: Sử dụng Anaconda Prompt\rBước 1. Mở Anaconda Prompt\nBước 2. Tạo và active môi trường anaconda mới bằng lệnh sau:\nconda create -n ENV_NAME\rconda activate ENV_NAME\rBước 3. Cài r-irkernel cho môi trường anaconda mới tạo bằng lệnh sau:\nconda install -c r r-irkernel\rBước 4. Mở Jupyter Notebook trong môi trường anaconda chứa R mới khởi tạo bằng lệnh:\njupyter notebook\rSau khi đã mở Jupyter Notebook trong môi trường Anaconda mới tạo có chứa R, để tạo một notebook mới cho ngôn ngữ R, chọn New rồi chọn R:\n\rTips cho cài R packages trong môi trường Anaconda:\rActive môi trường Anaconda có chứa R từ Anaconda Prompt và gõ lệnh cài R package như sau:\nconda install r-NAME_PACKAGE\rVí dụ cài gói ggplot2\nconda install r-ggplot2\rNếu không cài được thì chúng ta có thể:\nLaunching R trực tiếp trong Anaconda Prompt và dùng lệnh install.packages(\"NAME_PACKAGE\") để cài đặt package như khi sử dụng R.\n\rHoặc dùng cách sau:\n\r\rconda install conda-build\rconda skeleton cran \u0026lt;something_on_cran\u0026gt;\rconda build r-\u0026lt;something_on_cran_lowercased\u0026gt;\rconda install -c local r-\u0026lt;something_on_cran_lowercased\u0026gt;\r\r","date":1598832000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598898970,"objectID":"b27d1ccec2bcebadb4a00c1d6e2addbe","permalink":"/post/r-jupyter/r-jupyter/","publishdate":"2020-08-31T00:00:00Z","relpermalink":"/post/r-jupyter/r-jupyter/","section":"post","summary":"Để cài đặt và sử dụng R + r-essentials packages trong Jupyter Notebook có 2 cách sau:\nCách 1: Dùng Anaconda Navigation\rBước 1. Mở Anaconda Navigator\nBước 2. Chọn Environments để tạo môi trường Anaconda mới.","tags":["Jupyter Notebook","Anaconda"],"title":"Cách thêm và sử dụng R trong Jupyter Notebook","type":"post"},{"authors":[],"categories":["R"],"content":"\rSự ra đời của các toán tử pipes trong package magrittr\rđã tạo ra những thay đổi lớn mang tính cách mạng cho ngôn ngữ R. Biết cách sử dụng linh hoạt các toán tử này chính là chìa khóa để rút ngắn thời gian viết code cũng như giúp cho code dễ đọc và dễ bảo trì hơn.\nỞ bài này tôi note lại cách dùng của 4 toán tử pipes cho bạn nào cần:\n\r%\u0026gt;% : Forward-pipe operator\n\r%\u0026lt;\u0026gt;% : Compound assignment pipe-operator\n\r%T\u0026gt;% : Tee Operator\n\r%$% : Exposition pipe-operator\n\r\rMục đích của việc sử dụng các toán tử pipes trong R:\n\rTránh gọi lồng các hàm\n\rGiảm việc tạo và sử dụng các biến trung gian\n\rTổ chức tập hợp các câu lệnh thành một chuỗi thống nhất, dễ hiểu.\n\r\rNạp các thư viện cần thiết vào phiên làm việc của R để thực hành:\nlibrary(tidyverse)\rlibrary(magrittr)\rChú ý: Khi nạp gói tidyverse thì pipe %\u0026gt;% được nạp tự động, tuy nhiên để dùng các toán từ khác thì chúng ta cần nạp thêm cả gói magrittr.\n1. Toán tử %\u0026gt;% (forward-pipe operator)\rĐây là pipe được sử dụng nhiều nhất trong R, hầu như mỗi công việc thực hiện trên R tôi đều sử dụng nó rất nhiều lần.\nNguyên lý của pipe %\u0026gt;%: chuyển toàn bộ vế bên trái (có thể là kết quả của hàm đi trước) thành dữ liệu đầu vào cho hàm bên phải tạo thành một dòng chảy dữ liệu từ trái qua phải.\nVí dụ với tập dữ liệu diamonds:\nhead(diamonds)\r## # A tibble: 6 x 10\r## carat cut color clarity depth table price x y z\r## \u0026lt;dbl\u0026gt; \u0026lt;ord\u0026gt; \u0026lt;ord\u0026gt; \u0026lt;ord\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;int\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43\r## 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31\r## 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31\r## 4 0.290 Premium I VS2 62.4 58 334 4.2 4.23 2.63\r## 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75\r## 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48\rdiamonds %\u0026gt;%\rfilter(color == \u0026quot;I\u0026quot;) %\u0026gt;%\rgroup_by(cut) %\u0026gt;%\rsummarize(price = mean(price))\r## # A tibble: 5 x 2\r## cut price\r## \u0026lt;ord\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 Fair 4685.\r## 2 Good 5079.\r## 3 Very Good 5256.\r## 4 Premium 5946.\r## 5 Ideal 4452.\rTương đương với cách truyền thống như sau:\ndiamonds_1 \u0026lt;- filter(diamonds, color == \u0026quot;I\u0026quot;)\rdiamonds_2 \u0026lt;- group_by(diamonds_1, cut)\r(diamonds_3 \u0026lt;- summarize(diamonds_2, price = mean(price)))\r## # A tibble: 5 x 2\r## cut price\r## \u0026lt;ord\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 Fair 4685.\r## 2 Good 5079.\r## 3 Very Good 5256.\r## 4 Premium 5946.\r## 5 Ideal 4452.\r\r2. Toán tử %\u0026lt;\u0026gt;% (compound assignment pipe-operator)\rNguyên lý của pipe %\u0026lt;\u0026gt;%: Thực hiện nhiệm vụ tương tự như với toán tử %\u0026gt;%, tuy nhiên kết quả cuối cùng của dòng chảy dữ liệu được gán lại vào đối tượng ban đầu của dòng chảy.\nVí dụ:\ndiamonds %\u0026lt;\u0026gt;%\rfilter(color == \u0026quot;I\u0026quot;) %\u0026gt;% select(carat, cut, color)\rdiamonds\r## # A tibble: 5,422 x 3\r## carat cut color\r## \u0026lt;dbl\u0026gt; \u0026lt;ord\u0026gt; \u0026lt;ord\u0026gt;\r## 1 0.290 Premium I ## 2 0.24 Very Good I ## 3 0.3 Ideal I ## 4 0.3 Good I ## 5 0.24 Premium I ## 6 0.33 Ideal I ## 7 0.33 Ideal I ## 8 0.32 Ideal I ## 9 0.3 Ideal I ## 10 0.3 Very Good I ## # ... with 5,412 more rows\r\r3. Toán tử %T% (Tee Operator)\rNguyên lý của pipe %T\u0026gt;%: Dòng chảy dữ liệu trong toán tử này có thể được hình dung tương tự như ống nước hình chữ T. Dữ liệu đầu vào của 1 hàm đi trước sẽ được truyền cho 2 nhánh tương ứng cho hai hàm phía sau\nVí dụ:\nrnorm(200) %\u0026gt;%\rmatrix(ncol = 2) %T\u0026gt;%\rplot %\u0026gt;%\rcolSums\r## [1] -10.96542 -12.71731\rTương đương với:\nrnorm(200) %\u0026gt;%\rmatrix(ncol = 2) %\u0026gt;%\r{ plot(.); . } %\u0026gt;%\rcolSums\r## [1] -10.652905 2.284913\rHoặc viết theo cách truyền thống:\nm \u0026lt;- matrix(rnorm(200), ncol = 2)\rplot(m)\rcolSums(m)\r## [1] -27.205778 -2.992818\r\r4. Toán tử %$% (exposition pipe-operator)\rNguyên lý của pipe %$%: Toán tử cho phép trích xuất đích danh một đối tượng trong kết quả của hàm đi trước để sử dụng như dữ liệu đầu vào cho hàm đi sau.\nVí dụ:\niris %\u0026gt;%\rsubset(Sepal.Length \u0026gt; mean(Sepal.Length)) %$%\rcor(Sepal.Length, Sepal.Width)\r## [1] 0.3361992\rTương đương với việc sử dụng hàm with():\nwith(subset(iris, Sepal.Length \u0026gt; mean(Sepal.Length)),\rcor(Sepal.Length, Sepal.Width))\r## [1] 0.3361992\r\r","date":1598745600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598761318,"objectID":"68ae92567bde4fa06bc2f6524c49b9d8","permalink":"/post/pipes/","publishdate":"2020-08-30T00:00:00Z","relpermalink":"/post/pipes/","section":"post","summary":"Sự ra đời của các toán tử pipes trong package magrittr\rđã tạo ra những thay đổi lớn mang tính cách mạng cho ngôn ngữ R. Biết cách sử dụng linh hoạt các toán tử này chính là chìa khóa để rút ngắn thời gian viết code cũng như giúp cho code dễ đọc và dễ bảo trì hơn.","tags":["Data Manipulation","Data Visualization","Pipes"],"title":"Cách sử dụng các toán tử pipes trong R","type":"post"},{"authors":null,"categories":["R"],"content":"\rCovid-19 là một đại dịch bệnh truyền nhiễm với tác nhân là virus SARS-CoV-2, hiện đang ảnh hưởng và gây thiệt hại nặng nề trên phạm vi toàn cầu. Kể từ khi đại dịch Covid-19 bắt đầu xuất hiện ở Vũ Hán - Trung Quốc đến nay, cái tên trường Đại học Jonhs Hopkins (Mỹ) được nhắc đi nhắc lại hằng ngày trên các phương tiện truyền thông và là một trong những cụm từ được trích dẫn nhiều nhất. Lý do đó là Đại học Johns Hopkins đã phát triển một trong những hệ thống theo dõi dữ liệu COVID-19 bền bỉ và đáng tin cậy nhất trên thế giới cho đến nay.\nỞ bài trước tôi đã giới thiệu cách download và trực quan hóa dữ liệu Covid-19 từ John Hopkins database sử dụng ngôn ngữ Python, cụ thể là sử dụng thư viện pandas để làm sạch và biến đổi dữ liệu và maplotlib để trực quan hóa dữ liệu. Ở bài này để chứng minh R là ngôn ngữ nổi trội trong biến đổi và trực quan hóa dữ liệu, tôi cũng thực hiện công việc tương tự như với Python. Cụ thể là sử dụng thư viện dplyr và ggplot2 trong hệ sinh thái tidyverse kết hợp với toán tử pipes khiến cho việc làm sạch, biến đổi và trực quan hóa dữ liệu trở nên vô cùng đơn giản - chỉ bằng vài dòng code. Để so sánh sự khác biệt các bạn có thể đọc lại bài trước về Python tại đây. Để biết thêm về toán tử pipe %\u0026gt;% cũng như cách dùng các pipes khác trong R các bạn có thể đọc tại đây.\nNội dung chính của bài bao gồm:\n1. Download \u0026amp; chuẩn bị dữ liệu Covid-19 sử dụng thư viện dplyr\n2. Trực quan hóa dữ liệu Covid-19 sử dụng thư viện ggplot2\n1. Download và chuẩn bị dữ liệu\rNạp gói tidyverse vào phiên làm việc của R để thực hành:\nlibrary(tidyverse)\rDownload 3 tập dữ liệu từ John Hopkins database:\n\rConfirmed: (Số trường hợp mới phát hiện)\n\rDeaths: (Số trường hợp tử vong)\n\rRecovered: (Số trường hợp hồi phục)\n\r\rurl_confd = \u0026#39;https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv\u0026#39;\rurl_death = \u0026#39;https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv\u0026#39;\rurl_recvd = \u0026#39;https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv\u0026#39;\rdf_confd_raw = read.csv(url_confd)\rdf_death_raw = read.csv(url_death)\rdf_recvd_raw = read.csv(url_recvd)\rCác tập dữ liệu này được lưu ở dạng wide format do đó chúng ta cần chuyển chúng dạng long fromat:\n# Chuyển tập dữ liệu df_confd từ wide format sang long fromat\rdf_confd \u0026lt;- df_confd_raw %\u0026gt;% gather(key=\u0026quot;Date\u0026quot;, value=\u0026quot;Confirmed\u0026quot;, -c(Country.Region, Province.State, Lat, Long)) %\u0026gt;% group_by(Country.Region, Date) %\u0026gt;% summarize(Confirmed=sum(Confirmed))\r# Chuyển tập dữ liệu df_death từ wide format sang long fromat\rdf_death \u0026lt;- df_death_raw %\u0026gt;% gather(key=\u0026quot;Date\u0026quot;, value=\u0026quot;Deaths\u0026quot;, -c(Country.Region, Province.State, Lat, Long)) %\u0026gt;% group_by(Country.Region, Date) %\u0026gt;% summarize(Deaths=sum(Deaths))\r# Chuyển tập dữ liệu df_recvd từ wide format sang long fromat\rdf_recvd \u0026lt;- df_recvd_raw %\u0026gt;% gather(key=\u0026quot;Date\u0026quot;, value=\u0026quot;Recovered\u0026quot;, -c(Country.Region, Province.State, Lat, Long)) %\u0026gt;% group_by(Country.Region, Date) %\u0026gt;% summarize(Recovered=sum(Recovered))\rKiểm tra dữ liệu sau khi đã chuyển:\nhead(df_confd)\r## # A tibble: 6 x 3\r## # Groups: Country.Region [1]\r## Country.Region Date Confirmed\r## \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt;\r## 1 Afghanistan X1.22.20 0\r## 2 Afghanistan X1.23.20 0\r## 3 Afghanistan X1.24.20 0\r## 4 Afghanistan X1.25.20 0\r## 5 Afghanistan X1.26.20 0\r## 6 Afghanistan X1.27.20 0\rhead(df_death)\r## # A tibble: 6 x 3\r## # Groups: Country.Region [1]\r## Country.Region Date Deaths\r## \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt;\r## 1 Afghanistan X1.22.20 0\r## 2 Afghanistan X1.23.20 0\r## 3 Afghanistan X1.24.20 0\r## 4 Afghanistan X1.25.20 0\r## 5 Afghanistan X1.26.20 0\r## 6 Afghanistan X1.27.20 0\rhead(df_recvd)\r## # A tibble: 6 x 3\r## # Groups: Country.Region [1]\r## Country.Region Date Recovered\r## \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt;\r## 1 Afghanistan X1.22.20 0\r## 2 Afghanistan X1.23.20 0\r## 3 Afghanistan X1.24.20 0\r## 4 Afghanistan X1.25.20 0\r## 5 Afghanistan X1.26.20 0\r## 6 Afghanistan X1.27.20 0\rGộp 3 tập dữ liệu này thành 1 dataframe:\nfinal_df \u0026lt;- full_join(df_confd, df_death) %\u0026gt;% full_join(df_recvd)\rhead(final_df)\r## # A tibble: 6 x 5\r## # Groups: Country.Region [1]\r## Country.Region Date Confirmed Deaths Recovered\r## \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt;\r## 1 Afghanistan X1.22.20 0 0 0\r## 2 Afghanistan X1.23.20 0 0 0\r## 3 Afghanistan X1.24.20 0 0 0\r## 4 Afghanistan X1.25.20 0 0 0\r## 5 Afghanistan X1.26.20 0 0 0\r## 6 Afghanistan X1.27.20 0 0 0\rChuyển cột dữ liệu Date về định dạng date:\nfinal_df$Date \u0026lt;- final_df$Date %\u0026gt;% sub(\u0026quot;X\u0026quot;, \u0026quot;\u0026quot;,.)%\u0026gt;% as.Date(\u0026quot;%m.%d.%y\u0026quot;)\rKiểm tra dataframe thu được:\nhead(final_df)\r## # A tibble: 6 x 5\r## # Groups: Country.Region [1]\r## Country.Region Date Confirmed Deaths Recovered\r## \u0026lt;chr\u0026gt; \u0026lt;date\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt;\r## 1 Afghanistan 2020-01-22 0 0 0\r## 2 Afghanistan 2020-01-23 0 0 0\r## 3 Afghanistan 2020-01-24 0 0 0\r## 4 Afghanistan 2020-01-25 0 0 0\r## 5 Afghanistan 2020-01-26 0 0 0\r## 6 Afghanistan 2020-01-27 0 0 0\rKiểm tra kích thước của bảng dữ liệu thu được:\ndim(final_df)\r## [1] 41548 5\rKiểm tra khoảng thời gian của dữ liệu được thu thập:\nprint(paste(\u0026#39;First date:\u0026#39;, min(final_df$Date)))\r## [1] \u0026quot;First date: 2020-01-22\u0026quot;\rprint(paste(\u0026#39;Current date:\u0026#39;, max(final_df$Date)))\r## [1] \u0026quot;Current date: 2020-08-29\u0026quot;\rKiểm tra missing values (NaN) trong tập dữ liệu:\ncolSums(is.na(final_df))\r## Country.Region Date Confirmed Deaths Recovered ## 0 0 0 0 0\r\r2. Trực quan hóa dữ liệu với ggplot2\r2.1 Tổng quan tình hình Covid -19 trên toàn thế giới tính tới thời điểm đang viết bài này:\nKiểm tra tổng số nước trên toàn thế giới trong tập dữ liệu:\nlength(unique(final_df$Country.Region))\r## [1] 188\rTổng các cases trên toàn thế giới:\n# Tính tổng các cases\rdf \u0026lt;- final_df[,3:5] %\u0026gt;% summarise_all(funs(sum))\r# Thêm cột Active\rdf$Active \u0026lt;- df$Confirmed -df$Deaths - df$Recovered\rdf\r## # A tibble: 1 x 4\r## Confirmed Deaths Recovered Active\r## \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt; \u0026lt;int\u0026gt;\r## 1 1517642903 68133485 824551027 624958391\r# Tạo data frame các cacses để vẽ pie chart\rdf1 \u0026lt;- data.frame(Cases = colnames(df), n = as.vector(unlist(df)))\r# Tạo pie chart\rggplot(df1, aes (x=\u0026quot;\u0026quot;, y = n, fill = factor(Cases))) + geom_col(position = \u0026#39;stack\u0026#39;, width = 1) +\rgeom_text(aes(label = paste(round(n / sum(n) * 100, 1), \u0026quot;%\u0026quot;), x = 1.3),\rposition = position_stack(vjust = 0.5)) +\rtheme_void() +\rlabs(fill = \u0026quot;Cases\u0026quot;,\rx = NULL,\ry = NULL,\rtitle = \u0026quot;Pie Chart of Covid-19 cases in the world\u0026quot;) +\rcoord_polar(\u0026quot;y\u0026quot;)\r2.2 Top 10 nước có số cases lớn nhất\nTính tổng các cases của từng nước tính đến thời điểm hiện tại:\ndf_countries \u0026lt;- final_df %\u0026gt;% select(-Date) %\u0026gt;% group_by(Country.Region) %\u0026gt;% summarise_all(funs(sum))\rTop 10 nước có confirmed cases lớn nhất:\n# Lọc top 10 nước theo Confirmed Cases\rconfirmed \u0026lt;- df_countries %\u0026gt;% arrange(desc(Confirmed)) %\u0026gt;% slice(1:10)\rconfirmed$Country.Region \u0026lt;- factor(confirmed$Country.Region, levels=unique(confirmed$Country.Region))\r# Vẽ barplot\rggplot(confirmed, aes(x=Confirmed, y=Country.Region, fill= Country.Region))+\rgeom_bar(stat=\u0026#39;identity\u0026#39;)+\rggtitle(\u0026quot;Top 10 Countries (Confirmed cases)\u0026quot;) +\rtheme_bw()+\rtheme(legend.position=\u0026quot;none\u0026quot;)\rTop 10 nước có Death cases lớn nhất:\n# Lọc top 10 nước theo Confirmed Cases\rdeaths\u0026lt;- df_countries %\u0026gt;% arrange(desc(Deaths)) %\u0026gt;% slice(1:10)\rdeaths$Country.Region \u0026lt;- factor(deaths$Country.Region, levels=unique(deaths$Country.Region))\rggplot(deaths, aes(x=Deaths, y=Country.Region, fill= Country.Region))+\rgeom_bar(stat=\u0026#39;identity\u0026#39;)+\rggtitle(\u0026quot;Top 10 Countries (Deaths)\u0026quot;) +\rtheme_bw()+\rtheme(legend.position=\u0026quot;none\u0026quot;) \rTop 10 nước có Recovered Cases lớn nhất:\n# Lọc top 10 nước theo Confirmed Cases\rrecovered \u0026lt;- df_countries %\u0026gt;% arrange(desc(Recovered)) %\u0026gt;% slice(1:10)\rrecovered$Country.Region \u0026lt;- factor(recovered$Country.Region, levels=unique(recovered$Country.Region))\rggplot(recovered, aes(x=Recovered, y=Country.Region, fill= Country.Region))+\rgeom_bar(stat=\u0026#39;identity\u0026#39;)+\rggtitle(\u0026quot;Top 10 Countries (Recovered Cases)\u0026quot;) +\rtheme_bw()+\rtheme(legend.position=\u0026quot;none\u0026quot;)\r2.3 Mức độ phát triển của Covid-19 theo thời gian trên toàn thế giới\nTính tổng các cases trên toàn thế giới theo thời gian\nworld \u0026lt;- final_df %\u0026gt;% group_by(Date) %\u0026gt;% summarize(Confirmed=sum(Confirmed), Deaths=sum(Deaths), Recovered=sum(Recovered))\rMức độ phát triển của Confirmed cases trên toàn thế giới theo thời gian:\nggplot(world, aes(x=Date, y=Confirmed)) + geom_bar(stat=\u0026quot;identity\u0026quot;, width=0.2, color = \u0026quot;blue\u0026quot;) +\rtheme_bw() +\rlabs(title = \u0026quot;Confirmed Cases In Each Days\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Confirmed cases\u0026quot;) \rMức độ phát triển của Deaths trên toàn thế giới theo thời gian:`\nggplot(world, aes(x=Date, y=Deaths)) + geom_bar(stat=\u0026quot;identity\u0026quot;, width=0.2, color = \u0026quot;green\u0026quot;) +\rtheme_bw() +\rlabs(title = \u0026quot;Deaths In Each Day\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Death cases\u0026quot;) \rMức độ phát triển của Recovered cases trên toàn thế giới theo thời gian:\nggplot(world, aes(x=Date, y=Recovered)) + geom_bar(stat=\u0026quot;identity\u0026quot;, width=0.2, color = \u0026quot;purple\u0026quot;) +\rtheme_bw() +\rlabs(title = \u0026quot;Recovered cases In Each Day\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Recovered cases\u0026quot;) \r2.4 Hiển thị tất cả các cases trên thế giới theo thời gian\nworld %\u0026gt;% gather(\u0026quot;Cases\u0026quot;, \u0026quot;value\u0026quot;, -Date) %\u0026gt;%\rggplot(aes(x=Date, y=value, colour=Cases)) + geom_bar(stat=\u0026quot;identity\u0026quot;, width=0.2, fill=\u0026quot;white\u0026quot;) +\rlabs(title = \u0026quot;Covid-19 Global Cases\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Daily cases\u0026quot;)+\rtheme_bw()\rworld %\u0026gt;% gather(\u0026quot;Cases\u0026quot;, \u0026quot;value\u0026quot;, -Date) %\u0026gt;%\rggplot(aes(x=Date, y=value, colour=Cases)) + geom_line(, size = 1) +\rlabs(title = \u0026quot;Covid-19 Global Cases\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Daily cases\u0026quot;)+\rtheme_bw()\r2.5 So sánh sự phát triển của COVID-19 theo thời gian giữa các nước\nSo sánh Việt Nam, Mỹ, Nga:\nfinal_df %\u0026gt;% filter(Country.Region == \u0026quot;Vietnam\u0026quot;) %\u0026gt;% gather(\u0026quot;Cases\u0026quot;, \u0026quot;value\u0026quot;, -Country.Region, -Date) %\u0026gt;%\rggplot(aes(x=Date, y=value, colour=Cases)) + geom_line(, size = 1) +\rlabs(title = \u0026quot;COVID-19 cases of Vietnam\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Daily cases\u0026quot;)+\rtheme_bw()\rfinal_df %\u0026gt;% filter(Country.Region == \u0026quot;US\u0026quot;) %\u0026gt;% gather(\u0026quot;Cases\u0026quot;, \u0026quot;value\u0026quot;, -Country.Region, -Date) %\u0026gt;%\rggplot(aes(x=Date, y=value, colour=Cases)) + geom_line(, size = 1) +\rlabs(title = \u0026quot;COVID-19 cases of US\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Daily cases\u0026quot;)+\rtheme_bw()\rfinal_df %\u0026gt;% filter(Country.Region == \u0026quot;Russia\u0026quot;) %\u0026gt;% gather(\u0026quot;Cases\u0026quot;, \u0026quot;value\u0026quot;, -Country.Region, -Date) %\u0026gt;%\rggplot(aes(x=Date, y=value, colour=Cases)) + geom_line(, size = 1) +\rlabs(title = \u0026quot;COVID-19 cases of Russia\u0026quot;, x= \u0026quot;Date\u0026quot;, y= \u0026quot;Daily cases\u0026quot;)+\rtheme_bw()\rDo thực hiện công việc tương tự như Python nhưng mà nhanh quá, nên tôi thử tạo thêm bản đồ phân bố dịch này nữa:\n# Chuẩn bị dữ liệu\rcountry \u0026lt;- final_df %\u0026gt;% group_by(Country.Region) %\u0026gt;% mutate(Cumconfirmed=cumsum(Confirmed))\rworld \u0026lt;- country %\u0026gt;% group_by(Date) %\u0026gt;% summarize(Confirmed=sum(Confirmed), Cumconfirmed=sum(Cumconfirmed), Deaths=sum(Deaths), Recovered=sum(Recovered)) \r## Map\rcountrytotal \u0026lt;- country %\u0026gt;% group_by(Country.Region) %\u0026gt;% summarize(Cumconfirmed=sum(Confirmed), Cumdeaths=sum(Deaths), Cumrecovered=sum(Recovered))\r# Basemap from package tmap\rlibrary(tmap)\rdata(World)\r# Combine basemap data với covid data\rlist \u0026lt;- which(!countrytotal$Country.Region %in% World$name)\rcountrytotal$country \u0026lt;- as.character(countrytotal$Country.Region)\rcountrytotal$country[list] \u0026lt;-\rc(\u0026quot;Andorra\u0026quot;, \u0026quot;Antigua and Barbuda\u0026quot;, \u0026quot;Bahrain\u0026quot;,\r\u0026quot;Barbados\u0026quot;, \u0026quot;Bosnia and Herz.\u0026quot;, \u0026quot;Myanmar\u0026quot;,\r\u0026quot;Cape Verde\u0026quot;, \u0026quot;Central African Rep.\u0026quot;, \u0026quot;Congo\u0026quot;,\r\u0026quot;Dem. Rep. Congo\u0026quot;, \u0026quot;Czech Rep.\u0026quot;, \u0026quot;Diamond Princess\u0026quot;,\r\u0026quot;Dominica\u0026quot;, \u0026quot;Dominican Rep.\u0026quot;, \u0026quot;Eq. Guinea\u0026quot;,\r\u0026quot;Swaziland\u0026quot;, \u0026quot;Grenada\u0026quot;, \u0026quot;Holy See\u0026quot;,\r\u0026quot;Korea\u0026quot;, \u0026quot;Lao PDR\u0026quot;, \u0026quot;Liechtenstein\u0026quot;,\r\u0026quot;Maldives\u0026quot;, \u0026quot;Malta\u0026quot;, \u0026quot;Mauritius\u0026quot;,\r\u0026quot;Monaco\u0026quot;, \u0026quot;MS Zaandam\u0026quot;, \u0026quot;Macedonia\u0026quot;,\r\u0026quot;Saint Kitts and Nevis\u0026quot;, \u0026quot;Saint Lucia\u0026quot;, \u0026quot;Saint Vincent and the Grenadines\u0026quot;,\r\u0026quot;San Marino\u0026quot;, \u0026quot;Sao Tome and Principe\u0026quot;, \u0026quot;Seychelles\u0026quot;,\r\u0026quot;Singapore\u0026quot;, \u0026quot;S. Sudan\u0026quot;, \u0026quot;Taiwan\u0026quot;,\r\u0026quot;United States\u0026quot;, \u0026quot;Palestine\u0026quot;, \u0026quot;W. Sahara\u0026quot;)\rWorld$country \u0026lt;- World$name\rworldmap \u0026lt;- left_join(World, countrytotal, by=\u0026quot;country\u0026quot;)\rworldmap$cumconfirmed[is.na(worldmap$Cumconfirmed)] \u0026lt;- 0\r# Map\rggplot(data = worldmap) + geom_sf(aes(fill=Cumconfirmed), color=\u0026quot;black\u0026quot;) +\rggtitle(\u0026quot;World Map of Confirmed Covid Cases\u0026quot;,\rsubtitle=\u0026quot;Total Cases on August 29, 2020\u0026quot;) +\rtheme_bw()\r\r","date":1598659200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598659200,"objectID":"e0126904407a60f97758333f49c3eb0d","permalink":"/post/covid-19-r/","publishdate":"2020-08-29T00:00:00Z","relpermalink":"/post/covid-19-r/","section":"post","summary":"Covid-19 là một đại dịch bệnh truyền nhiễm với tác nhân là virus SARS-CoV-2, hiện đang ảnh hưởng và gây thiệt hại nặng nề trên phạm vi toàn cầu. Kể từ khi đại dịch Covid-19 bắt đầu xuất hiện ở Vũ Hán - Trung Quốc đến nay, cái tên trường Đại học Jonhs Hopkins (Mỹ) được nhắc đi nhắc lại hằng ngày trên các phương tiện truyền thông và là một trong những cụm từ được trích dẫn nhiều nhất.","tags":["R Markdown","Covid-19","Data Visualization"],"title":"Biến đổi và trực quan hóa dữ liệu Covid-19 từ John Hopkins database với R","type":"post"},{"authors":["Cuong Sai"],"categories":["Python"],"content":"Covid-19 là một đại dịch bệnh truyền nhiễm với tác nhân là virus SARS-CoV-2, hiện đang ảnh hưởng và gây thiệt hại nặng nề trên phạm vi toàn cầu. Kể từ khi đại dịch Covid-19 bắt đầu xuất hiện ở Vũ Hán - Trung Quốc đến nay, cái tên trường Đại học Jonhs Hopkins (Mỹ) được nhắc đi nhắc lại hằng ngày trên các phương tiện truyền thông và là một trong những cụm từ được trích dẫn nhiều nhất. Lý do đó là Đại học Johns Hopkins đã phát triển một trong những hệ thống theo dõi dữ liệu COVID-19 bền bỉ và đáng tin cậy nhất trên thế giới cho đến nay.\nDữ liệu Covid-19 được đại học John Hopkins thu thập và cập nhật hàng ngày tại đây John Hopkins database.\nTrong bài này để hiểu hơn về đại dịch này tôi sẽ hướng dẫn các bạn cách download dữ liệu Covid-19 từ John Hopkins database và thực hành các thao tác chuẩn bị dữ liệu (làm sạch và biến đổi) với thư viện pandas và trực quan hóa dữ liệu với thư viện maplotlib sử dụng ngôn ngữ Python. Sau khi đọc xong bài này các bạn sẽ nắm được:\n Cách download dữ liệu Covid-19 từ Jonh Hopkins\n Cách làm sạch và biến đổi dữ liệu dạng data frame với thư viện pandas: xử lý dữ liệu bị thiếu, gộp các dataframes, chuyển đổi dữ liệu từ dạng wide format sang dạng long fromat, subset,\u0026hellip;.\n Cách trực quan hóa dữ liệu Covid-19 sử dụng thư viện matplotlib: Pie chart, Bar chart, Line chart, Multi-Line Chart, xử lý dữ liệu date trong vẽ biểu đồ,\u0026hellip;\n Từ đó các bạn có thể phát triển các kỹ thuật trên thành các Data visualization Dashboards hoặc là web tương tác để tracking tình hình Covid-19 trên toàn thế giới tương tự như John Hopkins University Dashboard, WHO COVID-19 Dashboard,\u0026hellip;\nNội dung chính của bài bao gồm: 1. Download \u0026amp; chuẩn bị dữ liệu Covid-19 sử dụng thư viện pandas\n 2. Trực quan hóa dữ liệu Covid-19 sử dụng thư viện matploblib\n1. Download và chuẩn bị dữ liệu Trước hết để thực hành chúng ta cần nạp các thư viện cần thiết trên Python:\nimport pandas as pd\rimport matplotlib.pyplot as plt\rimport numpy as np\rfrom datetime import datetime, timedelta\r Để thực hành tôi sẽ load 3 tập dữ liệu sau từ kho dữ liệu qua url_links:\n Confirmed: (Số trường hợp mới phát hiện)\n Deaths: (Số trường hợp tử vong)\n Recovered: (Số trường hợp hồi phục)\n url_confd = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_confirmed_global.csv'\rurl_death = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_deaths_global.csv'\rurl_recvd = 'https://raw.githubusercontent.com/CSSEGISandData/COVID-19/master/csse_covid_19_data/csse_covid_19_time_series/time_series_covid19_recovered_global.csv'\rdf_confd = pd.read_csv(url_confd)\rdf_death = pd.read_csv(url_death)\rdf_recvd = pd.read_csv(url_recvd)\r Kiểm tra thông tin các tập dữ liệu này:\nprint(df_confd.info())\r \u0026lt;class 'pandas.core.frame.DataFrame'\u0026gt;\rRangeIndex: 266 entries, 0 to 265\rColumns: 224 entries, Province/State to 8/28/20\rdtypes: float64(2), int64(220), object(2)\rmemory usage: 465.6+ KB\rNone\r print(df_death.info())\r \u0026lt;class 'pandas.core.frame.DataFrame'\u0026gt;\rRangeIndex: 266 entries, 0 to 265\rColumns: 224 entries, Province/State to 8/28/20\rdtypes: float64(2), int64(220), object(2)\rmemory usage: 465.6+ KB\rNone\r print(df_recvd.info())\r \u0026lt;class 'pandas.core.frame.DataFrame'\u0026gt;\rRangeIndex: 253 entries, 0 to 252\rColumns: 223 entries, Province/State to 8/27/20\rdtypes: float64(2), int64(219), object(2)\rmemory usage: 440.9+ KB\rNone\r Kiểm tra 5 hàng đầu tiên của tập dữ liệu df_confd (2 tập còn lại tương tự):\nprint(df_confd.head(5))\r Province/State Country/Region Lat Long 1/22/20 1/23/20 \\\r0 NaN Afghanistan 33.93911 67.709953 0 0 1 NaN Albania 41.15330 20.168300 0 0 2 NaN Algeria 28.03390 1.659600 0 0 3 NaN Andorra 42.50630 1.521800 0 0 4 NaN Angola -11.20270 17.873900 0 0 1/24/20 1/25/20 1/26/20 1/27/20 ... 8/19/20 8/20/20 8/21/20 \\\r0 0 0 0 0 ... 37599 37856 37894 1 0 0 0 0 ... 7812 7967 8119 2 0 0 0 0 ... 39847 40258 40667 3 0 0 0 0 ... 1024 1024 1045 4 0 0 0 0 ... 2015 2044 2068 8/22/20 8/23/20 8/24/20 8/25/20 8/26/20 8/27/20 8/28/20 0 37953 37999 38054 38070 38113 38129 38140 1 8275 8427 8605 8759 8927 9083 9195 2 41068 41460 41858 42228 42619 43016 43403 3 1045 1045 1060 1060 1098 1098 1124 4 2134 2171 2222 2283 2332 2415 2471 [5 rows x 224 columns]\r Trích xuất thông tin về ngày từ tập dữ liệu:\ndates = df_confd.columns[4:]\rprint(dates)\r Index(['1/22/20', '1/23/20', '1/24/20', '1/25/20', '1/26/20', '1/27/20',\r'1/28/20', '1/29/20', '1/30/20', '1/31/20',\r...\r'8/19/20', '8/20/20', '8/21/20', '8/22/20', '8/23/20', '8/24/20',\r'8/25/20', '8/26/20', '8/27/20', '8/28/20'],\rdtype='object', length=220)\r Các tập dữ liệu này được lưu ở dạng wide format do đó chúng ta cần chuyển chúng dạng long fromat:\ndates = df_confd.columns[4:]\rlong_df_confd = df_confd.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'], value_vars=dates, var_name='Date', value_name='Confirmed')\rlong_df_death = df_death.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'], value_vars=dates, var_name='Date', value_name='Deaths')\rlong_df_recvd = df_recvd.melt(id_vars=['Province/State', 'Country/Region', 'Lat', 'Long'], value_vars=dates, var_name='Date', value_name='Recovered')\r Kiểm tra dữ liệu sau khi đã chuyển:\nprint(long_df_confd.head(5))\r Province/State Country/Region Lat Long Date Confirmed\r0 NaN Afghanistan 33.93911 67.709953 1/22/20 0\r1 NaN Albania 41.15330 20.168300 1/22/20 0\r2 NaN Algeria 28.03390 1.659600 1/22/20 0\r3 NaN Andorra 42.50630 1.521800 1/22/20 0\r4 NaN Angola -11.20270 17.873900 1/22/20 0\r print(long_df_death.head(5))\r Province/State Country/Region Lat Long Date Deaths\r0 NaN Afghanistan 33.93911 67.709953 1/22/20 0\r1 NaN Albania 41.15330 20.168300 1/22/20 0\r2 NaN Algeria 28.03390 1.659600 1/22/20 0\r3 NaN Andorra 42.50630 1.521800 1/22/20 0\r4 NaN Angola -11.20270 17.873900 1/22/20 0\r print(long_df_recvd.head(5))\r Province/State Country/Region Lat Long Date Recovered\r0 NaN Afghanistan 33.93911 67.709953 1/22/20 0\r1 NaN Albania 41.15330 20.168300 1/22/20 0\r2 NaN Algeria 28.03390 1.659600 1/22/20 0\r3 NaN Andorra 42.50630 1.521800 1/22/20 0\r4 NaN Angola -11.20270 17.873900 1/22/20 0\r Gộp 3 tập dữ liệu này thành 1 dataframe:\nfinal_df = pd.merge(left=long_df_confd, right=long_df_death, how='left',\ron=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long'])\rfinal_df = pd.merge(left=final_df, right=long_df_recvd, how='left',\ron=['Province/State', 'Country/Region', 'Date', 'Lat', 'Long'])\r Chuyển cột dữ liệu ngày về dạng date:\nfinal_df['Date'] = pd.to_datetime(final_df['Date'])\r Kiểm tra bảng dữ liệu thu được:\nprint(final_df.head(5))\r Province/State Country/Region Lat Long Date Confirmed \\\r0 NaN Afghanistan 33.93911 67.709953 2020-01-22 0 1 NaN Albania 41.15330 20.168300 2020-01-22 0 2 NaN Algeria 28.03390 1.659600 2020-01-22 0 3 NaN Andorra 42.50630 1.521800 2020-01-22 0 4 NaN Angola -11.20270 17.873900 2020-01-22 0 Deaths Recovered 0 0 0.0 1 0 0.0 2 0 0.0 3 0 0.0 4 0 0.0 Kiểm tra kích thước của bảng dữ liệu thu được:\nprint(final_df.shape)\r (58520, 8)\r Kiểm tra khoảng thời gian của dữ liệu được thu thập:\na = final_df.Date.value_counts().sort_index()\rprint('Ngày bắt đầu là:',a.index[0])\rprint('Ngày hiện tại là:',a.index[-1])\r Ngày bắt đầu là: 2020-01-22 00:00:00\rNgày hiện tại là: 2020-08-28 00:00:00\r Kiểm tra missing values (NaN) trong tập dữ liệu:\nfinal_df.isna().sum()\r Province/State 40515\rCountry/Region 0\rLat 0\rLong 0\rDate 0\rConfirmed 0\rDeaths 0\rRecovered 4161\rdtype: int64\r Đánh giá phần trăm missing values của từng cột dữ liệu:\nNAN = [(c, final_df[c].isna().mean()*100) for c in final_df]\rNAN = pd.DataFrame(NAN, columns=[\u0026quot;column_name\u0026quot;, \u0026quot;percentage\u0026quot;])\rprint(NAN)\r column_name percentage\r0 Province/State 69.548872\r1 Country/Region 0.000000\r2 Lat 0.000000\r3 Long 0.000000\r4 Date 0.000000\r5 Confirmed 0.000000\r6 Deaths 0.000000\r7 Recovered 7.142857\r Ta thấy cột Province/State có gần 69.55% dữ liệu bị thiếu và cột Recovered có 7,14%. Vì vậy chúng ta cần xử lý các giá trị thiếu này:\n# Thay thế nan thành 0 cho cột Recovered\rfinal_df['Recovered'] = final_df['Recovered'].fillna(0)\r # Thay thế nan thành Unknown cho cột Province/State\rfinal_df[\u0026quot;Province/State\u0026quot;]= final_df[\u0026quot;Province/State\u0026quot;].fillna('Unknown')\r Kiểm tra xem trong dữ liệu còn missing values không:\nfinal_df.isna().sum()\r Province/State 0\rCountry/Region 0\rLat 0\rLong 0\rDate 0\rConfirmed 0\rDeaths 0\rRecovered 0\rdtype: int64\r Kiểm tra kiểu dữ liệu:\nprint(final_df.dtypes)\r Province/State object\rCountry/Region object\rLat float64\rLong float64\rDate datetime64[ns]\rConfirmed int64\rDeaths int64\rRecovered float64\rdtype: object\r Thay đổi kiểu dữ liệu cho các cột Confirmed, Deaths và Recovered thành int:\nfinal_df[[\u0026quot;Confirmed\u0026quot;,\u0026quot;Deaths\u0026quot;,\u0026quot;Recovered\u0026quot;]] = final_df[[\u0026quot;Confirmed\u0026quot;,\u0026quot;Deaths\u0026quot;,\u0026quot;Recovered\u0026quot;]].astype(int)\rprint(final_df.dtypes)\r Province/State object\rCountry/Region object\rLat float64\rLong float64\rDate datetime64[ns]\rConfirmed int32\rDeaths int32\rRecovered int32\rdtype: object\r Tạo thuộc tính mới Active (Số trường hợp còn đang nhiễm sau khi đã trừ đi số trường hợp tử vong và hồi phục): $$Active = Confirmed - Deaths - Recovered$$\nfinal_df['Active'] = final_df['Confirmed'] - final_df['Deaths'] - final_df['Recovered']\rprint(final_df.head(5))\r Province/State Country/Region Lat Long Date Confirmed \\\r0 Unknown Afghanistan 33.93911 67.709953 2020-01-22 0 1 Unknown Albania 41.15330 20.168300 2020-01-22 0 2 Unknown Algeria 28.03390 1.659600 2020-01-22 0 3 Unknown Andorra 42.50630 1.521800 2020-01-22 0 4 Unknown Angola -11.20270 17.873900 2020-01-22 0 Deaths Recovered Active 0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 0 0 2. Trực quan hóa dữ liệu 2.1 Tổng quan tình hình Covid -19 trên toàn thế giới tính tới thời điểm đang viết bài này:\nKiểm tra tổng số nước trên toàn thế giới trong tập dữ liệu:\nlen(final_df['Country/Region'].unique())\r 188\r Tổng các cases trên toàn thế giới:\ndf = pd.DataFrame(pd.to_numeric(final_df[['Confirmed', 'Deaths', 'Recovered', 'Active']].sum()),dtype=np.float64).transpose()\rdf['Last date'] = max(final_df['Date'])\rprint(df)\r Confirmed Deaths Recovered Active Last date\r0 1.492646e+09 67290986.0 798778726.0 626576735.0 2020-08-28\r Tạo Pie chart so sánh các cases trên toàn thế giới:\ncases = ['Confirmed', 'Deaths', 'Recovered', 'Active']\rcolors = ['gold', 'yellowgreen', 'lightcoral', 'lightskyblue']\rexplode = (0.1, 0, 0, 0) # explode 1st slice\rsizes = sum(df.loc[:, 'Confirmed':'Active'].values)\rexplode = (0.1, 0, 0, 0) # explode 1st slice\r# Plot\rf = plt.figure(figsize=(8,8))\rplt.pie(sizes, explode=explode, textprops=dict(size=15,color='black'),\rlabels=cases, colors=colors,\rautopct='%1.1f%%', shadow=True, startangle=140)\rplt.axis('equal')\rplt.show()\r 2.2 Top 10 nước có số trường hợp (confirmed, deaths, recovered and active cases) lớn nhất\nTính tổng các cases của từng nước tính đến thười điểm hiện tại:\ndf_countries = final_df.copy().drop(['Lat','Long','Province/State', 'Date'],axis =1)\rdf_countries = df_countries.groupby([\u0026quot;Country/Region\u0026quot;]).sum()\r Top 10 nước có confirmed cases lớn nhất:\nf = plt.figure(figsize=(10,5))\rf.add_subplot(111)\rplt.axes(axisbelow=True)\rplt.barh(df_countries.sort_values('Confirmed')[\u0026quot;Confirmed\u0026quot;].index[-10:],df_countries.sort_values('Confirmed')[\u0026quot;Confirmed\u0026quot;].values[-10:],color=\u0026quot;darkcyan\u0026quot;)\rplt.tick_params(size=5,labelsize = 13)\rplt.xlabel(\u0026quot;Confirmed Cases\u0026quot;,fontsize=18)\rplt.title(\u0026quot;Top 10 Countries (Confirmed Cases)\u0026quot;,fontsize=20)\rplt.grid(alpha=0.3)\r Top 10 nước có Deaths lớn nhất:\nf = plt.figure(figsize=(10,5))\rf.add_subplot(111)\rplt.axes(axisbelow=True)\rplt.barh(df_countries.sort_values('Deaths')[\u0026quot;Deaths\u0026quot;].index[-10:],df_countries.sort_values('Deaths')[\u0026quot;Deaths\u0026quot;].values[-10:],color=\u0026quot;crimson\u0026quot;)\rplt.tick_params(size=5,labelsize = 13)\rplt.xlabel(\u0026quot;Deaths Cases\u0026quot;,fontsize=18)\rplt.title(\u0026quot;Top 10 Countries (Deaths)\u0026quot;,fontsize=20)\rplt.grid(alpha=0.3,which='both')\r Top 10 nước có Recovered Cases lớn nhất:\nf = plt.figure(figsize=(10,5))\rf.add_subplot(111)\rplt.axes(axisbelow=True)\rplt.barh(df_countries.sort_values('Recovered')[\u0026quot;Recovered\u0026quot;].index[-10:],df_countries.sort_values('Recovered')[\u0026quot;Recovered\u0026quot;].values[-10:],color=\u0026quot;limegreen\u0026quot;)\rplt.tick_params(size=5,labelsize = 13)\rplt.xlabel(\u0026quot;Recovered Cases\u0026quot;,fontsize=18)\rplt.title(\u0026quot;Top 10 Countries (Recovered Cases)\u0026quot;,fontsize=20)\rplt.grid(alpha=0.3,which='both')\r Top 10 nước có Active Cases lớn nhất:\nf = plt.figure(figsize=(10,5))\rf.add_subplot(111)\rplt.axes(axisbelow=True)\rplt.barh(df_countries.sort_values('Active')[\u0026quot;Active\u0026quot;].index[-10:],df_countries.sort_values('Active')[\u0026quot;Active\u0026quot;].values[-10:],color=\u0026quot;darkorange\u0026quot;)\rplt.tick_params(size=5,labelsize = 13)\rplt.xlabel(\u0026quot;Active Cases\u0026quot;,fontsize=18)\rplt.title(\u0026quot;Top 10 Countries (Active Cases)\u0026quot;,fontsize=20)\rplt.grid(alpha=0.3,which='both')\r 2.3 Mức độ phát triển của Covid-19 theo thời gian trên toàn thế giới\nTính tổng các cases trên toàn thế giới theo thời gian\ndf_world = final_df.groupby([\u0026quot;Date\u0026quot;])[[\u0026quot;Confirmed\u0026quot;,\u0026quot;Active\u0026quot;,\u0026quot;Recovered\u0026quot;,\u0026quot;Deaths\u0026quot;]].sum().reset_index()\rdf_world.set_index('Date',inplace=True)\r Mức độ phát triển của Confirmed cases trên toàn thế giới theo thời gian:\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(10, 6))\r# Add x-axis and y-axis\rax.bar(df_world.index.values,\rdf_world['Confirmed'],\rcolor='blue')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Confirmed cases\u0026quot;,\rtitle=\u0026quot;Confirmed Cases In Each Day\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.grid(alpha=0.3,which='both')\r Mức độ phát triển của Deaths trên toàn thế giới theo thời gian:\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(10, 6))\r# Add x-axis and y-axis\rax.bar(df_world.index.values,\rdf_world['Deaths'],\rcolor='red')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Deaths\u0026quot;,\rtitle=\u0026quot;Deaths In Each Day\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.grid(alpha=0.3,which='both')\r Mức độ phát triển của Recovered cases trên toàn thế giới theo thời gian:\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(10, 6))\r# Add x-axis and y-axis\rax.bar(df_world.index.values,\rdf_world['Recovered'],\rcolor='purple')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Recovered cases\u0026quot;,\rtitle=\u0026quot;Recovered Cases In Each Day\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.grid(alpha=0.3,which='both')\r Mức độ phát triển của Active Cases trên toàn thế giới theo thời gian:\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(10, 6))\r# Add x-axis and y-axis\rax.bar(df_world.index.values,\rdf_world['Active'],\rcolor= 'green')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Active Cases\u0026quot;,\rtitle=\u0026quot;Active Cases In Each Day\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.grid(alpha=0.3,which='both')\r 2.4 Hiển thị tất cả các cases trên thế giới theo thời gian\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(12, 6))\r# Add x-axis and y-axis\rax.plot(df_world.index.values,\rdf_world['Confirmed'],\rcolor='blue', label = 'Confirmed Cases')\rax.plot(df_world.index.values,\rdf_world['Deaths'],\rcolor='red', label = 'Deaths')\rax.plot(df_world.index.values,\rdf_world['Recovered'],\rcolor='purple', label = 'Recovered Cases')\rax.plot(df_world.index.values,\rdf_world['Active'],\rcolor= 'green', label= 'Active Cases')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Cases\u0026quot;,\rtitle=\u0026quot;COVID-19 Cases In Each Day\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.legend(loc=\u0026quot;upper left\u0026quot;)\rplt.grid(alpha=0.3,which='both')\r 2.5 Tổng số lượng các quốc gia trên thế giới xuất hiện dịch bệnh Covid-19 theo thời gian\n# Tính tổng số lượng các nước xuất hiện dịch Covid-19 theo thời gian\rcase_nums_country = df_confd.groupby(\u0026quot;Country/Region\u0026quot;).sum().drop(['Lat','Long'],axis =1).apply(lambda x: x[x \u0026gt; 0].count(), axis =0)\rd = [datetime.strptime(date,'%m/%d/%y').strftime(\u0026quot;%d %b\u0026quot;) for date in case_nums_country.index]\rf = plt.figure(figsize=(10,5))\rf.add_subplot(111)\rmarker_style = dict(c=\u0026quot;crimson\u0026quot;,linewidth=1, linestyle='-', marker='o',markersize=4, markerfacecolor='blue')\rplt.plot(df_world.index.values, case_nums_country,**marker_style)\rplt.setp(ax.get_xticklabels(), rotation=90)\rplt.xlabel(\u0026quot;Dates\u0026quot;,fontsize=10)\rplt.grid(alpha = 0.3)\r 2.6 So sánh sự phát triển của COVID-19 theo thời gian giữa các nước\nSo sánh Việt Nam, Mỹ, Nga:\ndf_Vietnam = final_df[final_df['Country/Region'] == 'Vietnam']\rdf_Russia = final_df[final_df['Country/Region'] == 'Russia']\rdf_US = final_df[final_df['Country/Region'] == 'US']\r Do Mỹ và Nga cùng có số lượng các cases lớn nên biểu thị vào cùng một biểu đồ:\n# Create figure and plot space\rfig, ax = plt.subplots(figsize=(12, 6))\r# Add x-axis and y-axis\rax.plot(df_US['Date'],\rdf_US['Confirmed'],\rcolor='blue', label = 'Confirmed Cases of US')\rax.plot(df_US['Date'],\rdf_US['Active'],\r'-.',\rcolor='blue', label = 'Active Cases of US')\rax.plot(df_US['Date'],\rdf_US['Recovered'],\r'--',\rcolor='blue', label = 'Recovered Cases of US')\rax.plot(df_Russia['Date'],\rdf_Russia['Confirmed'],\rcolor='red', label = 'Confirmed Cases of Russia')\rax.plot(df_Russia['Date'],\rdf_Russia['Active'],\r'-.',\rcolor='red', label = 'Active Cases of Russia')\rax.plot(df_Russia['Date'],\rdf_Russia['Recovered'],\r'--',\rcolor='red', label = 'Recovered Cases of Russia')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Cases\u0026quot;,\rtitle=\u0026quot;Confirmed Cases of COVID-19 of Russia vs US\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.legend(loc=\u0026quot;upper left\u0026quot;)\rplt.grid(alpha=0.3,which='both')\r Việt nam có tổng số các cases nhỏ hơn rất nhiều so với Russia và Mỹ nên nếu biểu thị vào cùng 1 biểu đồ thì sẽ rất khó nhìn. Do vậy tôi biểu diễn Việt Nam riêng:\nfig, ax = plt.subplots(figsize=(12, 6))\r# Add x-axis and y-axis\rax.plot(df_Vietnam['Date'],\rdf_Vietnam['Confirmed'],\rcolor=\u0026quot;red\u0026quot;, label = 'Confirmed Cases of Vietnam')\rax.plot(df_Vietnam['Date'],\rdf_Vietnam['Deaths'],\r'-.',\rcolor=\u0026quot;black\u0026quot;, label = 'Death Case of Vietnam')\rax.plot(df_Vietnam['Date'],\rdf_Vietnam['Active'],\r'-.',\rcolor=\u0026quot;blue\u0026quot;, label = 'Active Cases of Vietnam')\rax.plot(df_Vietnam['Date'],\rdf_Vietnam['Recovered'],\r'--',\rcolor=\u0026quot;green\u0026quot;, label = 'Recovered Cases of Vietnam')\r# Set title and labels for axes\rax.set(xlabel=\u0026quot;Date\u0026quot;,\rylabel=\u0026quot;Cases\u0026quot;,\rtitle=\u0026quot;COVID-19 cases of Vietnam\u0026quot;)\r# Rotate tick marks on x-axis\rplt.setp(ax.get_xticklabels(), rotation=45)\rplt.legend(loc=\u0026quot;upper left\u0026quot;)\rplt.grid(alpha=0.3,which='both')\r ","date":1598486400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598486400,"objectID":"a0355cd444fecbb875f32cbe43410319","permalink":"/post/covid-19-python/","publishdate":"2020-08-27T00:00:00Z","relpermalink":"/post/covid-19-python/","section":"post","summary":"Covid-19 là một đại dịch bệnh truyền nhiễm với tác nhân là virus SARS-CoV-2, hiện đang ảnh hưởng và gây thiệt hại nặng nề trên phạm vi toàn cầu. Kể từ khi đại dịch Covid-19 bắt đầu xuất hiện ở Vũ Hán - Trung Quốc đến nay, cái tên trường Đại học Jonhs Hopkins (Mỹ) được nhắc đi nhắc lại hằng ngày trên các phương tiện truyền thông và là một trong những cụm từ được trích dẫn nhiều nhất.","tags":["Jupyter Notebook","Machine Learning","Data Visualization","Covid-19"],"title":"Download và trực quan hóa dữ liệu Covid-19 từ John Hopkins database (sử dụng Python code)","type":"post"},{"authors":["Cuong Sai"],"categories":["Python"],"content":"1. Note lại các bước để viết posts cho blog sử dụng jupyter notebook\nBước 1: Tạo Jupyter notebook\n# Tạo thư mục chứa post mới\rmkdir -p \u0026lt;MY-WEBSITE-FOLDER\u0026gt;/content/post/\u0026lt;SHORT-POST-TITLE\u0026gt;/\r# chuyển đến thư mục mới tạo\rcd \u0026lt;MY-WEBSITE-FOLDER\u0026gt;/content/post/\u0026lt;SHORT-POST-TITLE\u0026gt;/\r# Tạo một jupyter notebook với tên là index\rjupyter lab index.ipynb\r Bước 2: Tạo post metadata\nCần tạo metadata cho post ở cell đầu tiên của jupyter notebook như sau:\n---\rtitle: My post's title\rdate: 2019-09-01\r# Put any other metadata here...\r---\r Bước 3: Convert notebook to Markdown\njupyter nbconvert index.ipynb --to markdown --NbConvertApp.output_files_dir=.\r 2. Machine Learning Project Template với Python\n2.1 Một Machine Learning Project sẽ gồm các bước cơ bản sau:\nBước 1: Chuẩn bị vấn đề:\n Nạp các thư viện cần thiết Load tập dữ liệu Bước 2: Thăm dò dữ liệu (data exploring)\n Thống kê mô tả Trực quan hóa dữ liệu Bước 3. Chuẩn bị dữ liệu\n Làm sạch dữ liệu (data cleaning) Lựa chọn và biến đổi thuộc tính Chuẩn hóa dữ liệu Bước 4. Đánh giá các algorithms\nBước 5. Impove accuracy\nBước 6. Final model\n2.2 Thực hành với bài toán Regresion Bước 1. Chuẩn bị vấn đề # Nạp các thư viện cần thiết\rimport numpy as np\rfrom numpy import arange\rimport matplotlib.pyplot as plt\rfrom pandas import read_csv\rfrom pandas import set_option\r#from pandas.tools.plotting import scatter_matrix\rfrom sklearn.preprocessing import StandardScaler\rfrom sklearn.model_selection import train_test_split\rfrom sklearn.model_selection import KFold\rfrom sklearn.model_selection import cross_val_score\rfrom sklearn.model_selection import GridSearchCV\rfrom sklearn.linear_model import LinearRegression\rfrom sklearn.linear_model import Lasso\rfrom sklearn.linear_model import ElasticNet\rfrom sklearn.tree import DecisionTreeRegressor\rfrom sklearn.neighbors import KNeighborsRegressor\rfrom sklearn.svm import SVR\rfrom sklearn.pipeline import Pipeline\rfrom sklearn.ensemble import RandomForestRegressor\rfrom sklearn.ensemble import GradientBoostingRegressor\rfrom sklearn.ensemble import ExtraTreesRegressor\rfrom sklearn.ensemble import AdaBoostRegressor\rfrom sklearn.metrics import mean_squared_error\r # Load dữ liệu\rurl = 'https://raw.githubusercontent.com/svcuong/Datasets/master/boston.csv'\rdataset = read_csv(url, index_col=0)\r Bước 2. Thăm dò dữ liệu\nBước 2.1: Thống kê mô tả\n# Kiểm tra kích thước dữ liệu\rdataset.shape\r (506, 14)\r # Kiểm tra kiểu dữ liệu của thuộc tính\rdataset.dtypes\r crim float64\rzn float64\rindus float64\rchas int64\rnox float64\rrm float64\rage float64\rdis float64\rrad int64\rtax int64\rptratio float64\rblack float64\rlstat float64\rmedv float64\rdtype: object\r # hiển thị 10 hàng dữ liệu đầu tiên\rprint(dataset.head(10))\r crim zn indus chas nox rm age dis rad tax \\\r1 0.00632 18.0 2.31 0 0.538 6.575 65.2 4.0900 1 296 2 0.02731 0.0 7.07 0 0.469 6.421 78.9 4.9671 2 242 3 0.02729 0.0 7.07 0 0.469 7.185 61.1 4.9671 2 242 4 0.03237 0.0 2.18 0 0.458 6.998 45.8 6.0622 3 222 5 0.06905 0.0 2.18 0 0.458 7.147 54.2 6.0622 3 222 6 0.02985 0.0 2.18 0 0.458 6.430 58.7 6.0622 3 222 7 0.08829 12.5 7.87 0 0.524 6.012 66.6 5.5605 5 311 8 0.14455 12.5 7.87 0 0.524 6.172 96.1 5.9505 5 311 9 0.21124 12.5 7.87 0 0.524 5.631 100.0 6.0821 5 311 10 0.17004 12.5 7.87 0 0.524 6.004 85.9 6.5921 5 311 ptratio black lstat medv 1 15.3 396.90 4.98 24.0 2 17.8 396.90 9.14 21.6 3 17.8 392.83 4.03 34.7 4 18.7 394.63 2.94 33.4 5 18.7 396.90 5.33 36.2 6 18.7 394.12 5.21 28.7 7 15.2 395.60 12.43 22.9 8 15.2 396.90 19.15 27.1 9 15.2 386.63 29.93 16.5 10 15.2 386.71 17.10 18.9 # kiểm tra phân bố dữ liệu của từng thuộc tính\rprint(dataset.describe())\r crim zn indus chas nox rm \\\rcount 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000 mean 3.613524 11.363636 11.136779 0.069170 0.554695 6.284634 std 8.601545 23.322453 6.860353 0.253994 0.115878 0.702617 min 0.006320 0.000000 0.460000 0.000000 0.385000 3.561000 25% 0.082045 0.000000 5.190000 0.000000 0.449000 5.885500 50% 0.256510 0.000000 9.690000 0.000000 0.538000 6.208500 75% 3.677082 12.500000 18.100000 0.000000 0.624000 6.623500 max 88.976200 100.000000 27.740000 1.000000 0.871000 8.780000 age dis rad tax ptratio black \\\rcount 506.000000 506.000000 506.000000 506.000000 506.000000 506.000000 mean 68.574901 3.795043 9.549407 408.237154 18.455534 356.674032 std 28.148861 2.105710 8.707259 168.537116 2.164946 91.294864 min 2.900000 1.129600 1.000000 187.000000 12.600000 0.320000 25% 45.025000 2.100175 4.000000 279.000000 17.400000 375.377500 50% 77.500000 3.207450 5.000000 330.000000 19.050000 391.440000 75% 94.075000 5.188425 24.000000 666.000000 20.200000 396.225000 max 100.000000 12.126500 24.000000 711.000000 22.000000 396.900000 lstat medv count 506.000000 506.000000 mean 12.653063 22.532806 std 7.141062 9.197104 min 1.730000 5.000000 25% 6.950000 17.025000 50% 11.360000 21.200000 75% 16.955000 25.000000 max 37.970000 50.000000 # Kiểm tra độ tương quan giữa các biến dạng numeric\rprint(dataset.corr(method = 'pearson'))\r crim zn indus chas nox rm age \\\rcrim 1.000000 -0.200469 0.406583 -0.055892 0.420972 -0.219247 0.352734 zn -0.200469 1.000000 -0.533828 -0.042697 -0.516604 0.311991 -0.569537 indus 0.406583 -0.533828 1.000000 0.062938 0.763651 -0.391676 0.644779 chas -0.055892 -0.042697 0.062938 1.000000 0.091203 0.091251 0.086518 nox 0.420972 -0.516604 0.763651 0.091203 1.000000 -0.302188 0.731470 rm -0.219247 0.311991 -0.391676 0.091251 -0.302188 1.000000 -0.240265 age 0.352734 -0.569537 0.644779 0.086518 0.731470 -0.240265 1.000000 dis -0.379670 0.664408 -0.708027 -0.099176 -0.769230 0.205246 -0.747881 rad 0.625505 -0.311948 0.595129 -0.007368 0.611441 -0.209847 0.456022 tax 0.582764 -0.314563 0.720760 -0.035587 0.668023 -0.292048 0.506456 ptratio 0.289946 -0.391679 0.383248 -0.121515 0.188933 -0.355501 0.261515 black -0.385064 0.175520 -0.356977 0.048788 -0.380051 0.128069 -0.273534 lstat 0.455621 -0.412995 0.603800 -0.053929 0.590879 -0.613808 0.602339 medv -0.388305 0.360445 -0.483725 0.175260 -0.427321 0.695360 -0.376955 dis rad tax ptratio black lstat medv crim -0.379670 0.625505 0.582764 0.289946 -0.385064 0.455621 -0.388305 zn 0.664408 -0.311948 -0.314563 -0.391679 0.175520 -0.412995 0.360445 indus -0.708027 0.595129 0.720760 0.383248 -0.356977 0.603800 -0.483725 chas -0.099176 -0.007368 -0.035587 -0.121515 0.048788 -0.053929 0.175260 nox -0.769230 0.611441 0.668023 0.188933 -0.380051 0.590879 -0.427321 rm 0.205246 -0.209847 -0.292048 -0.355501 0.128069 -0.613808 0.695360 age -0.747881 0.456022 0.506456 0.261515 -0.273534 0.602339 -0.376955 dis 1.000000 -0.494588 -0.534432 -0.232471 0.291512 -0.496996 0.249929 rad -0.494588 1.000000 0.910228 0.464741 -0.444413 0.488676 -0.381626 tax -0.534432 0.910228 1.000000 0.460853 -0.441808 0.543993 -0.468536 ptratio -0.232471 0.464741 0.460853 1.000000 -0.177383 0.374044 -0.507787 black 0.291512 -0.444413 -0.441808 -0.177383 1.000000 -0.366087 0.333461 lstat -0.496996 0.488676 0.543993 0.374044 -0.366087 1.000000 -0.737663 medv 0.249929 -0.381626 -0.468536 -0.507787 0.333461 -0.737663 1.000000 Bước 2.2: Trực quan hóa dữ liệu\n# Histograms cho từng thuộc tính\rdataset.hist(figsize=(12,8))\rplt.show()\r # Boxplot cho từng thuộc tính\rdataset.plot(kind='box', figsize=(12,5))\rplt.show()\r # correlation matrix\rfig = plt.figure(figsize=(14, 6))\rax = fig.add_subplot(111)\rcax = ax.matshow(dataset.corr(), vmin=-1, vmax=1, interpolation='none')\rfig.colorbar(cax)\rticks = numpy.arange(0,14,1)\rax.set_xticks(ticks)\rax.set_yticks(ticks)\rax.set_xticklabels(names)\rax.set_yticklabels(names)\rplt.show()\r Bước 3: Chuẩn bị dữ liệu\n# Split-out validation dataset\rarray = dataset.values\rX = array[:,0:13]\rY = array[:,13]\rvalidation_size = 0.20\rseed = 7\rX_train, X_validation, Y_train, Y_validation = train_test_split(X, Y,\rtest_size=validation_size, random_state=seed)\r Bước 4: Đánh giá algorithms\n# Test options and evaluation metric\rnum_folds = 10\rseed = 7\rscoring = 'neg_mean_squared_error'\r # Spot-Check Algorithms\rmodels = []\rmodels.append(('LR', LinearRegression()))\rmodels.append(('LASSO', Lasso()))\rmodels.append(('EN', ElasticNet()))\rmodels.append(('KNN', KNeighborsRegressor()))\rmodels.append(('CART', DecisionTreeRegressor()))\rmodels.append(('SVR', SVR()))\r import warnings\rwarnings.filterwarnings('ignore')\r # evaluate each model in turn\rresults = []\rnames = []\rfor name, model in models:\rkfold = KFold(n_splits=num_folds, random_state=seed)\rcv_results = cross_val_score(model, X_train, Y_train, cv=kfold, scoring=scoring)\rresults.append(cv_results)\rnames.append(name)\rmsg = \u0026quot;%s: %f (%f)\u0026quot; % (name, cv_results.mean(), cv_results.std())\rprint(msg)\r LR: -21.379856 (9.414264)\rLASSO: -26.423561 (11.651110)\rEN: -27.502259 (12.305022)\rKNN: -41.896488 (13.901688)\rCART: -26.016351 (15.164680)\rSVR: -67.827886 (29.049138)\r # Compare Algorithms\rfig = pyplot.figure(figsize=(10, 6))\rfig.suptitle('Algorithm Comparison')\rax = fig.add_subplot(111)\rpyplot.boxplot(results)\rax.set_xticklabels(names)\rpyplot.show()\r Bước 5: Improve Results With Tuning\nTôi sẽ hướng dẫn ở một bài khác\nBước 6: Finalize model\nTôi sẽ hướng dẫn ở một bài khác\n","date":1598313600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598313600,"objectID":"6e929dc84ed3ef80467b02e64cd2ed64","permalink":"/post/jupyter/","publishdate":"2020-08-25T00:00:00Z","relpermalink":"/post/jupyter/","section":"post","summary":"1. Note lại các bước để viết posts cho blog sử dụng jupyter notebook\nBước 1: Tạo Jupyter notebook\n# Tạo thư mục chứa post mới\rmkdir -p \u0026lt;MY-WEBSITE-FOLDER\u0026gt;/content/post/\u0026lt;SHORT-POST-TITLE\u0026gt;/\r# chuyển đến thư mục mới tạo\rcd \u0026lt;MY-WEBSITE-FOLDER\u0026gt;/content/post/\u0026lt;SHORT-POST-TITLE\u0026gt;/\r# Tạo một jupyter notebook với tên là index\rjupyter lab index.","tags":["Jupyter Notebook","Machine Learning","Data Visualization"],"title":"Thử sử dụng jupyter notebook để viết posts cho blog. Machine Learning Project Template với Python","type":"post"},{"authors":[],"categories":"R","content":"\rTrong machine learning tồn tại định lý “không có bữa trưa miễn phí” (No free lunch theorem), tức là không tồn tại một thuật toán mà luôn tốt cho mọi ứng dụng và mọi tập dữ liệu, vì các thuật toán machiner learning thường dựa trên một tập các tham số (hyperparameters) hoặc một giả thiết nhất định nào đó về phân bố dữ liệu. Vì vậy để tìm được những thuật toán phù hợp cho tập dataset của mình có thể các bạn sẽ cần nhiều thời gian để test các thuật toán khác nhau. Rồi từ đó thực hiện hiệu chỉnh các tham số (tuning hyperparameters) của thuật toán để thu được độ chính xác cao nhất.\nMột cách khác có thể sử dụng để tăng độ chính xác trên tập dataset của bạn là kết hợp (combine) một số mô hình với nhau. Phương pháp này gọi là esemble learning. Ý tưởng của việc combine các mô hình khác nhau xuất phát từ một suy nghĩ hợp lý là: các mô hình khác nhau có khả năng khác nhau, có thể thực hiện tốt nhất các loại công việc khác nhau (subtasks), khi kết hợp các mô hình này với nhau một cách hợp lý thì sẽ tạo thành một mô hình kết hợp (combined model) mạnh có khả năng cải thiện hiệu suât tổng thể (overall performance) so với việc chỉ dùng các mô hình một cách đơn lẻ.\nCác phương pháp Ensemble Learning được chia thành 3 loại sau đây:\n\rBagging (đóng bao)\rBoosting (tăng cường)\rStacking (Xếp chồng)\r\rTrong post này, trước hết tôi sẽ giới thiệu 3 kỹ thuật ensemble learning kể trên, sau đó là cách sử dụng thư viện caret và caretEnsemble trong R để triển khai chúng và áp dụng vào bài toán cụ thể.\nĐể cài đặt 2 thư viện này ta dùng lệnh install.packages(.) với tham số đầu vào là tên thư viện muốn cài:\ninstall.packages(\u0026quot;caret\u0026quot;)\rintall.packages(\u0026quot;caretEnsemble\u0026quot;)\rĐôi nét về thư viện caret: Ngôn ngữ R khác biệt bởi số lượng rất lớn các packages chuyên dụng khác nhau cho phép xây dựng các mô hình dự đoán. Tuy nhiên đây cũng chính là khuyết điểm, khi có quá nhiều các gói triển khai machine learning algorithms dưới dạng các\rhàm rải rác đòi hỏi ta cần nhiều thời gian để tìm kiếm và nắm vững những đặc trưng về cú pháp cũng như cách sử dụng của từng hàm. Để giải quyết vấn đề này Max Kuhn đã xây dựng một giao diện phổ quát cho phép truy cập và sử dụng các machine learning algorithms từ cái gói khác nhau được triển khai trên ngôn ngữ R. Kết quả chính là package caret (viết tắt từ Classification and Regression Training), được công bố đầu tiên vào năm 2008 tại tạp chí phần mềm thống kê Journal of Statistical Software. Gói caret giúp chúng ta tiết kiệm được rất nhiều thời gian trong quá trình phân tích và xây dựng các models. Dưới đây là một số\rđặc trưng cơ bản của gói caret:\n\rSử dụng cú pháp lệnh chung (phổ quát) không phụ thuộc vào cú pháp của các hàm gốc (các hàm triển khai các machine learningalgorithms)\n\rTự động tìm kiếm những giá trị tối ưu cho các hyperparameters của mô hình (tuning parameters)\n\rCó khả năng tổ chức tính toán song song để tăng đáng kể tốc độ quá trình huấn luyện mô hình\n\rSử dụng Caret cho phép giải quyết hầu hết các nhiệm vụ trong machine learning từ tiền xủ lý cho đến đánh giá mô hình\n\r\r1. Phân biệt 3 kỹ thuật boosting, baggig và statcking\nBagging xây dựng một lượng lớn các models (thường là cùng loại) trên những subsamples khác nhau từ tập training dataset một cách song song nhằm đưa ra dự đoán tốt hơn.\nBoosting xây dựng một lượng lớn các models (thường là cùng loại). Tuy nhiên quá trình huấn luyện trong phương pháp này diễn ra tuần tự theo chuỗi (sequence). Trong chuỗi này mỗi model sau sẽ học cách sửa những errors của model trước (hay nói cách khác là dữ liệu mà model trước dự đoán sai).\nNguồn ảnh\n\rStacking xây dựng một số models (thường là khác loại) và một mô hình supervisor model, mô hình này sẽ học cách kết hợp kết quả dự báo của một số mô hình một cách tốt nhất.\nNguồn ảnh\n\r2. Thực hành\nNạp các thư viện cần dùng vào phiên làm việc của R để thực hành:\nlibrary(caret)\rlibrary(caretEnsemble) \rKiểm tra số lượng các machine learning algorithms trong R được hỗ trợ bởi caret:\ncarets \u0026lt;- getModelInfo()\rcarets.names \u0026lt;- names(carets)\rlength(carets.names)\r## [1] 238\r2.1 Dữ liệu để thực hành\nĐể thực hành tôi lựa chọn bài toán phân loại nhị phân (binary classification) với tập dữ liệu ionoshene. Trong bài toán này chúng ta cần dự đoán xem cao tần trả vể từ năng lượng của các hạt trong khí quyển có cấu trúc hay là không. Để tìm hiểu thêm về bài toán này các bạn có thể đọc ở đây.\nLoad dữ liệu từ gói mlbench:\n# Load the dataset\rlibrary(mlbench)\rdata(Ionosphere)\rdataset \u0026lt;- Ionosphere\r2.1.1 Thống kê mô tả (descriptive statistics)\nKiểm tra kích thước tập dữ liệu:\ndim(dataset)\r## [1] 351 35\rKiểm tra cấu trúc của tập dữ liệu:\nstr(dataset)\r## \u0026#39;data.frame\u0026#39;: 351 obs. of 35 variables:\r## $ V1 : Factor w/ 2 levels \u0026quot;0\u0026quot;,\u0026quot;1\u0026quot;: 2 2 2 2 2 2 2 1 2 2 ...\r## $ V2 : Factor w/ 1 level \u0026quot;0\u0026quot;: 1 1 1 1 1 1 1 1 1 1 ...\r## $ V3 : num 0.995 1 1 1 1 ...\r## $ V4 : num -0.0589 -0.1883 -0.0336 -0.4516 -0.024 ...\r## $ V5 : num 0.852 0.93 1 1 0.941 ...\r## $ V6 : num 0.02306 -0.36156 0.00485 1 0.06531 ...\r## $ V7 : num 0.834 -0.109 1 0.712 0.921 ...\r## $ V8 : num -0.377 -0.936 -0.121 -1 -0.233 ...\r## $ V9 : num 1 1 0.89 0 0.772 ...\r## $ V10 : num 0.0376 -0.0455 0.012 0 -0.164 ...\r## $ V11 : num 0.852 0.509 0.731 0 0.528 ...\r## $ V12 : num -0.1776 -0.6774 0.0535 0 -0.2028 ...\r## $ V13 : num 0.598 0.344 0.854 0 0.564 ...\r## $ V14 : num -0.44945 -0.69707 0.00827 0 -0.00712 ...\r## $ V15 : num 0.605 -0.517 0.546 -1 0.344 ...\r## $ V16 : num -0.38223 -0.97515 0.00299 0.14516 -0.27457 ...\r## $ V17 : num 0.844 0.055 0.838 0.541 0.529 ...\r## $ V18 : num -0.385 -0.622 -0.136 -0.393 -0.218 ...\r## $ V19 : num 0.582 0.331 0.755 -1 0.451 ...\r## $ V20 : num -0.3219 -1 -0.0854 -0.5447 -0.1781 ...\r## $ V21 : num 0.5697 -0.1315 0.7089 -0.6997 0.0598 ...\r## $ V22 : num -0.297 -0.453 -0.275 1 -0.356 ...\r## $ V23 : num 0.3695 -0.1806 0.4339 0 0.0231 ...\r## $ V24 : num -0.474 -0.357 -0.121 0 -0.529 ...\r## $ V25 : num 0.5681 -0.2033 0.5753 1 0.0329 ...\r## $ V26 : num -0.512 -0.266 -0.402 0.907 -0.652 ...\r## $ V27 : num 0.411 -0.205 0.59 0.516 0.133 ...\r## $ V28 : num -0.462 -0.184 -0.221 1 -0.532 ...\r## $ V29 : num 0.2127 -0.1904 0.431 1 0.0243 ...\r## $ V30 : num -0.341 -0.116 -0.174 -0.201 -0.622 ...\r## $ V31 : num 0.4227 -0.1663 0.6044 0.2568 -0.0571 ...\r## $ V32 : num -0.5449 -0.0629 -0.2418 1 -0.5957 ...\r## $ V33 : num 0.1864 -0.1374 0.5605 -0.3238 -0.0461 ...\r## $ V34 : num -0.453 -0.0245 -0.3824 1 -0.657 ...\r## $ Class: Factor w/ 2 levels \u0026quot;bad\u0026quot;,\u0026quot;good\u0026quot;: 2 1 2 1 2 1 2 1 2 1 ...\rHiển thị 5 hàng dữ liệu đầu tiên:\nhead(dataset, 5)\r## V1 V2 V3 V4 V5 V6 V7 V8 V9 V10\r## 1 1 0 0.99539 -0.05889 0.85243 0.02306 0.83398 -0.37708 1.00000 0.03760\r## 2 1 0 1.00000 -0.18829 0.93035 -0.36156 -0.10868 -0.93597 1.00000 -0.04549\r## 3 1 0 1.00000 -0.03365 1.00000 0.00485 1.00000 -0.12062 0.88965 0.01198\r## 4 1 0 1.00000 -0.45161 1.00000 1.00000 0.71216 -1.00000 0.00000 0.00000\r## 5 1 0 1.00000 -0.02401 0.94140 0.06531 0.92106 -0.23255 0.77152 -0.16399\r## V11 V12 V13 V14 V15 V16 V17 V18 V19\r## 1 0.85243 -0.17755 0.59755 -0.44945 0.60536 -0.38223 0.84356 -0.38542 0.58212\r## 2 0.50874 -0.67743 0.34432 -0.69707 -0.51685 -0.97515 0.05499 -0.62237 0.33109\r## 3 0.73082 0.05346 0.85443 0.00827 0.54591 0.00299 0.83775 -0.13644 0.75535\r## 4 0.00000 0.00000 0.00000 0.00000 -1.00000 0.14516 0.54094 -0.39330 -1.00000\r## 5 0.52798 -0.20275 0.56409 -0.00712 0.34395 -0.27457 0.52940 -0.21780 0.45107\r## V20 V21 V22 V23 V24 V25 V26 V27\r## 1 -0.32192 0.56971 -0.29674 0.36946 -0.47357 0.56811 -0.51171 0.41078\r## 2 -1.00000 -0.13151 -0.45300 -0.18056 -0.35734 -0.20332 -0.26569 -0.20468\r## 3 -0.08540 0.70887 -0.27502 0.43385 -0.12062 0.57528 -0.40220 0.58984\r## 4 -0.54467 -0.69975 1.00000 0.00000 0.00000 1.00000 0.90695 0.51613\r## 5 -0.17813 0.05982 -0.35575 0.02309 -0.52879 0.03286 -0.65158 0.13290\r## V28 V29 V30 V31 V32 V33 V34 Class\r## 1 -0.46168 0.21266 -0.34090 0.42267 -0.54487 0.18641 -0.45300 good\r## 2 -0.18401 -0.19040 -0.11593 -0.16626 -0.06288 -0.13738 -0.02447 bad\r## 3 -0.22145 0.43100 -0.17365 0.60436 -0.24180 0.56045 -0.38238 good\r## 4 1.00000 1.00000 -0.20099 0.25682 1.00000 -0.32382 1.00000 bad\r## 5 -0.53206 0.02431 -0.62197 -0.05707 -0.59573 -0.04608 -0.65697 good\rKiểm tra missing values trong dữ liệu:\nsum(is.na(dataset))\r## [1] 0\rKiểm tra phân phối của từng thuộc tính:\nsummary(dataset)\r## V1 V2 V3 V4 V5 ## 0: 38 0:351 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1:313 1st Qu.: 0.4721 1st Qu.:-0.06474 1st Qu.: 0.4127 ## Median : 0.8711 Median : 0.01631 Median : 0.8092 ## Mean : 0.6413 Mean : 0.04437 Mean : 0.6011 ## 3rd Qu.: 1.0000 3rd Qu.: 0.19418 3rd Qu.: 1.0000 ## Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V6 V7 V8 V9 ## Min. :-1.0000 Min. :-1.0000 Min. :-1.00000 Min. :-1.00000 ## 1st Qu.:-0.0248 1st Qu.: 0.2113 1st Qu.:-0.05484 1st Qu.: 0.08711 ## Median : 0.0228 Median : 0.7287 Median : 0.01471 Median : 0.68421 ## Mean : 0.1159 Mean : 0.5501 Mean : 0.11936 Mean : 0.51185 ## 3rd Qu.: 0.3347 3rd Qu.: 0.9692 3rd Qu.: 0.44567 3rd Qu.: 0.95324 ## Max. : 1.0000 Max. : 1.0000 Max. : 1.00000 Max. : 1.00000 ## V10 V11 V12 V13 ## Min. :-1.00000 Min. :-1.00000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.04807 1st Qu.: 0.02112 1st Qu.:-0.06527 1st Qu.: 0.0000 ## Median : 0.01829 Median : 0.66798 Median : 0.02825 Median : 0.6441 ## Mean : 0.18135 Mean : 0.47618 Mean : 0.15504 Mean : 0.4008 ## 3rd Qu.: 0.53419 3rd Qu.: 0.95790 3rd Qu.: 0.48237 3rd Qu.: 0.9555 ## Max. : 1.00000 Max. : 1.00000 Max. : 1.00000 Max. : 1.0000 ## V14 V15 V16 V17 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.07372 1st Qu.: 0.0000 1st Qu.:-0.08170 1st Qu.: 0.0000 ## Median : 0.03027 Median : 0.6019 Median : 0.00000 Median : 0.5909 ## Mean : 0.09341 Mean : 0.3442 Mean : 0.07113 Mean : 0.3819 ## 3rd Qu.: 0.37486 3rd Qu.: 0.9193 3rd Qu.: 0.30897 3rd Qu.: 0.9357 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V18 V19 V20 V21 ## Min. :-1.000000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.225690 1st Qu.: 0.0000 1st Qu.:-0.23467 1st Qu.: 0.0000 ## Median : 0.000000 Median : 0.5762 Median : 0.00000 Median : 0.4991 ## Mean :-0.003617 Mean : 0.3594 Mean :-0.02402 Mean : 0.3367 ## 3rd Qu.: 0.195285 3rd Qu.: 0.8993 3rd Qu.: 0.13437 3rd Qu.: 0.8949 ## Max. : 1.000000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V22 V23 V24 V25 ## Min. :-1.000000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.243870 1st Qu.: 0.0000 1st Qu.:-0.36689 1st Qu.: 0.0000 ## Median : 0.000000 Median : 0.5318 Median : 0.00000 Median : 0.5539 ## Mean : 0.008296 Mean : 0.3625 Mean :-0.05741 Mean : 0.3961 ## 3rd Qu.: 0.188760 3rd Qu.: 0.9112 3rd Qu.: 0.16463 3rd Qu.: 0.9052 ## Max. : 1.000000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V26 V27 V28 V29 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.00000 Min. :-1.0000 ## 1st Qu.:-0.33239 1st Qu.: 0.2864 1st Qu.:-0.44316 1st Qu.: 0.0000 ## Median :-0.01505 Median : 0.7082 Median :-0.01769 Median : 0.4966 ## Mean :-0.07119 Mean : 0.5416 Mean :-0.06954 Mean : 0.3784 ## 3rd Qu.: 0.15676 3rd Qu.: 0.9999 3rd Qu.: 0.15354 3rd Qu.: 0.8835 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.00000 Max. : 1.0000 ## V30 V31 V32 V33 ## Min. :-1.00000 Min. :-1.0000 Min. :-1.000000 Min. :-1.0000 ## 1st Qu.:-0.23689 1st Qu.: 0.0000 1st Qu.:-0.242595 1st Qu.: 0.0000 ## Median : 0.00000 Median : 0.4428 Median : 0.000000 Median : 0.4096 ## Mean :-0.02791 Mean : 0.3525 Mean :-0.003794 Mean : 0.3494 ## 3rd Qu.: 0.15407 3rd Qu.: 0.8576 3rd Qu.: 0.200120 3rd Qu.: 0.8138 ## Max. : 1.00000 Max. : 1.0000 Max. : 1.000000 Max. : 1.0000 ## V34 Class ## Min. :-1.00000 bad :126 ## 1st Qu.:-0.16535 good:225 ## Median : 0.00000 ## Mean : 0.01448 ## 3rd Qu.: 0.17166 ## Max. : 1.00000\rThuộc tính thứ V2 chỉ có 1 giá trị là 0 nên có thể loại bỏ:\ndataset$V2 \u0026lt;- NULL\rChuyển thuộc tính V1 từ factor sang numeric:\ndataset$V1 \u0026lt;- as.numeric(as.character(dataset$V1))\rKiểm tra mức độ tương quan (correlation) giữa các thuộc tính (do số lượng thuộc tính lớn nên tôi chỉ hiển thị tương quan giữa 6 thuộc tính đầu làm mẫu):\ncor(dataset[,1:6])\r## V1 V3 V4 V5 V6 V7\r## V1 1.000000000 0.30203392 -0.006528852 0.15615240 0.12760571 0.22186692\r## V3 0.302033923 1.00000000 0.143364804 0.47658695 0.02576751 0.44025437\r## V4 -0.006528852 0.14336480 1.000000000 0.00115185 -0.19030761 -0.05402953\r## V5 0.156152397 0.47658695 0.001151850 1.00000000 0.03832312 0.59707508\r## V6 0.127605707 0.02576751 -0.190307607 0.03832312 1.00000000 -0.01022692\r## V7 0.221866916 0.44025437 -0.054029528 0.59707508 -0.01022692 1.00000000\r2.1.2 Trực quan hóa dữ liệu (data visualization)\nDo số lượng thuộc tính nhiều nên tôi chỉ thực hiện data visualization đối 12 thuộc tính đầu của tập dữ liệu.\nHistogram cho 12 thuộc tính đầu:\npar(mfrow=c(3,4))\rfor(i in 1:12) { hist(dataset[,i], main=names(dataset)[i], breaks = 30)\r}\rBoxplot cho 12 thuộc tính đầu:\nboxplot(dataset[, 1:12], col = \u0026quot;orange\u0026quot;, main = \u0026quot;Features Boxplot\u0026quot;)\rTrong bước này nếu phát hiện trong các thuộc tính có nhiều giá trị ngoại lai (outliers) thì các bạn có thể đọc post trước của tôi về cách loại bỏ outliers trong dữ liệu cho machine learning bằng các phương pháp thống kê tại đây.\n2.1.3 Tiền xử lý dữ liệu (data preprocessing)\nXác định và Loại bỏ các thuộc tính tương quan với nhau cao (\u0026gt;0.75)\n# Tìm các thuộc tính tương quan với nhau cao\rcor_coefficient \u0026lt;- 0.75\rcorrelations \u0026lt;- cor(dataset[,1:13])\rhighlyCorrelated \u0026lt;- findCorrelation(correlations, cutoff=cor_coefficient)\rlength(highlyCorrelated)\r## [1] 0\rỞ đây không có các thuộc tính tương quan cao với nhau, tuy nhiên nếu có thì các bạn có thể loại bỏ chúng như sau:\ndatasetFeatures \u0026lt;- dataset[,-highlyCorrelated]\rdim(datasetFeatures)\rChuẩn hóa giá trị của các thuộc tính (data normalization) về khoảng [0,1]:\npreProcValues \u0026lt;- preProcess(dataset, method = c(\u0026quot;range\u0026quot;))\rdata_processed \u0026lt;- predict(preProcValues, dataset)\rVậy là dữ liệu của chúng ta đã sẵn sàng để test các thuật toán ensemble learning rồi.\n2.2. Thuật toán Boosting\nTrong phạm vi post này tôi sẽ test hai thuật toán boosting khá phổ biến là: C5.0 và Stochastic Gradient Boosting\nDưới đây là ví dụ huấn luyện hai mô hình này trên R với các tham số mặc định:\nseed \u0026lt;- 10\r# tạo một đối tượng control cho cross-validation\rcontrol \u0026lt;- trainControl(method=\u0026quot;repeatedcv\u0026quot;, number=10, repeats=3)\r# Trong đó\r# method = \u0026#39;repeatedcv\u0026#39;: sử dụng cross-validation với các tham số sau:\r# number = 10 có nhĩa là quá trình cross-validation cần chia dữ liệu gốc thành 10 phần bằng nhau\r# repeats = 3 có nhĩa là quá trình cross-validation sẽ hoàn thành sau 3 lần\r# C5.0\rset.seed(seed)\rfit.c50 \u0026lt;- train(Class~., data=dataset, method=\u0026quot;C5.0\u0026quot;, metric = \u0026quot;Accuracy\u0026quot;, trControl=control)\r# Stochastic Gradient Boosting\rset.seed(seed)\rfit.gbm \u0026lt;- train(Class~., data=dataset, method=\u0026quot;gbm\u0026quot;, metric = \u0026quot;Accuracy\u0026quot;, trControl=control, verbose=FALSE)\rSo sánh kết quả hai mô hình:\nboosting_results \u0026lt;- resamples(list(c5.0=fit.c50, gbm=fit.gbm))\rsummary(boosting_results)\r## ## Call:\r## summary.resamples(object = boosting_results)\r## ## Models: c5.0, gbm ## Number of resamples: 30 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## c5.0 0.8823529 0.9148810 0.9575163 0.9468627 0.9714286 1 0\r## gbm 0.8529412 0.9166667 0.9428571 0.9420184 0.9714286 1 0\r## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## c5.0 0.7213115 0.8157164 0.9069808 0.8806722 0.937833 1 0\r## gbm 0.6586345 0.8142060 0.8776224 0.8707906 0.937201 1 0\rdotplot(boosting_results)\rTừ kết quả so sánh ta thấy thuật toán C5.0 cho kết quả chính xác hơn so với Stochastic Gradient Boosting trong bài toán này (với độ chính xác là 94.68%)\n2.3 Thuật toán Bagging\nChúng ta cùng test hai thuật toán thuộc kỹ thuật Bagging là: Bagged CART và Random Forest\nDưới đây là ví dụ huấn luyện hai mô hình này trên R với các tham số mặc định:\ncontrol \u0026lt;- trainControl(method=\u0026quot;repeatedcv\u0026quot;, number=10, repeats=3)\r# Bagged CART\rset.seed(seed)\rfit.treebag \u0026lt;- train(Class~., data=dataset, method=\u0026quot;treebag\u0026quot;, metric = \u0026quot;Accuracy\u0026quot;, trControl=control)\r# Random Forest\rset.seed(seed)\rfit.rf \u0026lt;- train(Class~., data=dataset, method=\u0026quot;rf\u0026quot;, metric = \u0026quot;Accuracy\u0026quot;, trControl=control)\rSo sánh kết quả hai mô hình:\nbagging_results \u0026lt;- resamples(list(treebag=fit.treebag, rf=fit.rf))\rsummary(bagging_results)\r## ## Call:\r## summary.resamples(object = bagging_results)\r## ## Models: treebag, rf ## Number of resamples: 30 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## treebag 0.8285714 0.8922269 0.9428571 0.9210566 0.9440476 0.9722222 0\r## rf 0.8235294 0.9142857 0.9428571 0.9343946 0.9714286 1.0000000 0\r## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## treebag 0.6209386 0.7708291 0.8731884 0.8266350 0.8770749 0.9407895 0\r## rf 0.5984252 0.8149436 0.8734173 0.8550575 0.9372010 1.0000000 0\rdotplot(bagging_results)\rTừ kết quả so sánh ta thấy thuật toán Random Forest cho kết quả chính xác hơn so với CART trong bài toán này (với độ chính xác là 93.44%). Tuy nhiên cả hai thuật toán Bagging đều có độ chính xác nhỏ hơn so với 2 thuật toán Boosting trước.\n2.4. Thuật toán Stacking\nĐể kết hợp các mô hình machine learning khác nhau trong R chúng ta sử dụng thư viện caretEnsemble. Với danh sách các caret models, hàm caretStack() của gói này có thể sự dụng để chỉ định mô hình bậc cao hơn, từ đó sẽ học cách tìm sự kết hợp tốt nhất những sub-models với nhau.\nỞ ví dụ này, tôi sẽ sử dụng 5 sub-models sau cho tập dữ liệu ionosphere:\n\rLinear Discriminate Analysis (LDA)\n\rClassification and Regression Trees (CART)\n\rLogistic Regression (GLM)\n\rk-Nearest Neighbors (kNN)\n\rSupport Vector Machine with a Radial Basis Kernel Function (SVM)\n\r\rDưới đây là ví dụ huấn luyện 5 mô hình này trên R với các tham số mặc định:\ncontrol \u0026lt;- trainControl(method=\u0026quot;repeatedcv\u0026quot;, number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)\ralgorithmList \u0026lt;- c(\u0026#39;lda\u0026#39;, \u0026#39;rpart\u0026#39;, \u0026#39;glm\u0026#39;, \u0026#39;knn\u0026#39;, \u0026#39;svmRadial\u0026#39;)\rset.seed(seed)\rmodels \u0026lt;- caretList(Class~., data=dataset, trControl=control, methodList=algorithmList)\rSo sánh kết quả các mô hình:\nresults \u0026lt;- resamples(models)\rsummary(results)\r## ## Call:\r## summary.resamples(object = results)\r## ## Models: lda, rpart, glm, knn, svmRadial ## Number of resamples: 30 ## ## Accuracy ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## lda 0.7941176 0.8297619 0.8571429 0.8669546 0.9136555 0.9428571 0\r## rpart 0.8000000 0.8529412 0.8611111 0.8736819 0.9079365 0.9714286 0\r## glm 0.7428571 0.8539916 0.8823529 0.8824214 0.9166667 0.9714286 0\r## knn 0.7500000 0.8235294 0.8333333 0.8403097 0.8601190 0.9444444 0\r## svmRadial 0.8888889 0.9142857 0.9436508 0.9477591 0.9714286 1.0000000 0\r## ## Kappa ## Min. 1st Qu. Median Mean 3rd Qu. Max. NA\u0026#39;s\r## lda 0.4803493 0.6048824 0.6697323 0.6868903 0.8032314 0.8679245 0\r## rpart 0.5648313 0.6586345 0.7024010 0.7193438 0.7900135 0.9397590 0\r## glm 0.4578313 0.6618591 0.7267975 0.7371380 0.8163265 0.9368030 0\r## knn 0.4087591 0.5641026 0.6196004 0.6199654 0.6770575 0.8754325 0\r## svmRadial 0.7419355 0.8142060 0.8776224 0.8847121 0.9375755 1.0000000 0\rdotplot(results)\rTa thấy trong các mô hình này thì SVM cho kết quả chính xác nhất (94.78%).\nGiờ chúng ta hãy thử dùng kỹ thuật stacking để xem có thể cải thiện được độ chính xác không.\nLưu ý: Khi các bạn muốn kết hợp các mô hình với nhau sử dụng kỹ thuật stacking, thì các bạn cần kiểm chứng rằng kết quả dự báo từ các mô hình này tương quan với nhau thấp. Nếu kết quả dự báo của các sub-models tương quan cao với nhau (\u0026gt; 0.75) thì có nghĩa là chúng sẽ cho kết quả dự báo tương tự nhau, điều này sẽ làm giảm hiệu quả khi ta kết hợp các mô hình này với nhau.\nKiểm tra độ tương quan giữa các sub-models:\nmodelCor(results)\r## lda rpart glm knn svmRadial\r## lda 1.0000000 0.379461533 0.277037721 0.4898435 0.3056838\r## rpart 0.3794615 1.000000000 0.001889458 0.4040556 0.2539580\r## glm 0.2770377 0.001889458 1.000000000 0.1466240 0.4296011\r## knn 0.4898435 0.404055597 0.146623958 1.0000000 0.5495574\r## svmRadial 0.3056838 0.253957967 0.429601141 0.5495574 1.0000000\rsplom(results)\rNhìn vào kết quả ta có thể thấy các su-models cho kết quả dự báo tương quan với nhau thấp theo từng cặp. Cặp tương quan với nhau nhất là SVM và kNN với độ tương quan 0.549, cũng vẫn nhỏ hơn mức quy địn là cao (\u0026gt;0.75).\nNào chúng ta hãy thử kết hợp predictions của các sub-models sử dụng mô hình gml:\nstackControl \u0026lt;- trainControl(method=\u0026quot;repeatedcv\u0026quot;, number=10, repeats=3, savePredictions=TRUE, classProbs=TRUE)\rset.seed(seed)\rstack.glm \u0026lt;- caretStack(models, method=\u0026quot;glm\u0026quot;, metric=\u0026quot;Accuracy\u0026quot;, trControl=stackControl)\rprint(stack.glm)\r## A glm ensemble of 5 base models: lda, rpart, glm, knn, svmRadial\r## ## Ensemble results:\r## Generalized Linear Model ## ## 1053 samples\r## 5 predictor\r## 2 classes: \u0026#39;bad\u0026#39;, \u0026#39;good\u0026#39; ## ## No pre-processing\r## Resampling: Cross-Validated (10 fold, repeated 3 times) ## Summary of sample sizes: 947, 947, 947, 948, 947, 949, ... ## Resampling results:\r## ## Accuracy Kappa ## 0.9544285 0.9003902\rĐộ chính xác cải thiện lên 95.44% so với chỉ sử dụng SVM model là 94.78%, tuy nhiên cũng chưa có độ chênh lệnh nhiều.\nTiếp theo tôi thử thử kết hợp predictions của các sub-models sử dụng mô hình random forest:\nset.seed(seed)\rstack.rf \u0026lt;- caretStack(models, method=\u0026quot;rf\u0026quot;, metric=\u0026quot;Accuracy\u0026quot;, trControl=stackControl)\rprint(stack.rf)\r## A rf ensemble of 5 base models: lda, rpart, glm, knn, svmRadial\r## ## Ensemble results:\r## Random Forest ## ## 1053 samples\r## 5 predictor\r## 2 classes: \u0026#39;bad\u0026#39;, \u0026#39;good\u0026#39; ## ## No pre-processing\r## Resampling: Cross-Validated (10 fold, repeated 3 times) ## Summary of sample sizes: 947, 947, 947, 948, 947, 949, ... ## Resampling results across tuning parameters:\r## ## mtry Accuracy Kappa ## 2 0.9623381 0.9177343\r## 3 0.9588700 0.9103978\r## 5 0.9569833 0.9064705\r## ## Accuracy was used to select the optimal model using the largest value.\r## The final value used for the model was mtry = 2.\rĐộ chính xác cũng cải thiện hơn so với chỉ dùng svm model (96.23%).\nTham khảo:\rHow to Build an Ensemble Of Machine Learning Algorithms in R\n","date":1598140800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598193946,"objectID":"535958c2e3329814e5296d5b0751ab2e","permalink":"/post/ensemble-learning/","publishdate":"2020-08-23T00:00:00Z","relpermalink":"/post/ensemble-learning/","section":"post","summary":"Trong machine learning tồn tại định lý “không có bữa trưa miễn phí” (No free lunch theorem), tức là không tồn tại một thuật toán mà luôn tốt cho mọi ứng dụng và mọi tập dữ liệu, vì các thuật toán machiner learning thường dựa trên một tập các tham số (hyperparameters) hoặc một giả thiết nhất định nào đó về phân bố dữ liệu.","tags":["Machine Learning","Ensemble Learning","Data Visualization"],"title":"Phương pháp Ensemble Learning trong Machine Learning: Boosting, Bagging, Stacking (Sử dụng R code)","type":"post"},{"authors":[],"categories":"R","content":"\rWeb scraping là công việc trích xuất dữ liệu từ một trang web. Trong thực tế đôi khi bạn cần thu thập 1 số lượng lớn thông tin từ một số trang web như là giá cổ phiếu, chi tiết sản phẩm, số liệu thống kê thể thao, thông tin liên hệ của công ty,…để phục vụ cho nhiều mục đích khác nhau. Tuy nhiên, việc lấy các thông tin này một cách thủ công thì cần rất nhiều thời gian. Lúc này web scraping chính là cách giúp chúng ta trích xuất dữ liệu từ các trang web một cách tự động. Kỹ thuật này chủ yếu tập trung vào việc chuyển đổi dữ liệu phi cấu trúc (HTML) trên web thành dữ liệu có cấu trúc (cơ sở dữ liệu, bảng tính,…)\nCoinMarketCap là một trang web chuyên cung cấp dữ liệu về các loại tiền điện tử đang được lưu hành trên thế giới. Nếu bạn là người đã hoặc đang tìm hiểu, đầu tư vào các đồng coins thì không thể nào bỏ qua trang web cung cấp thông tin về tiền điện tử lớn nhất thế giới này. Với CoinMarketCap bạn có thể xem rất nhiều lọai thông tin ví dụ như: biến động giá cả các đồng coin, trữ lượng, khối lượng giao dịch theo từng khoảng thời gian, tỷ giá, xem trang web chính thức hoặc các hoạt động trên mạng xã hội của các đồng coins.\nTrong bài này tôi sẽ giới thiệu với các bạn cách sử dụng gói rvest trong R để scrape dữ liệu lịch sử thị trường các loại tiền điện tử từ CoinMarketCap. Sau đó dùng gói ggplot2 để trực quan hóa dữ liệu nhằm mục đích so sánh biến động giá cả của các đồng coins với nhau trong khoảng thời gian nhất định.\nGói rvest cũng giống như thư viện BeautifulSoup trên Python, là một thư viện R để trích xuất dữ liệu từ các tập tin HTML.\nLưu ý khi scape một trang web:\n\rKhông nên tạo quá nhiều request đến trang web trong 1 thời điểm, vì nó có thể gây ra sập trang web (có thể bị liệt vào tấn công từ chối dịch vụ DDoS)\rTrang web có thể sẽ thường xuyên thay đổi giao diện, bố cục (HTML) nên bạn cần thường xuyên cập nhật code của mình\r\rNạp các thư viện cần dùng vào phiên làm việc của R để thực hành:\nlibrary(jsonlite) # Thư viện cho phép đọc json files\rlibrary(rvest) # thư viện để scape web\rlibrary(viridis) # Thay đổi bảng màu mặc định ggplot2\rlibrary(tidyverse) # Hệ sinh thái các gói hỗ trợ biến đổi (dplyr) và trực quan hóa dữ liệu (ggplot2)\rNếu chưa cài các thư viện trên thì các bạn dùng lệnh install.packages(.) để cài đặt với tham số đầu vào là tên các thư viện cần cài đặt. Ví dụ:\ninstall.packages(\u0026quot;rvest\u0026quot;)\rĐầu tiên chúng ta đọc json file từ trang CoinMarketCap để biết thông tin về các loại coins:\njson \u0026lt;- \u0026quot;https://s2.coinmarketcap.com/generated/search/quick_search.json\u0026quot;\rcoins \u0026lt;- read_json(json, simplifyVector = TRUE)\rHiển thị bảng thông tin 10 đồng coins đầu tiên theo rank:\nhead(coins,10)\r## name symbol rank slug\r## 1 Bitcoin BTC 1 bitcoin\r## 2 Ethereum ETH 2 ethereum\r## 3 XRP XRP 3 xrp\r## 4 Tether USDT 4 tether\r## 5 Chainlink LINK 5 chainlink\r## 6 Bitcoin Cash BCH 6 bitcoin-cash\r## 7 Litecoin LTC 7 litecoin\r## 8 Bitcoin SV BSV 8 bitcoin-sv\r## 9 Crypto.com Coin CRO 9 crypto-com-coin\r## 10 Binance Coin BNB 10 binance-coin\r## tokens id\r## 1 Bitcoin, bitcoin, BTC 1\r## 2 Ethereum, ethereum, ETH 1027\r## 3 XRP, xrp, XRP 52\r## 4 Tether, tether, USDT 825\r## 5 Chainlink, chainlink, LINK 1975\r## 6 Bitcoin Cash, bitcoin-cash, BCH 1831\r## 7 Litecoin, litecoin, LTC 2\r## 8 Bitcoin SV, bitcoin-sv, BSV 3602\r## 9 Crypto.com Coin, crypto-com-coin, CRO 3635\r## 10 Binance Coin, binance-coin, BNB 1839\rKiểm tra tổng số lượng đồng tiền kỹ thuật số đang lưu hành trên CoinMarketCap:\ndim(coins)[1]\r## [1] 4869\rĐể ví dụ, trong bài này tôi sẽ so sánh thông tin 10 đồng coins đầu tiên có rank từ 2 đến 11:\n# Lấy thông tin về tên, symbol và slug của 10 đồng coins có rank = [2:11]\rcoinslug \u0026lt;- coins$slug[2:11]\rcoinname \u0026lt;- coins$name[2:11]\rcoinsymbol \u0026lt;- coins$symbol[2:11]\rTạo hàm để get dữ liệu coins. Khi ta vào mục historical data (như hình bên dưới) để xem thông tin của từng loại coin trên trang CoinMarketCap, ta thấy trong đường link có 3 thông tin quan trọng đó là:\n\rslug: Slug của loại coin đó (như đường link trong hình dưới là bitcoin)\rstart: Ngày bắt đầu của khoảng thời gian ta muốn xem thông tin\rend: ngày kết thúc của khoảng thời gian ta muốn xem thông tin\r\rScreenshot từ trang CoinMarketCap\n\rVì vậy ta sẽ viết hàm để get dữ liệu dựa vào 3 thông tin trên như sau:\n# Tạo hàm get dữ liệu coin\rget_data_coin \u0026lt;- function(coin, start_date, end_date){\r# coin: slug của coin\r# start_date: Ngày bắt đầu lấy dữ liệu\r# end_date: Ngày kết thúc lấy dữ liệu\r# Tạo đường link từ 3 thông tin đầu vào\rhistoryurl \u0026lt;- paste0(\u0026quot;https://coinmarketcap.com/currencies/\u0026quot;,\rcoin,\r\u0026quot;/historical-data/?start=\u0026quot;,\rstart_date,\r\u0026quot;\u0026amp;end=\u0026quot;,\rend_date)\r# Đọc dữ liệu từ web\rurl \u0026lt;-read_html(historyurl)\rdata \u0026lt;- data.frame(html_table(url)[[3]])\rdata$Slug \u0026lt;- coin\rreturn(data)\r}\rVí dụ sử dụng hàm get_data_coin() vừa tạo để lấy dữ liệu lịch sử của 10 loại coins trên từ ngày 21/08/2019 dến ngày 21/08/2020:\n# Nhập ngày bắt đầu và và kết thúc trong khoảng thời gian muốn xem theo định đạng \u0026quot;Năm-Tháng-Ngày\u0026quot;\rstart_date = 20190821\rend_date = 20200821\r# Tạo list trống để lưu dữ liệu coins\rresults_data \u0026lt;- list()\r# Lưu dữ liệu từng loại coin trong danh sách 10 coins ở trên vào list trống\rfor (i in (1:length(coinslug))){\rresults_data[[i]] \u0026lt;- get_data_coin(coin = coinslug[i], start_date = start_date, end_date = end_date)\r}\r# Gộp data.frame của từng loại coin trong list vào thành 1 bảng\rresults_data \u0026lt;- do.call(rbind, results_data)\rĐể kiểm tra dữ liệu thu được, ta hiển thị 10 hàng dữ liệu đầu tiên trong bẳng bằng lệnh head():\nhead(results_data, 10)\r## Date Open. High Low Close.. Volume Market.Cap\r## 1 Aug 22, 2020 389.03 396.47 382.81 395.84 10,131,847,985 44,448,918,222\r## 2 Aug 21, 2020 416.15 418.64 387.44 389.13 11,781,796,374 43,690,315,907\r## 3 Aug 20, 2020 406.76 418.73 404.03 416.44 10,043,032,427 46,751,356,941\r## 4 Aug 19, 2020 423.74 427.02 396.68 406.46 13,137,391,167 45,625,864,918\r## 5 Aug 18, 2020 429.67 432.58 419.67 423.67 11,978,984,079 47,551,407,033\r## 6 Aug 17, 2020 433.97 442.73 422.65 429.53 13,227,089,410 48,203,426,751\r## 7 Aug 16, 2020 433.35 436.27 415.09 433.79 12,168,816,874 48,675,162,267\r## 8 Aug 15, 2020 437.56 441.75 429.87 433.35 12,416,067,894 48,620,820,125\r## 9 Aug 14, 2020 428.68 444.58 423.35 437.40 15,064,589,987 49,068,474,083\r## 10 Aug 13, 2020 390.84 432.90 379.71 428.74 18,480,303,526 48,091,569,052\r## Slug\r## 1 ethereum\r## 2 ethereum\r## 3 ethereum\r## 4 ethereum\r## 5 ethereum\r## 6 ethereum\r## 7 ethereum\r## 8 ethereum\r## 9 ethereum\r## 10 ethereum\rThêm thông tin gồm name và symbol của từng coin vào bảng dữ liệu:\ncoinnames \u0026lt;- data.frame(\rName = as.character(coinname),\rSymbol = as.character(coinsymbol),\rSlug = as.character(coinslug))\rdf \u0026lt;- full_join(coinnames, results_data, by = \u0026quot;Slug\u0026quot;)\rĐể kiểm tra bảng dữ liệu mới thu được, ta hiển thị 10 hàng dữ liệu đầu tiên trong bảng:\nhead(df, 10)\r## Name Symbol Slug Date Open. High Low Close..\r## 1 Ethereum ETH ethereum Aug 22, 2020 389.03 396.47 382.81 395.84\r## 2 Ethereum ETH ethereum Aug 21, 2020 416.15 418.64 387.44 389.13\r## 3 Ethereum ETH ethereum Aug 20, 2020 406.76 418.73 404.03 416.44\r## 4 Ethereum ETH ethereum Aug 19, 2020 423.74 427.02 396.68 406.46\r## 5 Ethereum ETH ethereum Aug 18, 2020 429.67 432.58 419.67 423.67\r## 6 Ethereum ETH ethereum Aug 17, 2020 433.97 442.73 422.65 429.53\r## 7 Ethereum ETH ethereum Aug 16, 2020 433.35 436.27 415.09 433.79\r## 8 Ethereum ETH ethereum Aug 15, 2020 437.56 441.75 429.87 433.35\r## 9 Ethereum ETH ethereum Aug 14, 2020 428.68 444.58 423.35 437.40\r## 10 Ethereum ETH ethereum Aug 13, 2020 390.84 432.90 379.71 428.74\r## Volume Market.Cap\r## 1 10,131,847,985 44,448,918,222\r## 2 11,781,796,374 43,690,315,907\r## 3 10,043,032,427 46,751,356,941\r## 4 13,137,391,167 45,625,864,918\r## 5 11,978,984,079 47,551,407,033\r## 6 13,227,089,410 48,203,426,751\r## 7 12,168,816,874 48,675,162,267\r## 8 12,416,067,894 48,620,820,125\r## 9 15,064,589,987 49,068,474,083\r## 10 18,480,303,526 48,091,569,052\rTa thấy cột Date ở dạng character nên cần chuyển về dạng date như sau:\ndf$Date \u0026lt;- lubridate::mdy(unlist(df$Date))\rhead(df, 10)\r## Name Symbol Slug Date Open. High Low Close..\r## 1 Ethereum ETH ethereum 2020-08-22 389.03 396.47 382.81 395.84\r## 2 Ethereum ETH ethereum 2020-08-21 416.15 418.64 387.44 389.13\r## 3 Ethereum ETH ethereum 2020-08-20 406.76 418.73 404.03 416.44\r## 4 Ethereum ETH ethereum 2020-08-19 423.74 427.02 396.68 406.46\r## 5 Ethereum ETH ethereum 2020-08-18 429.67 432.58 419.67 423.67\r## 6 Ethereum ETH ethereum 2020-08-17 433.97 442.73 422.65 429.53\r## 7 Ethereum ETH ethereum 2020-08-16 433.35 436.27 415.09 433.79\r## 8 Ethereum ETH ethereum 2020-08-15 437.56 441.75 429.87 433.35\r## 9 Ethereum ETH ethereum 2020-08-14 428.68 444.58 423.35 437.40\r## 10 Ethereum ETH ethereum 2020-08-13 390.84 432.90 379.71 428.74\r## Volume Market.Cap\r## 1 10,131,847,985 44,448,918,222\r## 2 11,781,796,374 43,690,315,907\r## 3 10,043,032,427 46,751,356,941\r## 4 13,137,391,167 45,625,864,918\r## 5 11,978,984,079 47,551,407,033\r## 6 13,227,089,410 48,203,426,751\r## 7 12,168,816,874 48,675,162,267\r## 8 12,416,067,894 48,620,820,125\r## 9 15,064,589,987 49,068,474,083\r## 10 18,480,303,526 48,091,569,052\rDùng thư viện ggplot2 để trực quan hóa và so sánh biến động giá cả của các loại coins trong khoảng thời gian từ ngày 21/08/2019 dến ngày 21/08/2020:\n# Chỉ so sánh thông tìn các cột Open, High, Low, Close\rdf \u0026lt;- df[,1:8]\r# Chuyển bẳng dữ liệu từ dạng bảng rộng về dài\rlibrary(tidyr)\rdf$Name\u0026lt;- factor(df$Name)\rdf_tall \u0026lt;- df%\u0026gt;% gather(key = s, value = value, -Name, -Symbol, -Slug, -Date)\rdf_tall$s \u0026lt;- factor(df_tall$s, levels=unique(as.character(df_tall$s)))\r# Vẽ biểu đồ so sánh thông tin\rggplot(df_tall, aes(x = Date, y = value, color = Name)) +\rgeom_line(size = 0.75) +\rxlab(\u0026quot;Time\u0026quot;)+\rfacet_wrap(~s, ncol = 2, scales = \u0026quot;free_y\u0026quot;)+\rtheme_bw()\rKhi đã có dữ liệu rồi tiếp theo chúng ta có thể xây dựng các mô hình dự báo để đự đoán giá các loại coins\nChú thích:\n\rOpen: Giá mở cửa\rClose: Giá đóng cửa\rHigh: Mức giá cao nhất\rLow: Mức giá thấp nhất\r\r4 bộ phận này cấu thành nên một nến giao dịch đại diện cho sự lên xuống của giá trị một loại tài sản trong một khoảng thời gian cố định. Điểm “open” của nến đại diện cho mức giá của loại tài sản khi bắt đầu khoảng thời gian giao dịch, trong khi “close” là mức giá khi kết thúc thời gian giao dịch. Còn “high” và “low” lần lượt là các mức giá cao nhất và thấp nhất đạt được trong phiên giao dịch.\nCác bộ phận của một nến giao dịch, với nến tăng (màu xanh) và nếu giảm (màu đỏ)\n\r","date":1598054400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598107546,"objectID":"08be2c5524f384118b95cea0cef5e187","permalink":"/post/crypto/","publishdate":"2020-08-22T00:00:00Z","relpermalink":"/post/crypto/","section":"post","summary":"Web scraping là công việc trích xuất dữ liệu từ một trang web. Trong thực tế đôi khi bạn cần thu thập 1 số lượng lớn thông tin từ một số trang web như là giá cổ phiếu, chi tiết sản phẩm, số liệu thống kê thể thao, thông tin liên hệ của công ty,…để phục vụ cho nhiều mục đích khác nhau.","tags":["Data Science","Data Visualization"],"title":"Cách scrape một trang web bằng R. Scrape và so sánh dữ liệu lịch sử thị trường tiền điện tử từ CoinMarketCap","type":"post"},{"authors":[],"categories":["R"],"content":"\r\r\r\r\r\r\rNạp các thư viện cần thiết vào phiên làm việc của R\nlibrary(rvest)\rlibrary(ggplot2)\rlibrary(plotly)\rlibrary(dygraphs)\rlibrary(tidyverse)\rGet dữ liệu bitcoin từ trang CoinMarketcap để thực hiện data visualization:\n# Get history data of bitcoin 28/04/2013 - 23/08/2020\rurl \u0026lt;-read_html(\u0026quot;https://coinmarketcap.com/currencies/bitcoin/historical-data/?start=20130428\u0026amp;end=20200823\u0026quot;)\rdata \u0026lt;- url %\u0026gt;% html_table()\rdf \u0026lt;- data[[3]]\rdf \u0026lt;- as_tibble(df)\rcolnames(df) \u0026lt;- c(\u0026quot;date\u0026quot;, \u0026quot;open\u0026quot;, \u0026quot;high\u0026quot;, \u0026quot;low\u0026quot;, \u0026quot;close\u0026quot;, \u0026quot;volume\u0026quot;, \u0026quot;market_cap\u0026quot;)\r# Chuyển cột date từ dạng strings về \u0026#39;date\u0026#39;\rdf$date \u0026lt;- lubridate::mdy(df$date) # bỏ dấu \u0026#39;,\u0026#39; trong các giá trị của dữ liệu df$close \u0026lt;- gsub(\u0026quot;,\u0026quot;, \u0026quot;\u0026quot;, df$close)\r# Chuyển dữ liệu cột close về dạng numeric\rdf$close \u0026lt;- as.numeric(df$close)\rKiểm tra bảng dữ liệu thu được:\ndf\r## # A tibble: 2,676 x 7\r## date open high low close volume market_cap ## \u0026lt;date\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;chr\u0026gt; \u0026lt;chr\u0026gt; ## 1 2020-08-24 11,663.69 11,807.63 11,623.25 11775. 20,681,511,755 217,477,962,6~\r## 2 2020-08-23 11,679.70 11,713.43 11,559.92 11665. 18,482,062,658 215,439,967,3~\r## 3 2020-08-22 11,585.48 11,689.41 11,448.81 11682. 20,224,191,306 215,742,068,8~\r## 4 2020-08-21 11,878.03 11,899.26 11,564.98 11592. 23,762,425,999 214,082,401,8~\r## 5 2020-08-20 11,761.50 11,900.41 11,710.06 11878. 20,175,242,945 219,350,310,3~\r## 6 2020-08-19 11,990.88 12,028.92 11,687.33 11758. 24,502,851,117 217,122,068,3~\r## 7 2020-08-18 12,251.90 12,335.71 11,954.53 11991. 26,043,227,672 221,413,097,5~\r## 8 2020-08-17 11,895.66 12,359.06 11,806.70 12254. 28,227,687,027 226,261,747,5~\r## 9 2020-08-16 11,866.69 11,934.90 11,737.19 11893. 20,583,375,490 219,576,092,1~\r## 10 2020-08-15 11,768.70 11,963.20 11,768.70 11866. 23,354,924,400 219,064,372,7~\r## # ... with 2,666 more rows\rCách scrape một trang web bằng R và get dữ liệu lịch sử thị trường tiền điện tử các bạn có thể đọc ở bài trước của tôi tại đây.\nData visualization với ggplot2:\n# Plot using ggplot2\rpp \u0026lt;- ggplot(data = df, aes(x = date, y = close)) pp \u0026lt;- pp + geom_line(colour = \u0026quot;blue\u0026quot;) pp \u0026lt;- pp + labs(title = \u0026quot;Historical data for Bitcoin\u0026quot;,\rsubtitle = \u0026quot;Accessing Bitcoin Data\u0026quot;,\rcaption = \u0026quot;sources: Bitcoin (BTC); https://coinmarketcap.com\u0026quot;,\rx = \u0026quot;Date\u0026quot;,\ry = \u0026quot;Close\u0026quot;)\rpp \u0026lt;- pp + theme_bw()\rpp\rĐể chuyển ggplot2 object về dạng biểu đồ tương tác plotly ta dùng hàm ggplotly() trong thư viện plotly:\nggplotly(pp)\r\r{\"x\":{\"data\":[{\"x\":[15823,15824,15825,15826,15827,15828,15829,15830,15831,15832,15833,15834,15835,15836,15837,15838,15839,15840,15841,15842,15843,15844,15845,15846,15847,15848,15849,15850,15851,15852,15853,15854,15855,15856,15857,15858,15859,15860,15861,15862,15863,15864,15865,15866,15867,15868,15869,15870,15871,15872,15873,15874,15875,15876,15877,15878,15879,15880,15881,15882,15883,15884,15885,15886,15887,15888,15889,15890,15891,15892,15893,15894,15895,15896,15897,15898,15899,15900,15901,15902,15903,15904,15905,15906,15907,15908,15909,15910,15911,15912,15913,15914,15915,15916,15917,15918,15919,15920,15921,15922,15923,15924,15925,15926,15927,15928,15929,15930,15931,15932,15933,15934,15935,15936,15937,15938,15939,15940,15941,15942,15943,15944,15945,15946,15947,15948,15949,15950,15951,15952,15953,15954,15955,15956,15957,15958,15959,15960,15961,15962,15963,15964,15965,15966,15967,15968,15969,15970,15971,15972,15973,15974,15975,15976,15977,15978,15979,15980,15981,15982,15983,15984,15985,15986,15987,15988,15989,15990,15991,15992,15993,15994,15995,15996,15997,15998,15999,16000,16001,16002,16003,16004,16005,16006,16007,16008,16009,16010,16011,16012,16013,16014,16015,16016,16017,16018,16019,16020,16021,16022,16023,16024,16025,16026,16027,16028,16029,16030,16031,16032,16033,16034,16035,16036,16037,16038,16039,16040,16041,16042,16043,16044,16045,16046,16047,16048,16049,16050,16051,16052,16053,16054,16055,16056,16057,16058,16059,16060,16061,16062,16063,16064,16065,16066,16067,16068,16069,16070,16071,16072,16073,16074,16075,16076,16077,16078,16079,16080,16081,16082,16083,16084,16085,16086,16087,16088,16089,16090,16091,16092,16093,16094,16095,16096,16097,16098,16099,16100,16101,16102,16103,16104,16105,16106,16107,16108,16109,16110,16111,16112,16113,16114,16115,16116,16117,16118,16119,16120,16121,16122,16123,16124,16125,16126,16127,16128,16129,16130,16131,16132,16133,16134,16135,16136,16137,16138,16139,16140,16141,16142,16143,16144,16145,16146,16147,16148,16149,16150,16151,16152,16153,16154,16155,16156,16157,16158,16159,16160,16161,16162,16163,16164,16165,16166,16167,16168,16169,16170,16171,16172,16173,16174,16175,16176,16177,16178,16179,16180,16181,16182,16183,16184,16185,16186,16187,16188,16189,16190,16191,16192,16193,16194,16195,16196,16197,16198,16199,16200,16201,16202,16203,16204,16205,16206,16207,16208,16209,16210,16211,16212,16213,16214,16215,16216,16217,16218,16219,16220,16221,16222,16223,16224,16225,16226,16227,16228,16229,16230,16231,16232,16233,16234,16235,16236,16237,16238,16239,16240,16241,16242,16243,16244,16245,16246,16247,16248,16249,16250,16251,16252,16253,16254,16255,16256,16257,16258,16259,16260,16261,16262,16263,16264,16265,16266,16267,16268,16269,16270,16271,16272,16273,16274,16275,16276,16277,16278,16279,16280,16281,16282,16283,16284,16285,16286,16287,16288,16289,16290,16291,16292,16293,16294,16295,16296,16297,16298,16299,16300,16301,16302,16303,16304,16305,16306,16307,16308,16309,16310,16311,16312,16313,16314,16315,16316,16317,16318,16319,16320,16321,16322,16323,16324,16325,16326,16327,16328,16329,16330,16331,16332,16333,16334,16335,16336,16337,16338,16339,16340,16341,16342,16343,16344,16345,16346,16347,16348,16349,16350,16351,16352,16353,16354,16355,16356,16357,16358,16359,16360,16361,16362,16363,16364,16365,16366,16367,16368,16369,16370,16371,16372,16373,16374,16375,16376,16377,16378,16379,16380,16381,16382,16383,16384,16385,16386,16387,16388,16389,16390,16391,16392,16393,16394,16395,16396,16397,16398,16399,16400,16401,16402,16403,16404,16405,16406,16407,16408,16409,16410,16411,16412,16413,16414,16415,16416,16417,16418,16419,16420,16421,16422,16423,16424,16425,16426,16427,16428,16429,16430,16431,16432,16433,16434,16435,16436,16437,16438,16439,16440,16441,16442,16443,16444,16445,16446,16447,16448,16449,16450,16451,16452,16453,16454,16455,16456,16457,16458,16459,16460,16461,16462,16463,16464,16465,16466,16467,16468,16469,16470,16471,16472,16473,16474,16475,16476,16477,16478,16479,16480,16481,16482,16483,16484,16485,16486,16487,16488,16489,16490,16491,16492,16493,16494,16495,16496,16497,16498,16499,16500,16501,16502,16503,16504,16505,16506,16507,16508,16509,16510,16511,16512,16513,16514,16515,16516,16517,16518,16519,16520,16521,16522,16523,16524,16525,16526,16527,16528,16529,16530,16531,16532,16533,16534,16535,16536,16537,16538,16539,16540,16541,16542,16543,16544,16545,16546,16547,16548,16549,16550,16551,16552,16553,16554,16555,16556,16557,16558,16559,16560,16561,16562,16563,16564,16565,16566,16567,16568,16569,16570,16571,16572,16573,16574,16575,16576,16577,16578,16579,16580,16581,16582,16583,16584,16585,16586,16587,16588,16589,16590,16591,16592,16593,16594,16595,16596,16597,16598,16599,16600,16601,16602,16603,16604,16605,16606,16607,16608,16609,16610,16611,16612,16613,16614,16615,16616,16617,16618,16619,16620,16621,16622,16623,16624,16625,16626,16627,16628,16629,16630,16631,16632,16633,16634,16635,16636,16637,16638,16639,16640,16641,16642,16643,16644,16645,16646,16647,16648,16649,16650,16651,16652,16653,16654,16655,16656,16657,16658,16659,16660,16661,16662,16663,16664,16665,16666,16667,16668,16669,16670,16671,16672,16673,16674,16675,16676,16677,16678,16679,16680,16681,16682,16683,16684,16685,16686,16687,16688,16689,16690,16691,16692,16693,16694,16695,16696,16697,16698,16699,16700,16701,16702,16703,16704,16705,16706,16707,16708,16709,16710,16711,16712,16713,16714,16715,16716,16717,16718,16719,16720,16721,16722,16723,16724,16725,16726,16727,16728,16729,16730,16731,16732,16733,16734,16735,16736,16737,16738,16739,16740,16741,16742,16743,16744,16745,16746,16747,16748,16749,16750,16751,16752,16753,16754,16755,16756,16757,16758,16759,16760,16761,16762,16763,16764,16765,16766,16767,16768,16769,16770,16771,16772,16773,16774,16775,16776,16777,16778,16779,16780,16781,16782,16783,16784,16785,16786,16787,16788,16789,16790,16791,16792,16793,16794,16795,16796,16797,16798,16799,16800,16801,16802,16803,16804,16805,16806,16807,16808,16809,16810,16811,16812,16813,16814,16815,16816,16817,16818,16819,16820,16821,16822,16823,16824,16825,16826,16827,16828,16829,16830,16831,16832,16833,16834,16835,16836,16837,16838,16839,16840,16841,16842,16843,16844,16845,16846,16847,16848,16849,16850,16851,16852,16853,16854,16855,16856,16857,16858,16859,16860,16861,16862,16863,16864,16865,16866,16867,16868,16869,16870,16871,16872,16873,16874,16875,16876,16877,16878,16879,16880,16881,16882,16883,16884,16885,16886,16887,16888,16889,16890,16891,16892,16893,16894,16895,16896,16897,16898,16899,16900,16901,16902,16903,16904,16905,16906,16907,16908,16909,16910,16911,16912,16913,16914,16915,16916,16917,16918,16919,16920,16921,16922,16923,16924,16925,16926,16927,16928,16929,16930,16931,16932,16933,16934,16935,16936,16937,16938,16939,16940,16941,16942,16943,16944,16945,16946,16947,16948,16949,16950,16951,16952,16953,16954,16955,16956,16957,16958,16959,16960,16961,16962,16963,16964,16965,16966,16967,16968,16969,16970,16971,16972,16973,16974,16975,16976,16977,16978,16979,16980,16981,16982,16983,16984,16985,16986,16987,16988,16989,16990,16991,16992,16993,16994,16995,16996,16997,16998,16999,17000,17001,17002,17003,17004,17005,17006,17007,17008,17009,17010,17011,17012,17013,17014,17015,17016,17017,17018,17019,17020,17021,17022,17023,17024,17025,17026,17027,17028,17029,17030,17031,17032,17033,17034,17035,17036,17037,17038,17039,17040,17041,17042,17043,17044,17045,17046,17047,17048,17049,17050,17051,17052,17053,17054,17055,17056,17057,17058,17059,17060,17061,17062,17063,17064,17065,17066,17067,17068,17069,17070,17071,17072,17073,17074,17075,17076,17077,17078,17079,17080,17081,17082,17083,17084,17085,17086,17087,17088,17089,17090,17091,17092,17093,17094,17095,17096,17097,17098,17099,17100,17101,17102,17103,17104,17105,17106,17107,17108,17109,17110,17111,17112,17113,17114,17115,17116,17117,17118,17119,17120,17121,17122,17123,17124,17125,17126,17127,17128,17129,17130,17131,17132,17133,17134,17135,17136,17137,17138,17139,17140,17141,17142,17143,17144,17145,17146,17147,17148,17149,17150,17151,17152,17153,17154,17155,17156,17157,17158,17159,17160,17161,17162,17163,17164,17165,17166,17167,17168,17169,17170,17171,17172,17173,17174,17175,17176,17177,17178,17179,17180,17181,17182,17183,17184,17185,17186,17187,17188,17189,17190,17191,17192,17193,17194,17195,17196,17197,17198,17199,17200,17201,17202,17203,17204,17205,17206,17207,17208,17209,17210,17211,17212,17213,17214,17215,17216,17217,17218,17219,17220,17221,17222,17223,17224,17225,17226,17227,17228,17229,17230,17231,17232,17233,17234,17235,17236,17237,17238,17239,17240,17241,17242,17243,17244,17245,17246,17247,17248,17249,17250,17251,17252,17253,17254,17255,17256,17257,17258,17259,17260,17261,17262,17263,17264,17265,17266,17267,17268,17269,17270,17271,17272,17273,17274,17275,17276,17277,17278,17279,17280,17281,17282,17283,17284,17285,17286,17287,17288,17289,17290,17291,17292,17293,17294,17295,17296,17297,17298,17299,17300,17301,17302,17303,17304,17305,17306,17307,17308,17309,17310,17311,17312,17313,17314,17315,17316,17317,17318,17319,17320,17321,17322,17323,17324,17325,17326,17327,17328,17329,17330,17331,17332,17333,17334,17335,17336,17337,17338,17339,17340,17341,17342,17343,17344,17345,17346,17347,17348,17349,17350,17351,17352,17353,17354,17355,17356,17357,17358,17359,17360,17361,17362,17363,17364,17365,17366,17367,17368,17369,17370,17371,17372,17373,17374,17375,17376,17377,17378,17379,17380,17381,17382,17383,17384,17385,17386,17387,17388,17389,17390,17391,17392,17393,17394,17395,17396,17397,17398,17399,17400,17401,17402,17403,17404,17405,17406,17407,17408,17409,17410,17411,17412,17413,17414,17415,17416,17417,17418,17419,17420,17421,17422,17423,17424,17425,17426,17427,17428,17429,17430,17431,17432,17433,17434,17435,17436,17437,17438,17439,17440,17441,17442,17443,17444,17445,17446,17447,17448,17449,17450,17451,17452,17453,17454,17455,17456,17457,17458,17459,17460,17461,17462,17463,17464,17465,17466,17467,17468,17469,17470,17471,17472,17473,17474,17475,17476,17477,17478,17479,17480,17481,17482,17483,17484,17485,17486,17487,17488,17489,17490,17491,17492,17493,17494,17495,17496,17497,17498,17499,17500,17501,17502,17503,17504,17505,17506,17507,17508,17509,17510,17511,17512,17513,17514,17515,17516,17517,17518,17519,17520,17521,17522,17523,17524,17525,17526,17527,17528,17529,17530,17531,17532,17533,17534,17535,17536,17537,17538,17539,17540,17541,17542,17543,17544,17545,17546,17547,17548,17549,17550,17551,17552,17553,17554,17555,17556,17557,17558,17559,17560,17561,17562,17563,17564,17565,17566,17567,17568,17569,17570,17571,17572,17573,17574,17575,17576,17577,17578,17579,17580,17581,17582,17583,17584,17585,17586,17587,17588,17589,17590,17591,17592,17593,17594,17595,17596,17597,17598,17599,17600,17601,17602,17603,17604,17605,17606,17607,17608,17609,17610,17611,17612,17613,17614,17615,17616,17617,17618,17619,17620,17621,17622,17623,17624,17625,17626,17627,17628,17629,17630,17631,17632,17633,17634,17635,17636,17637,17638,17639,17640,17641,17642,17643,17644,17645,17646,17647,17648,17649,17650,17651,17652,17653,17654,17655,17656,17657,17658,17659,17660,17661,17662,17663,17664,17665,17666,17667,17668,17669,17670,17671,17672,17673,17674,17675,17676,17677,17678,17679,17680,17681,17682,17683,17684,17685,17686,17687,17688,17689,17690,17691,17692,17693,17694,17695,17696,17697,17698,17699,17700,17701,17702,17703,17704,17705,17706,17707,17708,17709,17710,17711,17712,17713,17714,17715,17716,17717,17718,17719,17720,17721,17722,17723,17724,17725,17726,17727,17728,17729,17730,17731,17732,17733,17734,17735,17736,17737,17738,17739,17740,17741,17742,17743,17744,17745,17746,17747,17748,17749,17750,17751,17752,17753,17754,17755,17756,17757,17758,17759,17760,17761,17762,17763,17764,17765,17766,17767,17768,17769,17770,17771,17772,17773,17774,17775,17776,17777,17778,17779,17780,17781,17782,17783,17784,17785,17786,17787,17788,17789,17790,17791,17792,17793,17794,17795,17796,17797,17798,17799,17800,17801,17802,17803,17804,17805,17806,17807,17808,17809,17810,17811,17812,17813,17814,17815,17816,17817,17818,17819,17820,17821,17822,17823,17824,17825,17826,17827,17828,17829,17830,17831,17832,17833,17834,17835,17836,17837,17838,17839,17840,17841,17842,17843,17844,17845,17846,17847,17848,17849,17850,17851,17852,17853,17854,17855,17856,17857,17858,17859,17860,17861,17862,17863,17864,17865,17866,17867,17868,17869,17870,17871,17872,17873,17874,17875,17876,17877,17878,17879,17880,17881,17882,17883,17884,17885,17886,17887,17888,17889,17890,17891,17892,17893,17894,17895,17896,17897,17898,17899,17900,17901,17902,17903,17904,17905,17906,17907,17908,17909,17910,17911,17912,17913,17914,17915,17916,17917,17918,17919,17920,17921,17922,17923,17924,17925,17926,17927,17928,17929,17930,17931,17932,17933,17934,17935,17936,17937,17938,17939,17940,17941,17942,17943,17944,17945,17946,17947,17948,17949,17950,17951,17952,17953,17954,17955,17956,17957,17958,17959,17960,17961,17962,17963,17964,17965,17966,17967,17968,17969,17970,17971,17972,17973,17974,17975,17976,17977,17978,17979,17980,17981,17982,17983,17984,17985,17986,17987,17988,17989,17990,17991,17992,17993,17994,17995,17996,17997,17998,17999,18000,18001,18002,18003,18004,18005,18006,18007,18008,18009,18010,18011,18012,18013,18014,18015,18016,18017,18018,18019,18020,18021,18022,18023,18024,18025,18026,18027,18028,18029,18030,18031,18032,18033,18034,18035,18036,18037,18038,18039,18040,18041,18042,18043,18044,18045,18046,18047,18048,18049,18050,18051,18052,18053,18054,18055,18056,18057,18058,18059,18060,18061,18062,18063,18064,18065,18066,18067,18068,18069,18070,18071,18072,18073,18074,18075,18076,18077,18078,18079,18080,18081,18082,18083,18084,18085,18086,18087,18088,18089,18090,18091,18092,18093,18094,18095,18096,18097,18098,18099,18100,18101,18102,18103,18104,18105,18106,18107,18108,18109,18110,18111,18112,18113,18114,18115,18116,18117,18118,18119,18120,18121,18122,18123,18124,18125,18126,18127,18128,18129,18130,18131,18132,18133,18134,18135,18136,18137,18138,18139,18140,18141,18142,18143,18144,18145,18146,18147,18148,18149,18150,18151,18152,18153,18154,18155,18156,18157,18158,18159,18160,18161,18162,18163,18164,18165,18166,18167,18168,18169,18170,18171,18172,18173,18174,18175,18176,18177,18178,18179,18180,18181,18182,18183,18184,18185,18186,18187,18188,18189,18190,18191,18192,18193,18194,18195,18196,18197,18198,18199,18200,18201,18202,18203,18204,18205,18206,18207,18208,18209,18210,18211,18212,18213,18214,18215,18216,18217,18218,18219,18220,18221,18222,18223,18224,18225,18226,18227,18228,18229,18230,18231,18232,18233,18234,18235,18236,18237,18238,18239,18240,18241,18242,18243,18244,18245,18246,18247,18248,18249,18250,18251,18252,18253,18254,18255,18256,18257,18258,18259,18260,18261,18262,18263,18264,18265,18266,18267,18268,18269,18270,18271,18272,18273,18274,18275,18276,18277,18278,18279,18280,18281,18282,18283,18284,18285,18286,18287,18288,18289,18290,18291,18292,18293,18294,18295,18296,18297,18298,18299,18300,18301,18302,18303,18304,18305,18306,18307,18308,18309,18310,18311,18312,18313,18314,18315,18316,18317,18318,18319,18320,18321,18322,18323,18324,18325,18326,18327,18328,18329,18330,18331,18332,18333,18334,18335,18336,18337,18338,18339,18340,18341,18342,18343,18344,18345,18346,18347,18348,18349,18350,18351,18352,18353,18354,18355,18356,18357,18358,18359,18360,18361,18362,18363,18364,18365,18366,18367,18368,18369,18370,18371,18372,18373,18374,18375,18376,18377,18378,18379,18380,18381,18382,18383,18384,18385,18386,18387,18388,18389,18390,18391,18392,18393,18394,18395,18396,18397,18398,18399,18400,18401,18402,18403,18404,18405,18406,18407,18408,18409,18410,18411,18412,18413,18414,18415,18416,18417,18418,18419,18420,18421,18422,18423,18424,18425,18426,18427,18428,18429,18430,18431,18432,18433,18434,18435,18436,18437,18438,18439,18440,18441,18442,18443,18444,18445,18446,18447,18448,18449,18450,18451,18452,18453,18454,18455,18456,18457,18458,18459,18460,18461,18462,18463,18464,18465,18466,18467,18468,18469,18470,18471,18472,18473,18474,18475,18476,18477,18478,18479,18480,18481,18482,18483,18484,18485,18486,18487,18488,18489,18490,18491,18492,18493,18494,18495,18496,18497,18498],\"y\":[134.21,144.54,139,116.99,105.21,97.75,112.5,115.91,112.3,111.5,113.57,112.67,117.2,115.24,115,117.98,111.5,114.22,118.76,123.01,123.5,121.99,122,122.88,123.89,126.7,133.2,131.98,133.48,129.74,129,132.3,128.8,129,129.3,122.29,122.22,121.42,121.65,118,111.5,108.3,100,106.35,108.9,108.15,104,99.98,99.99,99.51,101.7,107.4,108.25,110.15,109.5,108.3,107.6,102.74,103.95,104,101.44,94.65,94.99,96.61,88.05,90.13,77.53,80.53,68.43,70.28,74.56,76.52,76.69,86.76,88.98,93.59,98.13,94.69,98.4,97.45,98.5,90.58,92.17,89.39,90.76,91.61,95.56,94.51,96.9,96.02,94.12,99.76,101.2,107.99,106.09,104,104.5,104,105.14,106.22,106.75,106.75,103,102.8,103,105,106.64,109,112.56,109.99,108.99,113.5,113.5,119,121.21,123.3,121.15,118.5,120.04,122.11,120.06,126.5,122.62,122.39,133.49,135.35,138.34,135.85,136.77,126.74,126.43,119.15,124.15,121.66,127.11,125.91,135.25,133.13,134.98,129.22,130.37,131.72,131.66,131.47,129.65,127.04,127.43,129.12,125.95,127.25,128.22,128.38,133.78,134.78,137.34,133,132.18,114.13,123.63,129.01,128.55,129,126.94,126,130.69,130.59,130.9,135.19,138.13,140.52,145.24,142.55,146.25,155.96,172.42,174.61,182.21,193.76,213.62,198.23,186.69,177.32,196.44,198.55,204.39,199.97,204,206.18,206.22,215.05,229.1,245.24,262.5,296.41,338.11,339.11,326.62,342.44,360.33,407.37,420.2,417.95,440.22,492.11,703.56,584.61,590.83,722.43,771.44,797.82,774.25,799.11,928.1,1001.96,1031.95,1131.97,1129.43,955.85,1043.33,1078.28,1151.17,1045.11,829.45,698.23,795.87,893.19,988.51,878.48,873.26,892.58,872.6,876.12,705.97,682.12,522.7,691.96,625.32,605.66,617.18,673.41,665.58,682.21,761.98,735.07,727.83,745.05,756.13,754.01,771.4,802.39,818.72,859.51,933.53,953.29,802,842.72,846.86,868.48,913.95,863.22,841.2,833.27,860.9,835.63,814.64,840,870.96,870.2,863.91,845.59,822.04,797.07,853.61,885.28,771.39,812.51,826,819.03,829.92,832.58,825.37,823.83,827.96,811.91,781.55,712.4,673.92,682.9,681.03,672.17,651.72,605.24,661.99,650.92,616.63,626.27,626.6,623.03,556.14,574.16,605.42,605.82,546.32,538.71,582.69,578.77,549.26,565.61,559.79,667.76,666.78,665.51,663.86,629.15,617.45,636.96,627.79,634.11,632.1,638.14,628.8,636.12,631.11,622.37,614.83,609.89,588.77,571.49,565.04,561.27,583.41,583.92,580.83,471.24,495.67,491.17,460.27,457,478.38,437.14,444.72,447.53,461.91,460.5,449.42,453.09,442.73,365.18,420.95,421.12,414.06,458.79,515.59,527.4,495.96,479.64,501.57,498.17,495.77,487.92,491.3,500.46,461.45,458.6,436.39,440.29,447.21,447.64,457.76,449.38,437.76,436.4,433.48,428.96,438.82,440.17,449.46,454.43,438.89,441.46,440.67,443.97,447.25,448.06,448.9,446.26,446.18,485.72,491.77,524.58,520.22,525.14,571.59,583.42,571.24,577.06,568.18,615.33,623.68,630.23,660.62,667.6,641.61,659.26,653.7,654.97,656.14,649.16,653.15,633.02,586.95,600.16,577.36,592.94,592.19,610.86,607.96,598.07,594.15,594.99,602.27,593.98,582.36,566.34,581.14,597.26,596.55,602.72,639.8,640.81,650.88,645.16,630.69,631.46,635.81,624.09,624.82,624.51,616.76,632,633.71,626.5,619.32,621.59,616.8,623.09,628.78,628.52,623.9,622.21,621.55,619.41,601.73,601.09,595.81,593.85,585.69,584.72,567.29,586.23,594.92,589.33,586.67,588.78,585.44,584.65,588.87,592.58,589.37,591.06,576.37,569.64,546.66,505.97,497.01,519.71,491.8,461.46,485.24,511.98,517.24,514.04,498.08,508.29,502.5,511.57,511.15,507.82,508.52,504.25,477.76,474.88,477.43,477.59,489.66,483.34,484.83,482.28,474.6,475.26,479.36,479.75,477.75,479,477.89,475.37,466.06,457.33,424.44,394.8,408.9,398.82,402.15,435.79,423.2,411.57,404.42,399.52,377.18,375.47,386.94,383.61,375.07,359.51,328.87,320.51,330.08,336.19,352.94,365.03,361.56,362.3,378.55,390.41,400.87,394.77,382.56,383.76,391.44,389.55,382.85,386.48,383.16,358.42,358.35,347.27,354.7,352.99,357.62,335.59,345.3,338.32,325.75,325.89,327.55,330.49,339.49,349.29,342.42,345.49,363.26,366.92,367.7,423.56,420.73,397.82,376.13,387.88,387.41,375.2,380.55,357.84,350.85,352.92,367.57,376.9,375.35,368.37,369.67,376.45,375.49,378.05,379.24,381.32,375.01,369.6,376.85,374.79,375.1,361.91,352.22,346.36,350.51,352.54,347.38,351.63,345.35,327.06,319.78,311.4,317.84,329.96,320.84,331.89,334.57,322.53,319.01,327.92,315.86,317.24,312.67,310.74,320.19,314.25,315.03,281.08,264.2,274.47,286.19,294.34,283.35,290.41,274.8,265.66,267.8,225.86,178.1,209.84,208.1,199.26,210.34,214.86,211.32,226.9,233.41,232.88,247.85,253.72,273.47,263.48,233.91,233.51,226.43,217.46,226.97,238.23,227.27,226.85,217.11,222.27,227.75,223.41,220.11,219.84,219.18,221.76,235.43,257.32,234.82,233.84,243.61,236.33,240.28,243.78,244.53,235.98,238.89,238.74,237.47,236.43,253.83,254.26,260.2,275.67,281.7,273.09,276.18,272.72,276.26,274.35,289.61,291.76,296.38,294.35,285.34,281.89,286.39,290.59,285.51,256.3,260.93,261.75,260.02,267.96,266.74,245.6,246.2,248.53,247.03,252.8,242.71,247.53,244.22,247.27,253.01,254.32,253.7,260.6,255.49,253.18,245.02,243.68,236.07,236.55,236.15,224.59,219.16,223.83,228.57,222.88,223.36,222.6,224.63,235.27,234.18,236.46,231.27,226.39,219.43,229.29,225.85,225.81,236.15,232.08,234.93,240.36,239.02,236.12,229.78,237.33,243.86,241.83,240.3,242.16,241.11,236.38,236.93,237.6,236.15,236.8,233.13,231.95,234.02,235.34,240.35,238.87,240.95,237.11,237.12,237.28,237.41,237.1,233.35,230.19,222.93,225.8,225.87,224.32,224.95,225.62,222.88,228.49,229.05,228.8,229.71,229.98,232.4,233.54,236.82,250.9,249.28,249.01,244.61,245.21,243.94,246.99,244.3,240.51,242.8,243.59,250.99,249.01,257.06,263.07,258.62,255.41,256.34,260.89,271.91,269.03,266.21,270.79,269.23,284.89,293.11,310.87,292.05,287.46,285.83,278.09,279.47,274.9,273.61,278.98,275.83,277.22,276.05,288.28,288.7,292.69,293.62,294.43,289.59,287.72,284.65,281.6,282.61,281.23,285.22,281.88,278.58,279.58,261,265.08,264.47,270.39,266.38,264.08,265.68,261.55,258.51,257.98,211.08,226.68,235.35,232.57,230.39,228.17,210.49,221.61,225.83,224.77,231.4,229.78,228.76,230.06,228.12,229.28,227.18,230.3,235.02,239.84,239.85,243.61,238.17,238.48,240.11,235.23,230.51,230.64,230.3,229.09,229.81,232.98,231.49,231.21,227.09,230.62,230.28,234.53,235.14,234.34,232.76,239.14,236.69,236.06,237.55,237.29,238.73,238.26,240.38,246.06,242.97,242.3,243.93,244.94,247.05,245.31,249.51,251.99,254.32,262.87,270.64,261.64,263.44,269.46,266.27,274.02,276.5,281.65,283.68,285.3,293.79,304.62,313.86,328.02,314.17,325.43,361.19,403.42,411.56,386.35,374.47,386.48,373.37,380.26,336.82,311.08,338.15,336.75,332.91,320.17,330.75,335.09,334.59,326.15,322.02,326.93,324.54,323.05,320.05,328.21,352.68,358.04,357.38,371.29,377.32,362.49,359.19,361.05,363.18,388.95,388.78,395.54,415.56,417.56,415.48,451.94,435,433.76,444.18,465.32,454.93,456.08,463.62,462.32,442.68,438.64,436.57,442.4,454.98,455.65,417.27,422.82,422.28,432.98,426.62,430.57,434.33,433.44,430.01,433.09,431.96,429.11,458.05,453.23,447.61,447.99,448.43,435.69,432.37,430.31,364.33,387.54,382.3,387.17,380.15,420.23,410.26,382.49,387.49,402.97,391.73,392.15,394.97,380.29,379.47,378.26,368.77,373.06,374.45,369.95,389.59,386.55,376.52,376.62,373.45,376.03,381.65,379.65,384.26,391.86,407.23,400.18,407.49,416.32,422.37,420.79,437.16,438.8,437.75,420.74,424.95,424.54,432.15,432.52,433.5,437.7,435.12,423.99,421.65,410.94,400.57,407.71,414.32,413.97,414.86,417.13,421.69,411.62,414.07,416.44,416.83,417.01,420.62,409.55,410.44,413.76,413.31,418.09,418.04,416.39,417.18,417.95,426.77,424.23,416.52,414.82,416.73,417.96,420.87,420.9,421.44,424.03,423.41,422.74,420.35,419.41,421.56,422.48,425.19,423.73,424.28,429.71,430.57,427.4,428.59,435.51,441.39,449.42,445.74,450.28,458.55,461.43,466.09,444.69,449.01,455.1,448.32,451.88,444.67,450.3,446.72,447.98,459.6,458.54,458.55,460.48,450.89,452.73,454.77,455.67,455.67,457.57,454.16,453.78,454.62,438.71,442.68,443.19,439.32,444.15,445.98,449.6,453.38,473.46,530.04,526.23,533.86,531.39,536.92,537.97,569.19,572.73,574.98,585.54,576.6,581.65,574.63,577.47,606.73,672.78,704.38,685.56,694.47,766.31,748.91,756.23,763.78,737.23,666.65,596.12,623.98,665.3,665.12,629.37,655.28,647,639.89,673.34,676.3,703.7,658.66,683.66,670.63,677.33,640.56,666.52,650.96,649.36,647.66,664.55,654.47,658.08,663.26,660.77,679.46,673.11,672.86,665.68,665.01,650.62,655.56,661.28,654.1,651.78,654.35,655.03,656.99,655.05,624.68,606.27,547.47,566.35,578.29,575.04,587.78,592.69,591.05,587.8,592.1,589.12,587.56,585.59,570.47,567.24,577.44,573.22,574.32,575.63,581.7,581.31,586.75,583.41,580.18,577.76,579.65,569.95,573.91,574.11,577.5,575.47,572.3,575.54,598.21,608.63,606.59,610.44,614.54,626.32,622.86,623.51,606.72,608.24,609.24,610.68,607.16,606.97,605.98,609.87,609.23,608.31,597.15,596.3,602.84,602.63,600.83,608.04,606.17,604.73,605.69,609.73,613.98,610.89,612.13,610.2,612.51,613.02,617.12,619.11,616.75,618.99,641.07,636.19,636.79,640.38,638.65,641.63,639.19,637.96,630.52,630.86,632.83,657.29,657.07,653.76,657.59,678.3,688.31,689.65,714.48,701.86,700.97,729.79,740.83,688.7,703.23,703.42,711.52,703.13,709.85,723.27,715.53,716.41,705.05,702.03,705.02,711.62,744.2,740.98,751.59,751.62,731.03,739.25,751.35,744.59,740.29,741.65,735.38,732.03,735.81,735.6,745.69,756.77,777.94,771.16,773.87,758.7,764.22,768.13,770.81,772.79,774.65,769.73,780.09,780.56,781.48,778.09,784.91,790.83,790.53,792.71,800.88,834.28,864.54,921.98,898.82,896.18,907.61,933.2,975.92,973.5,961.24,963.74,998.33,1021.75,1043.84,1154.73,1013.38,902.2,908.59,911.2,902.83,907.68,777.76,804.83,823.98,818.41,821.8,831.53,907.94,886.62,899.07,895.03,921.79,924.67,921.01,892.69,901.54,917.59,919.75,921.59,919.5,920.38,970.4,989.02,1011.8,1029.91,1042.9,1027.34,1038.15,1061.35,1063.07,994.38,988.67,1004.45,999.18,990.64,1004.55,1007.48,1027.44,1046.21,1054.42,1047.87,1079.98,1115.3,1117.44,1166.72,1173.68,1143.84,1165.2,1179.97,1179.97,1222.5,1251.01,1274.99,1255.15,1267.12,1272.83,1223.54,1150,1188.49,1116.72,1175.83,1221.38,1231.92,1240,1249.61,1187.81,1100.23,973.82,1036.74,1054.23,1120.54,1049.14,1038.59,937.52,972.78,966.72,1045.77,1047.15,1039.97,1026.43,1071.79,1080.5,1102.17,1143.81,1133.25,1124.78,1182.68,1176.9,1175.95,1187.87,1187.13,1205.01,1200.37,1169.28,1167.54,1172.52,1182.94,1193.91,1211.67,1210.29,1229.08,1222.05,1231.71,1207.21,1250.15,1265.49,1281.08,1317.73,1316.48,1321.79,1347.89,1421.6,1452.82,1490.09,1537.67,1555.45,1578.8,1596.71,1723.35,1755.36,1787.13,1848.57,1724.24,1804.91,1808.91,1738.43,1734.45,1839.09,1888.65,1987.71,2084.73,2041.2,2173.4,2320.42,2443.64,2304.98,2202.42,2038.87,2155.8,2255.61,2175.47,2286.41,2407.88,2488.55,2515.35,2511.81,2686.81,2863.2,2732.16,2805.62,2823.81,2947.71,2958.11,2659.63,2717.02,2506.37,2464.58,2518.56,2655.88,2548.29,2589.6,2721.79,2689.1,2705.41,2744.91,2608.72,2589.41,2478.45,2552.45,2574.79,2539.32,2480.84,2434.55,2506.47,2564.06,2601.64,2601.99,2608.56,2518.66,2571.34,2518.44,2372.56,2337.79,2398.84,2357.9,2233.34,1998.86,1929.82,2228.41,2318.88,2273.43,2817.6,2667.76,2810.12,2730.4,2754.86,2576.48,2529.45,2671.78,2809.01,2726.45,2757.18,2875.34,2718.26,2710.67,2804.73,2895.89,3252.91,3213.94,3378.94,3419.94,3342.47,3381.28,3650.62,3884.71,4073.26,4325.13,4181.93,4376.63,4331.69,4160.62,4193.7,4087.66,4001.74,4100.52,4151.52,4334.68,4371.6,4352.4,4382.88,4382.66,4579.02,4565.3,4703.39,4892.01,4578.77,4582.96,4236.31,4376.53,4597.12,4599.88,4228.75,4226.06,4122.94,4161.27,4130.81,3882.59,3154.95,3637.52,3625.04,3582.88,4065.2,3924.97,3905.95,3631.04,3630.7,3792.4,3682.84,3926.07,3892.35,4200.67,4174.73,4163.07,4338.71,4403.74,4409.32,4317.48,4229.36,4328.41,4370.81,4426.89,4610.48,4772.02,4781.99,4826.48,5446.91,5647.21,5831.79,5678.19,5725.59,5605.51,5590.69,5708.52,6011.45,6031.6,6008.42,5930.32,5526.64,5750.8,5904.83,5780.9,5753.09,6153.85,6130.53,6468.4,6767.31,7078.5,7207.76,7379.95,7407.41,7022.76,7144.38,7459.69,7143.58,6618.14,6357.6,5950.07,6559.49,6635.75,7315.54,7871.69,7708.99,7790.15,8036.49,8200.64,8071.26,8253.55,8038.77,8253.69,8790.92,9330.55,9818.35,10058.8,9888.61,10233.6,10975.6,11074.6,11323.2,11657.2,11916.7,14291.5,17899.7,16569.4,15178.2,15455.4,16936.8,17415.4,16408.2,16564,17706.9,19497.4,19140.8,19114.2,17776.7,16624.6,15802.9,13831.8,14699.2,13925.8,14026.6,16099.8,15838.5,14606.5,14656.2,12952.2,14156.4,13657.2,14982.1,15201,15599.2,17429.5,17527,16477.6,15170.1,14595.4,14973.3,13405.8,13980.6,14360.2,13772,13819.8,11490.5,11188.6,11474.9,11607.4,12899.2,11600.1,10931.4,10868.4,11359.4,11259.4,11171.4,11440.7,11786.3,11296.4,10106.3,10221.1,9170.54,8830.75,9174.91,8277.01,6955.27,7754,7621.3,8265.59,8736.98,8621.9,8129.97,8926.57,8598.31,9494.63,10166.4,10233.9,11112.7,10551.8,11225.3,11403.7,10690.4,10005,10301.1,9813.07,9664.73,10366.7,10725.6,10397.9,10951,11086.4,11489.7,11512.6,11573.3,10779.9,9965.57,9395.01,9337.55,8866,9578.63,9205.12,9194.85,8269.81,8300.86,8338.35,7916.88,8223.68,8630.65,8913.47,8929.28,8728.47,8879.62,8668.12,8495.78,8209.4,7833.04,7954.48,7165.7,6890.52,6973.53,6844.23,7083.8,7456.11,6853.84,6811.47,6636.32,6911.09,7023.52,6770.73,6834.76,6968.32,7889.25,7895.96,7986.24,8329.11,8058.67,7902.09,8163.42,8294.31,8845.83,8895.58,8802.46,8930.88,9697.5,8845.74,9281.51,8987.05,9348.48,9419.08,9240.55,9119.01,9235.92,9743.86,9700.76,9858.15,9654.8,9373.01,9234.82,9325.18,9043.94,8441.49,8504.89,8723.94,8716.79,8510.38,8368.83,8094.32,8250.97,8247.18,8513.25,8418.99,8041.78,7557.82,7587.34,7480.14,7355.88,7368.22,7135.99,7472.59,7406.52,7494.17,7541.45,7643.45,7720.25,7514.47,7633.76,7653.98,7678.24,7624.92,7531.98,6786.02,6906.92,6582.36,6349.9,6675.35,6456.58,6550.16,6499.27,6734.82,6769.94,6776.55,6729.74,6083.69,6162.48,6173.23,6249.18,6093.67,6157.13,5903.44,6218.3,6404,6385.82,6614.18,6529.59,6597.55,6639.14,6673.5,6856.93,6773.88,6741.75,6329.95,6394.71,6228.81,6238.05,6276.12,6359.64,6741.75,7321.04,7370.78,7466.86,7354.13,7419.29,7418.49,7711.11,8424.27,8181.39,7951.58,8165.01,8192.15,8218.46,8180.48,7780.44,7624.91,7567.15,7434.39,7032.85,7068.48,6951.8,6753.12,6305.8,6568.23,6184.71,6295.73,6322.69,6297.57,6199.71,6308.52,6334.73,6580.63,6423.76,6506.07,6308.53,6488.76,6376.71,6534.88,6719.96,6763.19,6707.26,6884.64,7096.28,7047.16,6978.23,7037.58,7193.25,7272.72,7260.06,7361.66,6792.83,6529.17,6467.07,6225.98,6300.86,6329.7,6321.2,6351.8,6517.31,6512.71,6543.2,6517.18,6281.2,6371.3,6398.54,6519.67,6734.95,6721.98,6710.63,6595.41,6446.47,6495,6676.75,6644.13,6601.96,6625.56,6589.62,6556.1,6502.59,6576.69,6622.48,6588.31,6602.95,6652.23,6642.64,6585.53,6256.24,6274.58,6285.99,6290.93,6596.54,6596.11,6544.43,6476.71,6465.41,6489.19,6482.35,6487.16,6475.74,6495.84,6476.29,6474.75,6480.38,6486.39,6332.63,6334.27,6317.61,6377.78,6388.44,6361.26,6376.13,6419.66,6461.01,6530.14,6453.72,6385.62,6409.22,6411.27,6371.27,6359.49,5738.35,5648.03,5575.55,5554.33,5623.54,4871.49,4451.87,4602.17,4365.94,4347.11,3880.76,4009.97,3779.13,3820.72,4257.42,4278.85,4017.27,4214.67,4139.88,3894.13,3956.89,3753.99,3521.1,3419.94,3476.11,3614.23,3502.66,3424.59,3486.95,3313.68,3242.48,3236.76,3252.84,3545.86,3696.06,3745.95,4134.44,3896.54,4014.18,3998.98,4078.6,3815.49,3857.3,3654.83,3923.92,3820.41,3865.95,3742.7,3843.52,3943.41,3836.74,3857.72,3845.19,4076.63,4025.25,4030.85,4035.3,3678.92,3687.37,3661.3,3552.95,3706.05,3630.68,3655.01,3678.56,3657.84,3728.57,3601.01,3576.03,3604.58,3585.12,3600.87,3599.77,3602.46,3583.97,3470.45,3448.12,3486.18,3457.79,3487.95,3521.06,3464.01,3459.15,3466.36,3413.77,3399.47,3666.78,3671.2,3690.19,3648.43,3653.53,3632.07,3616.88,3620.81,3629.79,3673.84,3915.71,3947.09,3999.82,3954.12,4005.53,4142.53,3810.43,3882.7,3854.36,3851.05,3854.79,3859.58,3864.42,3847.18,3761.56,3896.38,3903.94,3911.48,3901.13,3963.31,3951.6,3905.23,3909.16,3906.72,3924.37,3960.91,4048.73,4025.23,4032.51,4071.19,4087.48,4029.33,4023.97,4035.83,4022.17,3963.07,3985.08,4087.07,4069.11,4098.37,4106.66,4105.4,4158.18,4879.88,4973.02,4922.8,5036.68,5059.82,5198.9,5289.77,5204.96,5324.55,5064.49,5089.54,5096.59,5167.72,5067.11,5235.56,5251.94,5298.39,5303.81,5337.89,5314.53,5399.37,5572.36,5464.87,5210.52,5279.35,5268.29,5285.14,5247.35,5350.73,5402.7,5505.28,5768.29,5831.17,5795.71,5746.81,5829.5,5982.46,6174.53,6378.85,7204.77,6972.37,7814.92,7994.42,8205.17,7884.91,7343.9,7271.21,8197.69,7978.31,7963.33,7680.07,7881.85,7987.37,8052.54,8673.22,8805.78,8719.96,8659.49,8319.47,8574.5,8564.02,8742.96,8208.99,7707.77,7824.23,7822.02,8043.95,7954.13,7688.08,8000.33,7927.71,8145.86,8230.92,8693.83,8838.38,8994.49,9320.35,9081.76,9273.52,9527.16,10144.56,10701.69,10855.37,11011.1,11790.92,13016.23,11182.81,12407.33,11959.37,10817.16,10583.13,10801.68,11961.27,11215.44,10978.46,11208.55,11450.85,12285.96,12573.81,12156.51,11358.66,11815.99,11392.38,10256.06,10895.09,9477.64,9693.8,10666.48,10530.73,10767.14,10599.11,10343.11,9900.77,9811.93,9911.84,9870.3,9477.68,9552.86,9519.15,9607.42,10085.63,10399.67,10518.17,10821.73,10970.18,11805.65,11478.17,11941.97,11966.41,11862.94,11354.02,11523.58,11382.62,10895.83,10051.7,10311.55,10374.34,10231.74,10345.81,10916.05,10763.23,10138.05,10131.06,10407.97,10159.96,10138.52,10370.82,10185.5,9754.42,9510.2,9598.17,9630.66,9757.97,10346.76,10623.54,10594.49,10575.53,10353.3,10517.25,10441.28,10334.97,10115.98,10178.37,10410.13,10360.55,10358.05,10347.71,10276.79,10241.27,10198.25,10266.41,10181.64,10019.72,10070.39,9729.32,8620.57,8486.99,8118.97,8251.85,8245.92,8104.19,8293.87,8343.28,8393.04,8259.99,8205.94,8151.5,7988.16,8245.62,8228.78,8595.74,8586.47,8321.76,8336.56,8321.01,8374.69,8205.37,8047.53,8103.91,7973.21,7988.56,8222.08,8243.72,8078.2,7514.67,7493.49,8660.7,9244.97,9551.71,9256.15,9427.69,9205.73,9199.58,9261.1,9324.72,9235.35,9412.61,9342.53,9360.88,9267.56,8804.88,8813.58,9055.53,8757.79,8815.66,8808.26,8708.1,8491.99,8550.76,8577.98,8309.29,8206.15,8027.27,7642.75,7296.58,7397.8,7047.92,7146.13,7218.37,7531.66,7463.11,7761.24,7569.63,7424.29,7321.99,7320.15,7252.03,7448.31,7547,7556.24,7564.35,7400.9,7278.12,7217.43,7243.13,7269.68,7124.67,7152.3,6932.48,6640.52,7276.8,7202.84,7218.82,7191.16,7511.59,7355.63,7322.53,7275.16,7238.97,7290.09,7317.99,7422.65,7293,7193.6,7200.17,6985.47,7344.88,7410.66,7411.32,7769.22,8163.69,8079.86,7879.07,8166.55,8037.54,8192.49,8144.19,8827.76,8807.01,8723.79,8929.04,8942.81,8706.25,8657.64,8745.89,8680.88,8406.52,8445.43,8367.85,8596.83,8909.82,9358.59,9316.63,9508.99,9350.53,9392.88,9344.37,9293.52,9180.96,9613.42,9729.8,9795.94,9865.12,10116.67,9856.61,10208.24,10326.05,10214.38,10312.12,9889.42,9934.43,9690.14,10142,9633.39,9608.48,9686.44,9663.18,9924.52,9650.17,9341.71,8820.52,8784.49,8672.46,8599.51,8562.45,8869.67,8787.79,8755.25,9078.76,9122.55,8909.95,8108.12,7923.64,7909.73,7911.43,4970.79,5563.71,5200.37,5392.31,5014.48,5225.63,5238.44,6191.19,6198.78,6185.07,5830.25,6416.31,6734.8,6681.06,6716.44,6469.8,6242.19,5922.04,6429.84,6438.64,6606.78,6793.62,6733.39,6867.53,6791.13,7271.78,7176.41,7334.1,7302.09,6865.49,6859.08,6971.09,6845.04,6842.43,6642.11,7116.8,7096.18,7257.66,7189.42,6881.96,6880.32,7117.21,7429.72,7550.9,7569.94,7679.87,7795.6,7807.06,8801.04,8658.55,8864.77,8988.6,8897.47,8912.65,9003.07,9268.76,9951.52,9842.67,9593.9,8756.43,8601.8,8804.48,9269.99,9733.72,9328.2,9377.01,9670.74,9726.57,9729.04,9522.98,9081.76,9182.58,9209.29,8790.37,8906.93,8835.05,9181.02,9525.75,9439.12,9700.41,9461.06,10167.27,9529.8,9656.72,9800.64,9665.53,9653.68,9758.85,9771.49,9795.7,9870.09,9321.78,9480.84,9475.28,9386.79,9450.7,9538.02,9480.26,9411.84,9288.02,9332.34,9303.63,9648.72,9629.66,9313.61,9264.81,9162.92,9045.39,9143.58,9190.85,9137.99,9228.33,9123.41,9087.3,9132.49,9073.94,9375.47,9252.28,9428.33,9277.97,9278.81,9240.35,9276.5,9243.61,9243.21,9192.84,9132.23,9151.39,9159.04,9185.82,9164.23,9374.89,9525.36,9581.07,9536.89,9677.11,9905.17,10990.87,10912.82,11100.47,11111.21,11323.47,11759.59,11053.61,11246.35,11205.89,11747.02,11779.77,11601.47,11754.05,11675.74,11878.11,11410.53,11584.93,11784.14,11768.87,11865.7,11892.8,12254.4,11991.23,11758.28,11878.37,11592.49,11681.83,11664.85,11774.6],\"text\":[\"date: 2013-04-28\nclose: 134.21\",\"date: 2013-04-29\nclose: 144.54\",\"date: 2013-04-30\nclose: 139.00\",\"date: 2013-05-01\nclose: 116.99\",\"date: 2013-05-02\nclose: 105.21\",\"date: 2013-05-03\nclose: 97.75\",\"date: 2013-05-04\nclose: 112.50\",\"date: 2013-05-05\nclose: 115.91\",\"date: 2013-05-06\nclose: 112.30\",\"date: 2013-05-07\nclose: 111.50\",\"date: 2013-05-08\nclose: 113.57\",\"date: 2013-05-09\nclose: 112.67\",\"date: 2013-05-10\nclose: 117.20\",\"date: 2013-05-11\nclose: 115.24\",\"date: 2013-05-12\nclose: 115.00\",\"date: 2013-05-13\nclose: 117.98\",\"date: 2013-05-14\nclose: 111.50\",\"date: 2013-05-15\nclose: 114.22\",\"date: 2013-05-16\nclose: 118.76\",\"date: 2013-05-17\nclose: 123.01\",\"date: 2013-05-18\nclose: 123.50\",\"date: 2013-05-19\nclose: 121.99\",\"date: 2013-05-20\nclose: 122.00\",\"date: 2013-05-21\nclose: 122.88\",\"date: 2013-05-22\nclose: 123.89\",\"date: 2013-05-23\nclose: 126.70\",\"date: 2013-05-24\nclose: 133.20\",\"date: 2013-05-25\nclose: 131.98\",\"date: 2013-05-26\nclose: 133.48\",\"date: 2013-05-27\nclose: 129.74\",\"date: 2013-05-28\nclose: 129.00\",\"date: 2013-05-29\nclose: 132.30\",\"date: 2013-05-30\nclose: 128.80\",\"date: 2013-05-31\nclose: 129.00\",\"date: 2013-06-01\nclose: 129.30\",\"date: 2013-06-02\nclose: 122.29\",\"date: 2013-06-03\nclose: 122.22\",\"date: 2013-06-04\nclose: 121.42\",\"date: 2013-06-05\nclose: 121.65\",\"date: 2013-06-06\nclose: 118.00\",\"date: 2013-06-07\nclose: 111.50\",\"date: 2013-06-08\nclose: 108.30\",\"date: 2013-06-09\nclose: 100.00\",\"date: 2013-06-10\nclose: 106.35\",\"date: 2013-06-11\nclose: 108.90\",\"date: 2013-06-12\nclose: 108.15\",\"date: 2013-06-13\nclose: 104.00\",\"date: 2013-06-14\nclose: 99.98\",\"date: 2013-06-15\nclose: 99.99\",\"date: 2013-06-16\nclose: 99.51\",\"date: 2013-06-17\nclose: 101.70\",\"date: 2013-06-18\nclose: 107.40\",\"date: 2013-06-19\nclose: 108.25\",\"date: 2013-06-20\nclose: 110.15\",\"date: 2013-06-21\nclose: 109.50\",\"date: 2013-06-22\nclose: 108.30\",\"date: 2013-06-23\nclose: 107.60\",\"date: 2013-06-24\nclose: 102.74\",\"date: 2013-06-25\nclose: 103.95\",\"date: 2013-06-26\nclose: 104.00\",\"date: 2013-06-27\nclose: 101.44\",\"date: 2013-06-28\nclose: 94.65\",\"date: 2013-06-29\nclose: 94.99\",\"date: 2013-06-30\nclose: 96.61\",\"date: 2013-07-01\nclose: 88.05\",\"date: 2013-07-02\nclose: 90.13\",\"date: 2013-07-03\nclose: 77.53\",\"date: 2013-07-04\nclose: 80.53\",\"date: 2013-07-05\nclose: 68.43\",\"date: 2013-07-06\nclose: 70.28\",\"date: 2013-07-07\nclose: 74.56\",\"date: 2013-07-08\nclose: 76.52\",\"date: 2013-07-09\nclose: 76.69\",\"date: 2013-07-10\nclose: 86.76\",\"date: 2013-07-11\nclose: 88.98\",\"date: 2013-07-12\nclose: 93.59\",\"date: 2013-07-13\nclose: 98.13\",\"date: 2013-07-14\nclose: 94.69\",\"date: 2013-07-15\nclose: 98.40\",\"date: 2013-07-16\nclose: 97.45\",\"date: 2013-07-17\nclose: 98.50\",\"date: 2013-07-18\nclose: 90.58\",\"date: 2013-07-19\nclose: 92.17\",\"date: 2013-07-20\nclose: 89.39\",\"date: 2013-07-21\nclose: 90.76\",\"date: 2013-07-22\nclose: 91.61\",\"date: 2013-07-23\nclose: 95.56\",\"date: 2013-07-24\nclose: 94.51\",\"date: 2013-07-25\nclose: 96.90\",\"date: 2013-07-26\nclose: 96.02\",\"date: 2013-07-27\nclose: 94.12\",\"date: 2013-07-28\nclose: 99.76\",\"date: 2013-07-29\nclose: 101.20\",\"date: 2013-07-30\nclose: 107.99\",\"date: 2013-07-31\nclose: 106.09\",\"date: 2013-08-01\nclose: 104.00\",\"date: 2013-08-02\nclose: 104.50\",\"date: 2013-08-03\nclose: 104.00\",\"date: 2013-08-04\nclose: 105.14\",\"date: 2013-08-05\nclose: 106.22\",\"date: 2013-08-06\nclose: 106.75\",\"date: 2013-08-07\nclose: 106.75\",\"date: 2013-08-08\nclose: 103.00\",\"date: 2013-08-09\nclose: 102.80\",\"date: 2013-08-10\nclose: 103.00\",\"date: 2013-08-11\nclose: 105.00\",\"date: 2013-08-12\nclose: 106.64\",\"date: 2013-08-13\nclose: 109.00\",\"date: 2013-08-14\nclose: 112.56\",\"date: 2013-08-15\nclose: 109.99\",\"date: 2013-08-16\nclose: 108.99\",\"date: 2013-08-17\nclose: 113.50\",\"date: 2013-08-18\nclose: 113.50\",\"date: 2013-08-19\nclose: 119.00\",\"date: 2013-08-20\nclose: 121.21\",\"date: 2013-08-21\nclose: 123.30\",\"date: 2013-08-22\nclose: 121.15\",\"date: 2013-08-23\nclose: 118.50\",\"date: 2013-08-24\nclose: 120.04\",\"date: 2013-08-25\nclose: 122.11\",\"date: 2013-08-26\nclose: 120.06\",\"date: 2013-08-27\nclose: 126.50\",\"date: 2013-08-28\nclose: 122.62\",\"date: 2013-08-29\nclose: 122.39\",\"date: 2013-08-30\nclose: 133.49\",\"date: 2013-08-31\nclose: 135.35\",\"date: 2013-09-01\nclose: 138.34\",\"date: 2013-09-02\nclose: 135.85\",\"date: 2013-09-03\nclose: 136.77\",\"date: 2013-09-04\nclose: 126.74\",\"date: 2013-09-05\nclose: 126.43\",\"date: 2013-09-06\nclose: 119.15\",\"date: 2013-09-07\nclose: 124.15\",\"date: 2013-09-08\nclose: 121.66\",\"date: 2013-09-09\nclose: 127.11\",\"date: 2013-09-10\nclose: 125.91\",\"date: 2013-09-11\nclose: 135.25\",\"date: 2013-09-12\nclose: 133.13\",\"date: 2013-09-13\nclose: 134.98\",\"date: 2013-09-14\nclose: 129.22\",\"date: 2013-09-15\nclose: 130.37\",\"date: 2013-09-16\nclose: 131.72\",\"date: 2013-09-17\nclose: 131.66\",\"date: 2013-09-18\nclose: 131.47\",\"date: 2013-09-19\nclose: 129.65\",\"date: 2013-09-20\nclose: 127.04\",\"date: 2013-09-21\nclose: 127.43\",\"date: 2013-09-22\nclose: 129.12\",\"date: 2013-09-23\nclose: 125.95\",\"date: 2013-09-24\nclose: 127.25\",\"date: 2013-09-25\nclose: 128.22\",\"date: 2013-09-26\nclose: 128.38\",\"date: 2013-09-27\nclose: 133.78\",\"date: 2013-09-28\nclose: 134.78\",\"date: 2013-09-29\nclose: 137.34\",\"date: 2013-09-30\nclose: 133.00\",\"date: 2013-10-01\nclose: 132.18\",\"date: 2013-10-02\nclose: 114.13\",\"date: 2013-10-03\nclose: 123.63\",\"date: 2013-10-04\nclose: 129.01\",\"date: 2013-10-05\nclose: 128.55\",\"date: 2013-10-06\nclose: 129.00\",\"date: 2013-10-07\nclose: 126.94\",\"date: 2013-10-08\nclose: 126.00\",\"date: 2013-10-09\nclose: 130.69\",\"date: 2013-10-10\nclose: 130.59\",\"date: 2013-10-11\nclose: 130.90\",\"date: 2013-10-12\nclose: 135.19\",\"date: 2013-10-13\nclose: 138.13\",\"date: 2013-10-14\nclose: 140.52\",\"date: 2013-10-15\nclose: 145.24\",\"date: 2013-10-16\nclose: 142.55\",\"date: 2013-10-17\nclose: 146.25\",\"date: 2013-10-18\nclose: 155.96\",\"date: 2013-10-19\nclose: 172.42\",\"date: 2013-10-20\nclose: 174.61\",\"date: 2013-10-21\nclose: 182.21\",\"date: 2013-10-22\nclose: 193.76\",\"date: 2013-10-23\nclose: 213.62\",\"date: 2013-10-24\nclose: 198.23\",\"date: 2013-10-25\nclose: 186.69\",\"date: 2013-10-26\nclose: 177.32\",\"date: 2013-10-27\nclose: 196.44\",\"date: 2013-10-28\nclose: 198.55\",\"date: 2013-10-29\nclose: 204.39\",\"date: 2013-10-30\nclose: 199.97\",\"date: 2013-10-31\nclose: 204.00\",\"date: 2013-11-01\nclose: 206.18\",\"date: 2013-11-02\nclose: 206.22\",\"date: 2013-11-03\nclose: 215.05\",\"date: 2013-11-04\nclose: 229.10\",\"date: 2013-11-05\nclose: 245.24\",\"date: 2013-11-06\nclose: 262.50\",\"date: 2013-11-07\nclose: 296.41\",\"date: 2013-11-08\nclose: 338.11\",\"date: 2013-11-09\nclose: 339.11\",\"date: 2013-11-10\nclose: 326.62\",\"date: 2013-11-11\nclose: 342.44\",\"date: 2013-11-12\nclose: 360.33\",\"date: 2013-11-13\nclose: 407.37\",\"date: 2013-11-14\nclose: 420.20\",\"date: 2013-11-15\nclose: 417.95\",\"date: 2013-11-16\nclose: 440.22\",\"date: 2013-11-17\nclose: 492.11\",\"date: 2013-11-18\nclose: 703.56\",\"date: 2013-11-19\nclose: 584.61\",\"date: 2013-11-20\nclose: 590.83\",\"date: 2013-11-21\nclose: 722.43\",\"date: 2013-11-22\nclose: 771.44\",\"date: 2013-11-23\nclose: 797.82\",\"date: 2013-11-24\nclose: 774.25\",\"date: 2013-11-25\nclose: 799.11\",\"date: 2013-11-26\nclose: 928.10\",\"date: 2013-11-27\nclose: 1001.96\",\"date: 2013-11-28\nclose: 1031.95\",\"date: 2013-11-29\nclose: 1131.97\",\"date: 2013-11-30\nclose: 1129.43\",\"date: 2013-12-01\nclose: 955.85\",\"date: 2013-12-02\nclose: 1043.33\",\"date: 2013-12-03\nclose: 1078.28\",\"date: 2013-12-04\nclose: 1151.17\",\"date: 2013-12-05\nclose: 1045.11\",\"date: 2013-12-06\nclose: 829.45\",\"date: 2013-12-07\nclose: 698.23\",\"date: 2013-12-08\nclose: 795.87\",\"date: 2013-12-09\nclose: 893.19\",\"date: 2013-12-10\nclose: 988.51\",\"date: 2013-12-11\nclose: 878.48\",\"date: 2013-12-12\nclose: 873.26\",\"date: 2013-12-13\nclose: 892.58\",\"date: 2013-12-14\nclose: 872.60\",\"date: 2013-12-15\nclose: 876.12\",\"date: 2013-12-16\nclose: 705.97\",\"date: 2013-12-17\nclose: 682.12\",\"date: 2013-12-18\nclose: 522.70\",\"date: 2013-12-19\nclose: 691.96\",\"date: 2013-12-20\nclose: 625.32\",\"date: 2013-12-21\nclose: 605.66\",\"date: 2013-12-22\nclose: 617.18\",\"date: 2013-12-23\nclose: 673.41\",\"date: 2013-12-24\nclose: 665.58\",\"date: 2013-12-25\nclose: 682.21\",\"date: 2013-12-26\nclose: 761.98\",\"date: 2013-12-27\nclose: 735.07\",\"date: 2013-12-28\nclose: 727.83\",\"date: 2013-12-29\nclose: 745.05\",\"date: 2013-12-30\nclose: 756.13\",\"date: 2013-12-31\nclose: 754.01\",\"date: 2014-01-01\nclose: 771.40\",\"date: 2014-01-02\nclose: 802.39\",\"date: 2014-01-03\nclose: 818.72\",\"date: 2014-01-04\nclose: 859.51\",\"date: 2014-01-05\nclose: 933.53\",\"date: 2014-01-06\nclose: 953.29\",\"date: 2014-01-07\nclose: 802.00\",\"date: 2014-01-08\nclose: 842.72\",\"date: 2014-01-09\nclose: 846.86\",\"date: 2014-01-10\nclose: 868.48\",\"date: 2014-01-11\nclose: 913.95\",\"date: 2014-01-12\nclose: 863.22\",\"date: 2014-01-13\nclose: 841.20\",\"date: 2014-01-14\nclose: 833.27\",\"date: 2014-01-15\nclose: 860.90\",\"date: 2014-01-16\nclose: 835.63\",\"date: 2014-01-17\nclose: 814.64\",\"date: 2014-01-18\nclose: 840.00\",\"date: 2014-01-19\nclose: 870.96\",\"date: 2014-01-20\nclose: 870.20\",\"date: 2014-01-21\nclose: 863.91\",\"date: 2014-01-22\nclose: 845.59\",\"date: 2014-01-23\nclose: 822.04\",\"date: 2014-01-24\nclose: 797.07\",\"date: 2014-01-25\nclose: 853.61\",\"date: 2014-01-26\nclose: 885.28\",\"date: 2014-01-27\nclose: 771.39\",\"date: 2014-01-28\nclose: 812.51\",\"date: 2014-01-29\nclose: 826.00\",\"date: 2014-01-30\nclose: 819.03\",\"date: 2014-01-31\nclose: 829.92\",\"date: 2014-02-01\nclose: 832.58\",\"date: 2014-02-02\nclose: 825.37\",\"date: 2014-02-03\nclose: 823.83\",\"date: 2014-02-04\nclose: 827.96\",\"date: 2014-02-05\nclose: 811.91\",\"date: 2014-02-06\nclose: 781.55\",\"date: 2014-02-07\nclose: 712.40\",\"date: 2014-02-08\nclose: 673.92\",\"date: 2014-02-09\nclose: 682.90\",\"date: 2014-02-10\nclose: 681.03\",\"date: 2014-02-11\nclose: 672.17\",\"date: 2014-02-12\nclose: 651.72\",\"date: 2014-02-13\nclose: 605.24\",\"date: 2014-02-14\nclose: 661.99\",\"date: 2014-02-15\nclose: 650.92\",\"date: 2014-02-16\nclose: 616.63\",\"date: 2014-02-17\nclose: 626.27\",\"date: 2014-02-18\nclose: 626.60\",\"date: 2014-02-19\nclose: 623.03\",\"date: 2014-02-20\nclose: 556.14\",\"date: 2014-02-21\nclose: 574.16\",\"date: 2014-02-22\nclose: 605.42\",\"date: 2014-02-23\nclose: 605.82\",\"date: 2014-02-24\nclose: 546.32\",\"date: 2014-02-25\nclose: 538.71\",\"date: 2014-02-26\nclose: 582.69\",\"date: 2014-02-27\nclose: 578.77\",\"date: 2014-02-28\nclose: 549.26\",\"date: 2014-03-01\nclose: 565.61\",\"date: 2014-03-02\nclose: 559.79\",\"date: 2014-03-03\nclose: 667.76\",\"date: 2014-03-04\nclose: 666.78\",\"date: 2014-03-05\nclose: 665.51\",\"date: 2014-03-06\nclose: 663.86\",\"date: 2014-03-07\nclose: 629.15\",\"date: 2014-03-08\nclose: 617.45\",\"date: 2014-03-09\nclose: 636.96\",\"date: 2014-03-10\nclose: 627.79\",\"date: 2014-03-11\nclose: 634.11\",\"date: 2014-03-12\nclose: 632.10\",\"date: 2014-03-13\nclose: 638.14\",\"date: 2014-03-14\nclose: 628.80\",\"date: 2014-03-15\nclose: 636.12\",\"date: 2014-03-16\nclose: 631.11\",\"date: 2014-03-17\nclose: 622.37\",\"date: 2014-03-18\nclose: 614.83\",\"date: 2014-03-19\nclose: 609.89\",\"date: 2014-03-20\nclose: 588.77\",\"date: 2014-03-21\nclose: 571.49\",\"date: 2014-03-22\nclose: 565.04\",\"date: 2014-03-23\nclose: 561.27\",\"date: 2014-03-24\nclose: 583.41\",\"date: 2014-03-25\nclose: 583.92\",\"date: 2014-03-26\nclose: 580.83\",\"date: 2014-03-27\nclose: 471.24\",\"date: 2014-03-28\nclose: 495.67\",\"date: 2014-03-29\nclose: 491.17\",\"date: 2014-03-30\nclose: 460.27\",\"date: 2014-03-31\nclose: 457.00\",\"date: 2014-04-01\nclose: 478.38\",\"date: 2014-04-02\nclose: 437.14\",\"date: 2014-04-03\nclose: 444.72\",\"date: 2014-04-04\nclose: 447.53\",\"date: 2014-04-05\nclose: 461.91\",\"date: 2014-04-06\nclose: 460.50\",\"date: 2014-04-07\nclose: 449.42\",\"date: 2014-04-08\nclose: 453.09\",\"date: 2014-04-09\nclose: 442.73\",\"date: 2014-04-10\nclose: 365.18\",\"date: 2014-04-11\nclose: 420.95\",\"date: 2014-04-12\nclose: 421.12\",\"date: 2014-04-13\nclose: 414.06\",\"date: 2014-04-14\nclose: 458.79\",\"date: 2014-04-15\nclose: 515.59\",\"date: 2014-04-16\nclose: 527.40\",\"date: 2014-04-17\nclose: 495.96\",\"date: 2014-04-18\nclose: 479.64\",\"date: 2014-04-19\nclose: 501.57\",\"date: 2014-04-20\nclose: 498.17\",\"date: 2014-04-21\nclose: 495.77\",\"date: 2014-04-22\nclose: 487.92\",\"date: 2014-04-23\nclose: 491.30\",\"date: 2014-04-24\nclose: 500.46\",\"date: 2014-04-25\nclose: 461.45\",\"date: 2014-04-26\nclose: 458.60\",\"date: 2014-04-27\nclose: 436.39\",\"date: 2014-04-28\nclose: 440.29\",\"date: 2014-04-29\nclose: 447.21\",\"date: 2014-04-30\nclose: 447.64\",\"date: 2014-05-01\nclose: 457.76\",\"date: 2014-05-02\nclose: 449.38\",\"date: 2014-05-03\nclose: 437.76\",\"date: 2014-05-04\nclose: 436.40\",\"date: 2014-05-05\nclose: 433.48\",\"date: 2014-05-06\nclose: 428.96\",\"date: 2014-05-07\nclose: 438.82\",\"date: 2014-05-08\nclose: 440.17\",\"date: 2014-05-09\nclose: 449.46\",\"date: 2014-05-10\nclose: 454.43\",\"date: 2014-05-11\nclose: 438.89\",\"date: 2014-05-12\nclose: 441.46\",\"date: 2014-05-13\nclose: 440.67\",\"date: 2014-05-14\nclose: 443.97\",\"date: 2014-05-15\nclose: 447.25\",\"date: 2014-05-16\nclose: 448.06\",\"date: 2014-05-17\nclose: 448.90\",\"date: 2014-05-18\nclose: 446.26\",\"date: 2014-05-19\nclose: 446.18\",\"date: 2014-05-20\nclose: 485.72\",\"date: 2014-05-21\nclose: 491.77\",\"date: 2014-05-22\nclose: 524.58\",\"date: 2014-05-23\nclose: 520.22\",\"date: 2014-05-24\nclose: 525.14\",\"date: 2014-05-25\nclose: 571.59\",\"date: 2014-05-26\nclose: 583.42\",\"date: 2014-05-27\nclose: 571.24\",\"date: 2014-05-28\nclose: 577.06\",\"date: 2014-05-29\nclose: 568.18\",\"date: 2014-05-30\nclose: 615.33\",\"date: 2014-05-31\nclose: 623.68\",\"date: 2014-06-01\nclose: 630.23\",\"date: 2014-06-02\nclose: 660.62\",\"date: 2014-06-03\nclose: 667.60\",\"date: 2014-06-04\nclose: 641.61\",\"date: 2014-06-05\nclose: 659.26\",\"date: 2014-06-06\nclose: 653.70\",\"date: 2014-06-07\nclose: 654.97\",\"date: 2014-06-08\nclose: 656.14\",\"date: 2014-06-09\nclose: 649.16\",\"date: 2014-06-10\nclose: 653.15\",\"date: 2014-06-11\nclose: 633.02\",\"date: 2014-06-12\nclose: 586.95\",\"date: 2014-06-13\nclose: 600.16\",\"date: 2014-06-14\nclose: 577.36\",\"date: 2014-06-15\nclose: 592.94\",\"date: 2014-06-16\nclose: 592.19\",\"date: 2014-06-17\nclose: 610.86\",\"date: 2014-06-18\nclose: 607.96\",\"date: 2014-06-19\nclose: 598.07\",\"date: 2014-06-20\nclose: 594.15\",\"date: 2014-06-21\nclose: 594.99\",\"date: 2014-06-22\nclose: 602.27\",\"date: 2014-06-23\nclose: 593.98\",\"date: 2014-06-24\nclose: 582.36\",\"date: 2014-06-25\nclose: 566.34\",\"date: 2014-06-26\nclose: 581.14\",\"date: 2014-06-27\nclose: 597.26\",\"date: 2014-06-28\nclose: 596.55\",\"date: 2014-06-29\nclose: 602.72\",\"date: 2014-06-30\nclose: 639.80\",\"date: 2014-07-01\nclose: 640.81\",\"date: 2014-07-02\nclose: 650.88\",\"date: 2014-07-03\nclose: 645.16\",\"date: 2014-07-04\nclose: 630.69\",\"date: 2014-07-05\nclose: 631.46\",\"date: 2014-07-06\nclose: 635.81\",\"date: 2014-07-07\nclose: 624.09\",\"date: 2014-07-08\nclose: 624.82\",\"date: 2014-07-09\nclose: 624.51\",\"date: 2014-07-10\nclose: 616.76\",\"date: 2014-07-11\nclose: 632.00\",\"date: 2014-07-12\nclose: 633.71\",\"date: 2014-07-13\nclose: 626.50\",\"date: 2014-07-14\nclose: 619.32\",\"date: 2014-07-15\nclose: 621.59\",\"date: 2014-07-16\nclose: 616.80\",\"date: 2014-07-17\nclose: 623.09\",\"date: 2014-07-18\nclose: 628.78\",\"date: 2014-07-19\nclose: 628.52\",\"date: 2014-07-20\nclose: 623.90\",\"date: 2014-07-21\nclose: 622.21\",\"date: 2014-07-22\nclose: 621.55\",\"date: 2014-07-23\nclose: 619.41\",\"date: 2014-07-24\nclose: 601.73\",\"date: 2014-07-25\nclose: 601.09\",\"date: 2014-07-26\nclose: 595.81\",\"date: 2014-07-27\nclose: 593.85\",\"date: 2014-07-28\nclose: 585.69\",\"date: 2014-07-29\nclose: 584.72\",\"date: 2014-07-30\nclose: 567.29\",\"date: 2014-07-31\nclose: 586.23\",\"date: 2014-08-01\nclose: 594.92\",\"date: 2014-08-02\nclose: 589.33\",\"date: 2014-08-03\nclose: 586.67\",\"date: 2014-08-04\nclose: 588.78\",\"date: 2014-08-05\nclose: 585.44\",\"date: 2014-08-06\nclose: 584.65\",\"date: 2014-08-07\nclose: 588.87\",\"date: 2014-08-08\nclose: 592.58\",\"date: 2014-08-09\nclose: 589.37\",\"date: 2014-08-10\nclose: 591.06\",\"date: 2014-08-11\nclose: 576.37\",\"date: 2014-08-12\nclose: 569.64\",\"date: 2014-08-13\nclose: 546.66\",\"date: 2014-08-14\nclose: 505.97\",\"date: 2014-08-15\nclose: 497.01\",\"date: 2014-08-16\nclose: 519.71\",\"date: 2014-08-17\nclose: 491.80\",\"date: 2014-08-18\nclose: 461.46\",\"date: 2014-08-19\nclose: 485.24\",\"date: 2014-08-20\nclose: 511.98\",\"date: 2014-08-21\nclose: 517.24\",\"date: 2014-08-22\nclose: 514.04\",\"date: 2014-08-23\nclose: 498.08\",\"date: 2014-08-24\nclose: 508.29\",\"date: 2014-08-25\nclose: 502.50\",\"date: 2014-08-26\nclose: 511.57\",\"date: 2014-08-27\nclose: 511.15\",\"date: 2014-08-28\nclose: 507.82\",\"date: 2014-08-29\nclose: 508.52\",\"date: 2014-08-30\nclose: 504.25\",\"date: 2014-08-31\nclose: 477.76\",\"date: 2014-09-01\nclose: 474.88\",\"date: 2014-09-02\nclose: 477.43\",\"date: 2014-09-03\nclose: 477.59\",\"date: 2014-09-04\nclose: 489.66\",\"date: 2014-09-05\nclose: 483.34\",\"date: 2014-09-06\nclose: 484.83\",\"date: 2014-09-07\nclose: 482.28\",\"date: 2014-09-08\nclose: 474.60\",\"date: 2014-09-09\nclose: 475.26\",\"date: 2014-09-10\nclose: 479.36\",\"date: 2014-09-11\nclose: 479.75\",\"date: 2014-09-12\nclose: 477.75\",\"date: 2014-09-13\nclose: 479.00\",\"date: 2014-09-14\nclose: 477.89\",\"date: 2014-09-15\nclose: 475.37\",\"date: 2014-09-16\nclose: 466.06\",\"date: 2014-09-17\nclose: 457.33\",\"date: 2014-09-18\nclose: 424.44\",\"date: 2014-09-19\nclose: 394.80\",\"date: 2014-09-20\nclose: 408.90\",\"date: 2014-09-21\nclose: 398.82\",\"date: 2014-09-22\nclose: 402.15\",\"date: 2014-09-23\nclose: 435.79\",\"date: 2014-09-24\nclose: 423.20\",\"date: 2014-09-25\nclose: 411.57\",\"date: 2014-09-26\nclose: 404.42\",\"date: 2014-09-27\nclose: 399.52\",\"date: 2014-09-28\nclose: 377.18\",\"date: 2014-09-29\nclose: 375.47\",\"date: 2014-09-30\nclose: 386.94\",\"date: 2014-10-01\nclose: 383.61\",\"date: 2014-10-02\nclose: 375.07\",\"date: 2014-10-03\nclose: 359.51\",\"date: 2014-10-04\nclose: 328.87\",\"date: 2014-10-05\nclose: 320.51\",\"date: 2014-10-06\nclose: 330.08\",\"date: 2014-10-07\nclose: 336.19\",\"date: 2014-10-08\nclose: 352.94\",\"date: 2014-10-09\nclose: 365.03\",\"date: 2014-10-10\nclose: 361.56\",\"date: 2014-10-11\nclose: 362.30\",\"date: 2014-10-12\nclose: 378.55\",\"date: 2014-10-13\nclose: 390.41\",\"date: 2014-10-14\nclose: 400.87\",\"date: 2014-10-15\nclose: 394.77\",\"date: 2014-10-16\nclose: 382.56\",\"date: 2014-10-17\nclose: 383.76\",\"date: 2014-10-18\nclose: 391.44\",\"date: 2014-10-19\nclose: 389.55\",\"date: 2014-10-20\nclose: 382.85\",\"date: 2014-10-21\nclose: 386.48\",\"date: 2014-10-22\nclose: 383.16\",\"date: 2014-10-23\nclose: 358.42\",\"date: 2014-10-24\nclose: 358.35\",\"date: 2014-10-25\nclose: 347.27\",\"date: 2014-10-26\nclose: 354.70\",\"date: 2014-10-27\nclose: 352.99\",\"date: 2014-10-28\nclose: 357.62\",\"date: 2014-10-29\nclose: 335.59\",\"date: 2014-10-30\nclose: 345.30\",\"date: 2014-10-31\nclose: 338.32\",\"date: 2014-11-01\nclose: 325.75\",\"date: 2014-11-02\nclose: 325.89\",\"date: 2014-11-03\nclose: 327.55\",\"date: 2014-11-04\nclose: 330.49\",\"date: 2014-11-05\nclose: 339.49\",\"date: 2014-11-06\nclose: 349.29\",\"date: 2014-11-07\nclose: 342.42\",\"date: 2014-11-08\nclose: 345.49\",\"date: 2014-11-09\nclose: 363.26\",\"date: 2014-11-10\nclose: 366.92\",\"date: 2014-11-11\nclose: 367.70\",\"date: 2014-11-12\nclose: 423.56\",\"date: 2014-11-13\nclose: 420.73\",\"date: 2014-11-14\nclose: 397.82\",\"date: 2014-11-15\nclose: 376.13\",\"date: 2014-11-16\nclose: 387.88\",\"date: 2014-11-17\nclose: 387.41\",\"date: 2014-11-18\nclose: 375.20\",\"date: 2014-11-19\nclose: 380.55\",\"date: 2014-11-20\nclose: 357.84\",\"date: 2014-11-21\nclose: 350.85\",\"date: 2014-11-22\nclose: 352.92\",\"date: 2014-11-23\nclose: 367.57\",\"date: 2014-11-24\nclose: 376.90\",\"date: 2014-11-25\nclose: 375.35\",\"date: 2014-11-26\nclose: 368.37\",\"date: 2014-11-27\nclose: 369.67\",\"date: 2014-11-28\nclose: 376.45\",\"date: 2014-11-29\nclose: 375.49\",\"date: 2014-11-30\nclose: 378.05\",\"date: 2014-12-01\nclose: 379.24\",\"date: 2014-12-02\nclose: 381.32\",\"date: 2014-12-03\nclose: 375.01\",\"date: 2014-12-04\nclose: 369.60\",\"date: 2014-12-05\nclose: 376.85\",\"date: 2014-12-06\nclose: 374.79\",\"date: 2014-12-07\nclose: 375.10\",\"date: 2014-12-08\nclose: 361.91\",\"date: 2014-12-09\nclose: 352.22\",\"date: 2014-12-10\nclose: 346.36\",\"date: 2014-12-11\nclose: 350.51\",\"date: 2014-12-12\nclose: 352.54\",\"date: 2014-12-13\nclose: 347.38\",\"date: 2014-12-14\nclose: 351.63\",\"date: 2014-12-15\nclose: 345.35\",\"date: 2014-12-16\nclose: 327.06\",\"date: 2014-12-17\nclose: 319.78\",\"date: 2014-12-18\nclose: 311.40\",\"date: 2014-12-19\nclose: 317.84\",\"date: 2014-12-20\nclose: 329.96\",\"date: 2014-12-21\nclose: 320.84\",\"date: 2014-12-22\nclose: 331.89\",\"date: 2014-12-23\nclose: 334.57\",\"date: 2014-12-24\nclose: 322.53\",\"date: 2014-12-25\nclose: 319.01\",\"date: 2014-12-26\nclose: 327.92\",\"date: 2014-12-27\nclose: 315.86\",\"date: 2014-12-28\nclose: 317.24\",\"date: 2014-12-29\nclose: 312.67\",\"date: 2014-12-30\nclose: 310.74\",\"date: 2014-12-31\nclose: 320.19\",\"date: 2015-01-01\nclose: 314.25\",\"date: 2015-01-02\nclose: 315.03\",\"date: 2015-01-03\nclose: 281.08\",\"date: 2015-01-04\nclose: 264.20\",\"date: 2015-01-05\nclose: 274.47\",\"date: 2015-01-06\nclose: 286.19\",\"date: 2015-01-07\nclose: 294.34\",\"date: 2015-01-08\nclose: 283.35\",\"date: 2015-01-09\nclose: 290.41\",\"date: 2015-01-10\nclose: 274.80\",\"date: 2015-01-11\nclose: 265.66\",\"date: 2015-01-12\nclose: 267.80\",\"date: 2015-01-13\nclose: 225.86\",\"date: 2015-01-14\nclose: 178.10\",\"date: 2015-01-15\nclose: 209.84\",\"date: 2015-01-16\nclose: 208.10\",\"date: 2015-01-17\nclose: 199.26\",\"date: 2015-01-18\nclose: 210.34\",\"date: 2015-01-19\nclose: 214.86\",\"date: 2015-01-20\nclose: 211.32\",\"date: 2015-01-21\nclose: 226.90\",\"date: 2015-01-22\nclose: 233.41\",\"date: 2015-01-23\nclose: 232.88\",\"date: 2015-01-24\nclose: 247.85\",\"date: 2015-01-25\nclose: 253.72\",\"date: 2015-01-26\nclose: 273.47\",\"date: 2015-01-27\nclose: 263.48\",\"date: 2015-01-28\nclose: 233.91\",\"date: 2015-01-29\nclose: 233.51\",\"date: 2015-01-30\nclose: 226.43\",\"date: 2015-01-31\nclose: 217.46\",\"date: 2015-02-01\nclose: 226.97\",\"date: 2015-02-02\nclose: 238.23\",\"date: 2015-02-03\nclose: 227.27\",\"date: 2015-02-04\nclose: 226.85\",\"date: 2015-02-05\nclose: 217.11\",\"date: 2015-02-06\nclose: 222.27\",\"date: 2015-02-07\nclose: 227.75\",\"date: 2015-02-08\nclose: 223.41\",\"date: 2015-02-09\nclose: 220.11\",\"date: 2015-02-10\nclose: 219.84\",\"date: 2015-02-11\nclose: 219.18\",\"date: 2015-02-12\nclose: 221.76\",\"date: 2015-02-13\nclose: 235.43\",\"date: 2015-02-14\nclose: 257.32\",\"date: 2015-02-15\nclose: 234.82\",\"date: 2015-02-16\nclose: 233.84\",\"date: 2015-02-17\nclose: 243.61\",\"date: 2015-02-18\nclose: 236.33\",\"date: 2015-02-19\nclose: 240.28\",\"date: 2015-02-20\nclose: 243.78\",\"date: 2015-02-21\nclose: 244.53\",\"date: 2015-02-22\nclose: 235.98\",\"date: 2015-02-23\nclose: 238.89\",\"date: 2015-02-24\nclose: 238.74\",\"date: 2015-02-25\nclose: 237.47\",\"date: 2015-02-26\nclose: 236.43\",\"date: 2015-02-27\nclose: 253.83\",\"date: 2015-02-28\nclose: 254.26\",\"date: 2015-03-01\nclose: 260.20\",\"date: 2015-03-02\nclose: 275.67\",\"date: 2015-03-03\nclose: 281.70\",\"date: 2015-03-04\nclose: 273.09\",\"date: 2015-03-05\nclose: 276.18\",\"date: 2015-03-06\nclose: 272.72\",\"date: 2015-03-07\nclose: 276.26\",\"date: 2015-03-08\nclose: 274.35\",\"date: 2015-03-09\nclose: 289.61\",\"date: 2015-03-10\nclose: 291.76\",\"date: 2015-03-11\nclose: 296.38\",\"date: 2015-03-12\nclose: 294.35\",\"date: 2015-03-13\nclose: 285.34\",\"date: 2015-03-14\nclose: 281.89\",\"date: 2015-03-15\nclose: 286.39\",\"date: 2015-03-16\nclose: 290.59\",\"date: 2015-03-17\nclose: 285.51\",\"date: 2015-03-18\nclose: 256.30\",\"date: 2015-03-19\nclose: 260.93\",\"date: 2015-03-20\nclose: 261.75\",\"date: 2015-03-21\nclose: 260.02\",\"date: 2015-03-22\nclose: 267.96\",\"date: 2015-03-23\nclose: 266.74\",\"date: 2015-03-24\nclose: 245.60\",\"date: 2015-03-25\nclose: 246.20\",\"date: 2015-03-26\nclose: 248.53\",\"date: 2015-03-27\nclose: 247.03\",\"date: 2015-03-28\nclose: 252.80\",\"date: 2015-03-29\nclose: 242.71\",\"date: 2015-03-30\nclose: 247.53\",\"date: 2015-03-31\nclose: 244.22\",\"date: 2015-04-01\nclose: 247.27\",\"date: 2015-04-02\nclose: 253.01\",\"date: 2015-04-03\nclose: 254.32\",\"date: 2015-04-04\nclose: 253.70\",\"date: 2015-04-05\nclose: 260.60\",\"date: 2015-04-06\nclose: 255.49\",\"date: 2015-04-07\nclose: 253.18\",\"date: 2015-04-08\nclose: 245.02\",\"date: 2015-04-09\nclose: 243.68\",\"date: 2015-04-10\nclose: 236.07\",\"date: 2015-04-11\nclose: 236.55\",\"date: 2015-04-12\nclose: 236.15\",\"date: 2015-04-13\nclose: 224.59\",\"date: 2015-04-14\nclose: 219.16\",\"date: 2015-04-15\nclose: 223.83\",\"date: 2015-04-16\nclose: 228.57\",\"date: 2015-04-17\nclose: 222.88\",\"date: 2015-04-18\nclose: 223.36\",\"date: 2015-04-19\nclose: 222.60\",\"date: 2015-04-20\nclose: 224.63\",\"date: 2015-04-21\nclose: 235.27\",\"date: 2015-04-22\nclose: 234.18\",\"date: 2015-04-23\nclose: 236.46\",\"date: 2015-04-24\nclose: 231.27\",\"date: 2015-04-25\nclose: 226.39\",\"date: 2015-04-26\nclose: 219.43\",\"date: 2015-04-27\nclose: 229.29\",\"date: 2015-04-28\nclose: 225.85\",\"date: 2015-04-29\nclose: 225.81\",\"date: 2015-04-30\nclose: 236.15\",\"date: 2015-05-01\nclose: 232.08\",\"date: 2015-05-02\nclose: 234.93\",\"date: 2015-05-03\nclose: 240.36\",\"date: 2015-05-04\nclose: 239.02\",\"date: 2015-05-05\nclose: 236.12\",\"date: 2015-05-06\nclose: 229.78\",\"date: 2015-05-07\nclose: 237.33\",\"date: 2015-05-08\nclose: 243.86\",\"date: 2015-05-09\nclose: 241.83\",\"date: 2015-05-10\nclose: 240.30\",\"date: 2015-05-11\nclose: 242.16\",\"date: 2015-05-12\nclose: 241.11\",\"date: 2015-05-13\nclose: 236.38\",\"date: 2015-05-14\nclose: 236.93\",\"date: 2015-05-15\nclose: 237.60\",\"date: 2015-05-16\nclose: 236.15\",\"date: 2015-05-17\nclose: 236.80\",\"date: 2015-05-18\nclose: 233.13\",\"date: 2015-05-19\nclose: 231.95\",\"date: 2015-05-20\nclose: 234.02\",\"date: 2015-05-21\nclose: 235.34\",\"date: 2015-05-22\nclose: 240.35\",\"date: 2015-05-23\nclose: 238.87\",\"date: 2015-05-24\nclose: 240.95\",\"date: 2015-05-25\nclose: 237.11\",\"date: 2015-05-26\nclose: 237.12\",\"date: 2015-05-27\nclose: 237.28\",\"date: 2015-05-28\nclose: 237.41\",\"date: 2015-05-29\nclose: 237.10\",\"date: 2015-05-30\nclose: 233.35\",\"date: 2015-05-31\nclose: 230.19\",\"date: 2015-06-01\nclose: 222.93\",\"date: 2015-06-02\nclose: 225.80\",\"date: 2015-06-03\nclose: 225.87\",\"date: 2015-06-04\nclose: 224.32\",\"date: 2015-06-05\nclose: 224.95\",\"date: 2015-06-06\nclose: 225.62\",\"date: 2015-06-07\nclose: 222.88\",\"date: 2015-06-08\nclose: 228.49\",\"date: 2015-06-09\nclose: 229.05\",\"date: 2015-06-10\nclose: 228.80\",\"date: 2015-06-11\nclose: 229.71\",\"date: 2015-06-12\nclose: 229.98\",\"date: 2015-06-13\nclose: 232.40\",\"date: 2015-06-14\nclose: 233.54\",\"date: 2015-06-15\nclose: 236.82\",\"date: 2015-06-16\nclose: 250.90\",\"date: 2015-06-17\nclose: 249.28\",\"date: 2015-06-18\nclose: 249.01\",\"date: 2015-06-19\nclose: 244.61\",\"date: 2015-06-20\nclose: 245.21\",\"date: 2015-06-21\nclose: 243.94\",\"date: 2015-06-22\nclose: 246.99\",\"date: 2015-06-23\nclose: 244.30\",\"date: 2015-06-24\nclose: 240.51\",\"date: 2015-06-25\nclose: 242.80\",\"date: 2015-06-26\nclose: 243.59\",\"date: 2015-06-27\nclose: 250.99\",\"date: 2015-06-28\nclose: 249.01\",\"date: 2015-06-29\nclose: 257.06\",\"date: 2015-06-30\nclose: 263.07\",\"date: 2015-07-01\nclose: 258.62\",\"date: 2015-07-02\nclose: 255.41\",\"date: 2015-07-03\nclose: 256.34\",\"date: 2015-07-04\nclose: 260.89\",\"date: 2015-07-05\nclose: 271.91\",\"date: 2015-07-06\nclose: 269.03\",\"date: 2015-07-07\nclose: 266.21\",\"date: 2015-07-08\nclose: 270.79\",\"date: 2015-07-09\nclose: 269.23\",\"date: 2015-07-10\nclose: 284.89\",\"date: 2015-07-11\nclose: 293.11\",\"date: 2015-07-12\nclose: 310.87\",\"date: 2015-07-13\nclose: 292.05\",\"date: 2015-07-14\nclose: 287.46\",\"date: 2015-07-15\nclose: 285.83\",\"date: 2015-07-16\nclose: 278.09\",\"date: 2015-07-17\nclose: 279.47\",\"date: 2015-07-18\nclose: 274.90\",\"date: 2015-07-19\nclose: 273.61\",\"date: 2015-07-20\nclose: 278.98\",\"date: 2015-07-21\nclose: 275.83\",\"date: 2015-07-22\nclose: 277.22\",\"date: 2015-07-23\nclose: 276.05\",\"date: 2015-07-24\nclose: 288.28\",\"date: 2015-07-25\nclose: 288.70\",\"date: 2015-07-26\nclose: 292.69\",\"date: 2015-07-27\nclose: 293.62\",\"date: 2015-07-28\nclose: 294.43\",\"date: 2015-07-29\nclose: 289.59\",\"date: 2015-07-30\nclose: 287.72\",\"date: 2015-07-31\nclose: 284.65\",\"date: 2015-08-01\nclose: 281.60\",\"date: 2015-08-02\nclose: 282.61\",\"date: 2015-08-03\nclose: 281.23\",\"date: 2015-08-04\nclose: 285.22\",\"date: 2015-08-05\nclose: 281.88\",\"date: 2015-08-06\nclose: 278.58\",\"date: 2015-08-07\nclose: 279.58\",\"date: 2015-08-08\nclose: 261.00\",\"date: 2015-08-09\nclose: 265.08\",\"date: 2015-08-10\nclose: 264.47\",\"date: 2015-08-11\nclose: 270.39\",\"date: 2015-08-12\nclose: 266.38\",\"date: 2015-08-13\nclose: 264.08\",\"date: 2015-08-14\nclose: 265.68\",\"date: 2015-08-15\nclose: 261.55\",\"date: 2015-08-16\nclose: 258.51\",\"date: 2015-08-17\nclose: 257.98\",\"date: 2015-08-18\nclose: 211.08\",\"date: 2015-08-19\nclose: 226.68\",\"date: 2015-08-20\nclose: 235.35\",\"date: 2015-08-21\nclose: 232.57\",\"date: 2015-08-22\nclose: 230.39\",\"date: 2015-08-23\nclose: 228.17\",\"date: 2015-08-24\nclose: 210.49\",\"date: 2015-08-25\nclose: 221.61\",\"date: 2015-08-26\nclose: 225.83\",\"date: 2015-08-27\nclose: 224.77\",\"date: 2015-08-28\nclose: 231.40\",\"date: 2015-08-29\nclose: 229.78\",\"date: 2015-08-30\nclose: 228.76\",\"date: 2015-08-31\nclose: 230.06\",\"date: 2015-09-01\nclose: 228.12\",\"date: 2015-09-02\nclose: 229.28\",\"date: 2015-09-03\nclose: 227.18\",\"date: 2015-09-04\nclose: 230.30\",\"date: 2015-09-05\nclose: 235.02\",\"date: 2015-09-06\nclose: 239.84\",\"date: 2015-09-07\nclose: 239.85\",\"date: 2015-09-08\nclose: 243.61\",\"date: 2015-09-09\nclose: 238.17\",\"date: 2015-09-10\nclose: 238.48\",\"date: 2015-09-11\nclose: 240.11\",\"date: 2015-09-12\nclose: 235.23\",\"date: 2015-09-13\nclose: 230.51\",\"date: 2015-09-14\nclose: 230.64\",\"date: 2015-09-15\nclose: 230.30\",\"date: 2015-09-16\nclose: 229.09\",\"date: 2015-09-17\nclose: 229.81\",\"date: 2015-09-18\nclose: 232.98\",\"date: 2015-09-19\nclose: 231.49\",\"date: 2015-09-20\nclose: 231.21\",\"date: 2015-09-21\nclose: 227.09\",\"date: 2015-09-22\nclose: 230.62\",\"date: 2015-09-23\nclose: 230.28\",\"date: 2015-09-24\nclose: 234.53\",\"date: 2015-09-25\nclose: 235.14\",\"date: 2015-09-26\nclose: 234.34\",\"date: 2015-09-27\nclose: 232.76\",\"date: 2015-09-28\nclose: 239.14\",\"date: 2015-09-29\nclose: 236.69\",\"date: 2015-09-30\nclose: 236.06\",\"date: 2015-10-01\nclose: 237.55\",\"date: 2015-10-02\nclose: 237.29\",\"date: 2015-10-03\nclose: 238.73\",\"date: 2015-10-04\nclose: 238.26\",\"date: 2015-10-05\nclose: 240.38\",\"date: 2015-10-06\nclose: 246.06\",\"date: 2015-10-07\nclose: 242.97\",\"date: 2015-10-08\nclose: 242.30\",\"date: 2015-10-09\nclose: 243.93\",\"date: 2015-10-10\nclose: 244.94\",\"date: 2015-10-11\nclose: 247.05\",\"date: 2015-10-12\nclose: 245.31\",\"date: 2015-10-13\nclose: 249.51\",\"date: 2015-10-14\nclose: 251.99\",\"date: 2015-10-15\nclose: 254.32\",\"date: 2015-10-16\nclose: 262.87\",\"date: 2015-10-17\nclose: 270.64\",\"date: 2015-10-18\nclose: 261.64\",\"date: 2015-10-19\nclose: 263.44\",\"date: 2015-10-20\nclose: 269.46\",\"date: 2015-10-21\nclose: 266.27\",\"date: 2015-10-22\nclose: 274.02\",\"date: 2015-10-23\nclose: 276.50\",\"date: 2015-10-24\nclose: 281.65\",\"date: 2015-10-25\nclose: 283.68\",\"date: 2015-10-26\nclose: 285.30\",\"date: 2015-10-27\nclose: 293.79\",\"date: 2015-10-28\nclose: 304.62\",\"date: 2015-10-29\nclose: 313.86\",\"date: 2015-10-30\nclose: 328.02\",\"date: 2015-10-31\nclose: 314.17\",\"date: 2015-11-01\nclose: 325.43\",\"date: 2015-11-02\nclose: 361.19\",\"date: 2015-11-03\nclose: 403.42\",\"date: 2015-11-04\nclose: 411.56\",\"date: 2015-11-05\nclose: 386.35\",\"date: 2015-11-06\nclose: 374.47\",\"date: 2015-11-07\nclose: 386.48\",\"date: 2015-11-08\nclose: 373.37\",\"date: 2015-11-09\nclose: 380.26\",\"date: 2015-11-10\nclose: 336.82\",\"date: 2015-11-11\nclose: 311.08\",\"date: 2015-11-12\nclose: 338.15\",\"date: 2015-11-13\nclose: 336.75\",\"date: 2015-11-14\nclose: 332.91\",\"date: 2015-11-15\nclose: 320.17\",\"date: 2015-11-16\nclose: 330.75\",\"date: 2015-11-17\nclose: 335.09\",\"date: 2015-11-18\nclose: 334.59\",\"date: 2015-11-19\nclose: 326.15\",\"date: 2015-11-20\nclose: 322.02\",\"date: 2015-11-21\nclose: 326.93\",\"date: 2015-11-22\nclose: 324.54\",\"date: 2015-11-23\nclose: 323.05\",\"date: 2015-11-24\nclose: 320.05\",\"date: 2015-11-25\nclose: 328.21\",\"date: 2015-11-26\nclose: 352.68\",\"date: 2015-11-27\nclose: 358.04\",\"date: 2015-11-28\nclose: 357.38\",\"date: 2015-11-29\nclose: 371.29\",\"date: 2015-11-30\nclose: 377.32\",\"date: 2015-12-01\nclose: 362.49\",\"date: 2015-12-02\nclose: 359.19\",\"date: 2015-12-03\nclose: 361.05\",\"date: 2015-12-04\nclose: 363.18\",\"date: 2015-12-05\nclose: 388.95\",\"date: 2015-12-06\nclose: 388.78\",\"date: 2015-12-07\nclose: 395.54\",\"date: 2015-12-08\nclose: 415.56\",\"date: 2015-12-09\nclose: 417.56\",\"date: 2015-12-10\nclose: 415.48\",\"date: 2015-12-11\nclose: 451.94\",\"date: 2015-12-12\nclose: 435.00\",\"date: 2015-12-13\nclose: 433.76\",\"date: 2015-12-14\nclose: 444.18\",\"date: 2015-12-15\nclose: 465.32\",\"date: 2015-12-16\nclose: 454.93\",\"date: 2015-12-17\nclose: 456.08\",\"date: 2015-12-18\nclose: 463.62\",\"date: 2015-12-19\nclose: 462.32\",\"date: 2015-12-20\nclose: 442.68\",\"date: 2015-12-21\nclose: 438.64\",\"date: 2015-12-22\nclose: 436.57\",\"date: 2015-12-23\nclose: 442.40\",\"date: 2015-12-24\nclose: 454.98\",\"date: 2015-12-25\nclose: 455.65\",\"date: 2015-12-26\nclose: 417.27\",\"date: 2015-12-27\nclose: 422.82\",\"date: 2015-12-28\nclose: 422.28\",\"date: 2015-12-29\nclose: 432.98\",\"date: 2015-12-30\nclose: 426.62\",\"date: 2015-12-31\nclose: 430.57\",\"date: 2016-01-01\nclose: 434.33\",\"date: 2016-01-02\nclose: 433.44\",\"date: 2016-01-03\nclose: 430.01\",\"date: 2016-01-04\nclose: 433.09\",\"date: 2016-01-05\nclose: 431.96\",\"date: 2016-01-06\nclose: 429.11\",\"date: 2016-01-07\nclose: 458.05\",\"date: 2016-01-08\nclose: 453.23\",\"date: 2016-01-09\nclose: 447.61\",\"date: 2016-01-10\nclose: 447.99\",\"date: 2016-01-11\nclose: 448.43\",\"date: 2016-01-12\nclose: 435.69\",\"date: 2016-01-13\nclose: 432.37\",\"date: 2016-01-14\nclose: 430.31\",\"date: 2016-01-15\nclose: 364.33\",\"date: 2016-01-16\nclose: 387.54\",\"date: 2016-01-17\nclose: 382.30\",\"date: 2016-01-18\nclose: 387.17\",\"date: 2016-01-19\nclose: 380.15\",\"date: 2016-01-20\nclose: 420.23\",\"date: 2016-01-21\nclose: 410.26\",\"date: 2016-01-22\nclose: 382.49\",\"date: 2016-01-23\nclose: 387.49\",\"date: 2016-01-24\nclose: 402.97\",\"date: 2016-01-25\nclose: 391.73\",\"date: 2016-01-26\nclose: 392.15\",\"date: 2016-01-27\nclose: 394.97\",\"date: 2016-01-28\nclose: 380.29\",\"date: 2016-01-29\nclose: 379.47\",\"date: 2016-01-30\nclose: 378.26\",\"date: 2016-01-31\nclose: 368.77\",\"date: 2016-02-01\nclose: 373.06\",\"date: 2016-02-02\nclose: 374.45\",\"date: 2016-02-03\nclose: 369.95\",\"date: 2016-02-04\nclose: 389.59\",\"date: 2016-02-05\nclose: 386.55\",\"date: 2016-02-06\nclose: 376.52\",\"date: 2016-02-07\nclose: 376.62\",\"date: 2016-02-08\nclose: 373.45\",\"date: 2016-02-09\nclose: 376.03\",\"date: 2016-02-10\nclose: 381.65\",\"date: 2016-02-11\nclose: 379.65\",\"date: 2016-02-12\nclose: 384.26\",\"date: 2016-02-13\nclose: 391.86\",\"date: 2016-02-14\nclose: 407.23\",\"date: 2016-02-15\nclose: 400.18\",\"date: 2016-02-16\nclose: 407.49\",\"date: 2016-02-17\nclose: 416.32\",\"date: 2016-02-18\nclose: 422.37\",\"date: 2016-02-19\nclose: 420.79\",\"date: 2016-02-20\nclose: 437.16\",\"date: 2016-02-21\nclose: 438.80\",\"date: 2016-02-22\nclose: 437.75\",\"date: 2016-02-23\nclose: 420.74\",\"date: 2016-02-24\nclose: 424.95\",\"date: 2016-02-25\nclose: 424.54\",\"date: 2016-02-26\nclose: 432.15\",\"date: 2016-02-27\nclose: 432.52\",\"date: 2016-02-28\nclose: 433.50\",\"date: 2016-02-29\nclose: 437.70\",\"date: 2016-03-01\nclose: 435.12\",\"date: 2016-03-02\nclose: 423.99\",\"date: 2016-03-03\nclose: 421.65\",\"date: 2016-03-04\nclose: 410.94\",\"date: 2016-03-05\nclose: 400.57\",\"date: 2016-03-06\nclose: 407.71\",\"date: 2016-03-07\nclose: 414.32\",\"date: 2016-03-08\nclose: 413.97\",\"date: 2016-03-09\nclose: 414.86\",\"date: 2016-03-10\nclose: 417.13\",\"date: 2016-03-11\nclose: 421.69\",\"date: 2016-03-12\nclose: 411.62\",\"date: 2016-03-13\nclose: 414.07\",\"date: 2016-03-14\nclose: 416.44\",\"date: 2016-03-15\nclose: 416.83\",\"date: 2016-03-16\nclose: 417.01\",\"date: 2016-03-17\nclose: 420.62\",\"date: 2016-03-18\nclose: 409.55\",\"date: 2016-03-19\nclose: 410.44\",\"date: 2016-03-20\nclose: 413.76\",\"date: 2016-03-21\nclose: 413.31\",\"date: 2016-03-22\nclose: 418.09\",\"date: 2016-03-23\nclose: 418.04\",\"date: 2016-03-24\nclose: 416.39\",\"date: 2016-03-25\nclose: 417.18\",\"date: 2016-03-26\nclose: 417.95\",\"date: 2016-03-27\nclose: 426.77\",\"date: 2016-03-28\nclose: 424.23\",\"date: 2016-03-29\nclose: 416.52\",\"date: 2016-03-30\nclose: 414.82\",\"date: 2016-03-31\nclose: 416.73\",\"date: 2016-04-01\nclose: 417.96\",\"date: 2016-04-02\nclose: 420.87\",\"date: 2016-04-03\nclose: 420.90\",\"date: 2016-04-04\nclose: 421.44\",\"date: 2016-04-05\nclose: 424.03\",\"date: 2016-04-06\nclose: 423.41\",\"date: 2016-04-07\nclose: 422.74\",\"date: 2016-04-08\nclose: 420.35\",\"date: 2016-04-09\nclose: 419.41\",\"date: 2016-04-10\nclose: 421.56\",\"date: 2016-04-11\nclose: 422.48\",\"date: 2016-04-12\nclose: 425.19\",\"date: 2016-04-13\nclose: 423.73\",\"date: 2016-04-14\nclose: 424.28\",\"date: 2016-04-15\nclose: 429.71\",\"date: 2016-04-16\nclose: 430.57\",\"date: 2016-04-17\nclose: 427.40\",\"date: 2016-04-18\nclose: 428.59\",\"date: 2016-04-19\nclose: 435.51\",\"date: 2016-04-20\nclose: 441.39\",\"date: 2016-04-21\nclose: 449.42\",\"date: 2016-04-22\nclose: 445.74\",\"date: 2016-04-23\nclose: 450.28\",\"date: 2016-04-24\nclose: 458.55\",\"date: 2016-04-25\nclose: 461.43\",\"date: 2016-04-26\nclose: 466.09\",\"date: 2016-04-27\nclose: 444.69\",\"date: 2016-04-28\nclose: 449.01\",\"date: 2016-04-29\nclose: 455.10\",\"date: 2016-04-30\nclose: 448.32\",\"date: 2016-05-01\nclose: 451.88\",\"date: 2016-05-02\nclose: 444.67\",\"date: 2016-05-03\nclose: 450.30\",\"date: 2016-05-04\nclose: 446.72\",\"date: 2016-05-05\nclose: 447.98\",\"date: 2016-05-06\nclose: 459.60\",\"date: 2016-05-07\nclose: 458.54\",\"date: 2016-05-08\nclose: 458.55\",\"date: 2016-05-09\nclose: 460.48\",\"date: 2016-05-10\nclose: 450.89\",\"date: 2016-05-11\nclose: 452.73\",\"date: 2016-05-12\nclose: 454.77\",\"date: 2016-05-13\nclose: 455.67\",\"date: 2016-05-14\nclose: 455.67\",\"date: 2016-05-15\nclose: 457.57\",\"date: 2016-05-16\nclose: 454.16\",\"date: 2016-05-17\nclose: 453.78\",\"date: 2016-05-18\nclose: 454.62\",\"date: 2016-05-19\nclose: 438.71\",\"date: 2016-05-20\nclose: 442.68\",\"date: 2016-05-21\nclose: 443.19\",\"date: 2016-05-22\nclose: 439.32\",\"date: 2016-05-23\nclose: 444.15\",\"date: 2016-05-24\nclose: 445.98\",\"date: 2016-05-25\nclose: 449.60\",\"date: 2016-05-26\nclose: 453.38\",\"date: 2016-05-27\nclose: 473.46\",\"date: 2016-05-28\nclose: 530.04\",\"date: 2016-05-29\nclose: 526.23\",\"date: 2016-05-30\nclose: 533.86\",\"date: 2016-05-31\nclose: 531.39\",\"date: 2016-06-01\nclose: 536.92\",\"date: 2016-06-02\nclose: 537.97\",\"date: 2016-06-03\nclose: 569.19\",\"date: 2016-06-04\nclose: 572.73\",\"date: 2016-06-05\nclose: 574.98\",\"date: 2016-06-06\nclose: 585.54\",\"date: 2016-06-07\nclose: 576.60\",\"date: 2016-06-08\nclose: 581.65\",\"date: 2016-06-09\nclose: 574.63\",\"date: 2016-06-10\nclose: 577.47\",\"date: 2016-06-11\nclose: 606.73\",\"date: 2016-06-12\nclose: 672.78\",\"date: 2016-06-13\nclose: 704.38\",\"date: 2016-06-14\nclose: 685.56\",\"date: 2016-06-15\nclose: 694.47\",\"date: 2016-06-16\nclose: 766.31\",\"date: 2016-06-17\nclose: 748.91\",\"date: 2016-06-18\nclose: 756.23\",\"date: 2016-06-19\nclose: 763.78\",\"date: 2016-06-20\nclose: 737.23\",\"date: 2016-06-21\nclose: 666.65\",\"date: 2016-06-22\nclose: 596.12\",\"date: 2016-06-23\nclose: 623.98\",\"date: 2016-06-24\nclose: 665.30\",\"date: 2016-06-25\nclose: 665.12\",\"date: 2016-06-26\nclose: 629.37\",\"date: 2016-06-27\nclose: 655.28\",\"date: 2016-06-28\nclose: 647.00\",\"date: 2016-06-29\nclose: 639.89\",\"date: 2016-06-30\nclose: 673.34\",\"date: 2016-07-01\nclose: 676.30\",\"date: 2016-07-02\nclose: 703.70\",\"date: 2016-07-03\nclose: 658.66\",\"date: 2016-07-04\nclose: 683.66\",\"date: 2016-07-05\nclose: 670.63\",\"date: 2016-07-06\nclose: 677.33\",\"date: 2016-07-07\nclose: 640.56\",\"date: 2016-07-08\nclose: 666.52\",\"date: 2016-07-09\nclose: 650.96\",\"date: 2016-07-10\nclose: 649.36\",\"date: 2016-07-11\nclose: 647.66\",\"date: 2016-07-12\nclose: 664.55\",\"date: 2016-07-13\nclose: 654.47\",\"date: 2016-07-14\nclose: 658.08\",\"date: 2016-07-15\nclose: 663.26\",\"date: 2016-07-16\nclose: 660.77\",\"date: 2016-07-17\nclose: 679.46\",\"date: 2016-07-18\nclose: 673.11\",\"date: 2016-07-19\nclose: 672.86\",\"date: 2016-07-20\nclose: 665.68\",\"date: 2016-07-21\nclose: 665.01\",\"date: 2016-07-22\nclose: 650.62\",\"date: 2016-07-23\nclose: 655.56\",\"date: 2016-07-24\nclose: 661.28\",\"date: 2016-07-25\nclose: 654.10\",\"date: 2016-07-26\nclose: 651.78\",\"date: 2016-07-27\nclose: 654.35\",\"date: 2016-07-28\nclose: 655.03\",\"date: 2016-07-29\nclose: 656.99\",\"date: 2016-07-30\nclose: 655.05\",\"date: 2016-07-31\nclose: 624.68\",\"date: 2016-08-01\nclose: 606.27\",\"date: 2016-08-02\nclose: 547.47\",\"date: 2016-08-03\nclose: 566.35\",\"date: 2016-08-04\nclose: 578.29\",\"date: 2016-08-05\nclose: 575.04\",\"date: 2016-08-06\nclose: 587.78\",\"date: 2016-08-07\nclose: 592.69\",\"date: 2016-08-08\nclose: 591.05\",\"date: 2016-08-09\nclose: 587.80\",\"date: 2016-08-10\nclose: 592.10\",\"date: 2016-08-11\nclose: 589.12\",\"date: 2016-08-12\nclose: 587.56\",\"date: 2016-08-13\nclose: 585.59\",\"date: 2016-08-14\nclose: 570.47\",\"date: 2016-08-15\nclose: 567.24\",\"date: 2016-08-16\nclose: 577.44\",\"date: 2016-08-17\nclose: 573.22\",\"date: 2016-08-18\nclose: 574.32\",\"date: 2016-08-19\nclose: 575.63\",\"date: 2016-08-20\nclose: 581.70\",\"date: 2016-08-21\nclose: 581.31\",\"date: 2016-08-22\nclose: 586.75\",\"date: 2016-08-23\nclose: 583.41\",\"date: 2016-08-24\nclose: 580.18\",\"date: 2016-08-25\nclose: 577.76\",\"date: 2016-08-26\nclose: 579.65\",\"date: 2016-08-27\nclose: 569.95\",\"date: 2016-08-28\nclose: 573.91\",\"date: 2016-08-29\nclose: 574.11\",\"date: 2016-08-30\nclose: 577.50\",\"date: 2016-08-31\nclose: 575.47\",\"date: 2016-09-01\nclose: 572.30\",\"date: 2016-09-02\nclose: 575.54\",\"date: 2016-09-03\nclose: 598.21\",\"date: 2016-09-04\nclose: 608.63\",\"date: 2016-09-05\nclose: 606.59\",\"date: 2016-09-06\nclose: 610.44\",\"date: 2016-09-07\nclose: 614.54\",\"date: 2016-09-08\nclose: 626.32\",\"date: 2016-09-09\nclose: 622.86\",\"date: 2016-09-10\nclose: 623.51\",\"date: 2016-09-11\nclose: 606.72\",\"date: 2016-09-12\nclose: 608.24\",\"date: 2016-09-13\nclose: 609.24\",\"date: 2016-09-14\nclose: 610.68\",\"date: 2016-09-15\nclose: 607.16\",\"date: 2016-09-16\nclose: 606.97\",\"date: 2016-09-17\nclose: 605.98\",\"date: 2016-09-18\nclose: 609.87\",\"date: 2016-09-19\nclose: 609.23\",\"date: 2016-09-20\nclose: 608.31\",\"date: 2016-09-21\nclose: 597.15\",\"date: 2016-09-22\nclose: 596.30\",\"date: 2016-09-23\nclose: 602.84\",\"date: 2016-09-24\nclose: 602.63\",\"date: 2016-09-25\nclose: 600.83\",\"date: 2016-09-26\nclose: 608.04\",\"date: 2016-09-27\nclose: 606.17\",\"date: 2016-09-28\nclose: 604.73\",\"date: 2016-09-29\nclose: 605.69\",\"date: 2016-09-30\nclose: 609.73\",\"date: 2016-10-01\nclose: 613.98\",\"date: 2016-10-02\nclose: 610.89\",\"date: 2016-10-03\nclose: 612.13\",\"date: 2016-10-04\nclose: 610.20\",\"date: 2016-10-05\nclose: 612.51\",\"date: 2016-10-06\nclose: 613.02\",\"date: 2016-10-07\nclose: 617.12\",\"date: 2016-10-08\nclose: 619.11\",\"date: 2016-10-09\nclose: 616.75\",\"date: 2016-10-10\nclose: 618.99\",\"date: 2016-10-11\nclose: 641.07\",\"date: 2016-10-12\nclose: 636.19\",\"date: 2016-10-13\nclose: 636.79\",\"date: 2016-10-14\nclose: 640.38\",\"date: 2016-10-15\nclose: 638.65\",\"date: 2016-10-16\nclose: 641.63\",\"date: 2016-10-17\nclose: 639.19\",\"date: 2016-10-18\nclose: 637.96\",\"date: 2016-10-19\nclose: 630.52\",\"date: 2016-10-20\nclose: 630.86\",\"date: 2016-10-21\nclose: 632.83\",\"date: 2016-10-22\nclose: 657.29\",\"date: 2016-10-23\nclose: 657.07\",\"date: 2016-10-24\nclose: 653.76\",\"date: 2016-10-25\nclose: 657.59\",\"date: 2016-10-26\nclose: 678.30\",\"date: 2016-10-27\nclose: 688.31\",\"date: 2016-10-28\nclose: 689.65\",\"date: 2016-10-29\nclose: 714.48\",\"date: 2016-10-30\nclose: 701.86\",\"date: 2016-10-31\nclose: 700.97\",\"date: 2016-11-01\nclose: 729.79\",\"date: 2016-11-02\nclose: 740.83\",\"date: 2016-11-03\nclose: 688.70\",\"date: 2016-11-04\nclose: 703.23\",\"date: 2016-11-05\nclose: 703.42\",\"date: 2016-11-06\nclose: 711.52\",\"date: 2016-11-07\nclose: 703.13\",\"date: 2016-11-08\nclose: 709.85\",\"date: 2016-11-09\nclose: 723.27\",\"date: 2016-11-10\nclose: 715.53\",\"date: 2016-11-11\nclose: 716.41\",\"date: 2016-11-12\nclose: 705.05\",\"date: 2016-11-13\nclose: 702.03\",\"date: 2016-11-14\nclose: 705.02\",\"date: 2016-11-15\nclose: 711.62\",\"date: 2016-11-16\nclose: 744.20\",\"date: 2016-11-17\nclose: 740.98\",\"date: 2016-11-18\nclose: 751.59\",\"date: 2016-11-19\nclose: 751.62\",\"date: 2016-11-20\nclose: 731.03\",\"date: 2016-11-21\nclose: 739.25\",\"date: 2016-11-22\nclose: 751.35\",\"date: 2016-11-23\nclose: 744.59\",\"date: 2016-11-24\nclose: 740.29\",\"date: 2016-11-25\nclose: 741.65\",\"date: 2016-11-26\nclose: 735.38\",\"date: 2016-11-27\nclose: 732.03\",\"date: 2016-11-28\nclose: 735.81\",\"date: 2016-11-29\nclose: 735.60\",\"date: 2016-11-30\nclose: 745.69\",\"date: 2016-12-01\nclose: 756.77\",\"date: 2016-12-02\nclose: 777.94\",\"date: 2016-12-03\nclose: 771.16\",\"date: 2016-12-04\nclose: 773.87\",\"date: 2016-12-05\nclose: 758.70\",\"date: 2016-12-06\nclose: 764.22\",\"date: 2016-12-07\nclose: 768.13\",\"date: 2016-12-08\nclose: 770.81\",\"date: 2016-12-09\nclose: 772.79\",\"date: 2016-12-10\nclose: 774.65\",\"date: 2016-12-11\nclose: 769.73\",\"date: 2016-12-12\nclose: 780.09\",\"date: 2016-12-13\nclose: 780.56\",\"date: 2016-12-14\nclose: 781.48\",\"date: 2016-12-15\nclose: 778.09\",\"date: 2016-12-16\nclose: 784.91\",\"date: 2016-12-17\nclose: 790.83\",\"date: 2016-12-18\nclose: 790.53\",\"date: 2016-12-19\nclose: 792.71\",\"date: 2016-12-20\nclose: 800.88\",\"date: 2016-12-21\nclose: 834.28\",\"date: 2016-12-22\nclose: 864.54\",\"date: 2016-12-23\nclose: 921.98\",\"date: 2016-12-24\nclose: 898.82\",\"date: 2016-12-25\nclose: 896.18\",\"date: 2016-12-26\nclose: 907.61\",\"date: 2016-12-27\nclose: 933.20\",\"date: 2016-12-28\nclose: 975.92\",\"date: 2016-12-29\nclose: 973.50\",\"date: 2016-12-30\nclose: 961.24\",\"date: 2016-12-31\nclose: 963.74\",\"date: 2017-01-01\nclose: 998.33\",\"date: 2017-01-02\nclose: 1021.75\",\"date: 2017-01-03\nclose: 1043.84\",\"date: 2017-01-04\nclose: 1154.73\",\"date: 2017-01-05\nclose: 1013.38\",\"date: 2017-01-06\nclose: 902.20\",\"date: 2017-01-07\nclose: 908.59\",\"date: 2017-01-08\nclose: 911.20\",\"date: 2017-01-09\nclose: 902.83\",\"date: 2017-01-10\nclose: 907.68\",\"date: 2017-01-11\nclose: 777.76\",\"date: 2017-01-12\nclose: 804.83\",\"date: 2017-01-13\nclose: 823.98\",\"date: 2017-01-14\nclose: 818.41\",\"date: 2017-01-15\nclose: 821.80\",\"date: 2017-01-16\nclose: 831.53\",\"date: 2017-01-17\nclose: 907.94\",\"date: 2017-01-18\nclose: 886.62\",\"date: 2017-01-19\nclose: 899.07\",\"date: 2017-01-20\nclose: 895.03\",\"date: 2017-01-21\nclose: 921.79\",\"date: 2017-01-22\nclose: 924.67\",\"date: 2017-01-23\nclose: 921.01\",\"date: 2017-01-24\nclose: 892.69\",\"date: 2017-01-25\nclose: 901.54\",\"date: 2017-01-26\nclose: 917.59\",\"date: 2017-01-27\nclose: 919.75\",\"date: 2017-01-28\nclose: 921.59\",\"date: 2017-01-29\nclose: 919.50\",\"date: 2017-01-30\nclose: 920.38\",\"date: 2017-01-31\nclose: 970.40\",\"date: 2017-02-01\nclose: 989.02\",\"date: 2017-02-02\nclose: 1011.80\",\"date: 2017-02-03\nclose: 1029.91\",\"date: 2017-02-04\nclose: 1042.90\",\"date: 2017-02-05\nclose: 1027.34\",\"date: 2017-02-06\nclose: 1038.15\",\"date: 2017-02-07\nclose: 1061.35\",\"date: 2017-02-08\nclose: 1063.07\",\"date: 2017-02-09\nclose: 994.38\",\"date: 2017-02-10\nclose: 988.67\",\"date: 2017-02-11\nclose: 1004.45\",\"date: 2017-02-12\nclose: 999.18\",\"date: 2017-02-13\nclose: 990.64\",\"date: 2017-02-14\nclose: 1004.55\",\"date: 2017-02-15\nclose: 1007.48\",\"date: 2017-02-16\nclose: 1027.44\",\"date: 2017-02-17\nclose: 1046.21\",\"date: 2017-02-18\nclose: 1054.42\",\"date: 2017-02-19\nclose: 1047.87\",\"date: 2017-02-20\nclose: 1079.98\",\"date: 2017-02-21\nclose: 1115.30\",\"date: 2017-02-22\nclose: 1117.44\",\"date: 2017-02-23\nclose: 1166.72\",\"date: 2017-02-24\nclose: 1173.68\",\"date: 2017-02-25\nclose: 1143.84\",\"date: 2017-02-26\nclose: 1165.20\",\"date: 2017-02-27\nclose: 1179.97\",\"date: 2017-02-28\nclose: 1179.97\",\"date: 2017-03-01\nclose: 1222.50\",\"date: 2017-03-02\nclose: 1251.01\",\"date: 2017-03-03\nclose: 1274.99\",\"date: 2017-03-04\nclose: 1255.15\",\"date: 2017-03-05\nclose: 1267.12\",\"date: 2017-03-06\nclose: 1272.83\",\"date: 2017-03-07\nclose: 1223.54\",\"date: 2017-03-08\nclose: 1150.00\",\"date: 2017-03-09\nclose: 1188.49\",\"date: 2017-03-10\nclose: 1116.72\",\"date: 2017-03-11\nclose: 1175.83\",\"date: 2017-03-12\nclose: 1221.38\",\"date: 2017-03-13\nclose: 1231.92\",\"date: 2017-03-14\nclose: 1240.00\",\"date: 2017-03-15\nclose: 1249.61\",\"date: 2017-03-16\nclose: 1187.81\",\"date: 2017-03-17\nclose: 1100.23\",\"date: 2017-03-18\nclose: 973.82\",\"date: 2017-03-19\nclose: 1036.74\",\"date: 2017-03-20\nclose: 1054.23\",\"date: 2017-03-21\nclose: 1120.54\",\"date: 2017-03-22\nclose: 1049.14\",\"date: 2017-03-23\nclose: 1038.59\",\"date: 2017-03-24\nclose: 937.52\",\"date: 2017-03-25\nclose: 972.78\",\"date: 2017-03-26\nclose: 966.72\",\"date: 2017-03-27\nclose: 1045.77\",\"date: 2017-03-28\nclose: 1047.15\",\"date: 2017-03-29\nclose: 1039.97\",\"date: 2017-03-30\nclose: 1026.43\",\"date: 2017-03-31\nclose: 1071.79\",\"date: 2017-04-01\nclose: 1080.50\",\"date: 2017-04-02\nclose: 1102.17\",\"date: 2017-04-03\nclose: 1143.81\",\"date: 2017-04-04\nclose: 1133.25\",\"date: 2017-04-05\nclose: 1124.78\",\"date: 2017-04-06\nclose: 1182.68\",\"date: 2017-04-07\nclose: 1176.90\",\"date: 2017-04-08\nclose: 1175.95\",\"date: 2017-04-09\nclose: 1187.87\",\"date: 2017-04-10\nclose: 1187.13\",\"date: 2017-04-11\nclose: 1205.01\",\"date: 2017-04-12\nclose: 1200.37\",\"date: 2017-04-13\nclose: 1169.28\",\"date: 2017-04-14\nclose: 1167.54\",\"date: 2017-04-15\nclose: 1172.52\",\"date: 2017-04-16\nclose: 1182.94\",\"date: 2017-04-17\nclose: 1193.91\",\"date: 2017-04-18\nclose: 1211.67\",\"date: 2017-04-19\nclose: 1210.29\",\"date: 2017-04-20\nclose: 1229.08\",\"date: 2017-04-21\nclose: 1222.05\",\"date: 2017-04-22\nclose: 1231.71\",\"date: 2017-04-23\nclose: 1207.21\",\"date: 2017-04-24\nclose: 1250.15\",\"date: 2017-04-25\nclose: 1265.49\",\"date: 2017-04-26\nclose: 1281.08\",\"date: 2017-04-27\nclose: 1317.73\",\"date: 2017-04-28\nclose: 1316.48\",\"date: 2017-04-29\nclose: 1321.79\",\"date: 2017-04-30\nclose: 1347.89\",\"date: 2017-05-01\nclose: 1421.60\",\"date: 2017-05-02\nclose: 1452.82\",\"date: 2017-05-03\nclose: 1490.09\",\"date: 2017-05-04\nclose: 1537.67\",\"date: 2017-05-05\nclose: 1555.45\",\"date: 2017-05-06\nclose: 1578.80\",\"date: 2017-05-07\nclose: 1596.71\",\"date: 2017-05-08\nclose: 1723.35\",\"date: 2017-05-09\nclose: 1755.36\",\"date: 2017-05-10\nclose: 1787.13\",\"date: 2017-05-11\nclose: 1848.57\",\"date: 2017-05-12\nclose: 1724.24\",\"date: 2017-05-13\nclose: 1804.91\",\"date: 2017-05-14\nclose: 1808.91\",\"date: 2017-05-15\nclose: 1738.43\",\"date: 2017-05-16\nclose: 1734.45\",\"date: 2017-05-17\nclose: 1839.09\",\"date: 2017-05-18\nclose: 1888.65\",\"date: 2017-05-19\nclose: 1987.71\",\"date: 2017-05-20\nclose: 2084.73\",\"date: 2017-05-21\nclose: 2041.20\",\"date: 2017-05-22\nclose: 2173.40\",\"date: 2017-05-23\nclose: 2320.42\",\"date: 2017-05-24\nclose: 2443.64\",\"date: 2017-05-25\nclose: 2304.98\",\"date: 2017-05-26\nclose: 2202.42\",\"date: 2017-05-27\nclose: 2038.87\",\"date: 2017-05-28\nclose: 2155.80\",\"date: 2017-05-29\nclose: 2255.61\",\"date: 2017-05-30\nclose: 2175.47\",\"date: 2017-05-31\nclose: 2286.41\",\"date: 2017-06-01\nclose: 2407.88\",\"date: 2017-06-02\nclose: 2488.55\",\"date: 2017-06-03\nclose: 2515.35\",\"date: 2017-06-04\nclose: 2511.81\",\"date: 2017-06-05\nclose: 2686.81\",\"date: 2017-06-06\nclose: 2863.20\",\"date: 2017-06-07\nclose: 2732.16\",\"date: 2017-06-08\nclose: 2805.62\",\"date: 2017-06-09\nclose: 2823.81\",\"date: 2017-06-10\nclose: 2947.71\",\"date: 2017-06-11\nclose: 2958.11\",\"date: 2017-06-12\nclose: 2659.63\",\"date: 2017-06-13\nclose: 2717.02\",\"date: 2017-06-14\nclose: 2506.37\",\"date: 2017-06-15\nclose: 2464.58\",\"date: 2017-06-16\nclose: 2518.56\",\"date: 2017-06-17\nclose: 2655.88\",\"date: 2017-06-18\nclose: 2548.29\",\"date: 2017-06-19\nclose: 2589.60\",\"date: 2017-06-20\nclose: 2721.79\",\"date: 2017-06-21\nclose: 2689.10\",\"date: 2017-06-22\nclose: 2705.41\",\"date: 2017-06-23\nclose: 2744.91\",\"date: 2017-06-24\nclose: 2608.72\",\"date: 2017-06-25\nclose: 2589.41\",\"date: 2017-06-26\nclose: 2478.45\",\"date: 2017-06-27\nclose: 2552.45\",\"date: 2017-06-28\nclose: 2574.79\",\"date: 2017-06-29\nclose: 2539.32\",\"date: 2017-06-30\nclose: 2480.84\",\"date: 2017-07-01\nclose: 2434.55\",\"date: 2017-07-02\nclose: 2506.47\",\"date: 2017-07-03\nclose: 2564.06\",\"date: 2017-07-04\nclose: 2601.64\",\"date: 2017-07-05\nclose: 2601.99\",\"date: 2017-07-06\nclose: 2608.56\",\"date: 2017-07-07\nclose: 2518.66\",\"date: 2017-07-08\nclose: 2571.34\",\"date: 2017-07-09\nclose: 2518.44\",\"date: 2017-07-10\nclose: 2372.56\",\"date: 2017-07-11\nclose: 2337.79\",\"date: 2017-07-12\nclose: 2398.84\",\"date: 2017-07-13\nclose: 2357.90\",\"date: 2017-07-14\nclose: 2233.34\",\"date: 2017-07-15\nclose: 1998.86\",\"date: 2017-07-16\nclose: 1929.82\",\"date: 2017-07-17\nclose: 2228.41\",\"date: 2017-07-18\nclose: 2318.88\",\"date: 2017-07-19\nclose: 2273.43\",\"date: 2017-07-20\nclose: 2817.60\",\"date: 2017-07-21\nclose: 2667.76\",\"date: 2017-07-22\nclose: 2810.12\",\"date: 2017-07-23\nclose: 2730.40\",\"date: 2017-07-24\nclose: 2754.86\",\"date: 2017-07-25\nclose: 2576.48\",\"date: 2017-07-26\nclose: 2529.45\",\"date: 2017-07-27\nclose: 2671.78\",\"date: 2017-07-28\nclose: 2809.01\",\"date: 2017-07-29\nclose: 2726.45\",\"date: 2017-07-30\nclose: 2757.18\",\"date: 2017-07-31\nclose: 2875.34\",\"date: 2017-08-01\nclose: 2718.26\",\"date: 2017-08-02\nclose: 2710.67\",\"date: 2017-08-03\nclose: 2804.73\",\"date: 2017-08-04\nclose: 2895.89\",\"date: 2017-08-05\nclose: 3252.91\",\"date: 2017-08-06\nclose: 3213.94\",\"date: 2017-08-07\nclose: 3378.94\",\"date: 2017-08-08\nclose: 3419.94\",\"date: 2017-08-09\nclose: 3342.47\",\"date: 2017-08-10\nclose: 3381.28\",\"date: 2017-08-11\nclose: 3650.62\",\"date: 2017-08-12\nclose: 3884.71\",\"date: 2017-08-13\nclose: 4073.26\",\"date: 2017-08-14\nclose: 4325.13\",\"date: 2017-08-15\nclose: 4181.93\",\"date: 2017-08-16\nclose: 4376.63\",\"date: 2017-08-17\nclose: 4331.69\",\"date: 2017-08-18\nclose: 4160.62\",\"date: 2017-08-19\nclose: 4193.70\",\"date: 2017-08-20\nclose: 4087.66\",\"date: 2017-08-21\nclose: 4001.74\",\"date: 2017-08-22\nclose: 4100.52\",\"date: 2017-08-23\nclose: 4151.52\",\"date: 2017-08-24\nclose: 4334.68\",\"date: 2017-08-25\nclose: 4371.60\",\"date: 2017-08-26\nclose: 4352.40\",\"date: 2017-08-27\nclose: 4382.88\",\"date: 2017-08-28\nclose: 4382.66\",\"date: 2017-08-29\nclose: 4579.02\",\"date: 2017-08-30\nclose: 4565.30\",\"date: 2017-08-31\nclose: 4703.39\",\"date: 2017-09-01\nclose: 4892.01\",\"date: 2017-09-02\nclose: 4578.77\",\"date: 2017-09-03\nclose: 4582.96\",\"date: 2017-09-04\nclose: 4236.31\",\"date: 2017-09-05\nclose: 4376.53\",\"date: 2017-09-06\nclose: 4597.12\",\"date: 2017-09-07\nclose: 4599.88\",\"date: 2017-09-08\nclose: 4228.75\",\"date: 2017-09-09\nclose: 4226.06\",\"date: 2017-09-10\nclose: 4122.94\",\"date: 2017-09-11\nclose: 4161.27\",\"date: 2017-09-12\nclose: 4130.81\",\"date: 2017-09-13\nclose: 3882.59\",\"date: 2017-09-14\nclose: 3154.95\",\"date: 2017-09-15\nclose: 3637.52\",\"date: 2017-09-16\nclose: 3625.04\",\"date: 2017-09-17\nclose: 3582.88\",\"date: 2017-09-18\nclose: 4065.20\",\"date: 2017-09-19\nclose: 3924.97\",\"date: 2017-09-20\nclose: 3905.95\",\"date: 2017-09-21\nclose: 3631.04\",\"date: 2017-09-22\nclose: 3630.70\",\"date: 2017-09-23\nclose: 3792.40\",\"date: 2017-09-24\nclose: 3682.84\",\"date: 2017-09-25\nclose: 3926.07\",\"date: 2017-09-26\nclose: 3892.35\",\"date: 2017-09-27\nclose: 4200.67\",\"date: 2017-09-28\nclose: 4174.73\",\"date: 2017-09-29\nclose: 4163.07\",\"date: 2017-09-30\nclose: 4338.71\",\"date: 2017-10-01\nclose: 4403.74\",\"date: 2017-10-02\nclose: 4409.32\",\"date: 2017-10-03\nclose: 4317.48\",\"date: 2017-10-04\nclose: 4229.36\",\"date: 2017-10-05\nclose: 4328.41\",\"date: 2017-10-06\nclose: 4370.81\",\"date: 2017-10-07\nclose: 4426.89\",\"date: 2017-10-08\nclose: 4610.48\",\"date: 2017-10-09\nclose: 4772.02\",\"date: 2017-10-10\nclose: 4781.99\",\"date: 2017-10-11\nclose: 4826.48\",\"date: 2017-10-12\nclose: 5446.91\",\"date: 2017-10-13\nclose: 5647.21\",\"date: 2017-10-14\nclose: 5831.79\",\"date: 2017-10-15\nclose: 5678.19\",\"date: 2017-10-16\nclose: 5725.59\",\"date: 2017-10-17\nclose: 5605.51\",\"date: 2017-10-18\nclose: 5590.69\",\"date: 2017-10-19\nclose: 5708.52\",\"date: 2017-10-20\nclose: 6011.45\",\"date: 2017-10-21\nclose: 6031.60\",\"date: 2017-10-22\nclose: 6008.42\",\"date: 2017-10-23\nclose: 5930.32\",\"date: 2017-10-24\nclose: 5526.64\",\"date: 2017-10-25\nclose: 5750.80\",\"date: 2017-10-26\nclose: 5904.83\",\"date: 2017-10-27\nclose: 5780.90\",\"date: 2017-10-28\nclose: 5753.09\",\"date: 2017-10-29\nclose: 6153.85\",\"date: 2017-10-30\nclose: 6130.53\",\"date: 2017-10-31\nclose: 6468.40\",\"date: 2017-11-01\nclose: 6767.31\",\"date: 2017-11-02\nclose: 7078.50\",\"date: 2017-11-03\nclose: 7207.76\",\"date: 2017-11-04\nclose: 7379.95\",\"date: 2017-11-05\nclose: 7407.41\",\"date: 2017-11-06\nclose: 7022.76\",\"date: 2017-11-07\nclose: 7144.38\",\"date: 2017-11-08\nclose: 7459.69\",\"date: 2017-11-09\nclose: 7143.58\",\"date: 2017-11-10\nclose: 6618.14\",\"date: 2017-11-11\nclose: 6357.60\",\"date: 2017-11-12\nclose: 5950.07\",\"date: 2017-11-13\nclose: 6559.49\",\"date: 2017-11-14\nclose: 6635.75\",\"date: 2017-11-15\nclose: 7315.54\",\"date: 2017-11-16\nclose: 7871.69\",\"date: 2017-11-17\nclose: 7708.99\",\"date: 2017-11-18\nclose: 7790.15\",\"date: 2017-11-19\nclose: 8036.49\",\"date: 2017-11-20\nclose: 8200.64\",\"date: 2017-11-21\nclose: 8071.26\",\"date: 2017-11-22\nclose: 8253.55\",\"date: 2017-11-23\nclose: 8038.77\",\"date: 2017-11-24\nclose: 8253.69\",\"date: 2017-11-25\nclose: 8790.92\",\"date: 2017-11-26\nclose: 9330.55\",\"date: 2017-11-27\nclose: 9818.35\",\"date: 2017-11-28\nclose: 10058.80\",\"date: 2017-11-29\nclose: 9888.61\",\"date: 2017-11-30\nclose: 10233.60\",\"date: 2017-12-01\nclose: 10975.60\",\"date: 2017-12-02\nclose: 11074.60\",\"date: 2017-12-03\nclose: 11323.20\",\"date: 2017-12-04\nclose: 11657.20\",\"date: 2017-12-05\nclose: 11916.70\",\"date: 2017-12-06\nclose: 14291.50\",\"date: 2017-12-07\nclose: 17899.70\",\"date: 2017-12-08\nclose: 16569.40\",\"date: 2017-12-09\nclose: 15178.20\",\"date: 2017-12-10\nclose: 15455.40\",\"date: 2017-12-11\nclose: 16936.80\",\"date: 2017-12-12\nclose: 17415.40\",\"date: 2017-12-13\nclose: 16408.20\",\"date: 2017-12-14\nclose: 16564.00\",\"date: 2017-12-15\nclose: 17706.90\",\"date: 2017-12-16\nclose: 19497.40\",\"date: 2017-12-17\nclose: 19140.80\",\"date: 2017-12-18\nclose: 19114.20\",\"date: 2017-12-19\nclose: 17776.70\",\"date: 2017-12-20\nclose: 16624.60\",\"date: 2017-12-21\nclose: 15802.90\",\"date: 2017-12-22\nclose: 13831.80\",\"date: 2017-12-23\nclose: 14699.20\",\"date: 2017-12-24\nclose: 13925.80\",\"date: 2017-12-25\nclose: 14026.60\",\"date: 2017-12-26\nclose: 16099.80\",\"date: 2017-12-27\nclose: 15838.50\",\"date: 2017-12-28\nclose: 14606.50\",\"date: 2017-12-29\nclose: 14656.20\",\"date: 2017-12-30\nclose: 12952.20\",\"date: 2017-12-31\nclose: 14156.40\",\"date: 2018-01-01\nclose: 13657.20\",\"date: 2018-01-02\nclose: 14982.10\",\"date: 2018-01-03\nclose: 15201.00\",\"date: 2018-01-04\nclose: 15599.20\",\"date: 2018-01-05\nclose: 17429.50\",\"date: 2018-01-06\nclose: 17527.00\",\"date: 2018-01-07\nclose: 16477.60\",\"date: 2018-01-08\nclose: 15170.10\",\"date: 2018-01-09\nclose: 14595.40\",\"date: 2018-01-10\nclose: 14973.30\",\"date: 2018-01-11\nclose: 13405.80\",\"date: 2018-01-12\nclose: 13980.60\",\"date: 2018-01-13\nclose: 14360.20\",\"date: 2018-01-14\nclose: 13772.00\",\"date: 2018-01-15\nclose: 13819.80\",\"date: 2018-01-16\nclose: 11490.50\",\"date: 2018-01-17\nclose: 11188.60\",\"date: 2018-01-18\nclose: 11474.90\",\"date: 2018-01-19\nclose: 11607.40\",\"date: 2018-01-20\nclose: 12899.20\",\"date: 2018-01-21\nclose: 11600.10\",\"date: 2018-01-22\nclose: 10931.40\",\"date: 2018-01-23\nclose: 10868.40\",\"date: 2018-01-24\nclose: 11359.40\",\"date: 2018-01-25\nclose: 11259.40\",\"date: 2018-01-26\nclose: 11171.40\",\"date: 2018-01-27\nclose: 11440.70\",\"date: 2018-01-28\nclose: 11786.30\",\"date: 2018-01-29\nclose: 11296.40\",\"date: 2018-01-30\nclose: 10106.30\",\"date: 2018-01-31\nclose: 10221.10\",\"date: 2018-02-01\nclose: 9170.54\",\"date: 2018-02-02\nclose: 8830.75\",\"date: 2018-02-03\nclose: 9174.91\",\"date: 2018-02-04\nclose: 8277.01\",\"date: 2018-02-05\nclose: 6955.27\",\"date: 2018-02-06\nclose: 7754.00\",\"date: 2018-02-07\nclose: 7621.30\",\"date: 2018-02-08\nclose: 8265.59\",\"date: 2018-02-09\nclose: 8736.98\",\"date: 2018-02-10\nclose: 8621.90\",\"date: 2018-02-11\nclose: 8129.97\",\"date: 2018-02-12\nclose: 8926.57\",\"date: 2018-02-13\nclose: 8598.31\",\"date: 2018-02-14\nclose: 9494.63\",\"date: 2018-02-15\nclose: 10166.40\",\"date: 2018-02-16\nclose: 10233.90\",\"date: 2018-02-17\nclose: 11112.70\",\"date: 2018-02-18\nclose: 10551.80\",\"date: 2018-02-19\nclose: 11225.30\",\"date: 2018-02-20\nclose: 11403.70\",\"date: 2018-02-21\nclose: 10690.40\",\"date: 2018-02-22\nclose: 10005.00\",\"date: 2018-02-23\nclose: 10301.10\",\"date: 2018-02-24\nclose: 9813.07\",\"date: 2018-02-25\nclose: 9664.73\",\"date: 2018-02-26\nclose: 10366.70\",\"date: 2018-02-27\nclose: 10725.60\",\"date: 2018-02-28\nclose: 10397.90\",\"date: 2018-03-01\nclose: 10951.00\",\"date: 2018-03-02\nclose: 11086.40\",\"date: 2018-03-03\nclose: 11489.70\",\"date: 2018-03-04\nclose: 11512.60\",\"date: 2018-03-05\nclose: 11573.30\",\"date: 2018-03-06\nclose: 10779.90\",\"date: 2018-03-07\nclose: 9965.57\",\"date: 2018-03-08\nclose: 9395.01\",\"date: 2018-03-09\nclose: 9337.55\",\"date: 2018-03-10\nclose: 8866.00\",\"date: 2018-03-11\nclose: 9578.63\",\"date: 2018-03-12\nclose: 9205.12\",\"date: 2018-03-13\nclose: 9194.85\",\"date: 2018-03-14\nclose: 8269.81\",\"date: 2018-03-15\nclose: 8300.86\",\"date: 2018-03-16\nclose: 8338.35\",\"date: 2018-03-17\nclose: 7916.88\",\"date: 2018-03-18\nclose: 8223.68\",\"date: 2018-03-19\nclose: 8630.65\",\"date: 2018-03-20\nclose: 8913.47\",\"date: 2018-03-21\nclose: 8929.28\",\"date: 2018-03-22\nclose: 8728.47\",\"date: 2018-03-23\nclose: 8879.62\",\"date: 2018-03-24\nclose: 8668.12\",\"date: 2018-03-25\nclose: 8495.78\",\"date: 2018-03-26\nclose: 8209.40\",\"date: 2018-03-27\nclose: 7833.04\",\"date: 2018-03-28\nclose: 7954.48\",\"date: 2018-03-29\nclose: 7165.70\",\"date: 2018-03-30\nclose: 6890.52\",\"date: 2018-03-31\nclose: 6973.53\",\"date: 2018-04-01\nclose: 6844.23\",\"date: 2018-04-02\nclose: 7083.80\",\"date: 2018-04-03\nclose: 7456.11\",\"date: 2018-04-04\nclose: 6853.84\",\"date: 2018-04-05\nclose: 6811.47\",\"date: 2018-04-06\nclose: 6636.32\",\"date: 2018-04-07\nclose: 6911.09\",\"date: 2018-04-08\nclose: 7023.52\",\"date: 2018-04-09\nclose: 6770.73\",\"date: 2018-04-10\nclose: 6834.76\",\"date: 2018-04-11\nclose: 6968.32\",\"date: 2018-04-12\nclose: 7889.25\",\"date: 2018-04-13\nclose: 7895.96\",\"date: 2018-04-14\nclose: 7986.24\",\"date: 2018-04-15\nclose: 8329.11\",\"date: 2018-04-16\nclose: 8058.67\",\"date: 2018-04-17\nclose: 7902.09\",\"date: 2018-04-18\nclose: 8163.42\",\"date: 2018-04-19\nclose: 8294.31\",\"date: 2018-04-20\nclose: 8845.83\",\"date: 2018-04-21\nclose: 8895.58\",\"date: 2018-04-22\nclose: 8802.46\",\"date: 2018-04-23\nclose: 8930.88\",\"date: 2018-04-24\nclose: 9697.50\",\"date: 2018-04-25\nclose: 8845.74\",\"date: 2018-04-26\nclose: 9281.51\",\"date: 2018-04-27\nclose: 8987.05\",\"date: 2018-04-28\nclose: 9348.48\",\"date: 2018-04-29\nclose: 9419.08\",\"date: 2018-04-30\nclose: 9240.55\",\"date: 2018-05-01\nclose: 9119.01\",\"date: 2018-05-02\nclose: 9235.92\",\"date: 2018-05-03\nclose: 9743.86\",\"date: 2018-05-04\nclose: 9700.76\",\"date: 2018-05-05\nclose: 9858.15\",\"date: 2018-05-06\nclose: 9654.80\",\"date: 2018-05-07\nclose: 9373.01\",\"date: 2018-05-08\nclose: 9234.82\",\"date: 2018-05-09\nclose: 9325.18\",\"date: 2018-05-10\nclose: 9043.94\",\"date: 2018-05-11\nclose: 8441.49\",\"date: 2018-05-12\nclose: 8504.89\",\"date: 2018-05-13\nclose: 8723.94\",\"date: 2018-05-14\nclose: 8716.79\",\"date: 2018-05-15\nclose: 8510.38\",\"date: 2018-05-16\nclose: 8368.83\",\"date: 2018-05-17\nclose: 8094.32\",\"date: 2018-05-18\nclose: 8250.97\",\"date: 2018-05-19\nclose: 8247.18\",\"date: 2018-05-20\nclose: 8513.25\",\"date: 2018-05-21\nclose: 8418.99\",\"date: 2018-05-22\nclose: 8041.78\",\"date: 2018-05-23\nclose: 7557.82\",\"date: 2018-05-24\nclose: 7587.34\",\"date: 2018-05-25\nclose: 7480.14\",\"date: 2018-05-26\nclose: 7355.88\",\"date: 2018-05-27\nclose: 7368.22\",\"date: 2018-05-28\nclose: 7135.99\",\"date: 2018-05-29\nclose: 7472.59\",\"date: 2018-05-30\nclose: 7406.52\",\"date: 2018-05-31\nclose: 7494.17\",\"date: 2018-06-01\nclose: 7541.45\",\"date: 2018-06-02\nclose: 7643.45\",\"date: 2018-06-03\nclose: 7720.25\",\"date: 2018-06-04\nclose: 7514.47\",\"date: 2018-06-05\nclose: 7633.76\",\"date: 2018-06-06\nclose: 7653.98\",\"date: 2018-06-07\nclose: 7678.24\",\"date: 2018-06-08\nclose: 7624.92\",\"date: 2018-06-09\nclose: 7531.98\",\"date: 2018-06-10\nclose: 6786.02\",\"date: 2018-06-11\nclose: 6906.92\",\"date: 2018-06-12\nclose: 6582.36\",\"date: 2018-06-13\nclose: 6349.90\",\"date: 2018-06-14\nclose: 6675.35\",\"date: 2018-06-15\nclose: 6456.58\",\"date: 2018-06-16\nclose: 6550.16\",\"date: 2018-06-17\nclose: 6499.27\",\"date: 2018-06-18\nclose: 6734.82\",\"date: 2018-06-19\nclose: 6769.94\",\"date: 2018-06-20\nclose: 6776.55\",\"date: 2018-06-21\nclose: 6729.74\",\"date: 2018-06-22\nclose: 6083.69\",\"date: 2018-06-23\nclose: 6162.48\",\"date: 2018-06-24\nclose: 6173.23\",\"date: 2018-06-25\nclose: 6249.18\",\"date: 2018-06-26\nclose: 6093.67\",\"date: 2018-06-27\nclose: 6157.13\",\"date: 2018-06-28\nclose: 5903.44\",\"date: 2018-06-29\nclose: 6218.30\",\"date: 2018-06-30\nclose: 6404.00\",\"date: 2018-07-01\nclose: 6385.82\",\"date: 2018-07-02\nclose: 6614.18\",\"date: 2018-07-03\nclose: 6529.59\",\"date: 2018-07-04\nclose: 6597.55\",\"date: 2018-07-05\nclose: 6639.14\",\"date: 2018-07-06\nclose: 6673.50\",\"date: 2018-07-07\nclose: 6856.93\",\"date: 2018-07-08\nclose: 6773.88\",\"date: 2018-07-09\nclose: 6741.75\",\"date: 2018-07-10\nclose: 6329.95\",\"date: 2018-07-11\nclose: 6394.71\",\"date: 2018-07-12\nclose: 6228.81\",\"date: 2018-07-13\nclose: 6238.05\",\"date: 2018-07-14\nclose: 6276.12\",\"date: 2018-07-15\nclose: 6359.64\",\"date: 2018-07-16\nclose: 6741.75\",\"date: 2018-07-17\nclose: 7321.04\",\"date: 2018-07-18\nclose: 7370.78\",\"date: 2018-07-19\nclose: 7466.86\",\"date: 2018-07-20\nclose: 7354.13\",\"date: 2018-07-21\nclose: 7419.29\",\"date: 2018-07-22\nclose: 7418.49\",\"date: 2018-07-23\nclose: 7711.11\",\"date: 2018-07-24\nclose: 8424.27\",\"date: 2018-07-25\nclose: 8181.39\",\"date: 2018-07-26\nclose: 7951.58\",\"date: 2018-07-27\nclose: 8165.01\",\"date: 2018-07-28\nclose: 8192.15\",\"date: 2018-07-29\nclose: 8218.46\",\"date: 2018-07-30\nclose: 8180.48\",\"date: 2018-07-31\nclose: 7780.44\",\"date: 2018-08-01\nclose: 7624.91\",\"date: 2018-08-02\nclose: 7567.15\",\"date: 2018-08-03\nclose: 7434.39\",\"date: 2018-08-04\nclose: 7032.85\",\"date: 2018-08-05\nclose: 7068.48\",\"date: 2018-08-06\nclose: 6951.80\",\"date: 2018-08-07\nclose: 6753.12\",\"date: 2018-08-08\nclose: 6305.80\",\"date: 2018-08-09\nclose: 6568.23\",\"date: 2018-08-10\nclose: 6184.71\",\"date: 2018-08-11\nclose: 6295.73\",\"date: 2018-08-12\nclose: 6322.69\",\"date: 2018-08-13\nclose: 6297.57\",\"date: 2018-08-14\nclose: 6199.71\",\"date: 2018-08-15\nclose: 6308.52\",\"date: 2018-08-16\nclose: 6334.73\",\"date: 2018-08-17\nclose: 6580.63\",\"date: 2018-08-18\nclose: 6423.76\",\"date: 2018-08-19\nclose: 6506.07\",\"date: 2018-08-20\nclose: 6308.53\",\"date: 2018-08-21\nclose: 6488.76\",\"date: 2018-08-22\nclose: 6376.71\",\"date: 2018-08-23\nclose: 6534.88\",\"date: 2018-08-24\nclose: 6719.96\",\"date: 2018-08-25\nclose: 6763.19\",\"date: 2018-08-26\nclose: 6707.26\",\"date: 2018-08-27\nclose: 6884.64\",\"date: 2018-08-28\nclose: 7096.28\",\"date: 2018-08-29\nclose: 7047.16\",\"date: 2018-08-30\nclose: 6978.23\",\"date: 2018-08-31\nclose: 7037.58\",\"date: 2018-09-01\nclose: 7193.25\",\"date: 2018-09-02\nclose: 7272.72\",\"date: 2018-09-03\nclose: 7260.06\",\"date: 2018-09-04\nclose: 7361.66\",\"date: 2018-09-05\nclose: 6792.83\",\"date: 2018-09-06\nclose: 6529.17\",\"date: 2018-09-07\nclose: 6467.07\",\"date: 2018-09-08\nclose: 6225.98\",\"date: 2018-09-09\nclose: 6300.86\",\"date: 2018-09-10\nclose: 6329.70\",\"date: 2018-09-11\nclose: 6321.20\",\"date: 2018-09-12\nclose: 6351.80\",\"date: 2018-09-13\nclose: 6517.31\",\"date: 2018-09-14\nclose: 6512.71\",\"date: 2018-09-15\nclose: 6543.20\",\"date: 2018-09-16\nclose: 6517.18\",\"date: 2018-09-17\nclose: 6281.20\",\"date: 2018-09-18\nclose: 6371.30\",\"date: 2018-09-19\nclose: 6398.54\",\"date: 2018-09-20\nclose: 6519.67\",\"date: 2018-09-21\nclose: 6734.95\",\"date: 2018-09-22\nclose: 6721.98\",\"date: 2018-09-23\nclose: 6710.63\",\"date: 2018-09-24\nclose: 6595.41\",\"date: 2018-09-25\nclose: 6446.47\",\"date: 2018-09-26\nclose: 6495.00\",\"date: 2018-09-27\nclose: 6676.75\",\"date: 2018-09-28\nclose: 6644.13\",\"date: 2018-09-29\nclose: 6601.96\",\"date: 2018-09-30\nclose: 6625.56\",\"date: 2018-10-01\nclose: 6589.62\",\"date: 2018-10-02\nclose: 6556.10\",\"date: 2018-10-03\nclose: 6502.59\",\"date: 2018-10-04\nclose: 6576.69\",\"date: 2018-10-05\nclose: 6622.48\",\"date: 2018-10-06\nclose: 6588.31\",\"date: 2018-10-07\nclose: 6602.95\",\"date: 2018-10-08\nclose: 6652.23\",\"date: 2018-10-09\nclose: 6642.64\",\"date: 2018-10-10\nclose: 6585.53\",\"date: 2018-10-11\nclose: 6256.24\",\"date: 2018-10-12\nclose: 6274.58\",\"date: 2018-10-13\nclose: 6285.99\",\"date: 2018-10-14\nclose: 6290.93\",\"date: 2018-10-15\nclose: 6596.54\",\"date: 2018-10-16\nclose: 6596.11\",\"date: 2018-10-17\nclose: 6544.43\",\"date: 2018-10-18\nclose: 6476.71\",\"date: 2018-10-19\nclose: 6465.41\",\"date: 2018-10-20\nclose: 6489.19\",\"date: 2018-10-21\nclose: 6482.35\",\"date: 2018-10-22\nclose: 6487.16\",\"date: 2018-10-23\nclose: 6475.74\",\"date: 2018-10-24\nclose: 6495.84\",\"date: 2018-10-25\nclose: 6476.29\",\"date: 2018-10-26\nclose: 6474.75\",\"date: 2018-10-27\nclose: 6480.38\",\"date: 2018-10-28\nclose: 6486.39\",\"date: 2018-10-29\nclose: 6332.63\",\"date: 2018-10-30\nclose: 6334.27\",\"date: 2018-10-31\nclose: 6317.61\",\"date: 2018-11-01\nclose: 6377.78\",\"date: 2018-11-02\nclose: 6388.44\",\"date: 2018-11-03\nclose: 6361.26\",\"date: 2018-11-04\nclose: 6376.13\",\"date: 2018-11-05\nclose: 6419.66\",\"date: 2018-11-06\nclose: 6461.01\",\"date: 2018-11-07\nclose: 6530.14\",\"date: 2018-11-08\nclose: 6453.72\",\"date: 2018-11-09\nclose: 6385.62\",\"date: 2018-11-10\nclose: 6409.22\",\"date: 2018-11-11\nclose: 6411.27\",\"date: 2018-11-12\nclose: 6371.27\",\"date: 2018-11-13\nclose: 6359.49\",\"date: 2018-11-14\nclose: 5738.35\",\"date: 2018-11-15\nclose: 5648.03\",\"date: 2018-11-16\nclose: 5575.55\",\"date: 2018-11-17\nclose: 5554.33\",\"date: 2018-11-18\nclose: 5623.54\",\"date: 2018-11-19\nclose: 4871.49\",\"date: 2018-11-20\nclose: 4451.87\",\"date: 2018-11-21\nclose: 4602.17\",\"date: 2018-11-22\nclose: 4365.94\",\"date: 2018-11-23\nclose: 4347.11\",\"date: 2018-11-24\nclose: 3880.76\",\"date: 2018-11-25\nclose: 4009.97\",\"date: 2018-11-26\nclose: 3779.13\",\"date: 2018-11-27\nclose: 3820.72\",\"date: 2018-11-28\nclose: 4257.42\",\"date: 2018-11-29\nclose: 4278.85\",\"date: 2018-11-30\nclose: 4017.27\",\"date: 2018-12-01\nclose: 4214.67\",\"date: 2018-12-02\nclose: 4139.88\",\"date: 2018-12-03\nclose: 3894.13\",\"date: 2018-12-04\nclose: 3956.89\",\"date: 2018-12-05\nclose: 3753.99\",\"date: 2018-12-06\nclose: 3521.10\",\"date: 2018-12-07\nclose: 3419.94\",\"date: 2018-12-08\nclose: 3476.11\",\"date: 2018-12-09\nclose: 3614.23\",\"date: 2018-12-10\nclose: 3502.66\",\"date: 2018-12-11\nclose: 3424.59\",\"date: 2018-12-12\nclose: 3486.95\",\"date: 2018-12-13\nclose: 3313.68\",\"date: 2018-12-14\nclose: 3242.48\",\"date: 2018-12-15\nclose: 3236.76\",\"date: 2018-12-16\nclose: 3252.84\",\"date: 2018-12-17\nclose: 3545.86\",\"date: 2018-12-18\nclose: 3696.06\",\"date: 2018-12-19\nclose: 3745.95\",\"date: 2018-12-20\nclose: 4134.44\",\"date: 2018-12-21\nclose: 3896.54\",\"date: 2018-12-22\nclose: 4014.18\",\"date: 2018-12-23\nclose: 3998.98\",\"date: 2018-12-24\nclose: 4078.60\",\"date: 2018-12-25\nclose: 3815.49\",\"date: 2018-12-26\nclose: 3857.30\",\"date: 2018-12-27\nclose: 3654.83\",\"date: 2018-12-28\nclose: 3923.92\",\"date: 2018-12-29\nclose: 3820.41\",\"date: 2018-12-30\nclose: 3865.95\",\"date: 2018-12-31\nclose: 3742.70\",\"date: 2019-01-01\nclose: 3843.52\",\"date: 2019-01-02\nclose: 3943.41\",\"date: 2019-01-03\nclose: 3836.74\",\"date: 2019-01-04\nclose: 3857.72\",\"date: 2019-01-05\nclose: 3845.19\",\"date: 2019-01-06\nclose: 4076.63\",\"date: 2019-01-07\nclose: 4025.25\",\"date: 2019-01-08\nclose: 4030.85\",\"date: 2019-01-09\nclose: 4035.30\",\"date: 2019-01-10\nclose: 3678.92\",\"date: 2019-01-11\nclose: 3687.37\",\"date: 2019-01-12\nclose: 3661.30\",\"date: 2019-01-13\nclose: 3552.95\",\"date: 2019-01-14\nclose: 3706.05\",\"date: 2019-01-15\nclose: 3630.68\",\"date: 2019-01-16\nclose: 3655.01\",\"date: 2019-01-17\nclose: 3678.56\",\"date: 2019-01-18\nclose: 3657.84\",\"date: 2019-01-19\nclose: 3728.57\",\"date: 2019-01-20\nclose: 3601.01\",\"date: 2019-01-21\nclose: 3576.03\",\"date: 2019-01-22\nclose: 3604.58\",\"date: 2019-01-23\nclose: 3585.12\",\"date: 2019-01-24\nclose: 3600.87\",\"date: 2019-01-25\nclose: 3599.77\",\"date: 2019-01-26\nclose: 3602.46\",\"date: 2019-01-27\nclose: 3583.97\",\"date: 2019-01-28\nclose: 3470.45\",\"date: 2019-01-29\nclose: 3448.12\",\"date: 2019-01-30\nclose: 3486.18\",\"date: 2019-01-31\nclose: 3457.79\",\"date: 2019-02-01\nclose: 3487.95\",\"date: 2019-02-02\nclose: 3521.06\",\"date: 2019-02-03\nclose: 3464.01\",\"date: 2019-02-04\nclose: 3459.15\",\"date: 2019-02-05\nclose: 3466.36\",\"date: 2019-02-06\nclose: 3413.77\",\"date: 2019-02-07\nclose: 3399.47\",\"date: 2019-02-08\nclose: 3666.78\",\"date: 2019-02-09\nclose: 3671.20\",\"date: 2019-02-10\nclose: 3690.19\",\"date: 2019-02-11\nclose: 3648.43\",\"date: 2019-02-12\nclose: 3653.53\",\"date: 2019-02-13\nclose: 3632.07\",\"date: 2019-02-14\nclose: 3616.88\",\"date: 2019-02-15\nclose: 3620.81\",\"date: 2019-02-16\nclose: 3629.79\",\"date: 2019-02-17\nclose: 3673.84\",\"date: 2019-02-18\nclose: 3915.71\",\"date: 2019-02-19\nclose: 3947.09\",\"date: 2019-02-20\nclose: 3999.82\",\"date: 2019-02-21\nclose: 3954.12\",\"date: 2019-02-22\nclose: 4005.53\",\"date: 2019-02-23\nclose: 4142.53\",\"date: 2019-02-24\nclose: 3810.43\",\"date: 2019-02-25\nclose: 3882.70\",\"date: 2019-02-26\nclose: 3854.36\",\"date: 2019-02-27\nclose: 3851.05\",\"date: 2019-02-28\nclose: 3854.79\",\"date: 2019-03-01\nclose: 3859.58\",\"date: 2019-03-02\nclose: 3864.42\",\"date: 2019-03-03\nclose: 3847.18\",\"date: 2019-03-04\nclose: 3761.56\",\"date: 2019-03-05\nclose: 3896.38\",\"date: 2019-03-06\nclose: 3903.94\",\"date: 2019-03-07\nclose: 3911.48\",\"date: 2019-03-08\nclose: 3901.13\",\"date: 2019-03-09\nclose: 3963.31\",\"date: 2019-03-10\nclose: 3951.60\",\"date: 2019-03-11\nclose: 3905.23\",\"date: 2019-03-12\nclose: 3909.16\",\"date: 2019-03-13\nclose: 3906.72\",\"date: 2019-03-14\nclose: 3924.37\",\"date: 2019-03-15\nclose: 3960.91\",\"date: 2019-03-16\nclose: 4048.73\",\"date: 2019-03-17\nclose: 4025.23\",\"date: 2019-03-18\nclose: 4032.51\",\"date: 2019-03-19\nclose: 4071.19\",\"date: 2019-03-20\nclose: 4087.48\",\"date: 2019-03-21\nclose: 4029.33\",\"date: 2019-03-22\nclose: 4023.97\",\"date: 2019-03-23\nclose: 4035.83\",\"date: 2019-03-24\nclose: 4022.17\",\"date: 2019-03-25\nclose: 3963.07\",\"date: 2019-03-26\nclose: 3985.08\",\"date: 2019-03-27\nclose: 4087.07\",\"date: 2019-03-28\nclose: 4069.11\",\"date: 2019-03-29\nclose: 4098.37\",\"date: 2019-03-30\nclose: 4106.66\",\"date: 2019-03-31\nclose: 4105.40\",\"date: 2019-04-01\nclose: 4158.18\",\"date: 2019-04-02\nclose: 4879.88\",\"date: 2019-04-03\nclose: 4973.02\",\"date: 2019-04-04\nclose: 4922.80\",\"date: 2019-04-05\nclose: 5036.68\",\"date: 2019-04-06\nclose: 5059.82\",\"date: 2019-04-07\nclose: 5198.90\",\"date: 2019-04-08\nclose: 5289.77\",\"date: 2019-04-09\nclose: 5204.96\",\"date: 2019-04-10\nclose: 5324.55\",\"date: 2019-04-11\nclose: 5064.49\",\"date: 2019-04-12\nclose: 5089.54\",\"date: 2019-04-13\nclose: 5096.59\",\"date: 2019-04-14\nclose: 5167.72\",\"date: 2019-04-15\nclose: 5067.11\",\"date: 2019-04-16\nclose: 5235.56\",\"date: 2019-04-17\nclose: 5251.94\",\"date: 2019-04-18\nclose: 5298.39\",\"date: 2019-04-19\nclose: 5303.81\",\"date: 2019-04-20\nclose: 5337.89\",\"date: 2019-04-21\nclose: 5314.53\",\"date: 2019-04-22\nclose: 5399.37\",\"date: 2019-04-23\nclose: 5572.36\",\"date: 2019-04-24\nclose: 5464.87\",\"date: 2019-04-25\nclose: 5210.52\",\"date: 2019-04-26\nclose: 5279.35\",\"date: 2019-04-27\nclose: 5268.29\",\"date: 2019-04-28\nclose: 5285.14\",\"date: 2019-04-29\nclose: 5247.35\",\"date: 2019-04-30\nclose: 5350.73\",\"date: 2019-05-01\nclose: 5402.70\",\"date: 2019-05-02\nclose: 5505.28\",\"date: 2019-05-03\nclose: 5768.29\",\"date: 2019-05-04\nclose: 5831.17\",\"date: 2019-05-05\nclose: 5795.71\",\"date: 2019-05-06\nclose: 5746.81\",\"date: 2019-05-07\nclose: 5829.50\",\"date: 2019-05-08\nclose: 5982.46\",\"date: 2019-05-09\nclose: 6174.53\",\"date: 2019-05-10\nclose: 6378.85\",\"date: 2019-05-11\nclose: 7204.77\",\"date: 2019-05-12\nclose: 6972.37\",\"date: 2019-05-13\nclose: 7814.92\",\"date: 2019-05-14\nclose: 7994.42\",\"date: 2019-05-15\nclose: 8205.17\",\"date: 2019-05-16\nclose: 7884.91\",\"date: 2019-05-17\nclose: 7343.90\",\"date: 2019-05-18\nclose: 7271.21\",\"date: 2019-05-19\nclose: 8197.69\",\"date: 2019-05-20\nclose: 7978.31\",\"date: 2019-05-21\nclose: 7963.33\",\"date: 2019-05-22\nclose: 7680.07\",\"date: 2019-05-23\nclose: 7881.85\",\"date: 2019-05-24\nclose: 7987.37\",\"date: 2019-05-25\nclose: 8052.54\",\"date: 2019-05-26\nclose: 8673.22\",\"date: 2019-05-27\nclose: 8805.78\",\"date: 2019-05-28\nclose: 8719.96\",\"date: 2019-05-29\nclose: 8659.49\",\"date: 2019-05-30\nclose: 8319.47\",\"date: 2019-05-31\nclose: 8574.50\",\"date: 2019-06-01\nclose: 8564.02\",\"date: 2019-06-02\nclose: 8742.96\",\"date: 2019-06-03\nclose: 8208.99\",\"date: 2019-06-04\nclose: 7707.77\",\"date: 2019-06-05\nclose: 7824.23\",\"date: 2019-06-06\nclose: 7822.02\",\"date: 2019-06-07\nclose: 8043.95\",\"date: 2019-06-08\nclose: 7954.13\",\"date: 2019-06-09\nclose: 7688.08\",\"date: 2019-06-10\nclose: 8000.33\",\"date: 2019-06-11\nclose: 7927.71\",\"date: 2019-06-12\nclose: 8145.86\",\"date: 2019-06-13\nclose: 8230.92\",\"date: 2019-06-14\nclose: 8693.83\",\"date: 2019-06-15\nclose: 8838.38\",\"date: 2019-06-16\nclose: 8994.49\",\"date: 2019-06-17\nclose: 9320.35\",\"date: 2019-06-18\nclose: 9081.76\",\"date: 2019-06-19\nclose: 9273.52\",\"date: 2019-06-20\nclose: 9527.16\",\"date: 2019-06-21\nclose: 10144.56\",\"date: 2019-06-22\nclose: 10701.69\",\"date: 2019-06-23\nclose: 10855.37\",\"date: 2019-06-24\nclose: 11011.10\",\"date: 2019-06-25\nclose: 11790.92\",\"date: 2019-06-26\nclose: 13016.23\",\"date: 2019-06-27\nclose: 11182.81\",\"date: 2019-06-28\nclose: 12407.33\",\"date: 2019-06-29\nclose: 11959.37\",\"date: 2019-06-30\nclose: 10817.16\",\"date: 2019-07-01\nclose: 10583.13\",\"date: 2019-07-02\nclose: 10801.68\",\"date: 2019-07-03\nclose: 11961.27\",\"date: 2019-07-04\nclose: 11215.44\",\"date: 2019-07-05\nclose: 10978.46\",\"date: 2019-07-06\nclose: 11208.55\",\"date: 2019-07-07\nclose: 11450.85\",\"date: 2019-07-08\nclose: 12285.96\",\"date: 2019-07-09\nclose: 12573.81\",\"date: 2019-07-10\nclose: 12156.51\",\"date: 2019-07-11\nclose: 11358.66\",\"date: 2019-07-12\nclose: 11815.99\",\"date: 2019-07-13\nclose: 11392.38\",\"date: 2019-07-14\nclose: 10256.06\",\"date: 2019-07-15\nclose: 10895.09\",\"date: 2019-07-16\nclose: 9477.64\",\"date: 2019-07-17\nclose: 9693.80\",\"date: 2019-07-18\nclose: 10666.48\",\"date: 2019-07-19\nclose: 10530.73\",\"date: 2019-07-20\nclose: 10767.14\",\"date: 2019-07-21\nclose: 10599.11\",\"date: 2019-07-22\nclose: 10343.11\",\"date: 2019-07-23\nclose: 9900.77\",\"date: 2019-07-24\nclose: 9811.93\",\"date: 2019-07-25\nclose: 9911.84\",\"date: 2019-07-26\nclose: 9870.30\",\"date: 2019-07-27\nclose: 9477.68\",\"date: 2019-07-28\nclose: 9552.86\",\"date: 2019-07-29\nclose: 9519.15\",\"date: 2019-07-30\nclose: 9607.42\",\"date: 2019-07-31\nclose: 10085.63\",\"date: 2019-08-01\nclose: 10399.67\",\"date: 2019-08-02\nclose: 10518.17\",\"date: 2019-08-03\nclose: 10821.73\",\"date: 2019-08-04\nclose: 10970.18\",\"date: 2019-08-05\nclose: 11805.65\",\"date: 2019-08-06\nclose: 11478.17\",\"date: 2019-08-07\nclose: 11941.97\",\"date: 2019-08-08\nclose: 11966.41\",\"date: 2019-08-09\nclose: 11862.94\",\"date: 2019-08-10\nclose: 11354.02\",\"date: 2019-08-11\nclose: 11523.58\",\"date: 2019-08-12\nclose: 11382.62\",\"date: 2019-08-13\nclose: 10895.83\",\"date: 2019-08-14\nclose: 10051.70\",\"date: 2019-08-15\nclose: 10311.55\",\"date: 2019-08-16\nclose: 10374.34\",\"date: 2019-08-17\nclose: 10231.74\",\"date: 2019-08-18\nclose: 10345.81\",\"date: 2019-08-19\nclose: 10916.05\",\"date: 2019-08-20\nclose: 10763.23\",\"date: 2019-08-21\nclose: 10138.05\",\"date: 2019-08-22\nclose: 10131.06\",\"date: 2019-08-23\nclose: 10407.97\",\"date: 2019-08-24\nclose: 10159.96\",\"date: 2019-08-25\nclose: 10138.52\",\"date: 2019-08-26\nclose: 10370.82\",\"date: 2019-08-27\nclose: 10185.50\",\"date: 2019-08-28\nclose: 9754.42\",\"date: 2019-08-29\nclose: 9510.20\",\"date: 2019-08-30\nclose: 9598.17\",\"date: 2019-08-31\nclose: 9630.66\",\"date: 2019-09-01\nclose: 9757.97\",\"date: 2019-09-02\nclose: 10346.76\",\"date: 2019-09-03\nclose: 10623.54\",\"date: 2019-09-04\nclose: 10594.49\",\"date: 2019-09-05\nclose: 10575.53\",\"date: 2019-09-06\nclose: 10353.30\",\"date: 2019-09-07\nclose: 10517.25\",\"date: 2019-09-08\nclose: 10441.28\",\"date: 2019-09-09\nclose: 10334.97\",\"date: 2019-09-10\nclose: 10115.98\",\"date: 2019-09-11\nclose: 10178.37\",\"date: 2019-09-12\nclose: 10410.13\",\"date: 2019-09-13\nclose: 10360.55\",\"date: 2019-09-14\nclose: 10358.05\",\"date: 2019-09-15\nclose: 10347.71\",\"date: 2019-09-16\nclose: 10276.79\",\"date: 2019-09-17\nclose: 10241.27\",\"date: 2019-09-18\nclose: 10198.25\",\"date: 2019-09-19\nclose: 10266.41\",\"date: 2019-09-20\nclose: 10181.64\",\"date: 2019-09-21\nclose: 10019.72\",\"date: 2019-09-22\nclose: 10070.39\",\"date: 2019-09-23\nclose: 9729.32\",\"date: 2019-09-24\nclose: 8620.57\",\"date: 2019-09-25\nclose: 8486.99\",\"date: 2019-09-26\nclose: 8118.97\",\"date: 2019-09-27\nclose: 8251.85\",\"date: 2019-09-28\nclose: 8245.92\",\"date: 2019-09-29\nclose: 8104.19\",\"date: 2019-09-30\nclose: 8293.87\",\"date: 2019-10-01\nclose: 8343.28\",\"date: 2019-10-02\nclose: 8393.04\",\"date: 2019-10-03\nclose: 8259.99\",\"date: 2019-10-04\nclose: 8205.94\",\"date: 2019-10-05\nclose: 8151.50\",\"date: 2019-10-06\nclose: 7988.16\",\"date: 2019-10-07\nclose: 8245.62\",\"date: 2019-10-08\nclose: 8228.78\",\"date: 2019-10-09\nclose: 8595.74\",\"date: 2019-10-10\nclose: 8586.47\",\"date: 2019-10-11\nclose: 8321.76\",\"date: 2019-10-12\nclose: 8336.56\",\"date: 2019-10-13\nclose: 8321.01\",\"date: 2019-10-14\nclose: 8374.69\",\"date: 2019-10-15\nclose: 8205.37\",\"date: 2019-10-16\nclose: 8047.53\",\"date: 2019-10-17\nclose: 8103.91\",\"date: 2019-10-18\nclose: 7973.21\",\"date: 2019-10-19\nclose: 7988.56\",\"date: 2019-10-20\nclose: 8222.08\",\"date: 2019-10-21\nclose: 8243.72\",\"date: 2019-10-22\nclose: 8078.20\",\"date: 2019-10-23\nclose: 7514.67\",\"date: 2019-10-24\nclose: 7493.49\",\"date: 2019-10-25\nclose: 8660.70\",\"date: 2019-10-26\nclose: 9244.97\",\"date: 2019-10-27\nclose: 9551.71\",\"date: 2019-10-28\nclose: 9256.15\",\"date: 2019-10-29\nclose: 9427.69\",\"date: 2019-10-30\nclose: 9205.73\",\"date: 2019-10-31\nclose: 9199.58\",\"date: 2019-11-01\nclose: 9261.10\",\"date: 2019-11-02\nclose: 9324.72\",\"date: 2019-11-03\nclose: 9235.35\",\"date: 2019-11-04\nclose: 9412.61\",\"date: 2019-11-05\nclose: 9342.53\",\"date: 2019-11-06\nclose: 9360.88\",\"date: 2019-11-07\nclose: 9267.56\",\"date: 2019-11-08\nclose: 8804.88\",\"date: 2019-11-09\nclose: 8813.58\",\"date: 2019-11-10\nclose: 9055.53\",\"date: 2019-11-11\nclose: 8757.79\",\"date: 2019-11-12\nclose: 8815.66\",\"date: 2019-11-13\nclose: 8808.26\",\"date: 2019-11-14\nclose: 8708.10\",\"date: 2019-11-15\nclose: 8491.99\",\"date: 2019-11-16\nclose: 8550.76\",\"date: 2019-11-17\nclose: 8577.98\",\"date: 2019-11-18\nclose: 8309.29\",\"date: 2019-11-19\nclose: 8206.15\",\"date: 2019-11-20\nclose: 8027.27\",\"date: 2019-11-21\nclose: 7642.75\",\"date: 2019-11-22\nclose: 7296.58\",\"date: 2019-11-23\nclose: 7397.80\",\"date: 2019-11-24\nclose: 7047.92\",\"date: 2019-11-25\nclose: 7146.13\",\"date: 2019-11-26\nclose: 7218.37\",\"date: 2019-11-27\nclose: 7531.66\",\"date: 2019-11-28\nclose: 7463.11\",\"date: 2019-11-29\nclose: 7761.24\",\"date: 2019-11-30\nclose: 7569.63\",\"date: 2019-12-01\nclose: 7424.29\",\"date: 2019-12-02\nclose: 7321.99\",\"date: 2019-12-03\nclose: 7320.15\",\"date: 2019-12-04\nclose: 7252.03\",\"date: 2019-12-05\nclose: 7448.31\",\"date: 2019-12-06\nclose: 7547.00\",\"date: 2019-12-07\nclose: 7556.24\",\"date: 2019-12-08\nclose: 7564.35\",\"date: 2019-12-09\nclose: 7400.90\",\"date: 2019-12-10\nclose: 7278.12\",\"date: 2019-12-11\nclose: 7217.43\",\"date: 2019-12-12\nclose: 7243.13\",\"date: 2019-12-13\nclose: 7269.68\",\"date: 2019-12-14\nclose: 7124.67\",\"date: 2019-12-15\nclose: 7152.30\",\"date: 2019-12-16\nclose: 6932.48\",\"date: 2019-12-17\nclose: 6640.52\",\"date: 2019-12-18\nclose: 7276.80\",\"date: 2019-12-19\nclose: 7202.84\",\"date: 2019-12-20\nclose: 7218.82\",\"date: 2019-12-21\nclose: 7191.16\",\"date: 2019-12-22\nclose: 7511.59\",\"date: 2019-12-23\nclose: 7355.63\",\"date: 2019-12-24\nclose: 7322.53\",\"date: 2019-12-25\nclose: 7275.16\",\"date: 2019-12-26\nclose: 7238.97\",\"date: 2019-12-27\nclose: 7290.09\",\"date: 2019-12-28\nclose: 7317.99\",\"date: 2019-12-29\nclose: 7422.65\",\"date: 2019-12-30\nclose: 7293.00\",\"date: 2019-12-31\nclose: 7193.60\",\"date: 2020-01-01\nclose: 7200.17\",\"date: 2020-01-02\nclose: 6985.47\",\"date: 2020-01-03\nclose: 7344.88\",\"date: 2020-01-04\nclose: 7410.66\",\"date: 2020-01-05\nclose: 7411.32\",\"date: 2020-01-06\nclose: 7769.22\",\"date: 2020-01-07\nclose: 8163.69\",\"date: 2020-01-08\nclose: 8079.86\",\"date: 2020-01-09\nclose: 7879.07\",\"date: 2020-01-10\nclose: 8166.55\",\"date: 2020-01-11\nclose: 8037.54\",\"date: 2020-01-12\nclose: 8192.49\",\"date: 2020-01-13\nclose: 8144.19\",\"date: 2020-01-14\nclose: 8827.76\",\"date: 2020-01-15\nclose: 8807.01\",\"date: 2020-01-16\nclose: 8723.79\",\"date: 2020-01-17\nclose: 8929.04\",\"date: 2020-01-18\nclose: 8942.81\",\"date: 2020-01-19\nclose: 8706.25\",\"date: 2020-01-20\nclose: 8657.64\",\"date: 2020-01-21\nclose: 8745.89\",\"date: 2020-01-22\nclose: 8680.88\",\"date: 2020-01-23\nclose: 8406.52\",\"date: 2020-01-24\nclose: 8445.43\",\"date: 2020-01-25\nclose: 8367.85\",\"date: 2020-01-26\nclose: 8596.83\",\"date: 2020-01-27\nclose: 8909.82\",\"date: 2020-01-28\nclose: 9358.59\",\"date: 2020-01-29\nclose: 9316.63\",\"date: 2020-01-30\nclose: 9508.99\",\"date: 2020-01-31\nclose: 9350.53\",\"date: 2020-02-01\nclose: 9392.88\",\"date: 2020-02-02\nclose: 9344.37\",\"date: 2020-02-03\nclose: 9293.52\",\"date: 2020-02-04\nclose: 9180.96\",\"date: 2020-02-05\nclose: 9613.42\",\"date: 2020-02-06\nclose: 9729.80\",\"date: 2020-02-07\nclose: 9795.94\",\"date: 2020-02-08\nclose: 9865.12\",\"date: 2020-02-09\nclose: 10116.67\",\"date: 2020-02-10\nclose: 9856.61\",\"date: 2020-02-11\nclose: 10208.24\",\"date: 2020-02-12\nclose: 10326.05\",\"date: 2020-02-13\nclose: 10214.38\",\"date: 2020-02-14\nclose: 10312.12\",\"date: 2020-02-15\nclose: 9889.42\",\"date: 2020-02-16\nclose: 9934.43\",\"date: 2020-02-17\nclose: 9690.14\",\"date: 2020-02-18\nclose: 10142.00\",\"date: 2020-02-19\nclose: 9633.39\",\"date: 2020-02-20\nclose: 9608.48\",\"date: 2020-02-21\nclose: 9686.44\",\"date: 2020-02-22\nclose: 9663.18\",\"date: 2020-02-23\nclose: 9924.52\",\"date: 2020-02-24\nclose: 9650.17\",\"date: 2020-02-25\nclose: 9341.71\",\"date: 2020-02-26\nclose: 8820.52\",\"date: 2020-02-27\nclose: 8784.49\",\"date: 2020-02-28\nclose: 8672.46\",\"date: 2020-02-29\nclose: 8599.51\",\"date: 2020-03-01\nclose: 8562.45\",\"date: 2020-03-02\nclose: 8869.67\",\"date: 2020-03-03\nclose: 8787.79\",\"date: 2020-03-04\nclose: 8755.25\",\"date: 2020-03-05\nclose: 9078.76\",\"date: 2020-03-06\nclose: 9122.55\",\"date: 2020-03-07\nclose: 8909.95\",\"date: 2020-03-08\nclose: 8108.12\",\"date: 2020-03-09\nclose: 7923.64\",\"date: 2020-03-10\nclose: 7909.73\",\"date: 2020-03-11\nclose: 7911.43\",\"date: 2020-03-12\nclose: 4970.79\",\"date: 2020-03-13\nclose: 5563.71\",\"date: 2020-03-14\nclose: 5200.37\",\"date: 2020-03-15\nclose: 5392.31\",\"date: 2020-03-16\nclose: 5014.48\",\"date: 2020-03-17\nclose: 5225.63\",\"date: 2020-03-18\nclose: 5238.44\",\"date: 2020-03-19\nclose: 6191.19\",\"date: 2020-03-20\nclose: 6198.78\",\"date: 2020-03-21\nclose: 6185.07\",\"date: 2020-03-22\nclose: 5830.25\",\"date: 2020-03-23\nclose: 6416.31\",\"date: 2020-03-24\nclose: 6734.80\",\"date: 2020-03-25\nclose: 6681.06\",\"date: 2020-03-26\nclose: 6716.44\",\"date: 2020-03-27\nclose: 6469.80\",\"date: 2020-03-28\nclose: 6242.19\",\"date: 2020-03-29\nclose: 5922.04\",\"date: 2020-03-30\nclose: 6429.84\",\"date: 2020-03-31\nclose: 6438.64\",\"date: 2020-04-01\nclose: 6606.78\",\"date: 2020-04-02\nclose: 6793.62\",\"date: 2020-04-03\nclose: 6733.39\",\"date: 2020-04-04\nclose: 6867.53\",\"date: 2020-04-05\nclose: 6791.13\",\"date: 2020-04-06\nclose: 7271.78\",\"date: 2020-04-07\nclose: 7176.41\",\"date: 2020-04-08\nclose: 7334.10\",\"date: 2020-04-09\nclose: 7302.09\",\"date: 2020-04-10\nclose: 6865.49\",\"date: 2020-04-11\nclose: 6859.08\",\"date: 2020-04-12\nclose: 6971.09\",\"date: 2020-04-13\nclose: 6845.04\",\"date: 2020-04-14\nclose: 6842.43\",\"date: 2020-04-15\nclose: 6642.11\",\"date: 2020-04-16\nclose: 7116.80\",\"date: 2020-04-17\nclose: 7096.18\",\"date: 2020-04-18\nclose: 7257.66\",\"date: 2020-04-19\nclose: 7189.42\",\"date: 2020-04-20\nclose: 6881.96\",\"date: 2020-04-21\nclose: 6880.32\",\"date: 2020-04-22\nclose: 7117.21\",\"date: 2020-04-23\nclose: 7429.72\",\"date: 2020-04-24\nclose: 7550.90\",\"date: 2020-04-25\nclose: 7569.94\",\"date: 2020-04-26\nclose: 7679.87\",\"date: 2020-04-27\nclose: 7795.60\",\"date: 2020-04-28\nclose: 7807.06\",\"date: 2020-04-29\nclose: 8801.04\",\"date: 2020-04-30\nclose: 8658.55\",\"date: 2020-05-01\nclose: 8864.77\",\"date: 2020-05-02\nclose: 8988.60\",\"date: 2020-05-03\nclose: 8897.47\",\"date: 2020-05-04\nclose: 8912.65\",\"date: 2020-05-05\nclose: 9003.07\",\"date: 2020-05-06\nclose: 9268.76\",\"date: 2020-05-07\nclose: 9951.52\",\"date: 2020-05-08\nclose: 9842.67\",\"date: 2020-05-09\nclose: 9593.90\",\"date: 2020-05-10\nclose: 8756.43\",\"date: 2020-05-11\nclose: 8601.80\",\"date: 2020-05-12\nclose: 8804.48\",\"date: 2020-05-13\nclose: 9269.99\",\"date: 2020-05-14\nclose: 9733.72\",\"date: 2020-05-15\nclose: 9328.20\",\"date: 2020-05-16\nclose: 9377.01\",\"date: 2020-05-17\nclose: 9670.74\",\"date: 2020-05-18\nclose: 9726.57\",\"date: 2020-05-19\nclose: 9729.04\",\"date: 2020-05-20\nclose: 9522.98\",\"date: 2020-05-21\nclose: 9081.76\",\"date: 2020-05-22\nclose: 9182.58\",\"date: 2020-05-23\nclose: 9209.29\",\"date: 2020-05-24\nclose: 8790.37\",\"date: 2020-05-25\nclose: 8906.93\",\"date: 2020-05-26\nclose: 8835.05\",\"date: 2020-05-27\nclose: 9181.02\",\"date: 2020-05-28\nclose: 9525.75\",\"date: 2020-05-29\nclose: 9439.12\",\"date: 2020-05-30\nclose: 9700.41\",\"date: 2020-05-31\nclose: 9461.06\",\"date: 2020-06-01\nclose: 10167.27\",\"date: 2020-06-02\nclose: 9529.80\",\"date: 2020-06-03\nclose: 9656.72\",\"date: 2020-06-04\nclose: 9800.64\",\"date: 2020-06-05\nclose: 9665.53\",\"date: 2020-06-06\nclose: 9653.68\",\"date: 2020-06-07\nclose: 9758.85\",\"date: 2020-06-08\nclose: 9771.49\",\"date: 2020-06-09\nclose: 9795.70\",\"date: 2020-06-10\nclose: 9870.09\",\"date: 2020-06-11\nclose: 9321.78\",\"date: 2020-06-12\nclose: 9480.84\",\"date: 2020-06-13\nclose: 9475.28\",\"date: 2020-06-14\nclose: 9386.79\",\"date: 2020-06-15\nclose: 9450.70\",\"date: 2020-06-16\nclose: 9538.02\",\"date: 2020-06-17\nclose: 9480.26\",\"date: 2020-06-18\nclose: 9411.84\",\"date: 2020-06-19\nclose: 9288.02\",\"date: 2020-06-20\nclose: 9332.34\",\"date: 2020-06-21\nclose: 9303.63\",\"date: 2020-06-22\nclose: 9648.72\",\"date: 2020-06-23\nclose: 9629.66\",\"date: 2020-06-24\nclose: 9313.61\",\"date: 2020-06-25\nclose: 9264.81\",\"date: 2020-06-26\nclose: 9162.92\",\"date: 2020-06-27\nclose: 9045.39\",\"date: 2020-06-28\nclose: 9143.58\",\"date: 2020-06-29\nclose: 9190.85\",\"date: 2020-06-30\nclose: 9137.99\",\"date: 2020-07-01\nclose: 9228.33\",\"date: 2020-07-02\nclose: 9123.41\",\"date: 2020-07-03\nclose: 9087.30\",\"date: 2020-07-04\nclose: 9132.49\",\"date: 2020-07-05\nclose: 9073.94\",\"date: 2020-07-06\nclose: 9375.47\",\"date: 2020-07-07\nclose: 9252.28\",\"date: 2020-07-08\nclose: 9428.33\",\"date: 2020-07-09\nclose: 9277.97\",\"date: 2020-07-10\nclose: 9278.81\",\"date: 2020-07-11\nclose: 9240.35\",\"date: 2020-07-12\nclose: 9276.50\",\"date: 2020-07-13\nclose: 9243.61\",\"date: 2020-07-14\nclose: 9243.21\",\"date: 2020-07-15\nclose: 9192.84\",\"date: 2020-07-16\nclose: 9132.23\",\"date: 2020-07-17\nclose: 9151.39\",\"date: 2020-07-18\nclose: 9159.04\",\"date: 2020-07-19\nclose: 9185.82\",\"date: 2020-07-20\nclose: 9164.23\",\"date: 2020-07-21\nclose: 9374.89\",\"date: 2020-07-22\nclose: 9525.36\",\"date: 2020-07-23\nclose: 9581.07\",\"date: 2020-07-24\nclose: 9536.89\",\"date: 2020-07-25\nclose: 9677.11\",\"date: 2020-07-26\nclose: 9905.17\",\"date: 2020-07-27\nclose: 10990.87\",\"date: 2020-07-28\nclose: 10912.82\",\"date: 2020-07-29\nclose: 11100.47\",\"date: 2020-07-30\nclose: 11111.21\",\"date: 2020-07-31\nclose: 11323.47\",\"date: 2020-08-01\nclose: 11759.59\",\"date: 2020-08-02\nclose: 11053.61\",\"date: 2020-08-03\nclose: 11246.35\",\"date: 2020-08-04\nclose: 11205.89\",\"date: 2020-08-05\nclose: 11747.02\",\"date: 2020-08-06\nclose: 11779.77\",\"date: 2020-08-07\nclose: 11601.47\",\"date: 2020-08-08\nclose: 11754.05\",\"date: 2020-08-09\nclose: 11675.74\",\"date: 2020-08-10\nclose: 11878.11\",\"date: 2020-08-11\nclose: 11410.53\",\"date: 2020-08-12\nclose: 11584.93\",\"date: 2020-08-13\nclose: 11784.14\",\"date: 2020-08-14\nclose: 11768.87\",\"date: 2020-08-15\nclose: 11865.70\",\"date: 2020-08-16\nclose: 11892.80\",\"date: 2020-08-17\nclose: 12254.40\",\"date: 2020-08-18\nclose: 11991.23\",\"date: 2020-08-19\nclose: 11758.28\",\"date: 2020-08-20\nclose: 11878.37\",\"date: 2020-08-21\nclose: 11592.49\",\"date: 2020-08-22\nclose: 11681.83\",\"date: 2020-08-23\nclose: 11664.85\",\"date: 2020-08-24\nclose: 11774.60\"],\"type\":\"scatter\",\"mode\":\"lines\",\"line\":{\"width\":1.88976377952756,\"color\":\"rgba(0,0,255,1)\",\"dash\":\"solid\"},\"hoveron\":\"points\",\"showlegend\":false,\"xaxis\":\"x\",\"yaxis\":\"y\",\"hoverinfo\":\"text\",\"frame\":null}],\"layout\":{\"margin\":{\"t\":43.7625570776256,\"r\":7.30593607305936,\"b\":40.1826484018265,\"l\":54.7945205479452},\"plot_bgcolor\":\"rgba(255,255,255,1)\",\"paper_bgcolor\":\"rgba(255,255,255,1)\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187},\"title\":{\"text\":\"Historical data for Bitcoin\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":17.5342465753425},\"x\":0,\"xref\":\"paper\"},\"xaxis\":{\"domain\":[0,1],\"automargin\":true,\"type\":\"linear\",\"autorange\":false,\"range\":[15689.25,18631.75],\"tickmode\":\"array\",\"ticktext\":[\"2014\",\"2016\",\"2018\",\"2020\"],\"tickvals\":[16071,16801,17532,18262],\"categoryorder\":\"array\",\"categoryarray\":[\"2014\",\"2016\",\"2018\",\"2020\"],\"nticks\":null,\"ticks\":\"outside\",\"tickcolor\":\"rgba(51,51,51,1)\",\"ticklen\":3.65296803652968,\"tickwidth\":0.66417600664176,\"showticklabels\":true,\"tickfont\":{\"color\":\"rgba(77,77,77,1)\",\"family\":\"\",\"size\":11.689497716895},\"tickangle\":-0,\"showline\":false,\"linecolor\":null,\"linewidth\":0,\"showgrid\":true,\"gridcolor\":\"rgba(235,235,235,1)\",\"gridwidth\":0.66417600664176,\"zeroline\":false,\"anchor\":\"y\",\"title\":{\"text\":\"Date\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187}},\"hoverformat\":\".2f\"},\"yaxis\":{\"domain\":[0,1],\"automargin\":true,\"type\":\"linear\",\"autorange\":false,\"range\":[-903.0185,20468.8485],\"tickmode\":\"array\",\"ticktext\":[\"0\",\"5000\",\"10000\",\"15000\",\"20000\"],\"tickvals\":[-1.13686837721616e-13,5000,10000,15000,20000],\"categoryorder\":\"array\",\"categoryarray\":[\"0\",\"5000\",\"10000\",\"15000\",\"20000\"],\"nticks\":null,\"ticks\":\"outside\",\"tickcolor\":\"rgba(51,51,51,1)\",\"ticklen\":3.65296803652968,\"tickwidth\":0.66417600664176,\"showticklabels\":true,\"tickfont\":{\"color\":\"rgba(77,77,77,1)\",\"family\":\"\",\"size\":11.689497716895},\"tickangle\":-0,\"showline\":false,\"linecolor\":null,\"linewidth\":0,\"showgrid\":true,\"gridcolor\":\"rgba(235,235,235,1)\",\"gridwidth\":0.66417600664176,\"zeroline\":false,\"anchor\":\"x\",\"title\":{\"text\":\"Close\",\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":14.6118721461187}},\"hoverformat\":\".2f\"},\"shapes\":[{\"type\":\"rect\",\"fillcolor\":\"transparent\",\"line\":{\"color\":\"rgba(51,51,51,1)\",\"width\":0.66417600664176,\"linetype\":\"solid\"},\"yref\":\"paper\",\"xref\":\"paper\",\"x0\":0,\"x1\":1,\"y0\":0,\"y1\":1}],\"showlegend\":false,\"legend\":{\"bgcolor\":\"rgba(255,255,255,1)\",\"bordercolor\":\"transparent\",\"borderwidth\":1.88976377952756,\"font\":{\"color\":\"rgba(0,0,0,1)\",\"family\":\"\",\"size\":11.689497716895}},\"hovermode\":\"closest\",\"barmode\":\"relative\"},\"config\":{\"doubleClick\":\"reset\",\"showSendToCloud\":false},\"source\":\"A\",\"attrs\":{\"36803b4a937\":{\"x\":{},\"y\":{},\"type\":\"scatter\"}},\"cur_data\":\"36803b4a937\",\"visdat\":{\"36803b4a937\":[\"function (y) \",\"x\"]},\"highlight\":{\"on\":\"plotly_click\",\"persistent\":false,\"dynamic\":false,\"selectize\":false,\"opacityDim\":0.2,\"selected\":{\"opacity\":1},\"debounce\":0},\"shinyEvents\":[\"plotly_hover\",\"plotly_click\",\"plotly_selected\",\"plotly_relayout\",\"plotly_brushed\",\"plotly_brushing\",\"plotly_clickannotation\",\"plotly_doubleclick\",\"plotly_deselect\",\"plotly_afterplot\",\"plotly_sunburstclick\"],\"base_url\":\"https://plot.ly\"},\"evals\":[],\"jsHooks\":[]}\r","date":1598054400,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1598100657,"objectID":"00b916f9b49bddeda2a51d48e335b7d8","permalink":"/post/ggplot-plotly/","publishdate":"2020-08-22T00:00:00Z","relpermalink":"/post/ggplot-plotly/","section":"post","summary":"Nạp các thư viện cần thiết vào phiên làm việc của R\nlibrary(rvest)\rlibrary(ggplot2)\rlibrary(plotly)\rlibrary(dygraphs)\rlibrary(tidyverse)\rGet dữ liệu bitcoin từ trang CoinMarketcap để thực hiện data visualization:","tags":["Data Visualization","ggplot2"],"title":"Data visualization với ggplot2. Chuyển đổi từ ggplot2 objects sang biểu đồ tương tác plotly","type":"post"},{"authors":[],"categories":["R","Python","Statistics"],"content":" Nguồn ảnh Outliers (dữ liệu ngoại lai hay là nhiễu) là một trong những thuật ngữ được sử dụng rất rộng rãi trong thế giới data science. Trong quá trình xây dựng các mô hình dự đoán, việc xác định và loại bỏ outliers trong dữ liệu là một bước vô cùng quan trọng. Nó giúp tăng cao độ chính xác cho các mô hình dự đoán.\nKhi phân tích, chúng ta thường dùng các tham số như là mean, median và mode để biết xu hướng tập trung của dữ liệu. Tuy nhiên, một câu hỏi quan trọng cần phải trả lời khi xem xét chất lượng của một mẫu dữ liệu trong phân tích đó là \u0026ldquo;làm sao để đo được độ biến động (hay độ phân tán) của mẫu dữ liệu đó\u0026rdquo;?. Vì chúng ta có thể có 2 mẫu dữ liệu với cùng giá trị mean nhưng độ biến động của chúng lại hoàn toàn khác nhau. Trong thống kê những đại lượng phổ biến nhất để đo lường tiêu chí này là khoảng phần tư (interquartile range, IQR) (hay còn được gọi là khoảng cách giữa các tứ phân vị), phương sai (variance) và độ lệch chuẩn (standard deviation, STD).\nỞ post này tôi sẽ giới thiệu với các bạn cách sử dụng 2 phương pháp thống kê trong R và Python để xác định và loại bỏ outliers trong dữ liệu đó là:\n STD có thể sử dụng để xác định outliers trong dữ liệu có dạng/gần như dạng phân phối chuẩn (hay còn gọi là phân phối Gauss) IQR có thể sử dụng để xác định và loại bỏ outliers không phụ thuộc vào dạng phân phối của dữ liệu. Và ở cuối post tôi sẽ hướng dẫn các bạn viết hàm tự động xác định và loại bỏ outliers từ dữ liệu sử dụng hai phương pháp trên.\n 1. Tạo dữ liệu để thực hành\nĐể thực hành tôi sử dụng hàm mô phỏng phân phối chuẩn rnorm() trong R để tạo ra dãy số ngẫu nhiên gồm 5000 số với các tham số giá trị trung bình là 20 và độ lệnh chuẩn là 2 như sau:\n# R\rdata = rnorm(5000, mean = 20, sd = 2)\r Với Python thì ta thực hiện như sau:\nTrước hết cần nạp thư viện reticulate để sử dụng Python trong R:\n# R\rlibrary(reticulate)\r Cụ thể về cách sử dụng thư viện reticulate để kết hợp R và Python tôi đã giới thiệu ở post trước, các bạn có thể đọc ở đây\nTạo dữ liệu trong python:\n# Python\r# Tạo dữ liệu tương tự như trong R\rfrom numpy.random import randn\rdata = 2* randn(5000) + 20\r Trong dữ liệu được tạo ra từ phân phối chuẩn sẽ có một số giá trị nằm cách xa giá trị trung bình mean mà chúng ta có thể xác định là outliers.\nBiểu diễn dữ liệu bằng histogam sử dụng hàm hist():\n# R\rhist(data, breaks= 60, main=\u0026quot;Histogram With breaks=60\u0026quot;)\r Nhân tiện đây tôi cũng xin giới thiệu một số hàm hỗ trợ cho các tính toán thống kê trong R như: summary(), sample(), dnorm(), pnorm(), qnorm(), dunif(), punif(), qunif(), runif(), mean(), sd(), cov(), cor(),\u0026hellip;\nHàm summay() cho phép thực hiện thống kê mô tả (descriptive statistics) để cung cấp cho chúng ta một số thông tin thống kê cơ bản về một biến số:\n# R\rsummary(data)\r ## Min. 1st Qu. Median Mean 3rd Qu. Max. ## 12.32 18.66 19.99 19.99 21.30 26.54\r Ví dụ sử dụng hàm sample() để tạo mẫu ngẫu nhiên có lặp lại 10 số nguyên từ 0 đến 9:\n# R\rsample(0:9, replace = TRUE)\r ## [1] 6 6 0 9 7 1 6 6 8 4\r Ví dụ sử dụng hàm tính mật độ phân phối chuẩn dnorm() để ước tính xác xuất của học sinh có điểm là 16.5 biết rằng điểm của học sinh tuân theo phân phối chuẩn với giá trị trung bình là 15, độ lệnh chuẩn là 2.5:\n# R\rdnorm(16.5, mean = 15, sd = 2.5)\r ## [1] 0.1332898\r Tiếp theo ví dụ trên để ước tính xác suất học sinh có điểm tối thiểu là 16.5, ta có thể sử dụng hàm tính xác suất chuẩn tích lũy pnorm() như sau:\n# R\r1 - pnorm(16.5, mean = 15, sd = 2.5)\r ## [1] 0.2742531\r Chức năng của các hàm R còn lại cũng như các hàm tương tự trong Python các bạn có thể tự tìm hiểu thêm.\n2. Phương pháp STD\nNếu như biết được rằng dữ liệu có dạng phân phối Gauss thì chúng ta có thể sử dụng STD trong vài trò là thước đo giới hạn độ phân tán của dữ liệu để xác định outliers.\nTrong phân phối Gauss dựa vào giá trị trung bình mean và STD cho phép chúng ta kiểm tra được độ phân tán (hay là phần trăm bao phủ) của dữ liệu đó như thế nào. Ví dụ:\n Độ bao phủ với 1 STD từ mean là 68% Độ bao phủ với 2 STD từ mean là 95% Độ bao phủ với 3 STD từ mean là 99.7% Nguồn ảnh\nVậy nên với dữ liệu dạng Gauss có độ phân tán bình thường thì với 3STD, chúng ta sẽ bao phủ được khoảng \u0026gt; 99% của dữ liệu. Từ đó những điểm dữ liệu nằm ngoài 3STD sẽ được coi là outliers.\nCác bước xác định outliers bằng phương pháp STD như sau:\nBước 1: Tính mean và std\n# tính mean và std\r# R\rmean_data \u0026lt;- mean(data)\rstd_data \u0026lt;- sd(data)\r # Python\rfrom numpy import mean\rfrom numpy import std\rmean_data, std_data = mean(data), std(data)\r Bước 2: Tính giá trị biên Upper/Lower để xác định outliers\n# thiết lập giới hạn để xác định outliers\r# R\rlimit_std = 3*std_data\rlower_std = mean_data - limit_std\rupper_std = mean_data + limit_std\r # Python\rlimit_std = 3*std_data\rlower_std, upper_std = mean_data - limit_std, mean_data + limit_std\r Bước 3: Xác định và loại bỏ outliers dựa trên giá trị biên\n# xác định outliers\r# R\rouliers_index_std \u0026lt;- which(data \u0026gt; upper_std | data \u0026lt; lower_std)\rprint(paste(\u0026quot;Number of outliers:\u0026quot;, length(ouliers_index_std)))\r ## [1] \u0026quot;Number of outliers: 11\u0026quot;\r # Python\rouliers_index_std = [x for x in data if x \u0026lt; lower_std or x \u0026gt; upper_std]\rprint('Number of outliers: %d' % len(ouliers_index_std))\r ## Number of outliers: 13\r # Loại bỏ outliers\r# R\rdata_new_std \u0026lt;- data[-ouliers_index_std]\rprint(paste(\u0026quot;Number of Non-outliers:\u0026quot;, length(data_new_std)))\r ## [1] \u0026quot;Number of Non-outliers: 4989\u0026quot;\r # Python\rdata_new_std = [x for x in data if x \u0026gt;= lower_std and x \u0026lt;= upper_std]\rprint('Number of Non-outliers:: %d' % len(data_new_std))\r ## Number of Non-outliers:: 4987\r 2. Phương pháp IQR\nTứ phân vị là đại lượng mô tả sự phân bố và sự phân tán của tập dữ liệu. Tứ phân vị có 3 giá trị, đó là tứ phân vị thứ nhất Q1 (25th), thứ hai Q2 (50th) hay median, và thứ ba Q3 (75th). Ba giá trị này chia một tập hợp dữ liệu (đã sắp xếp dữ liệu theo trật từ từ bé đến lớn) thành 4 phần có số lượng quan sát đều nhau. Tứ phân vị được xác định như sau:\n Sắp xếp các số theo thứ tự tăng dần Cắt dãy số thành 4 phàn bằng nhau Tứ phân vị là các giá trị tại vị trí cắt Nguồn ảnh\nIQR là sự khác biệt giữa tứ phân vị thứ nhất Q1 và tứ phân vị thứ ba Q3:\n$$IQR = Q_3 - Q_1$$\nGiá trị IQR có thể sử dụng để xác định outliers bằng cách thiết lập các giá trị biên Upper/Lower giống với phương pháp STD như sau: Nếu chúng ta trừ đi kxIQR từ tứ phân vị đầu tiên Q1, bất kỳ giá trị dữ liệu nào nhỏ hơn con số này được coi là giá trị outliers. Tương tự như vậy, nếu chúng ta thêm kxIQR đến tứ phân vị thứ ba Q3, bất kỳ giá trị dữ liệu nào lớn hơn con số này được coi là outliers. Giá trị k thường được chọn là 1.5. Trong trường hợp xác định các extreme outliers có thể dùng giá trị k = 3.\nCác bước xác định outliers bằng phương pháp IQR:\nBước 1: Tính IQR\n# Tính IQR\r# R\rq25 \u0026lt;- quantile(data, 0.25)\rq75 \u0026lt;- quantile(data, 0.75)\riqr \u0026lt;- q75 - q25\r # Python\rimport numpy as np\rq25, q75 = np.percentile(data, 25), np.percentile(data, 75)\riqr = q75 - q25\r Bước 2: Tính giá trị biên Upper/Lower để xác định outliers\n# thiết lập giới hạn để xác định outliers\r# R\rlimit_iqr = 1.5*iqr\rlower_iqr = q25 - limit_iqr\rupper_iqr = q75 + limit_iqr\r # Python\rlimit_iqr = 1.5*iqr\rlower_iqr, upper_iqr = q25 - limit_iqr, q75 + limit_iqr\r Bước 3: Xác định và loại bỏ outliers dựa trên giá trị biên\n# xác định outliers\r# R\rouliers_index_iqr \u0026lt;- which(data \u0026gt; upper_iqr | data \u0026lt; lower_iqr)\rprint(paste(\u0026quot;Number of outliers:\u0026quot;, length(ouliers_index_iqr)))\r ## [1] \u0026quot;Number of outliers: 37\u0026quot;\r # Python\rouliers_index_iqr = [x for x in data if x \u0026lt; lower_iqr or x \u0026gt; upper_iqr]\rprint('Number of outliers: %d' % len(ouliers_index_iqr))\r ## Number of outliers: 39\r # Loại bỏ outliers\r# R\rdata_new_iqr \u0026lt;- data[-ouliers_index_iqr]\rprint(paste(\u0026quot;Number of Non-outliers:\u0026quot;, length(data_new_iqr)))\r ## [1] \u0026quot;Number of Non-outliers: 4963\u0026quot;\r # Python\rdata_new_iqr = [x for x in data if x \u0026gt;= lower_iqr and x \u0026lt;= upper_iqr]\rprint('Non-outlier observations: %d' % len(data_new_iqr))\r ## Non-outlier observations: 4961\r 3. Xây dựng hàm tự động xác định và loại bỏ outliers\nChúng ta có thể tạo một hàm trên R dựa vào các bước ở trên để tự động xác định và xóa outliers như sau:\n# R\r# Tạo hàm tự động xác định và loại bỏ outliers bằng phương pháp STD\rfind_outliers_std \u0026lt;- function(data) {\r# tính giá trị biên Upper/Lower\rmean_data \u0026lt;- mean(data)\rstd_data \u0026lt;- sd(data)\rlimit = 3*std_data\rlower = mean_data - limit\rupper = mean_data + limit\r# xác định outliers\rouliers_index \u0026lt;- which(data \u0026gt; upper | data \u0026lt; lower)\r# Thông báo thông tin về các outliers đã xóa\rif (length(ouliers_index) \u0026gt; 0 ) {\rmessage(paste(\u0026quot;Number of outliers:\u0026quot;, length(ouliers_index)))\rmessage(paste(\u0026quot;Number of Non-outliers:\u0026quot;, length(data_new_iqr)))\r# return the data with the outliers removed\rreturn(data[-ouliers_index])\r} else {\rmessage(\u0026quot;Not outliers\u0026quot;)\r}\r}\r Tương tự ta có thể tạo hàm xác định outliers bằng phương pháp IQR như sau:\n# Python\r# Tạo hàm tự động xác định và loại bỏ outliers bằng phương pháp IQR\rfind_outliers_iqr \u0026lt;- function(data) {\r# Tính IQR\rq25 \u0026lt;- quantile(data)[2]\rq75 \u0026lt;- quantile(data)[4]\riqr = q75 - q25 # Tính giá trị biên Upper/Lower để xác định outliers\rupper = q75 + iqr * 1.5\rlower = q25 - iqr * 1.5\r# xác định outliers\rouliers_index \u0026lt;- which(data \u0026gt; upper | data \u0026lt; lower)\r# Thông báo thông tin về các outliers đã xóa\rif (length(ouliers_index) \u0026gt; 0 ) {\rmessage(paste(\u0026quot;Number of outliers:\u0026quot;, length(ouliers_index)))\rmessage(paste(\u0026quot;Number of Non-outliers:\u0026quot;, length(data_new_iqr)))\r# return the data with the outliers removed\r# return the data with the outliers removed\rreturn(data[-ouliers_index])\r} else {\rmessage(\u0026quot;Not outliers\u0026quot;)\r}\r}\r Kiểm tra kết quả thực hiện của hai hàm này:\nnew_data_std \u0026lt;- find_outliers_std(data)\r ## Number of outliers: 11\r ## Number of Non-outliers: 4963\r new_data_iqr \u0026lt;- find_outliers_iqr(data)\r ## Number of outliers: 37\r ## Number of Non-outliers: 4963\r Đối với Python thì các bạn có thể tạo hàm tương tự sử dụng các bước trên\n ","date":1597881600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597923807,"objectID":"047cb70185a601a2d3767fc8018a0160","permalink":"/post/remove-outliers/","publishdate":"2020-08-20T00:00:00Z","relpermalink":"/post/remove-outliers/","section":"post","summary":"Xác định và loại bỏ ouliers trong dữ liệu là một bước vô cùng quan trọng giúp tăng cao độ chính xác cho các mô hình dự đoán","tags":["Data Science","Machine Learning","Deep Learning"],"title":"Sử dụng thống kê để xác định và loại bỏ dữ liệu ngoại lai cho machine learning trong R và Python","type":"post"},{"authors":[],"categories":["R","Python"],"content":"\rPackage dplyr là một trong những thành phần rất quan trọng trong hệ sinh thái tidyverse của Hadley Wickham - tác giả của các thư viện nổi tiếng trên R như ggplot2, readr, tidyr,…dplyr cung cấp các công cụ biến đổi giúp cho việc thao tác với dữ liệu trên R dễ dàng và thuận tiện hơn bao giờ hết. Kết hợp với toán tử %\u0026gt;%, nhiều người cho rằng dplyr đã tạo ra concept mới cho R.\nĐể thực hiện các công việc liên quan đến data manipulation chúng ta có thể sử dụng các hàm thuộc gói base trong R, tuy nhiêu cú phát của nhiều hàm base là không nhất quán và khó nhớ, đặc biệt là cho một nhóm công việc đặc biệt tốn thời gian như là data manipulation. Gói hay còn thường được gọi là hệ sinh thái tidyverse ra đời nhằm đáp ứng các nhu cầu ngày càng tăng của việc biến đổi và làm sạch dữ liệu (data cleaning), nó bao gồm tập hợp của những gói mạnh nhất chuyên cho công việc làm sạch và biến đổi dữ liệu. Ưu điểm của việc sử dụng tidyverse phải kể đến các lí do sau:\n\rDễ hiểu và có cú pháp nhất quán.\rHợp nhất và hỗ trợ ggplot2 - một gói chuyên cho data visualization.\rCó thể phân tích, quản lí cơ sở dữ liệu ngoài (external databases) mà không cần biết sâu các chi tiết và kiến thức của các ngôn ngữ truy vấn cơ sở dữ liệu (database query languages) khác như SQL.\r\rNạp gói tidyverse vào phiên làm việc trên R để thực hiện công việc data manipulation:\n# R\rlibrary(tidyverse)\rTidyverse là một hộp công cụ lớn chứa nhiều package nhỏ (trong đó có dplyr) bên trong và các mảnh nhỏ này kết nối với nhau một cách tiện ích để vận hành một quy trình phân tích dữ liệu hoàn chỉnh. Hiện nay tidyverse chứa 27 packages bao gồm:\n# R\rtidyverse_packages()\r## [1] \u0026quot;broom\u0026quot; \u0026quot;cli\u0026quot; \u0026quot;crayon\u0026quot; \u0026quot;dbplyr\u0026quot; \u0026quot;dplyr\u0026quot; ## [6] \u0026quot;forcats\u0026quot; \u0026quot;ggplot2\u0026quot; \u0026quot;haven\u0026quot; \u0026quot;hms\u0026quot; \u0026quot;httr\u0026quot; ## [11] \u0026quot;jsonlite\u0026quot; \u0026quot;lubridate\u0026quot; \u0026quot;magrittr\u0026quot; \u0026quot;modelr\u0026quot; \u0026quot;pillar\u0026quot; ## [16] \u0026quot;purrr\u0026quot; \u0026quot;readr\u0026quot; \u0026quot;readxl\u0026quot; \u0026quot;reprex\u0026quot; \u0026quot;rlang\u0026quot; ## [21] \u0026quot;rstudioapi\u0026quot; \u0026quot;rvest\u0026quot; \u0026quot;stringr\u0026quot; \u0026quot;tibble\u0026quot; \u0026quot;tidyr\u0026quot; ## [26] \u0026quot;xml2\u0026quot; \u0026quot;tidyverse\u0026quot;\rTrong post này chúng ta hãy cùng so sánh các thao tác data manipulation thường dùng trong data science bằng cách sử dụng R (với dplyr) và sử dụng Python (với pandas):\n\rfilter: Lọc dữ liệu với các điều kiện của biến (thuộc tính)\rselect: Chọn thuộc tính hay là tập hợp các thuộc tính\rarrange: Sắp xếp dữ liệu theo thứ t\rmutate : Tạo thuộc tính mới cho data frameự\rsummarise: Thống kê mô tả theo phân nhóm\r\rNạp thư viện reticulate:\n# R\rlibrary(reticulate)\rreticulate cho phép chúng ta sử dụng kết hợp R và Python trong môi trường R. Cụ thể về cách sử dụng thư viện này để kết hợp R và Python tôi đã giới thiệu ở post trước, các bạn có thể đọc ở đây\nNạp thư viện pandas trong môi trường R:\n# Python\rimport pandas as pd\rChú ý: Những R code chunks tôi sẽ comment R và Python là Python.\nCũng giống như dplyr trong R, về cơ bản Pandas là một thư viện mã nguồn mở, được cộng đồng đánh giá là high-performance, nó hỗ trợ đắc lực trong thao tác với dữ liệu và giúp cho việc xử lý dữ liệu, tính toán sẽ dễ dàng hơn rất nhiều cách truyền thống trong Python.\nLoad dữ liệu để demo:\n# R\r# Nạp R built-in dataset mtcars\rdata(mtcars)\r# Chuyển dữ dữ liệu về dạng tibble(hay còn gọi là data_frame) - đây là 1 # kiểu cấu trúc dữ liệu mới trong R nhằm đáp ứng nhu cầu về tốc độ tính toán\r# khi xử lí dữ liệu có kích thước lớn\rdata_r \u0026lt;- as_tibble(mtcars)\rdata_r\r## # A tibble: 32 x 11\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4\r## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4\r## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1\r## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1\r## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2\r## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1\r## 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4\r## 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2\r## 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2\r## 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4\r## # ... with 22 more rows\rSo sánh dplyr và pandas\n1. Filter dữ liệu theo điều kiện của thuộc tính\n# R\rfilter(data_r, cyl \u0026gt;=6 \u0026amp; am == 1)\r## # A tibble: 5 x 11\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4\r## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4\r## 3 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4\r## 4 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6\r## 5 15 8 301 335 3.54 3.57 14.6 0 1 5 8\r# Python\r# chuyển dữ liệu từ R cho Python:\rdata_py = r.data_r\rdata_py[(data_py[\u0026#39;cyl\u0026#39;] \u0026gt;=6) \u0026amp; (data_py[\u0026#39;am\u0026#39;] == 1)]\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## 0 21.0 6.0 160.0 110.0 3.90 2.620 16.46 0.0 1.0 4.0 4.0\r## 1 21.0 6.0 160.0 110.0 3.90 2.875 17.02 0.0 1.0 4.0 4.0\r## 28 15.8 8.0 351.0 264.0 4.22 3.170 14.50 0.0 1.0 5.0 4.0\r## 29 19.7 6.0 145.0 175.0 3.62 2.770 15.50 0.0 1.0 5.0 6.0\r## 30 15.0 8.0 301.0 335.0 3.54 3.570 14.60 0.0 1.0 5.0 8.0\r# R\rdata_r %\u0026gt;% filter(am != 0)\r## # A tibble: 13 x 11\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4\r## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4\r## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1\r## 4 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1\r## 5 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2\r## 6 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1\r## 7 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1\r## 8 26 4 120. 91 4.43 2.14 16.7 0 1 5 2\r## 9 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2\r## 10 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4\r## 11 19.7 6 145 175 3.62 2.77 15.5 0 1 5 6\r## 12 15 8 301 335 3.54 3.57 14.6 0 1 5 8\r## 13 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2\r# Python\rdata_py[data_py[\u0026#39;am\u0026#39;] != 0]\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## 0 21.0 6.0 160.0 110.0 3.90 2.620 16.46 0.0 1.0 4.0 4.0\r## 1 21.0 6.0 160.0 110.0 3.90 2.875 17.02 0.0 1.0 4.0 4.0\r## 2 22.8 4.0 108.0 93.0 3.85 2.320 18.61 1.0 1.0 4.0 1.0\r## 17 32.4 4.0 78.7 66.0 4.08 2.200 19.47 1.0 1.0 4.0 1.0\r## 18 30.4 4.0 75.7 52.0 4.93 1.615 18.52 1.0 1.0 4.0 2.0\r## 19 33.9 4.0 71.1 65.0 4.22 1.835 19.90 1.0 1.0 4.0 1.0\r## 25 27.3 4.0 79.0 66.0 4.08 1.935 18.90 1.0 1.0 4.0 1.0\r## 26 26.0 4.0 120.3 91.0 4.43 2.140 16.70 0.0 1.0 5.0 2.0\r## 27 30.4 4.0 95.1 113.0 3.77 1.513 16.90 1.0 1.0 5.0 2.0\r## 28 15.8 8.0 351.0 264.0 4.22 3.170 14.50 0.0 1.0 5.0 4.0\r## 29 19.7 6.0 145.0 175.0 3.62 2.770 15.50 0.0 1.0 5.0 6.0\r## 30 15.0 8.0 301.0 335.0 3.54 3.570 14.60 0.0 1.0 5.0 8.0\r## 31 21.4 4.0 121.0 109.0 4.11 2.780 18.60 1.0 1.0 4.0 2.0\r# R\rdata_r %\u0026gt;% group_by(cyl) %\u0026gt;% filter(sum(hp) \u0026gt; 2000)\r## # A tibble: 14 x 11\r## # Groups: cyl [1]\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2\r## 2 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4\r## 3 16.4 8 276. 180 3.07 4.07 17.4 0 0 3 3\r## 4 17.3 8 276. 180 3.07 3.73 17.6 0 0 3 3\r## 5 15.2 8 276. 180 3.07 3.78 18 0 0 3 3\r## 6 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4\r## 7 10.4 8 460 215 3 5.42 17.8 0 0 3 4\r## 8 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4\r## 9 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2\r## 10 15.2 8 304 150 3.15 3.44 17.3 0 0 3 2\r## 11 13.3 8 350 245 3.73 3.84 15.4 0 0 3 4\r## 12 19.2 8 400 175 3.08 3.84 17.0 0 0 3 2\r## 13 15.8 8 351 264 4.22 3.17 14.5 0 1 5 4\r## 14 15 8 301 335 3.54 3.57 14.6 0 1 5 8\r# Python\rdata_py.groupby(\u0026#39;cyl\u0026#39;).filter(lambda x: sum(x[\u0026#39;hp\u0026#39;]) \u0026gt; 2000)\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## 4 18.7 8.0 360.0 175.0 3.15 3.440 17.02 0.0 0.0 3.0 2.0\r## 6 14.3 8.0 360.0 245.0 3.21 3.570 15.84 0.0 0.0 3.0 4.0\r## 11 16.4 8.0 275.8 180.0 3.07 4.070 17.40 0.0 0.0 3.0 3.0\r## 12 17.3 8.0 275.8 180.0 3.07 3.730 17.60 0.0 0.0 3.0 3.0\r## 13 15.2 8.0 275.8 180.0 3.07 3.780 18.00 0.0 0.0 3.0 3.0\r## 14 10.4 8.0 472.0 205.0 2.93 5.250 17.98 0.0 0.0 3.0 4.0\r## 15 10.4 8.0 460.0 215.0 3.00 5.424 17.82 0.0 0.0 3.0 4.0\r## 16 14.7 8.0 440.0 230.0 3.23 5.345 17.42 0.0 0.0 3.0 4.0\r## 21 15.5 8.0 318.0 150.0 2.76 3.520 16.87 0.0 0.0 3.0 2.0\r## 22 15.2 8.0 304.0 150.0 3.15 3.435 17.30 0.0 0.0 3.0 2.0\r## 23 13.3 8.0 350.0 245.0 3.73 3.840 15.41 0.0 0.0 3.0 4.0\r## 24 19.2 8.0 400.0 175.0 3.08 3.845 17.05 0.0 0.0 3.0 2.0\r## 28 15.8 8.0 351.0 264.0 4.22 3.170 14.50 0.0 1.0 5.0 4.0\r## 30 15.0 8.0 301.0 335.0 3.54 3.570 14.60 0.0 1.0 5.0 8.0\r2. Select thuộc tính\n# R\rhead(select(data_r, cyl, hp, wt), 5)\r## # A tibble: 5 x 3\r## cyl hp wt\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 6 110 2.62\r## 2 6 110 2.88\r## 3 4 93 2.32\r## 4 6 110 3.22\r## 5 8 175 3.44\r# Python\rdata_py[[\u0026#39;cyl\u0026#39;, \u0026#39;hp\u0026#39;, \u0026#39;wt\u0026#39;]].head(5)\r## cyl hp wt\r## 0 6.0 110.0 2.620\r## 1 6.0 110.0 2.875\r## 2 4.0 93.0 2.320\r## 3 6.0 110.0 3.215\r## 4 8.0 175.0 3.440\r# R\rhead(select(data_r, -mpg), 5)\r## # A tibble: 5 x 10\r## cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 6 160 110 3.9 2.62 16.5 0 1 4 4\r## 2 6 160 110 3.9 2.88 17.0 0 1 4 4\r## 3 4 108 93 3.85 2.32 18.6 1 1 4 1\r## 4 6 258 110 3.08 3.22 19.4 1 0 3 1\r## 5 8 360 175 3.15 3.44 17.0 0 0 3 2\r# Python\rdata_py.drop(\u0026#39;mpg\u0026#39;, 1).head(5)\r## cyl disp hp drat wt qsec vs am gear carb\r## 0 6.0 160.0 110.0 3.90 2.620 16.46 0.0 1.0 4.0 4.0\r## 1 6.0 160.0 110.0 3.90 2.875 17.02 0.0 1.0 4.0 4.0\r## 2 4.0 108.0 93.0 3.85 2.320 18.61 1.0 1.0 4.0 1.0\r## 3 6.0 258.0 110.0 3.08 3.215 19.44 1.0 0.0 3.0 1.0\r## 4 8.0 360.0 175.0 3.15 3.440 17.02 0.0 0.0 3.0 2.0\r3.Sắp Xếp dữ liệu theo thứ tự\n# R\r# Sắp xếp dữ liệu theo giá trị tăng dần của cột cyl\rarrange(data_r, cyl)\r## # A tibble: 32 x 11\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1\r## 2 24.4 4 147. 62 3.69 3.19 20 1 0 4 2\r## 3 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2\r## 4 32.4 4 78.7 66 4.08 2.2 19.5 1 1 4 1\r## 5 30.4 4 75.7 52 4.93 1.62 18.5 1 1 4 2\r## 6 33.9 4 71.1 65 4.22 1.84 19.9 1 1 4 1\r## 7 21.5 4 120. 97 3.7 2.46 20.0 1 0 3 1\r## 8 27.3 4 79 66 4.08 1.94 18.9 1 1 4 1\r## 9 26 4 120. 91 4.43 2.14 16.7 0 1 5 2\r## 10 30.4 4 95.1 113 3.77 1.51 16.9 1 1 5 2\r## # ... with 22 more rows\r# Python\rdata_py.sort_values(\u0026#39;cyl\u0026#39;).head(10)\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## 31 21.4 4.0 121.0 109.0 4.11 2.780 18.60 1.0 1.0 4.0 2.0\r## 2 22.8 4.0 108.0 93.0 3.85 2.320 18.61 1.0 1.0 4.0 1.0\r## 27 30.4 4.0 95.1 113.0 3.77 1.513 16.90 1.0 1.0 5.0 2.0\r## 26 26.0 4.0 120.3 91.0 4.43 2.140 16.70 0.0 1.0 5.0 2.0\r## 25 27.3 4.0 79.0 66.0 4.08 1.935 18.90 1.0 1.0 4.0 1.0\r## 20 21.5 4.0 120.1 97.0 3.70 2.465 20.01 1.0 0.0 3.0 1.0\r## 7 24.4 4.0 146.7 62.0 3.69 3.190 20.00 1.0 0.0 4.0 2.0\r## 8 22.8 4.0 140.8 95.0 3.92 3.150 22.90 1.0 0.0 4.0 2.0\r## 19 33.9 4.0 71.1 65.0 4.22 1.835 19.90 1.0 1.0 4.0 1.0\r## 18 30.4 4.0 75.7 52.0 4.93 1.615 18.52 1.0 1.0 4.0 2.0\r# R\r# Sắp xếp dữ liệu theo giá trị giảm dần của cột cyl\rarrange(data_r, desc(cyl))\r## # A tibble: 32 x 11\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2\r## 2 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4\r## 3 16.4 8 276. 180 3.07 4.07 17.4 0 0 3 3\r## 4 17.3 8 276. 180 3.07 3.73 17.6 0 0 3 3\r## 5 15.2 8 276. 180 3.07 3.78 18 0 0 3 3\r## 6 10.4 8 472 205 2.93 5.25 18.0 0 0 3 4\r## 7 10.4 8 460 215 3 5.42 17.8 0 0 3 4\r## 8 14.7 8 440 230 3.23 5.34 17.4 0 0 3 4\r## 9 15.5 8 318 150 2.76 3.52 16.9 0 0 3 2\r## 10 15.2 8 304 150 3.15 3.44 17.3 0 0 3 2\r## # ... with 22 more rows\r# Python\rdata_py.sort_values(\u0026#39;cyl\u0026#39;, ascending=False).head(10)\r## mpg cyl disp hp drat wt qsec vs am gear carb\r## 16 14.7 8.0 440.0 230.0 3.23 5.345 17.42 0.0 0.0 3.0 4.0\r## 30 15.0 8.0 301.0 335.0 3.54 3.570 14.60 0.0 1.0 5.0 8.0\r## 4 18.7 8.0 360.0 175.0 3.15 3.440 17.02 0.0 0.0 3.0 2.0\r## 28 15.8 8.0 351.0 264.0 4.22 3.170 14.50 0.0 1.0 5.0 4.0\r## 6 14.3 8.0 360.0 245.0 3.21 3.570 15.84 0.0 0.0 3.0 4.0\r## 24 19.2 8.0 400.0 175.0 3.08 3.845 17.05 0.0 0.0 3.0 2.0\r## 23 13.3 8.0 350.0 245.0 3.73 3.840 15.41 0.0 0.0 3.0 4.0\r## 22 15.2 8.0 304.0 150.0 3.15 3.435 17.30 0.0 0.0 3.0 2.0\r## 21 15.5 8.0 318.0 150.0 2.76 3.520 16.87 0.0 0.0 3.0 2.0\r## 11 16.4 8.0 275.8 180.0 3.07 4.070 17.40 0.0 0.0 3.0 3.0\r4. Tạo thuộc tính mới\n# R\r# Tạo và thêm biến mới có tên cyl2\rmutate(data_r, cyl2 = mean(cyl))\r## # A tibble: 32 x 12\r## mpg cyl disp hp drat wt qsec vs am gear carb cyl2\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt;\r## 1 21 6 160 110 3.9 2.62 16.5 0 1 4 4 6.19\r## 2 21 6 160 110 3.9 2.88 17.0 0 1 4 4 6.19\r## 3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1 6.19\r## 4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1 6.19\r## 5 18.7 8 360 175 3.15 3.44 17.0 0 0 3 2 6.19\r## 6 18.1 6 225 105 2.76 3.46 20.2 1 0 3 1 6.19\r## 7 14.3 8 360 245 3.21 3.57 15.8 0 0 3 4 6.19\r## 8 24.4 4 147. 62 3.69 3.19 20 1 0 4 2 6.19\r## 9 22.8 4 141. 95 3.92 3.15 22.9 1 0 4 2 6.19\r## 10 19.2 6 168. 123 3.92 3.44 18.3 1 0 4 4 6.19\r## # ... with 22 more rows\r# Python\rimport numpy as np\rdata_py.assign(cyl2 = lambda x: np.mean(x.cyl)).head(10)\r## mpg cyl disp hp drat wt qsec vs am gear carb cyl2\r## 0 21.0 6.0 160.0 110.0 3.90 2.620 16.46 0.0 1.0 4.0 4.0 6.1875\r## 1 21.0 6.0 160.0 110.0 3.90 2.875 17.02 0.0 1.0 4.0 4.0 6.1875\r## 2 22.8 4.0 108.0 93.0 3.85 2.320 18.61 1.0 1.0 4.0 1.0 6.1875\r## 3 21.4 6.0 258.0 110.0 3.08 3.215 19.44 1.0 0.0 3.0 1.0 6.1875\r## 4 18.7 8.0 360.0 175.0 3.15 3.440 17.02 0.0 0.0 3.0 2.0 6.1875\r## 5 18.1 6.0 225.0 105.0 2.76 3.460 20.22 1.0 0.0 3.0 1.0 6.1875\r## 6 14.3 8.0 360.0 245.0 3.21 3.570 15.84 0.0 0.0 3.0 4.0 6.1875\r## 7 24.4 4.0 146.7 62.0 3.69 3.190 20.00 1.0 0.0 4.0 2.0 6.1875\r## 8 22.8 4.0 140.8 95.0 3.92 3.150 22.90 1.0 0.0 4.0 2.0 6.1875\r## 9 19.2 6.0 167.6 123.0 3.92 3.440 18.30 1.0 0.0 4.0 4.0 6.1875\r5. Thống kê mô tả theo phân nhóm\n# R\rdata_r %\u0026gt;% group_by(cyl, am) %\u0026gt;% summarise(mean_cyl = mean(cyl),\rsum_cyl = sum(cyl),\rcount_cyl = n())\r## `summarise()` regrouping output by \u0026#39;cyl\u0026#39; (override with `.groups` argument)\r## # A tibble: 6 x 5\r## # Groups: cyl [3]\r## cyl am mean_cyl sum_cyl count_cyl\r## \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;dbl\u0026gt; \u0026lt;int\u0026gt;\r## 1 4 0 4 12 3\r## 2 4 1 4 32 8\r## 3 6 0 6 24 4\r## 4 6 1 6 18 3\r## 5 8 0 8 96 12\r## 6 8 1 8 16 2\r# Python\rdata_py.groupby([\u0026#39;cyl\u0026#39;, \u0026#39;am\u0026#39;])[\u0026#39;cyl\u0026#39;].agg([\u0026#39;mean\u0026#39;, \u0026#39;sum\u0026#39;, \u0026#39;count\u0026#39;])\r## mean sum count\r## cyl am ## 4.0 0.0 4.0 12.0 3\r## 1.0 4.0 32.0 8\r## 6.0 0.0 6.0 24.0 4\r## 1.0 6.0 18.0 3\r## 8.0 0.0 8.0 96.0 12\r## 1.0 8.0 16.0 2\r6. Tóm tắt\nDưới đây là tóm tắt so sánh một số thao tác với dữ liệu hay dùng nhất trong Python và R\nQuerying, Filtering, Sampling\n\r\rR\rPython\r\r\r\rdim(df)\rdf.shape\r\rhead(df)\rdf.head()\r\rslice(df, 1:10)\rdf.iloc[:9]\r\rfilter(df, col1 == 1, col2 ==1)\rdf.query(‘col1 == 1 \u0026amp; col2 == 1’)\r\rdf[df\\(col1 == 1 \u0026amp; df\\)col2 == 1]\rdf[(df.col1 == 1) \u0026amp; (df.col2 == 1)]\r\rselect(df, col1, col2)\rdf[[‘col1’, ‘col2’]]\r\rselect(df, col1:col3)\rdf.loc[:, ‘col1’:‘col3’]\r\rselect(df, -(col1:col3))\rdf.drop(cols_to_drop, axis=1)\r\rdistinct(select(df, col1))\rdf[[‘col1’]].drop_duplicates()\r\rdistinct(select(df, col1, col2))\rdf[[‘col1’, ‘col2’]].drop_duplicates()\r\rsample_n(df, 10)\rdf.sample(n=10)\r\rsample_frac(df, 0.01)\rdf.sample(frac=0.01)\r\r\r\rSorting\n\r\rR\rPython\r\r\r\rarrange(df, col1, col2)\rdf.sort_values([‘col1’, ‘col2’])\r\rarrange(df, desc(col1))\rdf.sort_values(‘col1’, ascending=False)\r\r\r\rGrouping and Summarizing\n\r\r\r\rR\rPython\r\r\r\rsummary(df)\rdf.describe()\r\rgdf \u0026lt;- group_by(df, col1)\rgdf = df.groupby(‘col1’)\r\rsummarise(gdf, avg=mean(col1, na.rm=TRUE))\rdf.groupby(‘col1’).agg({‘col1’: ‘mean’})\r\rsummarise(gdf, total=sum(col1))\rdf.groupby(‘col1’).sum()\r\r\r\r","date":1597795200,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1597805730,"objectID":"22a172dc616f8f6ef601139e610dbd9d","permalink":"/post/data-manipulation/","publishdate":"2020-08-19T00:00:00Z","relpermalink":"/post/data-manipulation/","section":"post","summary":"So sánh các thao tác biến đổi dữ liệu với thư viện `dplyr` trong R và `pandas` trong Python","tags":["Data Wrangling","Data Manipulation"],"title":"So sánh dplyr và pandas cho data manipulation","type":"post"},{"authors":null,"categories":null,"content":"Sử dụng R Shiny để phát triển ứng dụng web tương tác (interactive web app), cho phép tracking và visualization luồng dữ liệu đa cảm biến, phát hiện bất thường, dự đoán hỏng hóc và tuổi thọ của máy móc trong thời gian thực.\n ","date":1553040000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1553040000,"objectID":"9e2cbd9d06bb4932f3829f56f8ee93b2","permalink":"/project/pdm-project/","publishdate":"2019-03-20T00:00:00Z","relpermalink":"/project/pdm-project/","section":"project","summary":"Sử dụng `R Shiny` phát triển ứng dụng web tương tác để tracking luồng dữ liệu đa cảm biến trong thời gian thực.","tags":["Machine Learning","Data Science","IoT","Predictive Maintenance"],"title":"The PdM Project","type":"project"},{"authors":[],"categories":[],"content":"Create slides in Markdown with Academic Academic | Documentation\n Features Efficiently write slides in Markdown 3-in-1: Create, Present, and Publish your slides Supports speaker notes Mobile friendly slides Controls Next: Right Arrow or Space Previous: Left Arrow Start: Home Finish: End Overview: Esc Speaker notes: S Fullscreen: F Zoom: Alt + Click PDF Export: E Code Highlighting Inline code: variable\nCode block:\nporridge = \u0026quot;blueberry\u0026quot; if porridge == \u0026quot;blueberry\u0026quot;: print(\u0026quot;Eating...\u0026quot;) Math In-line math: $x + y = z$\nBlock math:\n$$ f\\left( x \\right) = ;\\frac{{2\\left( {x + 4} \\right)\\left( {x - 4} \\right)}}{{\\left( {x + 4} \\right)\\left( {x + 1} \\right)}} $$\n Fragments Make content appear incrementally\n{{% fragment %}} One {{% /fragment %}} {{% fragment %}} **Two** {{% /fragment %}} {{% fragment %}} Three {{% /fragment %}} Press Space to play!\nOne Two Three \n A fragment can accept two optional parameters:\n class: use a custom style (requires definition in custom CSS) weight: sets the order in which a fragment appears Speaker Notes Add speaker notes to your presentation\n{{% speaker_note %}} - Only the speaker can read these notes - Press `S` key to view {{% /speaker_note %}} Press the S key to view the speaker notes!\n Only the speaker can read these notes Press S key to view Themes black: Black background, white text, blue links (default) white: White background, black text, blue links league: Gray background, white text, blue links beige: Beige background, dark text, brown links sky: Blue background, thin dark text, blue links night: Black background, thick white text, orange links serif: Cappuccino background, gray text, brown links simple: White background, black text, blue links solarized: Cream-colored background, dark green text, blue links Custom Slide Customize the slide style and background\n{{\u0026lt; slide background-image=\u0026quot;/media/boards.jpg\u0026quot; \u0026gt;}} {{\u0026lt; slide background-color=\u0026quot;#0000FF\u0026quot; \u0026gt;}} {{\u0026lt; slide class=\u0026quot;my-style\u0026quot; \u0026gt;}} Custom CSS Example Let\u0026rsquo;s make headers navy colored.\nCreate assets/css/reveal_custom.css with:\n.reveal section h1, .reveal section h2, .reveal section h3 { color: navy; } Questions? Ask\n Documentation\n","date":1549324800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1549324800,"objectID":"0e6de1a61aa83269ff13324f3167c1a9","permalink":"/slides/example/","publishdate":"2019-02-05T00:00:00Z","relpermalink":"/slides/example/","section":"slides","summary":"An introduction to using Academic's Slides feature.","tags":[],"title":"Slides","type":"slides"},{"authors":[],"categories":["Python","R"],"content":"\rMột câu hỏi thường hay đặt ra bởi nhiều nhà khoa học dữ liệu, đặc biệt là những người mới trong lĩnh vực này đó là: Python hay R tốt hơn cho khoa học dữ liệu? Thực ra còn nhiều ngôn ngữ khác cho khoa học dữ liệu như là: Java, C, Scala, Matlab, Julia,…nhưng Python và R đang dẫn đầu trong phần lớn thế giới khoa học dữ liệu.\nR vốn được thiết kế bởi các nhà thống kê và đã trở thành lựa chọn hàng đầu cho những ai bước vào lĩnh vực khoa học dữ liệu. Một trong những thế mạnh chính của R là số lượng khổng lồ các packages chuyên dụng và cộng đồng support vô cùng lớn. Tuy nhiên, độ phổ biến của nó gần đây đã giảm đi một chút.\nTrong khi đó, Python là ngôn ngữ đa mục đích có thể sử dụng trong nhiều lĩnh vực khác nhau từ lập trình ứng dụng web đến viết game. Có thể thấy là hiện nay Python đang thách thức ngôi vị lâu đầu của R như là một ngôn ngữ chung cho các nhà khoa học dữ liệu.\nTuy nhiên các doanh nghiệp sẽ không ưu tiên ngôn ngữ nào khi xem xét các kỹ năng của một nhà khoa học dữ liệu, vì vậy các bạn phải biết cách linh hoạt trong việc sử dụng các ngôn ngữ này làm công cụ cho khoa học dữ liệu làm sao hiệu quả nhất.\nCả R và Python đều có sử dụng để giải quyết các bài toán tương tự nhau trong khoa học dữ liệu. Cả hai đều có những packages hoặc libraries để giải quyết những vấn đề trong phân tích dữ liệu như tiền xủ lý, ứng dụng machine learning cho dữ liệu. Cả hai đều là lựa chọn tốt cho nghiên cứu khả lặp - một kỹ năng đòi hỏi trong rất nhiều lĩnh vực khác nhau. Tuy nhiên hai ngôn ngữ này lại có những tính năng tuyệt vời và điểm mạnh riêng vì vậy chúng ta nên kết hợp chúng để tận dụng những lợi thế của nhau, chỗ nào tiện và mạnh cái gì thì dùng cái đó. Hình dưới đây mô tả tóm tắt những điểm nổi trội của hai ngôn ngữ này:\nỞ post này tôi sẽ giới thiệu với các bạn cách kết hợp hai ngôn ngữ này trong môi trường R bằng cách sử dụng package reticulate.\nTrước hết để tiến hành làm việc với Python và R chúng ta cần cài đặt chúng:\n\rPython: Nếu bạn muốn đơn giản hóa việc tạo môi trường khi thực hiện các dự án bằng Python, đặc biệt liên quan đến các lĩnh vực khoa học dữ liệu, AI, Data, … Anaconda sẽ là lựa chọn bạn nên cân nhắc. Bạn có thể tải và cài Anaconda tại đây\rR: Để làm việc với R các bạn cần tải R và Rstudio. Tải và cài phiên bản R mới nhất tại đây. Tải và cài đặt RStudion tại đây\r\rĐể kết hợp R và Python trong môi trường R chúng ta cần cài R package reticulate bằng câu lệnh sau:\ninstall.packages(\u0026quot;reticulate\u0026quot;)\rTuy nhiên cách cài đặt như các bạn vừa thực hiện ở trên là không khuyến khích. Nguyên nhân là một\rsố gói của R để sử dụng được còn phụ thuộc vào một hoặc một số gói khác. Do vậy an toàn nhất là cài\rđặt với lựa chọn dependencies = TRUE với hàm ý rằng chúng ta sẽ cài đặt luôn tất cả các gói phụ\rthuộc:\ninstall.packages(\u0026quot;reticulate\u0026quot;, dependencies = TRUE)\rPackage reticulate gồm các công cụ hỗ trợ tương tác giữa R và Python. Cụ thể package này giải quyết được những việc sau:\n\rGọi Python từ R bằng những phương pháp khác nhau: từ R Markdown, từ mã nguồn Python, import các Python modules, và sử dụng tương tác trực tiếp trên R session.\rChuyển đổi các đối tượng R và Python với nhau (ví dụ giữa các data frames R và Pandas, giữa các R matrices và NumPy arrays)\rLiên kết linh hoạt giữa các phiên bản Python khác nhau bao gồm cả virtual environments và Conda environments.\r\rKêt hợp R và Python\nĐể có thể dùng Python trong môi trường R chúng ta cần nạp thư thư viện reticulate theo câu lệnh sau:\nlibrary(reticulate)\rĐể kiểm tra môi trường Python có trong máy, các bạn dùng câu lệnh sau:\nconda_list()\r## name python\r## 1 r-env C:\\\\Users\\\\svcuo\\\\Anaconda3\\\\envs\\\\r-env\\\\python.exe\rDùng hàm use_python() cho phép bạn chỉ định rõ phiên bản Python cần thiết:\nuse_python(\u0026quot;C:/Users/svcuo/Anaconda3/python.exe\u0026quot;)\rSử dụng hàm use_virtualenv() và use_condaenv() cho phép bạn chỉ định phiên bản Python của bạn làm việc trong môi trường virtual hay là Conda:\nuse_virtualenv(\u0026quot;myenv\u0026quot;)\rpy_config()\r## python: C:/Users/svcuo/Anaconda3/python.exe\r## libpython: C:/Users/svcuo/Anaconda3/python36.dll\r## pythonhome: C:/Users/svcuo/Anaconda3\r## version: 3.6.9 |Anaconda, Inc.| (default, Jul 30 2019, 14:00:49) [MSC v.1915 64 bit (AMD64)]\r## Architecture: 64bit\r## numpy: C:/Users/svcuo/Anaconda3/Lib/site-packages/numpy\r## numpy_version: 1.16.5\r## ## python versions found: ## C:/Users/svcuo/Anaconda3/python.exe\r## C:/Users/svcuo/AppData/Local/Programs/Python/Python38-32/python.exe\r## C:/Users/svcuo/Anaconda3/envs/r-env/python.exe\rTa có thể cài đặt bất kỳ python library nào trong R bằng cách dùng hàm py_install() như sau:\npy_install(\u0026quot;pandas\u0026quot;)\rCác cách sử dụng kết hợp Python và R trong môi trường R\n1. Import các python modules\nSử dụng hàm import() cho phép bạn có thể gọi mọi python library và sử dụng trong R:\nos \u0026lt;- import(\u0026quot;os\u0026quot;)\ros$listdir(\u0026quot;.\u0026quot;)\r [1] \u0026quot;.RData\u0026quot; \u0026quot;.Rhistory\u0026quot; \u0026quot;.Rproj.user\u0026quot; \u0026quot;assets\u0026quot; \u0026quot;config\u0026quot; [6] \u0026quot;config.toml\u0026quot; \u0026quot;content\u0026quot; \u0026quot;index.Rmd\u0026quot; \u0026quot;myblog.Rproj\u0026quot; \u0026quot;public\u0026quot; [11] \u0026quot;resources\u0026quot; \u0026quot;static\u0026quot; \u0026quot;themes\u0026quot; \r2. Sourcing Python scripts\nBạn có thể nạp bất kỳ một Python scripts nào vào R sử dụng hàm source_python(). Ví dụ bạn có một Python script tên là flights.py có dạng:\nimport pandas as pd\rdef read_flights(file):\rflights = pd.read_csv(file)\rflights = flights[flights[\u0026#39;dest\u0026#39;] == \u0026quot;ORD\u0026quot;]\rflights = flights[[\u0026#39;carrier\u0026#39;, \u0026#39;dep_delay\u0026#39;, \u0026#39;arr_delay\u0026#39;]]\rflights = flights.dropna()\rreturn flights\rVà các bạn có thể nạp và thực thi nó trên R như sau:\nsource_python(\u0026quot;RPython/flights.py\u0026quot;)\rflights \u0026lt;- read_flights(\u0026quot;flights.csv\u0026quot;)\rlibrary(ggplot2)\rggplot(flights, aes(carrier, arr_delay)) + geom_point() + geom_jitter()\r3. Python REPL\nHàm repl_python() cho phép các bạn có thể làm việc trực tiếp với Python trên R session. Các đối tượng được tạo ra từ Python REPL có thể được truy cập từ R bằng cách sử dụng py$object. Ví dụ:\nDùng lệnh exit để thoát python REPL\nChú ý: Trong Python code có thể sử dụng mọi đối tượng được tạo ra từ R bằng các sử dụng đối tượng r.object (ví dụ r.flights).\n4. Sử dụng python trong R markdown\nPackage reticulate hỗ trợ Python engine cho R Markdown với những thuộc tính sau:\n\rChạy Python code chunks tích hợp trong R session( cho phép trao đổi các đối tượng với nhau)\rHiển thị Python output, bao gồm cả output từ matplotlib\rTruy cập tới các đối tượng được tạo ra từ Python chunks và ngược lại từ R chunks (sử dụng py$object và r.object)\r\rChúng ta hãy cùng xem ví dụ kết hợp R và Python đơn giản sau:\nNạp dữ liệu vào Python:\n# Python\rimport pandas as pd\rdataset_url = \u0026#39;https://raw.githubusercontent.com/svcuong/Datasets/master/pima-indians-diabetes.data.csv\u0026#39;\rnames = [\u0026#39;preg\u0026#39;, \u0026#39;plas\u0026#39;, \u0026#39;pres\u0026#39;, \u0026#39;skin\u0026#39;, \u0026#39;test\u0026#39;, \u0026#39;mass\u0026#39;, \u0026#39;pedi\u0026#39;, \u0026#39;age\u0026#39;, \u0026#39;class\u0026#39;]\rdata = pd.read_csv(dataset_url, names = names)\rprint(data.head())\r## preg plas pres skin test mass pedi age class\r## 0 6 148 72 35 0 33.6 0.627 50 1\r## 1 1 85 66 29 0 26.6 0.351 31 0\r## 2 8 183 64 0 0 23.3 0.672 32 1\r## 3 1 89 66 23 94 28.1 0.167 21 0\r## 4 0 137 40 35 168 43.1 2.288 33 1\rSau đó chuyển dữ liệu và thao tác với dữ liệu bằng R:\n# R\rtable(py$data$preg)\r## ## 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 17 ## 111 135 103 75 68 57 50 45 38 28 24 11 9 10 2 1 1\rThực hiện data visualization trong R vơi base function boxplot():\n# R\rx \u0026lt;- py$data[,1:8]\ry \u0026lt;- py$data[,9]\r# Boxplot for first 4 attribute\rnames = c(\u0026#39;preg\u0026#39;, \u0026#39;plas\u0026#39;, \u0026#39;pres\u0026#39;, \u0026#39;skin\u0026#39;)\rpar(mfrow=c(1,4))\rfor(i in 1:4) {\rboxplot(x[,i], main=names[i])\r}\rThực hiện data visualization trong R với ggplot2:\n# R\rlibrary(ggplot2)\rpy$data$class \u0026lt;- factor(py$data$class)\rggplot(data = py$data,aes(x = preg)) +\rgeom_histogram(binwidth = 0.5,aes(fill = class),position = \u0026quot;dodge\u0026quot;) +\rggtitle(\u0026quot;Pregnancies Data Distribution\u0026quot;) + ylab(\u0026quot;class Counts\u0026quot;) +\rtheme_gray() +\rtheme_update(plot.title = element_text(hjust = 0.5))\rTham khảo:\nR Interface to Python\n","date":1524009600,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1524026438,"objectID":"1d51cfd53962eda49eb956baa6f7140e","permalink":"/post/s-d-ng-k-t-h-p-r-va-python-trong-data-science/","publishdate":"2018-04-18T00:00:00Z","relpermalink":"/post/s-d-ng-k-t-h-p-r-va-python-trong-data-science/","section":"post","summary":"Một câu hỏi thường hay đặt ra bởi nhiều nhà khoa học dữ liệu, đặc biệt là những người mới trong lĩnh vực này đó là: Python hay R tốt hơn cho khoa học dữ liệu?","tags":["Data Science"],"title":"Sử dụng kết hợp R và Python trong data science","type":"post"},{"authors":["Cuong Sai"],"categories":[],"content":"Khoa học dữ liệu (data science, DS) là một trong những ngành đang có nhu cầu tuyển dụng cao ở thời điểm hiện tại cũng như trong tương lai xa. Nhà khoa học dữ liệu (data scientist) được Harvard Business Review đánh giá là “công việc hấp dẫn nhất thế kỷ 21”.\nVậy DS là gì? Trong thực tế một định nghĩa chính xác về DS không tồn tại, đây là một khái niệm liên ngành và rất rộng. DS là một lĩnh vực về các quá trình và các hệ thống trích rút tri thức hoặc hiểu biết dữ liệu ở các dạng khác nhau với biên độ rộng của các ngành như: Toán học, khoa học thống kê, khoa học thông tin, khoa học máy tính và lĩnh vực chuyên môn cụ thể. Bao gồm xử lý tín hiệu, lý thuyết xác suất thống kê, học máy, khai phá dữ liệu, cơ sở dữ liệu, kỹ thuật thông tin, nhận dạng mẫu, trực quan dữ liệu, các phân tích dự đoán, lý thuyết quyết định, kho dữ liệu, nén dữ liệu, lập trình máy tính, trí tuệ nhân tạo và siêu máy tính. Có thể nói \u0026ldquo;Một nhà khoa học dữ liệu là người giỏi hơn về thống kê so với những kỹ sư phát triển phần mềm và giỏi hơn về lập trình so với những nhà thống kê học.\u0026rdquo; Về bản chất có thể hiểu khoa học dữ liệu là ngành giúp chúng ta tạo ra giá trị từ dữ liệu với hai nhiệm vụ chính:\n Thu thập và xử lý dữ liệu để tìm ra những insights có giá trị. Giải thích, trình bày những insights đó cho các bên có liên quan để chuyển hóa isights thành hành động. Xuât phát từ tên gọi DS ta có hai thành phần cấu thành là data và science:\n Data: Là thành phần thứ nhất của cụm từ data science, thiếu nó thì tất cả các quá trình tiếp theo đều không thể thực hiện. Sau khi đã có đầy đủ dữ liệu cần thiết, trước khi sử dụng, công việc đầu tiên bạn cần làm là làm sạch và biến đổi dữ liệu - bước quan trọng nhất trong phân tích dữ liệu, nó chiếm đến 80% tổng số thời gian thực hiện phân tích.\n Science: Chúng ta đã có dữ liệu vậy bây giờ làm gì với chúng? Đó là phân tích, trích rút các quy luật có ích và làm sao có để có thể sử dụng chúng một cách hiệu quả. Ở đây các lĩnh vực sẽ giúp chúng ta như là thống kê, máy học, học sâu, tối ưu. Máy học giúp chúng ta tìm ra các quy luật trong dữ liệu để có thể dự báo thông tin cần thiết với đối tượng mói sau đó.\n DS và trí tuệ nhân tạo (Artificial Intelligence, AI) thường bị đánh tráo khái niệm. Để phân biệt chính xác khái niệm về hai công nghệ này cũng như các khái niệm trong AI, các bạn hãy cùng tham khảo bài viết nhé! Cuối bài tôi sẽ giới thiệu 1 số ngôn ngữ lập trình cho khoa học dữ liệu.\n 1 Phân biệt các khái niệm Data Scinece, Artificial Intelligence, machine learning và deep learning\nThực ra các lĩnh vực này đều có sự liên quan, chồng chéo đan xen với nhau. AI là một trong các công cụ cho DS. DS sử dụng AI trong các hoạt động của mình, tuy nhiên chắc chắn nó không bao hàm AI. Hay nói cách khác trong DS có sự đóng góp bởi một số khía cạnh của AI nhưng lại không phản ánh tất cả về AI. Hình dưới đây mô tả mối quan hệ của các khái niệm này:\nsource: Gmggroup.org\nAI là một ngành khoa học được sinh ra với mục đích nhằm làm cho máy móc do con người tạo ra có những khả năng của trí tuệ và trí thông minh của con người - thông minh nhân tạo, tiêu biểu như biết suy nghĩ và lập luận để giải quyết vấn đề, biết giao tiếp do hiểu ngôn ngữ và tiếng nói, biết học và tự thích nghi,\u0026hellip;. Ý tưởng về AI xuất hiện vào những năm 1950 khi một nhóm những người tiên phong trong lĩnh vực khoa học máy tính non trẻ tự đặt ra cho mình câu hỏi, liệu có thể làm cho máy tính biết suy nghĩ? - hệ quả của câu hỏi đó chính là những gì chúng ta đang học trong ngày hôm nay. Machine Learning và Deep Learning chính là phương tiện, công cụ để đạt được mục tiêu của AI.\nĐể hiểu về Machine Learning và Deep Learning trước hết chúng ta hãy cùng tìm hiểu khái niệm học biểu diễn (representation learning) từ dữ liệu. Trong cuộc sống hàng ngày, hầu hết chúng ta đã quen thuộc với việc mô tả các sự vật, hiện tượng của thế giới bên ngoài qua các khái niệm, các con số, các giác quan,\u0026hellip; Nhưng mô tả đó được gọi là các biểu diễn (representation) của sự vật, hiện tượng. Máy học (machine learning) cũng vậy, mục đích của nó là tìm cách biến đổi dữ liệu đầu vào thành các đầu ra có ý nghĩa. Hay nói một cách khoa học, một mô hình machine learning sẽ ánh xạ dữ liệu từ một không gian biểu diễn vào một không gian biểu diễn khác mà trên đó chúng ta có thể hiểu rõ hơn về dữ liệu ban đầu. Chính vì vậy machine learning được gọi là học biểu diễn (representation learning). Cách học này đã tạo ra một new programming paradigm. Trong lập trình truyền thống, con người nhập các quy tắc rules (program) và dữ liệu để xử lý theo các quy tắc đó để thu được answers. Còn trong Machine learning thì con người sẽ nhập dữ liệu và answers tương ứng với dữ liệu đó, còn ở đầu ra sẽ thu được các rules - các mô hình machine learning. Các mô hình này sau đó có thể sử dụng cho dữ liệu mới để thu được các answers. Trong machine learning hệ thống sẽ được huấn luyện thay vì lập trình rõ ràng. Nhiệm vụ chính của Machine learning chính là tự động tìm các phương pháp biến đổi dữ liệu đầu vào. Các phương pháp này có thể là thay đổi hệ tọa độ, hay là xử dụng các phép chiếu,\u0026hellip;\nCùng một sự vật, hiện tượng có thể có nhiều cách biểu diễn khác nhau. Deep Learning ở đây cũng vậy, nó chính là một ngành nhỏ của Machine Learning: xử dụng cách tiếp cận mởi để tìm kiếm phương thức biểu diễn dữ liệu - bằng cách học liên tiếp các qua các lớp (layers) hay gọi là mạng thần kinh nhân tạo (Neural Network). Chữ Deep trong Deep Learning không có nghĩa là phương pháp này cho phép hiểu sâu hơn, mà chỉ để thể hiện cách biểu diễn dữ liệu qua nhiều lớp. Số lượng các lớp tạo thành một mô hình deep learning được gọi là chiều sâu (depth) của mô hình đó.\n 2 Ngôn ngữ lập trình cho khoa học dữ liệu\nChọn ngôn ngữ nào để bắt đầu sự nghiệp Khoa học dữ liệu sẽ có nhiều thử thách đối với bạn. Có một số ngôn ngữ phục vụ cho ngành này phải kể đến những ngôn ngữ lập trình sau:\nR: là một trong những platforms mạnh cho học máy, thống kê và phân tích dữ liệu được phát triển và sử dụng bởi các nhà khoa học thống kê và phân tích dữ liệu hàng đầu trên thế giới. Nếu bạn muốn đi sâu vào phân tích dữ liệu và thống kê, thì R là ngôn ngữ dành cho bạn.Ngôn ngữ này đã có sự tăng trưởng vượt bậc khi phân tích dữ liệu và khoa học dữ liệu trở nên phổ biến hơn trong những năm gần đây. Hàng năm, số lượng người dùng R tăng hơn 40% và ngày càng có nhiều cơ quan và tổ chức sử dụng R trong hoạt động phân tích thường nhật Tuy nhiên trong thời rian gần đây độ phổ biến của nó đã giảm đi một chút.\nPython: là một ngôn ngữ lập trình đa mục đích, khá mạnh và bao gồm các công cụ có thể ứng dụng vào các môi trường yêu cầu hình tượng hoá mà có thể xuất hiện trên các trang web hoặc trên điện thoại. Python cung cấp hỗ trợ cho một số lượng lớn các thư viện học sâu như Pandas, Matplotlib, Tensorflow, Keras, scikit-learn, v.v. Để bắt đầu với ngành Data Science. Python là một trong những ngôn ngữ lập trình lý tưởng và nó cũng dễ đọc hơn R.\nJava: Ngôn ngữ lập trình Java gần đây được xếp hạng một trong những ngôn ngữ được yêu thích và đa năng nhất để viết, dựa vào bản khảo sát từ WP Engine. Nó cũng là một ngôn ngữ lập trình đa mục đích, được thiết kế riêng để càng ít phụ thuộc vào việc thực thi càng tốt. Nó có thể được sử dụng để xây dựng mọi thứ, đặc biệt là các nền tảng có thể mở rộng, nền tảng đa luồng (multithread) và có nền tảng người dùng mạnh mẽ. ác framework như Apache Spark, Hadoop và Hive ngày càng phổ biến trong môi trường thương mại, làm cho Java trở thành một trong những ngôn ngữ được các nhà khoa học dữ liệu yêu cầu. Kiến thức về Java sẽ tạo điều kiện cho bạn điều chỉnh và duy trì các nền tảng dữ liệu lớn như Hadoop được viết bằng cùng một ngôn ngữ.\nNgoài ra còn một số ngôn ngữ khác như là Julia, Scala, \u0026hellip;\n Tham khảo:\n The differences between Data Science, Artificial Intelligence, Machine Learning, and Deep Learning\n","date":1502928000,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1502928000,"objectID":"01f1e18610006559efc38cc712f55236","permalink":"/post/2020-08-17-khai-niem-co-ban/","publishdate":"2017-08-17T00:00:00Z","relpermalink":"/post/2020-08-17-khai-niem-co-ban/","section":"post","summary":"Khái niệm Data Science, Artificial Intelligence, Machine Learning, Deep Learning","tags":[],"title":"Mở đầu về khoa học dữ liệu. So sánh các khái niệm khái niệm Artificial Intelligence, Machine Learning và Deep Learning","type":"post"},{"authors":null,"categories":["R"],"content":"\rR Markdown\rThis is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.rstudio.com.\nYou can embed an R code chunk like this:\nsummary(cars)\r## speed dist ## Min. : 4.0 Min. : 2.00 ## 1st Qu.:12.0 1st Qu.: 26.00 ## Median :15.0 Median : 36.00 ## Mean :15.4 Mean : 42.98 ## 3rd Qu.:19.0 3rd Qu.: 56.00 ## Max. :25.0 Max. :120.00\rfit \u0026lt;- lm(dist ~ speed, data = cars)\rfit\r## ## Call:\r## lm(formula = dist ~ speed, data = cars)\r## ## Coefficients:\r## (Intercept) speed ## -17.579 3.932\r\rIncluding Plots\rYou can also embed plots. See Figure 1 for example:\npar(mar = c(0, 1, 0, 1))\rpie(\rc(280, 60, 20),\rc(\u0026#39;Sky\u0026#39;, \u0026#39;Sunny side of pyramid\u0026#39;, \u0026#39;Shady side of pyramid\u0026#39;),\rcol = c(\u0026#39;#0292D8\u0026#39;, \u0026#39;#F7EA39\u0026#39;, \u0026#39;#C4B632\u0026#39;),\rinit.angle = -50, border = NA\r)\r\rFigure 1: A fancy pie chart.\r\r\r","date":1437703994,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":1437703994,"objectID":"10065deaa3098b0da91b78b48d0efc71","permalink":"/post/2015-07-23-r-rmarkdown/","publishdate":"2015-07-23T21:13:14-05:00","relpermalink":"/post/2015-07-23-r-rmarkdown/","section":"post","summary":"R Markdown\rThis is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see http://rmarkdown.","tags":["R Markdown","Plot","Regression"],"title":"Mở đầu với R Markdown","type":"post"},{"authors":null,"categories":null,"content":"My blog posts are under an Attribution-ShareAlike 4.0 International Creative Commons License.\n ","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"18d05a63a1c8d7ed973cc51838494e41","permalink":"/license/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/license/","section":"","summary":"My blog posts are under an Attribution-ShareAlike 4.0 International Creative Commons License.\n ","tags":null,"title":"LICENSE: CC BY-SA","type":"page"},{"authors":null,"categories":null,"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"a3614d944aeab6d541f0abe4c02e8f65","permalink":"/about-me/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/about-me/","section":"","summary":"About me","tags":null,"title":"About me","type":"widget_page"},{"authors":null,"categories":null,"content":"1. Data Wrangling Đang cập nhật\u0026hellip;\n2. Data Visualization Đang cập nhật\u0026hellip;\n3. Machine Learning Đang cập nhật\u0026hellip;\n4. Deep Learning Đang cập nhật\u0026hellip;\n","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"cffe61ea5973a6df9328af0d54e7cbf0","permalink":"/tutorials/python-tutorials/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/tutorials/python-tutorials/","section":"tutorials","summary":"Khoa học dữ liệu với ngôn ngữ R","tags":null,"title":"R Tutorials","type":"widget_page"},{"authors":null,"categories":null,"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"4c9bd5043ebff822f29714e0434b7d97","permalink":"/tutorials/r-tutorials/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/tutorials/r-tutorials/","section":"tutorials","summary":"Khoa học dữ liệu với ngôn ngữ R","tags":null,"title":"R Tutorials","type":"widget_page"},{"authors":null,"categories":null,"content":"","date":-62135596800,"expirydate":-62135596800,"kind":"page","lang":"en","lastmod":-62135596800,"objectID":"46da4592a1ed147a855765c788b8f4c9","permalink":"/tutorials/statistics/","publishdate":"0001-01-01T00:00:00Z","relpermalink":"/tutorials/statistics/","section":"tutorials","summary":"Khoa học dữ liệu với ngôn ngữ R","tags":null,"title":"R Tutorials","type":"widget_page"}]