TIL 01 | Data Manip 02 | Datasets Basics
Section đầu tiên, rất đơn giản thôi, làm quen và khởi động. Tuy nhiên đối với người mới bắt đầu lại như tôi thì cái gì cũng nên bài bản một chút.
Loading Datasets
Ở bài đầu tiên sẽ sử dụng data từ Kaggle. Do sử dụng Google Colab nên tôi sẽ tìm cách load thẳng mà không phải tải về. Link dataset: https://www.kaggle.com/ronitf/heart-disease-uci
Kaggle có sẵn api cho việc load data, đầu tiên tôi muốn download thẳng về Google Drive vì dataset quá nhẹ (11kB), nhưng khi bấm vào tải về thì Kaggle bắt đăng nhập. Đằng nào thì cũng phải dùng tới cách load từ api nên tôi bỏ thời gian ra để xem và thử luôn.
Tạo file kaggle.json
và đưa vào thư mục trên Drive. Sau đó sử dụng:
import os
## setting path for kaggle.json
os.environ['KAGGLE_CONFIG_DIR'] = "/content/drive/My Drive/Data/.kaggle/"
import kaggle
!kaggle datasets download -d ronitf/heart-disease-uci -p "/content/drive/My Drive/Data/.kaggle/" --unzip
Downloading heart-disease-uci.zip to /content/drive/My Drive/Data/.kaggle
0% 0.00/3.40k [00:00<?, ?B/s]
100% 3.40k/3.40k [00:00<00:00, 512kB/s]
Sau một hồi xoay xở thì tôi cũng tìm ra một cách khá ngắn gọn như trên. Một vài chú ý:
- library kaggle đã được install sẵn trong Colab, không cần
!pip install kaggle
nữa - environment variable
KAGGLE_CONFIG_DIR
khi đổi đường dẫn cần Restart lại Colab - Tham khảo thêm tại: https://github.com/Kaggle/kaggle-api
Thử dùng pandas để đọc bộ dữ liệu:
import pandas as pd
filename = "/content/drive/My Drive/Data/.kaggle/heart.csv"
df = pd.read_csv(filename)
df.head()
age | sex | cp | trestbps | chol | fbs | restecg | thalach | exang | oldpeak | slope | ca | thal | target | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 63 | 1 | 3 | 145 | 233 | 1 | 0 | 150 | 0 | 2.3 | 0 | 0 | 1 | 1 |
1 | 37 | 1 | 2 | 130 | 250 | 0 | 1 | 187 | 0 | 3.5 | 0 | 0 | 2 | 1 |
2 | 41 | 0 | 1 | 130 | 204 | 0 | 0 | 172 | 0 | 1.4 | 2 | 0 | 2 | 1 |
3 | 56 | 1 | 1 | 120 | 236 | 0 | 1 | 178 | 0 | 0.8 | 2 | 0 | 2 | 1 |
4 | 57 | 0 | 0 | 120 | 354 | 0 | 1 | 163 | 1 | 0.6 | 2 | 0 | 2 | 1 |
Course có trình bày thêm cách sử dụng numpy
hoặc manual function để load data, tuy nhiên 99% thời gian là sử dụng pd.read_csv
, nên 2 cách kia bỏ qua, chưa cần nhớ.
Ngoài ra còn có pd.read_*
cho các trường hợp khác (pd.read_excel
, pd.read_pickle
, etc). Nếu muốn lấy array từ dataframe, sử dụng to_numpy()
Tạo DataFrames
Cách đơn giản để tạo dataframe nhanh cho các thử nghiệm
import numpy as np
df2 = pd.DataFrame(np.random.random(size=(100000, 4)),columns=["A", "B", "C", "D"])
df2.head()
A | B | C | D | |
---|---|---|---|---|
0 | 0.327064 | 0.620241 | 0.598070 | 0.411404 |
1 | 0.916305 | 0.181835 | 0.027234 | 0.656636 |
2 | 0.434116 | 0.866313 | 0.637173 | 0.685788 |
3 | 0.336978 | 0.508938 | 0.051990 | 0.987994 |
4 | 0.007570 | 0.027970 | 0.232108 | 0.020192 |
Save data: Sự khác biệt về thời gian khi save dưới dạng csv
và pkl
(pickle).
HDF5 dùng khi load dữ liệu lớn được nhanh hơn. Pickle nhanh hơn CSV, nhưng không dễ đọc bằng CSV.
Vì vậy, cho các bộ dữ liệu nhỏ và vừa, csv
và pickle
vẫn là lựa chọn tốt nhất.
df2.to_csv("test_data.csv", index=False, float_format="%0.4f")
df2.to_pickle("test_data.pkl")
Khám phá dữ liệu
Mục này chúng ta sẽ sử dụng dữ liệu về các du hành gia từ NASA: https://www.kaggle.com/nasa/astronaut-yearbook
Load dữ liệu từ Kaggle:
!kaggle datasets download -d nasa/astronaut-yearbook -p "/content/drive/My Drive/Data/.kaggle/" --unzip
df = pd.read_csv("/content/drive/My Drive/Data/.kaggle/astronauts.csv")
Downloading astronaut-yearbook.zip to /content/drive/My Drive/Data/.kaggle
0% 0.00/20.3k [00:00<?, ?B/s]
100% 20.3k/20.3k [00:00<00:00, 2.84MB/s]
Xem 2 dòng đầu của datasets:
df.head(2)
Name | Year | Group | Status | Birth Date | Birth Place | Gender | Alma Mater | Undergraduate Major | Graduate Major | Military Rank | Military Branch | Space Flights | Space Flight (hr) | Space Walks | Space Walks (hr) | Missions | Death Date | Death Mission | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | Joseph M. Acaba | 2004.0 | 19.0 | Active | 5/17/1967 | Inglewood, CA | Male | University of California-Santa Barbara; Univer... | Geology | Geology | NaN | NaN | 2 | 3307 | 2 | 13.0 | STS-119 (Discovery), ISS-31/32 (Soyuz) | NaN | NaN |
1 | Loren W. Acton | NaN | NaN | Retired | 3/7/1936 | Lewiston, MT | Male | Montana State University; University of Colorado | Engineering Physics | Solar Physics | NaN | NaN | 1 | 190 | 0 | 0.0 | STS 51-F (Challenger) | NaN | NaN |
Nhìn thử dòng cuối:
df.tail(1)
Name | Year | Group | Status | Birth Date | Birth Place | Gender | Alma Mater | Undergraduate Major | Graduate Major | Military Rank | Military Branch | Space Flights | Space Flight (hr) | Space Walks | Space Walks (hr) | Missions | Death Date | Death Mission | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
356 | George D. Zamka | 1998.0 | 17.0 | Retired | 6/29/1962 | Jersey City, NJ | Male | US Naval Academy; Florida Institute of Technology | Mathematics | Engineering Management | Colonel | US Marine Corps (Retired) | 2 | 692 | 0 | 0.0 | STS-120 (Discovery), STS-130 (Endeavor) | NaN | NaN |
Thông tin về các cột trong dữ liệu:
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 357 entries, 0 to 356
Data columns (total 19 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Name 357 non-null object
1 Year 330 non-null float64
2 Group 330 non-null float64
3 Status 357 non-null object
4 Birth Date 357 non-null object
5 Birth Place 357 non-null object
6 Gender 357 non-null object
7 Alma Mater 356 non-null object
8 Undergraduate Major 335 non-null object
9 Graduate Major 298 non-null object
10 Military Rank 207 non-null object
11 Military Branch 211 non-null object
12 Space Flights 357 non-null int64
13 Space Flight (hr) 357 non-null int64
14 Space Walks 357 non-null int64
15 Space Walks (hr) 357 non-null float64
16 Missions 334 non-null object
17 Death Date 52 non-null object
18 Death Mission 16 non-null object
dtypes: float64(3), int64(3), object(13)
memory usage: 53.1+ KB
Một hàm như cái tên của nó:
df.describe()
Year | Group | Space Flights | Space Flight (hr) | Space Walks | Space Walks (hr) | |
---|---|---|---|---|---|---|
count | 330.000000 | 330.000000 | 357.000000 | 357.000000 | 357.000000 | 357.000000 |
mean | 1985.106061 | 11.409091 | 2.364146 | 1249.266106 | 1.246499 | 7.707283 |
std | 13.216147 | 5.149962 | 1.428700 | 1896.759857 | 2.056989 | 13.367973 |
min | 1959.000000 | 1.000000 | 0.000000 | 0.000000 | 0.000000 | 0.000000 |
25% | 1978.000000 | 8.000000 | 1.000000 | 289.000000 | 0.000000 | 0.000000 |
50% | 1987.000000 | 12.000000 | 2.000000 | 590.000000 | 0.000000 | 0.000000 |
75% | 1996.000000 | 16.000000 | 3.000000 | 1045.000000 | 2.000000 | 12.000000 |
max | 2009.000000 | 20.000000 | 7.000000 | 12818.000000 | 10.000000 | 67.000000 |
Xem kích thước của dataframe:
df.shape
(357, 19)
Tương quan giữa các đại lượng:
df.corr()
Year | Group | Space Flights | Space Flight (hr) | Space Walks | Space Walks (hr) | |
---|---|---|---|---|---|---|
Year | 1.000000 | 0.980934 | 0.036420 | 0.331386 | 0.210073 | 0.253502 |
Group | 0.980934 | 1.000000 | -0.011386 | 0.325683 | 0.217891 | 0.261384 |
Space Flights | 0.036420 | -0.011386 | 1.000000 | 0.325233 | 0.257073 | 0.258642 |
Space Flight (hr) | 0.331386 | 0.325683 | 0.325233 | 1.000000 | 0.472796 | 0.454408 |
Space Walks | 0.210073 | 0.217891 | 0.257073 | 0.472796 | 1.000000 | 0.985755 |
Space Walks (hr) | 0.253502 | 0.261384 | 0.258642 | 0.454408 | 0.985755 | 1.000000 |
Thông tin cụ thể về giá trị của 1 cột:
df["Year"].value_counts()
1996.0 35
1978.0 35
1998.0 25
1990.0 23
1966.0 19
1995.0 19
1980.0 19
1992.0 19
1984.0 18
2000.0 17
1987.0 15
1963.0 14
1985.0 13
1967.0 11
2004.0 11
2009.0 9
1962.0 8
1969.0 7
1959.0 7
1965.0 6
Name: Year, dtype: int64
TIL
Bài này thì khá là nhẹ nhàng, tôi có thể tóm gọn lại những gì mình học được như sau:
- Load datasets từ Kaggle về Google Drive và chạy trong Colab
- Save Datasets
- Khám phá DataFrame với một vài hàm siêu đơn giản
Đó, ít thế thôi, lần đầu làm quen cũng mất thời gian lắm.