|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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).
|
|
|
'''
|
|
|
|
|
|
|
|
|
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())
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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!
|
|
|
'''
|
|
|
|
|
|
'''
|
|
|
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
|
|
|
'''
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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)
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
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.
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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?
|
|
|
'''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
'''
|
|
|
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.
|
|
|
'''
|
|
|
|