Cách Tính Mode Trong Thống Kê (Statistics) Cơ Bản, Bai02 Thong Ke_Mo_Ta
Chúng ta dùng Python để mày mò các số liệu thống kê, giúp ta hiểu hơn về tài liệu mà ta đang có. Trong bài này, tất cả chúng ta sẽ học các thước đo từ đơn thuần như trung bình ( Mean ), trung vị ( Median ), phân bổ đến những phần nâng cao như phương sai, độ lệch chuẩn, và phần cuối trình diễn thuật toán tính thông số đối sánh tương quan ( correlation coefficient ) . Đang xem : Cách tính mode trong thống kêI. Mean
Giá trị trung bình là một khái niệm tổng quát khi nói đến một tập số liệu. Khi nói đến bộ số liệu nào đó, tất cả chúng ta hay nhắc đến trung bình của bộ số liệu đó. Chúng ta đều hiểu thực chất của khái niệm trung bình là lấy tổng của dãy số cho trước sau đó chia cho độ dài của dãy số. Công thức tính mean cho một list X các số như sau
Ví dụ: Chúng ta có dãy số bên dưới đây thể hiện số tiền quyên góp của một tổ chức từ thiện trong 12 ngày qua, đơn vị USD:
100, 60, 70, 900, 100, 200, 500, 500, 503, 600, 1000, 1200 . Viết hàm để tính trung bình của một dãy số . def calculate_mean ( numbers ) : # 1 s = sum ( numbers ) # 2 N = len ( numbers ) # 3 mean = s / N # 4 return mean # 5 # Tạo mảng donations đại diện thay mặt cho số tiền quyên góp trong 12 ngàydonations = < 100, 60, 70, 900, 100, 200, 500, 500, 503, 600, 1000,1200 > mean_value = calculate_mean ( donations ) print ( “ Trung bình số tiền quyên góp là : “, mean_value ) # 1. Bước tiên phong ta xác lập hàm cần tính, đặt tên là calculate_mean ( ), hàm này sẽ nhận đối số numbers, là chuỗi các số cần tính trung bình . # 2. Sử dụng hàm sum ( ) để tính tổng dãy số cho trước . # 3. Sử dụng hàm len ( ) để tính chiều dài của dãy số cần tính . # 4. Tính trung bình của dãy số trên bằng cách lấy tổng chia cho chiều dài . # 5. Cuối cùng ta cho hàm trả về giá trị mean tính được . Kết quả Trung bình số tiền quyên góp là : 477.75II. Median
Số trung vị là 1 số ít đứng ở vị trí giữa trong dãy số đã được sắp xếp theo thứ tự tăng dần, median chia dãy số cho trước thành 2 nửa bằng nhau. Nếu độ dài của dãy số là số lẻ, thì số ở giữa là median, nếu chiều dài của dãy số là số chẵn thì median được xác lập bằng cách lấy trung bình của hai số ở giữa .Ví dụ: Chúng ta sử dụng lại dãy số liệu thể hiện số tiền quyên góp của một tổ chức từ thiện trong 12 ngày qua, đơn vị USD:
100, 60, 70, 900, 100, 200, 500, 500, 503, 600, 1000, 1200 Xây dựng hàm tính median . def calculate_median ( numbers ) : # 1 N = len ( numbers ) # 2 numbers.sort ( ) # 3 if N % 2 = = 0 : # 4 m1 = N / 2 mét vuông = ( N / 2 ) + 1 m1 = int ( m1 ) – 1 mét vuông = int ( mét vuông ) – 1 median = ( numbers + numbers ) / 2 else : # 5 m = ( N + 1 ) / 2 m = int ( m ) – 1 median = numbers return median # 6 donations = np.array ( < 100, 60, 70, 900, 100, 200, 500, 500, 503, 600, 1000,1200 > ) meadian_value = calculate_median ( donations ) print ( “ Trung vị số tiền quyên góp là : “, meadian_value ) # 1. Xác định hàm cần tính, đặt tên calculate_median ; hàm này sẽ nhận đối số là chuỗi số numbers . # 2. Tính chiều dài của chuỗi số numbers, đại diện thay mặt bởi biến N # 3. Sắp xếp chuỗi số numbers từ nhỏ đến lớn . # 4. Tính median : Nếu chiều dài của chuỗi số numbers là số lẻ, thì số trung vị là số ở vị trí chính giữa, nghĩa là ( N + 1 ) / 2. Nếu chiều dài của numbers là số chẵn thì lấy 2 thành phần ở giữa là N / 2 và ( N / 2 ) + 1, đại diện thay mặt bởi biến m1 và mét vuông. Sau đó, lấy phần nguyên của phép chia rồi trừ một để lấy được vị trí của 2 thành phần. Cuối cùng ta lấy giá trị trung bình của 2 phần từ vừa tìm được . # 5. Hàm trả về giá trị trung vị tính ở bước 4 Kết quả Trung vị số tiền quyên góp là : 500.0III. Mode
Mode trả về thành phần có số lần Open nhiều nhất trong dãy số cho trước. Ví dụ, ta có điểm thi toán của 20 học viên với thang 10 điểm : 7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10 Mode sẽ giúp ta vấn đáp thắc mắc : “ Điểm số nào được học viên đạt nhiều nhất ? ”. Ở ví dụ trên, quan sát cho tất cả chúng ta thấy được điểm 9 Open nhiều nhất. Do đó, mode = 9 . Cách tính mode được triển khai như sau : với mỗi giá trị trong chuỗi số, đếm số lần Open của giá trị đó. Sau đó, trả về giá trị mà có số lần Open nhiều nhất . Python phân phối hàm most_common ( ) để tính để tính số lần Open của một thành phần. Hàm này trả về một list các tuple ( phần_tử, số_lần_xuất_hiện ) được sắp xếp theo thứ tự giảm dần theo số_lần_xuất_hiện . # import packages Counter để đếm số lần Open của mỗi giá trị trong chuỗifrom collections import Counter # datapoints = < 7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10 > def calculate_mode ( numbers ) : # 1 c = Counter ( numbers ) # 2 mode = c. most_common ( 1 ) # 3 return mode < 0 > < 0 > # 4 print ( “ Mode của chuỗi số đã cho : “, calculate_mode ( points ) ) # 1. Xác đinh hàm cần tìm, đặt tên calculate_mode, hàm này nhận đối số numbers truyền vào . # 2. Dùng hàm counter để đếm số lần Open của mỗi thành phần trong chuỗi, đại diện thay mặt bởi biến c . # 3. Dùng most_common ( ), truyền vào 1, trả về giá trị và số lần Open của thành phần Open nhiều nhất, đại diện thay mặt bởi biến mode . # 4. Trả về phần giá trị của mode được tính ở bước 3 . Kết quả Mode của chuỗi số đã cho : 9 Trong trường hợp dãy số truyền vào có nhiều thành phần có tỷ lệ Open giống nhau, tất cả chúng ta cần trả về hàng loạt các mode đó . # import packages Counter để đếm số lần Open của mỗi giá trị trong chuỗifrom collections import Counter # datapoints = < 7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 6, 6 > def calculate_mode ( numbers ) : # 1 c = Counter ( numbers ) # 2 numbers_freq = c. most_common ( ) # 3 max_count = numbers_freq < 0 > < 1 > # 4 modes = < > # 5 for num in numbers_freq : if num < 1 > = = max_count : # 6 modes.append ( num < 0 > ) return modesprint ( “ Mode của dãy số points : “, calculate_mode ( points ) ) # 1. Xác đinh hàm cần tìm, đặt tên calculate_mode, hàm này nhận đối số numbers truyền vào . # 2. Dùng hàm counter để đếm số lần Open của mỗi thành phần trong chuỗi, đại diện thay mặt bởi biến c . # 3. Dùng most_common ( ), trả về giá trị và số lần Open của mỗi thành phần, đại diện thay mặt bởi biến number_freq . # 4. Theo sắp xếp của hàm most_common, vị trí tiên phong chứa giá trị và số lần Open nhiền nhất, nên ta cần lấy số lần Open của giá trị Open nhiều nhất, đại diện thay mặt bởi biến max_count . # 5. Tạo một chuỗi rỗng để chứa giá trị . # 6. Với lần lượt từng cặp giá trị trong bước 3 tính được, so sánh với max_count của bước 4 trả về, nếu bằng max_count thì bỏ giá trị thành phần vào mảng rỗng tạo ở bước 5 Kết quả Mode của dãy số points : < 9, 6 > Nếu tất cả chúng ta muốn trình diễn hàng loạt số lần Open cùng giá trị của chuỗi thành bảng, tất cả chúng ta làm như sau : # import packages Counter để đếm số lần Open của mỗi giá trị trong chuỗifrom collections import Counter # datapoints = < 7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 6, 6 > def frequency_table ( numbers ) : # 1 table = Counter ( numbers ) # 2 numbers_freq = table. most_common ( ) # 3 numbers_freq. sort ( ) # 4 print ( “ Number Frequency ” ) # 5 for number in numbers_freq : # 6 print ( “ { 0 } { 1 } ”. format ( number < 0 >, number < 1 > ) ) frequency_table ( points ) # 1. Xác đinh hàm cần tìm, đặt tên frequency_table, hàm này nhận đối số numbers truyền vào . # 2. Dùng hàm counter để đếm số lần Open của mỗi thành phần trong chuỗi, đại diện thay mặt bởi biến table . # 3. Dùng most_common ( ), trả về giá trị và số lần Open của mỗi thành phần, đại diện thay mặt bởi biến number_freq . # 4. Vì hàm most_common sắp xếp theo số lần Open nhưng ta đang cần sắp xếp theo giá trị thành phần, nên tất cả chúng ta dùng sort ( ) . # 5. Tạo bảng với cột trái là giá trị thành phần, cột phải là số lần Open. tạo ra khoảng trống giữa 2 giá trị . # 6. Với lần lượt từng cặp giá trị trong bước 4 tính được, in giá trị thành phần trước rồi khoảng chừng trống rồi số lần Open. Hàm format dùng để truyền giá trị vào các thành phần trước đó được bỏ trong cặp ngoặc { } . Xem thêm : giáo án chương trình địa phương ( phần tiếng việt lớp 6 ) Kết quả NumberFrequency1221415265728295102IV. Range of data
Độ phân tán ( range ) của tài liệu cho biết tài liệu tất cả chúng ta có giá trị trải rộng như thế nào. Ví dụ, nếu chỉ chăm sóc đến trung bình thì có khi ta nhìn nhận sai tài liệu. Độ phân tán tài liệu đơn thuần là độ lệch giữa giá trị lớn nhất và giá trị nhỏ nhất của tập dữ liệu .def find_range(numbers): #1 lowest = min(numbers) #2 highest = max(numbers) #3 r = highest-lowest #4 print(“Lowest: {0} Highest: {1} Range: {2}”.format(lowest, highest, r))# datapoints = <7, 8, 9, 2, 10, 9, 9, 9, 9, 4, 5, 6, 1, 5, 6, 7, 8, 6, 1, 10, 6, 6>find_range(points)#1. Xác đinh hàm cần tìm, đặt đến là find_range, hàm nhận đối số numbers cho trước.
# 2. Dùng hàm min tính giá trị nhỏ nhất của list numbers, đại diện thay mặt bởi biến ` lowest ` . # 3. Dùng hàm max tính giá trị lớn nhất của list numbers, đại diện thay mặt bởi biến highest . # 4. Tính range của list numbers bằng cách lấy giá trị lớn nhất trừ giá trị nhỏ nhất, đại diện thay mặt bởi biến r . Kết quả Lowest : 1H ighest : 10R ange : 9V. Variance
Phương sai ( variance ) cho ta biết các giá trị trong tập dữ liệu có độc lạ nhiều với giá trị trung bình của cả tập hay không ? Đánh giá mức độ phân tán của tài liệu so với giá trị trung bình. Nếu muốn tính độ lệch chuẩn chỉ cần lấy căn bậc hai của phương sai . Công thức của variance : Lấy từng giá trị của tập dữ liệu trừ cho giá trị trung bình của cả tập, bình phương và chia cho số lượng thành phần có trong chuỗi .
VI. CORRELATION COEFFECIENT
Khi nghiên cứu và phân tích hồi quy tuyến tính thì nhu yếu hai biến độc lập phải có mối quan hệ tuyến tính với nhau. Khi đó ta nhìn nhận qua thông số đối sánh tương quan. Hệ số đối sánh tương quan bộc lộ mối quan hệ đối sánh tương quan tuyến tính giữa hai biến, thông số đối sánh tương quan nằm trong khoảng chừng , – Khi thông số đối sánh tương quan bằng 0 thì ta Tóm lại hai biến không có đối sánh tương quan tuyến tính với nhau ( nhưng không chắc chúng độc lập ) . – Khi thông số gần bằng 1 thì ta nói có mối quan hệ tuyến tính dương ( cùng tăng hoặc cùng giảm ) . – khi thông số gần bằng – 1 thì ta nói hai biến số có mối quan hệ tuyến tính âm ( x giảm y tăng và ngược lại ) . Lưu ý rằng đối sánh tương quan tuyến tinh khác với mối quan hệ nhân quả, giả sử khi thông số đối sánh tương quan là dương thì ta chỉ được Kết luận hai biến có mối quan hệ tuyến tính dương thôi. Ví dụ vào mùa hè, doanh thu bán đồ tắm tăng mạnh và số lượng kem bán ra cũng tăng mạnh, khi xét thông số tuyến tính có tác dụng dương gần 1 ta không hề Tóm lại do lượng kem bán ra nhiều làm tăng doanh thu bán áo tắm . Công thức tính thông số đối sánh tương quan của hai biến X và Y$$egin{array}{l}
ho _{xy} = frac{{Eleft< {left( {x – mu _x }
ight)left( {y – mu _y }
ight)}
ight>}}{{sqrt {{mathop{
m var}} left( x
ight)} sqrt {{mathop{
m var}} left( y
ight)} }} \,,,,,,,, = frac{{frac{1}{n}sumlimits_i {left( {x_i – mu _x }
ight)left( {y_i – mu _y }
ight)} }}{{sqrt {frac{1}{n}sumlimits_i {left( {x_i – mu _x }
ight)^2 } } sqrt {frac{1}{n}sumlimits_i {left( {y_i – mu _y }
ight)^2 } } }} \,,,,,,,, = frac{{nleft( {sumlimits_i {x_i y_i } }
ight) – left( {sumlimits_i {x_i } }
ight)left( {sumlimits_i {y_i } }
ight)}}{{sqrt {nsumlimits_i {x_i^2 – left( {sumlimits_i {x_i } }
ight)^2 } } sqrt {nsumlimits_i {y_i^2 – left( {sumlimits_i {y_i } }
ight)^2 } } }} \end{array}$$
Code để tính thông số đối sánh tương quan như sau
# lingocard.vndef find_corr_x_y ( x, y ) : # 1 n = len ( x ) # 2 prod = < > for xi, yi in zip ( x, y ) : # 3 prod.append ( xi * yi ) sum_prod_x_y = sum ( prod ) # 4 sum_x = sum ( x ) sum_y = sum ( y ) squared_sum_x = sum_x * * 2 squared_sum_y = sum_y * * 2 x_square = < > for xi in x : x_square. append ( xi * * 2 ) x_square_sum = sum ( x_square ) y_square = < > for yi in y : y_square. append ( yi * * 2 ) y_square_sum = sum ( y_square ) # Use formula to calculate correlation # 5 numerator = n * sum_prod_x_y – sum_x * sum_y denominator_term1 = n * x_square_sum – squared_sum_x denominator_term2 = n * y_square_sum – squared_sum_y denominator = ( denominator_term1 * denominator_term2 ) * * 0.5 correlation = numerator / denominator return correlation x = < 7, 18, 29, 2, 10, 9, 9 > y = < 1, 6, 12, 8, 6, 21, 10 > print ( “ Hệ số đối sánh tương quan tuyến tính giữa hai biến x, y : “, find_corr_x_y ( x, y ) ) # 1. Trong công thức phép tính thông số đối sánh tương quan, n là chiều dài của tài liệu .
# 2. Xác đinh hàm cần tìm, đặt đến là find_corr_x_y, hàm nhận đối số X và Y cho trước .
# 3. Trong công thức, đa phần là phép nhân X.Y nên ta dùng hàm zip để ghép 2 mảng X, Y thành table rồi hàm in để chỉ tới thành phần cần tính .
# 4. Tính tổng của tích X.Y .
# 5. Thay lần lượt vào công thức .
# 6. Trả về tác dụng thông số đối sánh tương quan giữa X và Y .
Kết quả
Hệ số đối sánh tương quan tuyến tính giữa hai biến x, y : 0.14953944411984518
Ứng dụng hệ số tương quan để tính similarity giữa 2 ảnh
Hệ số đối sánh tương quan được ứng dụng rất nhiều trong việc tính mức độ đối sánh tương quan giữa 2 biến ngẫu nhiên trong nhiều nghành nghề dịch vụ. Nếu tất cả chúng ta xem điểm ảnh ( px ) là một biến ngẫu nhiên với các giá trị nằm trong đoạn < 0, 255 > cho ảnh grayscale. Với ảnh màu, px thường có 3 kênh màu ( x, y, z ), trong đó x, y, z nằm trong đoạn < 0, 255 > . Với 1 ảnh màu có hình dạng là ( 50, 50, 3 ), trong đó chiều cao và chiều rồng là 50 và số kênh màu là 3. Chúng ta hoàn toàn có thể kéo ảnh có hình khối như trên thành dạng tài liệu kiểu List với chiều dài là 50×50 x3 .
# lingocard.vnimport numpy as npfrom PIL import Imagefrom io import BytesIOimport requestsdef find_corr_x_y(x,y): #1 n = len(x) #2 prod = <> for xi,yi in zip(x,y): #3 prod.append(xi*yi) sum_prod_x_y = sum(prod) #4 sum_x = sum(x) sum_y = sum(y) squared_sum_x = sum_x**2 squared_sum_y = sum_y**2 x_square = <> for xi in x: x_square.append(xi**2) x_square_sum = sum(x_square) y_square=<> for yi in y: y_square.append(yi**2) y_square_sum = sum(y_square) # Use formula to calculate correlation #5 numerator = n*sum_prod_x_y – sum_x*sum_y denominator_term1 = n*x_square_sum – squared_sum_x denominator_term2 = n*y_square_sum – squared_sum_y denominator = (denominator_term1*denominator_term2)**0.5 correlation = numerator/denominator return correlation # load ảnh và chuyển về kiểu listreq1 = requests.get(“https://www.dropbox.com/s/vfe090qo24t3v46/img1.png?raw=1”)req5 = requests.get(“https://www.dropbox.com/s/wdj080tsf92a0l0/img1_scale2.png?raw=1”)req6 = requests.get(“https://www.dropbox.com/s/9fr6h5y9vejyl7h/img1_scale1.png?raw=1”)image1 = Image.open(BytesIO(req1.content))image5 = Image.open(BytesIO(req5.content))image6 = Image.open(BytesIO(req6.content))image1_list = np.asarray(image1).flatten().tolist()image5_list = np.asarray(image5).flatten().tolist()image6_list = np.asarray(image6).flatten().tolist()# tính correlation coefficientcorr_1_5 = find_corr_x_y(image1_list, image5_list)corr_1_6 = find_corr_x_y(image1_list, image6_list)print(“corr_1_5:”, corr_1_5)print(“corr_1_6:”, corr_1_6)
Kết quảBài tập: Dựa vào công thức tính hệ số tương quan, hãy chứng minh khả năng hoạt động tốt của hệ số tương quan dưới điều kiện dữ liệu thay đổi dạng tuyến tính. Nghĩa là chứng minh
Xem thêm bài viết thuộc chuyên mục: Cách tính
Điều hướng bài viết
Source: https://hoasenhomes.vn
Category: Ý Nghĩa Con Số