3.1.4 更多可视化: 用seaborn来进行统计学探索

Seaborn 集成了简单的统计学拟合与pandas dataframes绘图。

让我们考虑一个500个个体的工资及其它个人信息的数据 (Berndt, ER. The Practice of Econometrics. 1991. NY: Addison-Wesley)。

加载并绘制工资数据的完整代码可以在对应的例子中找到。

In [3]:

  1. print data
  1. EDUCATION SOUTH SEX EXPERIENCE UNION WAGE AGE RACE OCCUPATION \
  2. 0 8 0 1 21 0 5.10 35 2 6
  3. 1 9 0 1 42 0 4.95 57 3 6
  4. 2 12 0 0 1 0 6.67 19 3 6
  5. 3 12 0 0 4 0 4.00 22 3 6
  6. 4 12 0 0 17 0 7.50 35 3 6
  7. 5 13 0 0 9 1 13.07 28 3 6
  8. 6 10 1 0 27 0 4.45 43 3 6
  9. 7 12 0 0 9 0 19.47 27 3 6
  10. 8 16 0 0 11 0 13.28 33 3 6
  11. 9 12 0 0 9 0 8.75 27 3 6
  12. 10 12 0 0 17 1 11.35 35 3 6
  13. 11 12 0 0 19 1 11.50 37 3 6
  14. 12 8 1 0 27 0 6.50 41 3 6
  15. 13 9 1 0 30 1 6.25 45 3 6
  16. 14 9 1 0 29 0 19.98 44 3 6
  17. 15 12 0 0 37 0 7.30 55 3 6
  18. 16 7 1 0 44 0 8.00 57 3 6
  19. 17 12 0 0 26 1 22.20 44 3 6
  20. 18 11 0 0 16 0 3.65 33 3 6
  21. 19 12 0 0 33 0 20.55 51 3 6
  22. 20 12 0 1 16 1 5.71 34 3 6
  23. 21 7 0 0 42 1 7.00 55 1 6
  24. 22 12 0 0 9 0 3.75 27 3 6
  25. 23 11 1 0 14 0 4.50 31 1 6
  26. 24 12 0 0 23 0 9.56 41 3 6
  27. 25 6 1 0 45 0 5.75 57 3 6
  28. 26 12 0 0 8 0 9.36 26 3 6
  29. 27 10 0 0 30 0 6.50 46 3 6
  30. 28 12 0 1 8 0 3.35 26 3 6
  31. 29 12 0 0 8 0 4.75 26 3 6
  32. .. ... ... ... ... ... ... ... ... ...
  33. 504 17 0 1 10 0 11.25 33 3 5
  34. 505 16 0 1 10 1 6.67 32 3 5
  35. 506 16 0 1 17 0 8.00 39 2 5
  36. 507 18 0 0 7 0 18.16 31 3 5
  37. 508 16 0 1 14 0 12.00 36 3 5
  38. 509 16 0 1 22 1 8.89 44 3 5
  39. 510 17 0 1 14 0 9.50 37 3 5
  40. 511 16 0 0 11 0 13.65 33 3 5
  41. 512 18 0 0 23 1 12.00 47 3 5
  42. 513 12 0 0 39 1 15.00 57 3 5
  43. 514 16 0 0 15 0 12.67 37 3 5
  44. 515 14 0 1 15 0 7.38 35 2 5
  45. 516 16 0 0 10 0 15.56 32 3 5
  46. 517 12 1 1 25 0 7.45 43 3 5
  47. 518 14 0 1 12 0 6.25 32 3 5
  48. 519 16 1 1 7 0 6.25 29 2 5
  49. 520 17 0 0 7 1 9.37 30 3 5
  50. 521 16 0 0 17 0 22.50 39 3 5
  51. 522 16 0 0 10 1 7.50 32 3 5
  52. 523 17 1 0 2 0 7.00 25 3 5
  53. 524 9 1 1 34 1 5.75 49 1 5
  54. 525 15 0 1 11 0 7.67 32 3 5
  55. 526 15 0 0 10 0 12.50 31 3 5
  56. 527 12 1 0 12 0 16.00 30 3 5
  57. 528 16 0 1 6 1 11.79 28 3 5
  58. 529 18 0 0 5 0 11.36 29 3 5
  59. 530 12 0 1 33 0 6.10 51 1 5
  60. 531 17 0 1 25 1 23.25 48 1 5
  61. 532 12 1 0 13 1 19.88 31 3 5
  62. 533 16 0 0 33 0 15.38 55 3 5
  63. SECTOR MARR
  64. 0 1 1
  65. 1 1 1
  66. 2 1 0
  67. 3 0 0
  68. 4 0 1
  69. 5 0 0
  70. 6 0 0
  71. 7 0 0
  72. 8 1 1
  73. 9 0 0
  74. 10 0 1
  75. 11 1 0
  76. 12 0 1
  77. 13 0 0
  78. 14 0 1
  79. 15 2 1
  80. 16 0 1
  81. 17 1 1
  82. 18 0 0
  83. 19 0 1
  84. 20 1 1
  85. 21 1 1
  86. 22 0 0
  87. 23 0 1
  88. 24 0 1
  89. 25 1 1
  90. 26 1 1
  91. 27 0 1
  92. 28 1 1
  93. 29 0 1
  94. .. ... ...
  95. 504 0 0
  96. 505 0 0
  97. 506 0 1
  98. 507 0 1
  99. 508 0 1
  100. 509 0 1
  101. 510 0 1
  102. 511 0 1
  103. 512 0 1
  104. 513 0 1
  105. 514 0 1
  106. 515 0 0
  107. 516 0 0
  108. 517 0 0
  109. 518 0 1
  110. 519 0 1
  111. 520 0 1
  112. 521 1 1
  113. 522 0 1
  114. 523 0 1
  115. 524 0 1
  116. 525 0 1
  117. 526 0 0
  118. 527 0 1
  119. 528 0 0
  120. 529 0 0
  121. 530 0 1
  122. 531 0 1
  123. 532 0 1
  124. 533 1 1
  125. [534 rows x 11 columns]

3.1.4.1 配对图: 散点矩阵

使用seaborn.pairplot()来显示散点矩阵我们可以很轻松的对连续变量之间的交互有一个直觉:

In [4]:

  1. import seaborn
  2. seaborn.pairplot(data, vars=['WAGE', 'AGE', 'EDUCATION'], kind='reg')

Out[4]:

  1. <seaborn.axisgrid.PairGrid at 0x107feb850>
  1. /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/matplotlib/collections.py:590: FutureWarning: elementwise comparison failed; returning scalar instead, but in the future will perform elementwise comparison
  2. if self._edgecolors == str('face'):

3.1.4 更多可视化: 用seaborn来进行统计学探索 - 图1

可以用颜色来绘制类别变量:

In [5]:

  1. seaborn.pairplot(data, vars=['WAGE', 'AGE', 'EDUCATION'], kind='reg', hue='SEX')

Out[5]:

  1. <seaborn.axisgrid.PairGrid at 0x107feb650>

3.1.4 更多可视化: 用seaborn来进行统计学探索 - 图2

看一下并感受一些matplotlib设置

Seaborn改变了matplotlib的默认图案以便获得更"现代"、更"类似Excel"的外观。它是通过import来实现的。重置默认设置可以使用:

In [8]:

  1. from matplotlib import pyplot as plt
  2. plt.rcdefaults()

要切换回seaborn设置, 或者更好理解seaborn中的样式, 见seaborn文档中的相关部分

3.1.4.2. lmplot: 绘制一个单变量回归

回归捕捉了一个变量与另一个变量的关系,例如薪水和教育,可以用seaborn.lmplot()来绘制:

In [6]:

  1. seaborn.lmplot(y='WAGE', x='EDUCATION', data=data)

Out[6]:

  1. <seaborn.axisgrid.FacetGrid at 0x108db6050>

3.1.4 更多可视化: 用seaborn来进行统计学探索 - 图3

稳健回归

在上图中,有一些数据点偏离了右侧的主要云,他们可能是异常值,对总体没有代表性,但是,推动了回归。

要计算对异常值不敏感的回归,必须使用稳健模型。在seaborn的绘图函数中可以使用robust=True,或者在statsmodels用"稳健线性回归"statsmodels.formula.api.rlm()来替换OLS。