Data explore cơ bản

Posted by Hao Do on August 28, 2022

Data explore cơ bản

Một số hàm cơ bản trong quá trình phân tích dữ liệu

Khai báo thư viện

1
2
3
4
5
6
7
8
import pandas as pd
import numpy as np
import seaborn as sns
import os
import matplotlib.pyplot as plt

plt.style.use('seaborn-colorblind')
%matplotlib inline

Một số hàm hỗ trợ bổ sung

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
def get_dtypes(data, drop_col = []):
    # list columns kieu str, list columns kieu number, list all
    # data: dataframe
    # drop_col: bo mot so cot tuong ung.
    
    name_of_col = list(data.columns)
    num_var_list = []
    str_var_list = []
    all_var_list = []
    
    str_var_list = name_of_col.copy()
    
    for var in name_of_col:
        # check if column belongs to numeric type
        if data[var].dtypes in (np.int64, np.int32, np.float64, np.float32, np.double):
            str_var_list.remove(var)
            num_var_list.append(var)
    # drop the omit column from list
    for var in drop_col:
        if var in str_val_list:
            str_val_list.remove(var)
        if var in num_var_list:
            num_var_list.remove(var)
    
    all_var_list.extend(str_var_list)
    all_var_list.extend(num_var_list)
    
    return str_var_list, num_var_list, all_var_list

def describe(data, output_path = None):
    res = data.describe(include = 'all')
    if output_path is not None:
        output = os.path.join(output_path, 'describe.csv')
        res.to_csv(output)
        print('result saved at: ' + str(output))
    return res
def discrete_var_barplot(x, y, data, output_path = None):
    # ve bieu do bien roi rac x doi voi ham muc tieu y
    # default: bars show mean value of y
    plt.figure(figsize = (15, 10))
    sns.barplot(x = x, y = y, data = data)
    
    if output_path is not None:
        output = os.path.join(output_path, 'Barplot_' + str(x) + '_' + str(y) + '.png')
        plt.savefig(output)
        print('image saved at', str(output))
def discrete_var_countplot(x, data, output_path = None):
    # count value x 
    plt.figure(figsize = (15, 10))
    sns.countplot(x = x, data = data)
    if output_path is not None:
        output = os.path.join(output_path, 'Countplot_' + str(x) + '.png')
        plt.savefig(output)
        print('Image saved at', str(output))

def discrete_var_boxplot(x, y, data, output_path = None):
    # ve bieu do bien roi rac x doi voi ham muc tieu y
    # default: bars show mean value of y
    plt.figure(figsize = (15, 10))
    sns.boxplot(x = x, y = y, data = data)
    
    if output_path is not None:
        output = os.path.join(output_path, 'Boxplot_' + str(x) + '_' + str(y) + '.png')
        plt.savefig(output)
        print('image saved at', str(output))
def continuous_var_histplot(x, output_path = None, bins = None):
    # draw the histogram of a continuous variable x
    
    plt.figure(figsize = (15, 10))
    sns.histplot(data = x)
    if output_path is not None:
        output = os.path.join(output_path, 'Histplot_' + str(x.name) + '.png')
        plt.savefig(output)
        print('Image saved at', str(output))
def scatter_plot(x, y, data, output_path = None):
    plt.figure(figsize = (15, 10))
    sns.scatterplot(x = x, y = y, data = data)
    if output_path is not None:
        output = os.path.join(output_path, 'Scatter_plot_' + str(x.name) + '_' + str(y.name) + '.png')
        plt.savefig(output)
        print('Image saved at', str(output))
def correlation_plot(data, output_path = None):
    corrmat = data.corr() # correlation matrix
    fig, ax = plt.subplots()
    fig.set_size_inches(11, 11)
    sns.heatmap(corrmat, cmap = 'YlGnBu', linewidths = 0.5, annot = True)
    if output_path is not None:
        output = os.path.join(output_path, 'Corr_plot' + '.png')
        plt.savefig(output)
        print('Image saved at', str(output))
def heatmap(data, output_path = None, fmt = 'd'):
    fig, ax = plt.subplots()
    fig.set_size_inches(11, 11)
    sns.heatmap(data, cmap = 'YlGnBu', linewidths = .5, annot = True, fmt = fmt)
    if output_path is not None:
        output = os.path.join(output_path, 'Heatmap' + '.png')
        plt.savefig(output)
        print('Image saved at', str(output))

Đọc data dưới dạng csv

1
2
3
4
5
6
path = 'https://raw.githubusercontent.com/dophuchao/dophuchao.github.io/master/data/titanic.csv'
use_cols = [
    'Pclass', 'Sex', 'Age', 'Fare', 'SibSp', 'Survived'
]
data = pd.read_csv(path, usecols = use_cols)
data.head(3

Lấy types của từng cột tương ứng

1
2
3
4
str_var_list, num_var_list, all_var_list = get_dtypes(data)
print(str_var_list)
print(num_var_list)
print(all_var_list)

Mô tả các thành phần của các cột của dataframe

1
describe(data = data, output_path = r'./output/')

Biểu đồ Barplot (x, y),

Với từng giá trị của x, tính mean của y

1
discrete_var_barplot(x = 'Pclass', y ='Survived', data = data, output_path = r'./output/')

Biểu đồ countplot

Đếm số lượng các giá trị trong cột x

1
discrete_var_countplot(x = 'Pclass', data = data, output_path = r'./output/')

Biểu đồ box plot

Tương quan giữa hai cột x và y

1
2
3
# chu y tham so:
# min, 1st Quartile, Median, Mean, 3rd Quartile, Max
discrete_var_boxplot(x = 'Pclass', y ='Fare', data = data, output_path = r'./output/')

Biểu đồ histogram

1
continuous_var_histplot(x = data['Fare'], output_path = r'./output/')

Biểu đồ scatter_plot

Mức độ tương quan của x và y

1
2
# muc do tuong quan cua x, y
scatter_plot(x = data.Fare, y = data.Pclass, data = data, output_path = r'./output/')

Ma trận tương quan của các cột trong dataframe

1
correlation_plot(data = data, output_path = r'./output/')

Biểu đồ heatmap

Thể hiện tương quan dương, tương quan âm

1
2
3
4
flights = sns.load_dataset('flights')
print(flights.head(3))
flights = flights.pivot('month', 'year', 'passengers')
heatmap(data = flights, output_path = r'./output/')

Full ipynb

Tài liệu tham khảo

Machine learning cơ bản

Hết.