将 statmodels Tukey hsd 保存到 Python pandas 数据框中
Saving statmodels Tukey hsd into a Python pandas dataframe
我正在寻找一种保存结果的方法,将 Tukeyhsd 的结果保存到 pandas 数据帧中。见下文:
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi
mcDate = multi.MultiComparison(df['Glucose'], df['Date'])
Results = mcDate.tukeyhsd()
print(Results)
Multiple Comparison of Means - Tukey HSD,FWER=0.05
=============================================
group1 group2 meandiff lower upper reject
---------------------------------------------
A B 20.35 7.388 33.312 True
A C -3.85 -16.812 9.112 False
B C -24.2 -37.162 -11.238 True
---------------------------------------------
我无权访问您的数据,因此无法复制结果。我改用随机数据,只是为了证明这是有效的。您需要在代码中添加的只是 pandas 导入和创建数据框的最后一行。
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi
import pandas as pd
import numpy as np
# Random Data.
np.random.seed(0)
x = np.random.choice(['A','B','C'], 50)
y = np.random.rand(50)
# DataFrame.
mcDate = multi.MultiComparison(y,x)
Results = mcDate.tukeyhsd()
print(Results)
产生以下 table:
============================================
group1 group2 meandiff lower upper reject
--------------------------------------------
A B 0.1506 -0.07 0.3712 False
A C 0.1105 -0.1278 0.3487 False
B C -0.0401 -0.2865 0.2063 False
--------------------------------------------
而且,这就是您获取数据框的方式:
df = pd.DataFrame(data=Results._results_table.data[1:], columns=Results._results_table.data[0])
print(df)
group1 group2 meandiff lower upper reject
0 A B 0.1506 -0.0700 0.3712 False
1 A C 0.1105 -0.1278 0.3487 False
2 B C -0.0401 -0.2865 0.2063 False
我自己为此苦苦挣扎了一段时间,最终通过查看对象的方法找到了解决方案,如下所示:
dir(Results)
作为对@vander 的回答的更新,并解决@thentangler 的评论,在 statsmodels 0.12.1 中,table 的数据可以作为 Results.data
而不是 Results._results_table.data
访问。
Results
到 dataframe 的转换变成:
df = pd.DataFrame(data=Results.data[1:], columns=Results.data[0])
.
我正在寻找一种保存结果的方法,将 Tukeyhsd 的结果保存到 pandas 数据帧中。见下文:
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi
mcDate = multi.MultiComparison(df['Glucose'], df['Date'])
Results = mcDate.tukeyhsd()
print(Results)
Multiple Comparison of Means - Tukey HSD,FWER=0.05
=============================================
group1 group2 meandiff lower upper reject
---------------------------------------------
A B 20.35 7.388 33.312 True
A C -3.85 -16.812 9.112 False
B C -24.2 -37.162 -11.238 True
---------------------------------------------
我无权访问您的数据,因此无法复制结果。我改用随机数据,只是为了证明这是有效的。您需要在代码中添加的只是 pandas 导入和创建数据框的最后一行。
import matplotlib.pyplot as plt
import statsmodels.formula.api as smf
import statsmodels.stats.multicomp as multi
import pandas as pd
import numpy as np
# Random Data.
np.random.seed(0)
x = np.random.choice(['A','B','C'], 50)
y = np.random.rand(50)
# DataFrame.
mcDate = multi.MultiComparison(y,x)
Results = mcDate.tukeyhsd()
print(Results)
产生以下 table:
============================================
group1 group2 meandiff lower upper reject
--------------------------------------------
A B 0.1506 -0.07 0.3712 False
A C 0.1105 -0.1278 0.3487 False
B C -0.0401 -0.2865 0.2063 False
--------------------------------------------
而且,这就是您获取数据框的方式:
df = pd.DataFrame(data=Results._results_table.data[1:], columns=Results._results_table.data[0])
print(df)
group1 group2 meandiff lower upper reject
0 A B 0.1506 -0.0700 0.3712 False
1 A C 0.1105 -0.1278 0.3487 False
2 B C -0.0401 -0.2865 0.2063 False
我自己为此苦苦挣扎了一段时间,最终通过查看对象的方法找到了解决方案,如下所示:
dir(Results)
作为对@vander 的回答的更新,并解决@thentangler 的评论,在 statsmodels 0.12.1 中,table 的数据可以作为 Results.data
而不是 Results._results_table.data
访问。
Results
到 dataframe 的转换变成:
df = pd.DataFrame(data=Results.data[1:], columns=Results.data[0])
.