Hướng dẫn chi-square test dataframe python - Python kiểm tra khung dữ liệu chi-square
Chúng tôi sẽ cung cấp một ví dụ thực tế về cách chúng tôi có thể chạy một bài kiểm tra chi bình phương trong Python. Giả sử rằng chúng tôi muốn kiểm tra xem có sự khác biệt có ý nghĩa thống kê về dân số giới tính (M, F) giữa những người hút thuốc và người không hút thuốc. Hãy để tạo ra một số dữ liệu mẫu để làm việc trên nó.Genders (M, F) population between Smokers and Non-Smokers. Let’s generate some sample data to work on it. Show
Nội phân Chính showShow
Làm thế nào để bạn chạy một chi
Dữ liệu mẫuimport pandas as pd import numpy as np from scipy.stats import chi2_contingency import seaborn as sns import matplotlib.pyplot as plt %matplotlib inline df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()
Bảng dữ liệu thống kêLàm thế nào để bạn chạy một chi Chi2 trong Python là gì?
Người hút thuốc Giới tính
Người hút thuốc normalize=’column’ and if we want the total percentage then we should write normalize=’all’ Giới tínhF plt.figure(figsize=(12,8)) sns.heatmap(contigency, annot=True, cmap="YlGnBu") Kiểm định chi bình phươngM
# Chi-square test of independence. c, p, dof, expected = chi2_contingency(contigency) p
Một cách dễ dàng để xem trực quan các bảng dự phòng là các bản đồ nhiệt.Bây giờ chúng tôi đã xây dựng bảng dự phòng, chúng tôi có thể chuyển nó đến 8Function từ gói 9 trả về:2×2. We could have
applied z-test for proportions instead of Chi-Square test. Notice that the Chi-Square test can be extended to m x n contingency tables.Ví dụ về bài kiểm tra chi bình phương trong PythonChi2: Thống kê kiểm traChúng tôi sẽ cung cấp một ví dụ thực tế về cách chúng tôi có thể chạy một bài kiểm tra chi bình phương trong Python. Giả sử rằng chúng tôi muốn kiểm tra xem có sự khác biệt có ý nghĩa thống kê về dân số giới tính (M, F) giữa những người hút thuốc và người không hút thuốc. Hãy để tạo ra một số dữ liệu mẫu để làm việc trên nó.Genders (M, F) population between Smokers and Non-Smokers. Let’s generate some sample data to work on it. Dữ liệu mẫuP: Giá trị p của bài kiểm tra
Bảng dữ liệu thống kêKiểm định chi bình phương Ví dụ về bài kiểm tra chi bình phương trong Python There is no relationship between variable one and variable two. Bài kiểm tra độc lập chi-vuông There is a relationship between variable 1 and variable 2. Giả định chi bình phương Kiểm định chi bình phươngVí dụ về bài kiểm tra chi bình phương trong Python
Nếu tất cả các giả định này được đáp ứng, thì Chi-vuông là thử nghiệm chính xác để sử dụng. Trang này sẽ đi qua cách thực hiện một bài kiểm tra độc lập Chi-vuông bằng Python, cách diễn giải kết quả và sẽ cung cấp một chức năng tùy chỉnh được Python phát triển cho Khoa học dữ liệu, LLC để bạn sử dụng! Nó làm sạch đầu ra, khả năng tính tỷ lệ phần trăm hàng/cột và có khả năng xuất kết quả sang tệp CSV. Đầu tiên chúng ta cần nhập số liệu thống kê gấu trúc và SCIPY! import pandas as pd from scipy import stats Dữ liệu được sử dụng cho ví dụ nàyDữ liệu được sử dụng trong ví dụ này là từ kaggle.com từ việc tìm nguồn cung cấp tâm thần, Ltd. Bộ dữ liệu là từ cuộc khảo sát về sức khỏe tâm thần OSMI trong Khảo sát công nghệ năm 2016 nhằm mục đích đo lường thái độ đối với sức khỏe tâm thần tại nơi làm việc công nghệ và kiểm tra tần suất rối loạn sức khỏe tâm thần của các nhân viên công nghệ. Liên kết đến nguồn Kaggle của bộ dữ liệu ở đây. Ví dụ này, chúng tôi sẽ kiểm tra xem có mối liên hệ giữa sự sẵn sàng thảo luận về các vấn đề sức khỏe tâm thần với người giám sát trực tiếp và hiện đang bị rối loạn sức khỏe tâm thần. Trong tập dữ liệu, đây là những biến số mà bạn có sẵn sàng thảo luận về một vấn đề sức khỏe tâm thần với (các) người giám sát trực tiếp của bạn không? Và "hiện tại bạn có bị rối loạn sức khỏe tâm thần không?" tương ứng. Hãy cùng xem dữ liệu! df['Do you currently have a mental health disorder?'].value_counts()
df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()0
Một số nhà tuyển dụng trước đây của tôi Không, không có nhà tuyển dụng trước đây của tôi
Một số nhà tuyển dụng trước đây của tôi Không, không có nhà tuyển dụng trước đây của tôi
Một số nhà tuyển dụng trước đây của tôiKhông, không có nhà tuyển dụng trước đây của tôi df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()5 Tôi không biết Có, tại tất cả các nhà tuyển dụng trước đây của tôi df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()6 Đối với biến số này hiện tại bạn có bị rối loạn sức khỏe tâm thần không? Để làm điều này, chúng ta cần sử dụng một chức năng để lấy lại dữ liệu. Ngoài ra, các biến sẽ được đổi tên để rút ngắn chúng. df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()1 df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()2 df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()3 Nếu bạn không thích đầu ra của bài kiểm tra chi bình phương, hãy xem phần Kiểm tra chi bình phương về tính độc lập bằng cách sử dụng chức năng tùy chỉnh. Phần cung cấp mã của một hàm tiến hành kiểm tra chi bình phương giống như chúng ta đã làm, nhưng đầu ra được trả về trong một bảng với định dạng dễ đọc, trình bày các giá trị, làm tròn dữ liệu, có thể tính toán tỷ lệ phần trăm hàng/cột và có khả năng xuất kết quả trực tiếp vào tệp CSV. Bài kiểm tra bài đăng bài kiểm traBây giờ chúng tôi biết bài kiểm tra độc lập Chi-vuông của chúng tôi là rất quan trọng, chúng tôi muốn kiểm tra mối quan hệ nằm giữa các cấp độ của các biến. Để làm điều này, chúng ta cần tiến hành nhiều thử nghiệm Chi-Square 2 × 2 bằng cách sử dụng giá trị P được điều chỉnh bởi Bonferroni. Một số bạn có thể hỏi tại sao? Bằng cách so sánh nhiều cấp độ (loại) với nhau, tỷ lệ lỗi của một hợp chất dương tính giả với mỗi thử nghiệm. Có nghĩa là, thử nghiệm đầu tiên của chúng tôi ở cấp 0,05 là 5% cơ hội dương tính giả; Bài kiểm tra sau đó sẽ là 10% cơ hội dương tính giả, v.v. Với mỗi bài kiểm tra tiếp theo, người ta sẽ tăng tỷ lệ lỗi thêm 5%. Nếu chúng tôi tiến hành tất cả các so sánh 6 cặp có thể có, thử nghiệm chi bình phương 2 × 2 cuối cùng của chúng tôi sẽ có tỷ lệ lỗi là 30%! Có nghĩa là giá trị p của chúng tôi đang được kiểm tra tại sẽ bằng 0,30, điều này không được chấp nhận ở bất kỳ cấp độ nào. Để tránh điều này, phương pháp điều chỉnh Bonferroni điều chỉnh giá trị p bằng cách so sánh cặp theo kế hoạch đang được tiến hành. Công thức là P/N, trong đó, p p p Trong ví dụ của chúng tôi, nếu chúng tôi dự định tiến hành tất cả các so sánh theo cặp có thể thì công thức sẽ là 0,05/6 = 0,008. Có nghĩa là, một bài kiểm tra chi bình phương Post Hoc 2 × 2 sẽ phải có giá trị p nhỏ hơn 0,008 để có ý nghĩa. Tuy nhiên, chúng tôi không quan tâm đến danh mục của tôi, tôi không biết về biến số của Sẵn sàng_Discuss_MH_Supervisor. Do đó tạo ra công thức là 0,05/3, bằng 0,017. Vì vậy, đối với các so sánh theo kế hoạch của chúng tôi là đáng kể, giá trị p phải nhỏ hơn 0,017. Để thực hiện nhiều bài kiểm tra chi bình phương 2 × 2, người ta cần tập hợp lại các biến cho mỗi thử nghiệm đến nơi nó là một loại so với phần còn lại. Đối với chúng tôi, nó sẽ là:
Python làm cho nhiệm vụ này dễ dàng! Có một phương thức pd.get_dummies () tạo ra các biến giả trong đó mỗi biến mới chỉ là một loại của biến ban đầu và bằng với 1 1 nếu chúng thuộc thể loại đó và là 0 0 nếu chúng không. Chúng tôi sẽ gán các biến giả cho khung dữ liệu Python mới. df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()7
Bây giờ chúng tôi đã đặt các biến giả của chúng tôi, chúng tôi có thể tiến hành các so sánh bài hoc theo kế hoạch của chúng tôi. Điều này sẽ dễ dàng sử dụng một vòng lặp. Sẽ có thêm một chút mã trong vòng lặp để làm sạch đầu ra. df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()8
Một số nhà tuyển dụng trước đây của tôi
Có, tại tất cả các nhà tuyển dụng trước đây của tôi
Bây giờ chúng tôi đã đặt các biến giả của chúng tôi, chúng tôi có thể tiến hành các so sánh bài hoc theo kế hoạch của chúng tôi. Điều này sẽ dễ dàng sử dụng một vòng lặp. Sẽ có thêm một chút mã trong vòng lặp để làm sạch đầu ra. df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()8
Giá trị chi2 = 16.9062390539159 p-value = 3.927228826835633e-05 độ tự do = 1Giá trị chi2 = 0,29589978434689185 P-value = 0.5864643795737425 độ tự do = 1 Chức năng này làm gì là tiến hành thử nghiệm độc lập chi bình phương bằng phương pháp scipy chi2_conting (nhưng nó làm sạch định dạng của kết quả, cho phép người ta dễ dàng tính toán tỷ lệ hàng hoặc cột (tỷ lệ phần trăm) nếu muốn và cho phép một Xuất kết quả sang tệp CSV nếu muốn. Tỷ lệ phần trăm được làm tròn đến 2 chữ số thập phân trong khi giá trị chi bình phương và giá trị p là vòng tròn đến 4 thập phân. Các ví dụ sẽ được cung cấp ở dưới cùng của mã. Vì vậy, đây là! Chỉ cần sao chép và dán vào tệp bạn đang làm việc hoặc lưu chức năng vào một tệp .py riêng biệt và nhập nó từ đó. df = pd.DataFrame({'Gender' : ['M', 'M', 'M', 'F', 'F'] * 10, 'isSmoker' : ['Smoker', 'Smoker', 'Non-Smpoker', 'Non-Smpoker', 'Smoker'] * 10 }) df.head()9 Bây giờ để xem chức năng trong hành động. Một số ví dụ dưới đây! So sánh scipy.stats.chi2_contingency () với hàm chi2_table () tùy chỉnh ()Tôi sẽ sử dụng ví dụ từ phía trên để dữ liệu sẽ quen thuộc. 0. Bây giờ xem phân tích tương tự được thực hiện với hàm chi2_table () tùy chỉnh. 1
Không, không có nhà tuyển dụng trước đây của tôi 2Một số nhà tuyển dụng trước đây của tôi Có, tại tất cả các nhà tuyển dụng trước đây của tôiPearson Chi2 (3) = 32.4082 P-Value = 0,0000 Hàm cũng có thể xử lý có một danh sách hoặc nhiều danh sách được thông qua. Điều này xuất hiện trong tay nếu bạn muốn tiến hành nhiều bài kiểm tra chi bình phương trên nhiều biến. Nó sẽ tiến hành tất cả các so sánh kiểm tra chi bình phương. Nếu chỉ có một danh sách duy nhất được thông qua, nó phải được thông qua trong mục đầu tiên. Nếu xuất sang tệp CSV, tệp sẽ được đặt tên theo biến cột (mục nhập chuỗi thứ hai). Trong ví dụ trên, tên tệp sẽ là hiện tại_ental_disorder.csv, và tên của biến trong list_2 tương ứng.
Không, không có nhà tuyển dụng trước đây của tôi Một số nhà tuyển dụng trước đây của tôi
Không, không có nhà tuyển dụng trước đây của tôiMột số nhà tuyển dụng trước đây của tôi 5Có, tại tất cả các nhà tuyển dụng trước đây của tôiPearson Chi2 (3) = 32.4082 P-Value = 0,0000. Hàm cũng có thể xử lý có một danh sách hoặc nhiều danh sách được thông qua. Điều này xuất hiện trong tay nếu bạn muốn tiến hành nhiều bài kiểm tra chi bình phương trên nhiều biến. Nó sẽ tiến hành tất cả các so sánh kiểm tra chi bình phương. Nếu chỉ có một danh sách duy nhất được thông qua, nó phải được thông qua trong mục đầu tiên. Nếu xuất sang tệp CSV, tệp sẽ được đặt tên theo biến cột (mục nhập chuỗi thứ hai). Trong ví dụ trên, tên tệp sẽ là hiện tại_ental_disorder.csv, và tên của biến trong list_2 tương ứng. Nhận tỷ lệ hàng/cột (tỷ lệ phần trăm) Để có tỷ lệ được trả về trong crosstab, hãy chuyển ’hàng, hoặc’ col, vào đối số prop prop =. Dữ liệu được kiểm tra bằng cách sử dụng dữ liệu đếm, vì vậy chúng tôi không vi phạm các giả định của bài kiểm tra, nhưng sau đó trả về dữ liệu tỷ lệ. Để có được tỷ lệ hàng, hãy chuyển ‘hàng, vào đối số prop prop = cho chức năng. 3a non-parametric (distribution-free) method used to compare the relationship between the two categorical (nominal) variables
in a contingency table.Để có được tỷ lệ cột, hãy chuyển ’col, vào đối số prop prop =, cho chức năng.
|