统计学python是什么方向的风_使用python进行常见统计分析

论坛 期权论坛     
选择匿名的用户   2021-5-30 02:02   286   0
<div style="font-size:16px;">
<p>不可否认的是python的统计功能若于R和SAS,但对于常见的统计分析,python亦可以实现。本文介绍Python中的ggplot2绘图库:plotnine,使用python完成常见的统计描述、分布差异检验、相关分析和回归分析方法。</p>
<p># plotnine:python中的ggplot2</p>
<p>import plotnine as pn</p>
<p>from plotnine import data</p>
<p>import numpy as np</p>
<p>import pandas as pd</p>
<p># 统计分析</p>
<p>from scipy import stats</p>
<p>import statsmodels.api as sm</p>
<p>from statsmodels.formula.api import ols, glm, poisson</p>
<p>import copy</p>
<p># 阻止pandas产生warnings(提示DataFrame的相关操作生成引用or副本)</p>
<p>import warnings</p>
<p>warnings.filterwarnings(&#34;ignore&#34;)</p>
<p># jupyter中同一个cell的多个结果均自动输出,不需挨个手工print</p>
<p>from IPython.core.interactiveshell import InteractiveShell</p>
<p>InteractiveShell.ast_node_interactivity &#61; &#34;all&#34;</p>
<p>使用 plotnine 库自带的 mtcars 汽车数据集</p>
<p>选取 mtcars 的子集 df,共 32 个记录,6 个变量</p>
<p>df &#61; data.mtcars[[&#34;wt&#34;, &#34;mpg&#34;, &#34;cyl&#34;, &#34;vs&#34;, &#34;am&#34;, &#34;gear&#34;]]</p>
<p>df.shape</p>
<p>df.dtypes</p>
<p>print(df.head())</p>
<p>(32, 6)</p>
<p>wt float64</p>
<p>mpg float64</p>
<p>cyl int64</p>
<p>vs int64</p>
<p>am int64</p>
<p>gear int64</p>
<p>dtype: object</p>
<p>wt mpg cyl vs am gear</p>
<p>0 2.620 21.0 6 0 1 4</p>
<p>1 2.875 21.0 6 0 1 4</p>
<p>2 2.320 22.8 4 1 1 4</p>
<p>3 3.215 21.4 6 1 0 3</p>
<p>4 3.440 18.7 8 0 0 3</p>
<p>将变量 vs、am、gear 由数值型连续变量转为字符型分类变量</p>
<p>df[&#34;vs&#34;] &#61; df[&#34;vs&#34;].astype(str)</p>
<p>df[&#34;am&#34;] &#61; df[&#34;am&#34;].astype(str)</p>
<p>df[&#34;gear&#34;] &#61; df[&#34;gear&#34;].astype(str)</p>
<p>df.dtypes</p>
<p>wt float64</p>
<p>mpg float64</p>
<p>cyl int64</p>
<p>vs object</p>
<p>am object</p>
<p>gear object</p>
<p>dtype: object</p>
<p>变量分布</p>
<p># 连续变量的常见分布统计量</p>
<p>print(df.describe())</p>
<p># 分类变量的类别及频数</p>
<p>df[&#34;vs&#34;].value_counts()</p>
<p>df[&#34;am&#34;].value_counts()</p>
<p>df[&#34;gear&#34;].value_counts()</p>
<p>wt mpg cyl</p>
<p>count 32.000000 32.000000 32.000000</p>
<p>mean 3.217250 20.090625 6.187500</p>
<p>std 0.978457 6.026948 1.785922</p>
<p>min 1.513000 10.400000 4.000000</p>
<p>25% 2.581250 15.425000 4.000000</p>
<p>50% 3.325000 19.200000 6.000000</p>
<p>75% 3.610000 22.800000 8.000000</p>
<p>max 5.424000 33.900000 8.000000</p>
<p>0 18</p>
<p>1 14</p>
<p>Name: vs, dtype: int64</p>
<p>0 19</p>
<p>1 13</p>
<p>Name: am, dtype: int64</p>
<p>3 15</p>
<p>4 12</p>
<p>5 5</p>
<p>Name: gear, dtype: int64</p>
<p>plotnine 绘图</p>
<p>plotnine 是 python 的一个绘图库,模仿了 ggplot2 的语法和绘图样式,如果熟悉 R 的 ggplot2,那么该库可快速上手。</p>
<p>该库与 R 的 ggplot2 使用中主要有以下 2 点不同:ggplot() 的 mapping 参数,R 中写为 aes(x &#61; mpg, y &#61; wt),plotnine 写为 aes(x&#61;&#34;mpg&#34;, y&#61;&#34;wt&#34;)</p>
<p>plotnine 要求整个绘图语句为一个语句,若中间需要换行,需要使用 \ 连接或者语句首尾加括号</p>
<p>以下是几个简单的例子</p>
<p>散点图 &#43; 回归线</p>
<p>pn.ggplot(data &#61; df, mapping&#61;pn.aes(x&#61;&#34;mpg&#34;, y&#61;&#34;wt&#34;)) &#43; \</p>
<p>pn.geom_point() &#43; \</p>
<p>pn.geom_smooth(method&#61;&#34;lm&#34;) &#43; \</p>
<p align="center"> pn.theme_classic()<img alt="" src=""></p>
<p>分组</p>
<p>按照 vs 分组,分别绘制散点图、回归线及其 95% 置信区间</p>
<p>pn.ggplot(data &#61; df, mapping&#61;pn.aes(x&#61;&#34;mpg&#34;, y&#61;&#34;wt&#34;, color&#61;&#34;vs&#34;)) &#43; \</p>
<p>pn.geom_point() &#43; \</p>
<p>pn.geom_smooth(method&#61;&#34;lm&#34;) &#43; \</p>
<p align="center"> pn.theme_classic()<img alt="" src=""></p>
<p>分面(xkcd 主题)</p>
<p>按照变量 vs 和 gear 进行分面</p>
<p>pn.ggplot(data &#61; df, mapping&#61;pn.aes(x&#61;&#34;mpg&#34;, y&#61;&#34;wt&#34;)) &#43; \</p>
<p>pn.facet_grid(&#34;vs ~ gear&#34;) &#43; \</p>
<p>pn.geom_point() &#43; \</p>
<p>pn.geom_smooth(method&#61;&#34;lm&#34;) &#43; \</p>
<p align="center"> pn.theme_xkcd()<img alt="" src=""></p>
<p>描述性统计量</p>
<p>各变量的缺失值</p>
<p>df.apply(lambda x: sum(x.isnull())).sort_values()</p>
<p>wt 0</p>
<p>mpg 0</p>
<p>cyl 0</p>
<p>vs 0</p>
<p>am 0</p>
<p>gear 0</p>
<p>count 0</p>
<p>dtype: int64</p>
<p>连续变量和分类变量的分布信息</p>
<p>print(df.describe())</p>
<p># count:分类变量非缺失值的数量</p>
<p># unique:分类变量唯一值的数量</p>
<p># top:分类变量中出现频次最高的数</p>
<p># freq:分类变量中出现频次最高的数出现了几次</p>
<p>print(df.describe(include&#61;&#34;object&#34;))</p>
<p>wt mpg cyl</p>
<p>count 32.000000 32.000000 32.000000</p>
<p>mean 3.217250 20.090625 6.187500</p>
<p>std 0.978457 6.026948 1.785922</p>
<p>min 1.513000 10.400000 4.000000</p>
<p>25% 2.581250 15.
分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP