File size: 12,934 Bytes
f144dc6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
# Statistics
 # - Thống kê là khoa học phân tích dữ liệu.
 # - Khi tạo ra 1 mô hình dự đoán => phải đánh giá độ tin cậy của dự đoán đó.
 # - Suy cho cùng, một dự đoán có giá trị nếu chúng ta không thể tin cậy vào nó.

# Các phép tính quan trọng trong một data set:
''' 

Count

Sum

Standard Deviation(std)

Percentile

Average

Etc...

(Đây là điểm khởi đầu quan trọng để làm quen với dữ liệu).

'''

# Sử dụng hàm  describe()  trong Python để tóm tắt dữ liệu:
import pandas as pd
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
print(full_health_data.describe())

# Thống kê phần trăm(Statistics Percentiles)
 # - Có 3 loại phần trăm: 25%, 50%, 75%
'''

Chúng ta hãy thử giải thích bằng một số ví dụ, sử dụng Average_Pulse.

 Phần trăm thứ 25 của Average_Pulse có nghĩa là 25% trong tổng số buổi tập có nhịp mạch trung bình là 100 nhịp mỗi phút hoặc thấp hơn. 

 Nếu đảo ngược câu lệnh, điều đó có nghĩa là 75% trong tổng số buổi tập có nhịp mạch trung bình là 100 nhịp mỗi phút hoặc cao hơn.

''' 
# TASK: Tìm phần trăm thứ 10% cho Max_Pulse
import pandas as pd
import numpy as np
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
Max_Pulse = full_health_data['Max_Pulse']
percentile10 = np.percentile(Max_Pulse, 10)
print(percentile10)
'''Giải thích:

Max_Pulse = full_health_data["MaxPulse"] - Tách biến MaxPulse khỏi toàn bộ tập dữ liệu sức khỏe.

np.percentile() được sử dụng để xác định rằng chúng ta muốn phần trăm thứ 10% từ Max_Pulse.

Phần trăm thứ 10% của Max_Pulse là 119. Điều này có nghĩa là 10% trong số tất cả các buổi đào tạo có Max_Pulse là 119 hoặc thấp hơn. 

'''

# Độ lệch chuẩn(Standard Deviation)
 # - Độ lệch chuẩn là con số mô tả mức độ phân tán của các quan sát.
'''

Một hàm toán học sẽ gặp khó khăn trong việc dự đoán các giá trị chính xác nếu các quan sát "phân tán". Độ lệch chuẩn là thước đo mức độ không chắc chắn.

Độ lệch chuẩn thấp có nghĩa là hầu hết các con số đều gần với giá trị trung bình (trung bình cộng).

Độ lệch chuẩn cao có nghĩa là các giá trị được phân bổ trên một phạm vi rộng hơn.

'''
 # Mẹo: Độ lệch chuẩn thường được biểu thị bằng ký hiệu Sigma: σ

# Chúng ta có thể sử dụng hàm  std()  từ Numpy để tìm độ lệch chuẩn của một biến
 # Ví dụ:
import pandas as pd
import numpy as np
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
std = np.std(full_health_data)
print(std)

# Hệ số biến thiên(Coefficient of Variation)
 # - Hệ số biến thiên được sử dụng để biết độ lệch chuẩn lớn đến mức nào.
 # Về mặt toán học, hệ số biến thiên được định nghĩa như sau:
 # Coefficient of Variation = Standard Deviation / Mean
 # Ví dụ:
import pandas as pd
import numpy as np
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
coefficient_of_variation = np.std(full_health_data) / np.mean(full_health_data)
print(coefficient_of_variation)
'''

Chúng ta thấy rằng các biến Duration, Calorie_Burnage và Hours_Work có Độ lệch chuẩn cao so với Max_Pulse, Average_Pulse và Hours_Sleep.

'''

# Phương sai thống kê(Statistics Variance)
 # - Phương sai là một con số khác cho biết mức độ phân tán của các giá trị.
'''

Trên thực tế, nếu lấy căn bậc hai của phương sai, bạn sẽ có độ lệch chuẩn. Hoặc ngược lại, nếu nhân độ lệch chuẩn với chính nó, bạn sẽ có phương sai!

'''
 # Mẹo: Phương sai thường được biểu thị bằng ký hiệu Sigma Square: σ^2
'''

Bước 1 để tính phương sai: Tìm giá trị trung bình

Bước 2: Đối với mỗi giá trị - Tìm sự khác biệt so với giá trị trung bình

Bước 3: Đối với mỗi hiệu - Tìm giá trị bình phương

ưu ý: Chúng ta phải bình phương các giá trị để có được tổng mức chênh lệch.

Bước 4: Phương sai là số trung bình của các giá trị bình phương này

'''
# Sử dụng Python để tìm phương sai của health_data
 # - Sử dụng hàm  var()  từ Numpy để tìm phương sai(hãy nhớ rằng bây giờ chúng ta sử dụng tập dữ liệu đầu tiên với 10 quan sát)
import pandas as pd
import numpy as np
health_data = pd.read_csv('calculate-var-statistics.csv', header=0, sep=',')
var = np.var(health_data)
print(var)

# Sử dụng Python để tìm phương sai của toàn bộ tập dữ liệu
import pandas as pd
import numpy as np
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
full_var = np.var(full_health_data)
print(full_var)

# Thống kê tương quan(Statistics Correlation)
 # - Hệ số tương quan đo lường mối quan hệ giữa hai biến.
 # - Hệ số tương quan không bao giờ được nhỏ hơn -1 hoặc lớn hơn 1.
'''

1 = có mối quan hệ tuyến tính hoàn hảo giữa các biến (như Average_Pulse so với Calorie_Burnage)

0 = không có mối quan hệ tuyến tính giữa các biến

-1 = có mối quan hệ tuyến tính âm hoàn hảo giữa các biến (ví dụ: Làm việc ít giờ hơn dẫn đến đốt cháy nhiều calo hơn trong một buổi tập luyện)

'''

# Ví dụ về mối quan hệ tuyến tính hoàn hảo (Hệ số tương quan = 1)
  # Three lines to make our compiler able to draw:
# import sys
# import matplotlib
# matplotlib.use('Agg')

import pandas as pd
import matplotlib.pyplot as plt

health_data = pd.read_csv('data-correlation-coefficient.csv', header=0, sep=',')
health_data.plot(x='Average_Pulse', y='Calorie_Burnage', title='Correlation Coefficient = 1', kind='scatter')
plt.show()

  # Two lines to make our compiler able to draw:
# plt.savefig(sys.stdout.buffer) # buffer là bộ nhớ đệm
# sys.stdout.flush() # Hàm này ép Python in ra màn hình ngay lập tức thay vì đợi

# Ví dụ về mối quan hệ tuyến tính âm hoàn hảo (Hệ số tương quan = -1)
  # Three lines to make our compilers able to draw:
# import sys
# import matplotlib
# matplotlib.use('Agg')

import pandas as pd
import matplotlib.pyplot as plt
negative_corr = {'Hours_Work_Before_Training':[10,9,8,7,6,5,4,3,2,1], 'Calorie_Burnage':[220,240,260,280,300,320,340,360,380,400]}
negative_corr = pd.DataFrame(data=negative_corr)
negative_corr.plot(x='Hours_Work_Before_Training', y='Calorie_Burnage', title='Correlation Coefficient = -1', kind='scatter')
plt.show()
  # Two lines to make our compiler able to draw:
# plt.savefig(sys.stdout.buffer) # buffer là bộ nhớ đệm
# sys.stdout.flush() # Hàm này ép Python in ra màn hình ngay lập tức thay vì đợi

# Ví dụ về Không có mối quan hệ tuyến tính (Hệ số tương quan = 0)
  # Three lines to make our compiler able to draw:
# import sys
# import matplotlib
# matplotlib.use('Agg')

import pandas as pd
import matplotlib.pyplot as plt
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
full_health_data.plot(x='Duration', y='Max_Pulse', title='Correlation Coefficient = 0', kind='scatter')
plt.show()
  # Two lines to make our compiler able to draw:
# plt.savefig(sys.stdout.buffer) # buffer là bộ nhớ đệm
# sys.stdout.flush() # Hàm này ép Python in ra màn hình ngay lập tức thay vì đợi
'''

Có thể thêm các tham số khác trong .plot : figsize, color, style, legend, grid, xlabel, ylabel, xlim, ylim, marker, alpha, linewidth, fontsize, rot, subplots, colormap, sharex, sharey

'''

# Ma trận tương quan thống kê(Statistics Correlation Matrix)
 # - Ma trận là một mảng số được sắp xếp theo hàng và cột.
 # - Ma trận tương quan đơn giản là một bảng hiển thị hệ số tương quan giữa các biến.
# Ma trận tương quan trong Python
 # - Sử dụng hàm  .corr()  trong Python để tạo ma trận tương quan. 
 # - Sử dụng hàm  round()  để làm tròn kết quả đầu ra thành hai chữ số thập phân.
 # Ví dụ:
import pandas as pd
full_health_data = pd.read_csv('data.csv', header=0, sep=',')
Corr_matrix = round(full_health_data.corr(),2)
print(Corr_matrix)

# Sử dụng Bản đồ nhiệt
 # - Chúng ta có thể sử dụng Bản đồ nhiệt để trực quan hóa mối tương quan giữa các biến:
'''

Hệ số tương quan càng gần 1 thì hình vuông càng xanh.

Hệ số tương quan càng gần -1 thì hình vuông càng có màu nâu.

'''
 # - Sử dụng Seaborn để tạo bản đồ nhiệt
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
full_health_data = pd.read_csv("data.csv", header=0, sep=",")
correlation_full_health = full_health_data.corr()
axis_corr = sns.heatmap(correlation_full_health, vmin=-1, vmax=1, center=0, cmap=sns.diverging_palette(50, 500, n=500), square=True)
plt.show()
'''

Giải thích ví dụ:

Nhập thư viện seaborn dưới dạng sns.

Sử dụng bộ dữ liệu full_health_data.

Sử dụng sns.heatmap() để cho Python biết rằng chúng ta muốn có bản đồ nhiệt để trực quan hóa ma trận tương quan.

Sử dụng ma trận tương quan. Xác định giá trị cực đại và cực tiểu của bản đồ nhiệt. Xác định 0 là tâm.

Xác định màu sắc bằng sns.diverging_palette. n=500 nghĩa là chúng ta muốn có 500 loại màu trong cùng một bảng màu.

square = True nghĩa là chúng ta muốn nhìn thấy hình vuông.

'''

# Thống kê tương quan so với nhân quả(Statistics Correlation vs Causality)
 # - Hệ số tương quan đo lường mối quan hệ số giữa hai biến.
 # - Hệ số tương quan cao (gần 1) không có nghĩa là chúng ta có thể chắc chắn kết luận được mối quan hệ thực sự giữa hai biến.
'''

Một ví dụ điển hình:

Vào mùa hè, doanh số bán kem ở bãi biển tăng lên

Đồng thời, tai nạn đuối nước cũng gia tăng

Liệu điều này có nghĩa là việc tăng doanh số bán kem là nguyên nhân trực tiếp dẫn đến gia tăng số vụ tai nạn đuối nước không?

'''

# Ví dụ về Bãi biển trong Python
 # - Ở đây, chúng tôi xây dựng một tập dữ liệu hư cấu để bạn thử:
  # Three lines to make our compiler able to draw:
# import sys
# import matplotlib
# matplotlib.use('Agg')

import pandas as pd
import matplotlib.pyplot as plt
Drowning_Accident = [20,40,60,80,100,120,140,160,180,200]
Ice_Cream_Sale = [20,40,60,80,100,120,140,160,180,200]
Drowning = {'Drowning_Accident': [20,40,60,80,100,120,140,160,180,200], "Ice_Cream_Sale": [20,40,60,80,100,120,140,160,180,200]}
Drowning = pd.DataFrame(data = Drowning)
Drowning.plot(x='Ice_Cream_Sale', y='Drowning_Accident', kind='scatter')
plt.show()
correlation_beach = Drowning.corr()
print(correlation_beach)
  # Two lines to make our compiler able to draw:
# plt.savefig(sys.stdout.buffer)
# sys.stdout.flush()
  
# Tương quan so với nhân quả - Ví dụ về bãi biển
'''

Nói cách khác: chúng ta có thể sử dụng doanh số bán kem để dự đoán tai nạn đuối nước không?



Câu trả lời là - Có lẽ là không.

Có khả năng là hai biến này vô tình có mối tương quan với nhau.

Vậy nguyên nhân nào gây ra chết đuối?



Người bơi không có kỹ năng

Sóng

Chuột rút

Rối loạn co giật

Thiếu sự giám sát

Lạm dụng rượu

vân vân.

'''
'''

Chúng ta hãy đảo ngược lập luận:

Hệ số tương quan thấp (gần bằng 0) có nghĩa là sự thay đổi của x không ảnh hưởng đến y không?

Quay lại câu hỏi:

Chúng ta có thể kết luận rằng Average_Pulse không ảnh hưởng đến Calorie_Burnage vì hệ số tương quan thấp không?

Câu trả lời là không.

'''
'''

Có một sự khác biệt quan trọng giữa tương quan và quan hệ nhân quả:

- Hệ số tương quan là một con số đo lường mức độ liên quan chặt chẽ của dữ liệu

- Nguyên nhân là kết luận rằng x gây ra y.

'''
 # Mẹo: Luôn suy nghĩ nghiêm túc về khái niệm nhân quả khi đưa ra dự đoán!