數據探索
文章目錄
1. 查詢
query
-
df.query(‘查詢條件’)
df.query('col1 == 某個值') df.query('col1 == [值1,值2]')
2. 統計分析
2.1 描述統計
2.1.1均值、中位數描述
se.mean(axis=1) # 求行的均值
se.median()
plt.vlines(se.mean(),ymin=0,ymax=3,linewidth=5) # 繪製均值垂直線
plt.vlines(se.median()ymin=0,ymax=3,linewidth=3,color='red') # 繪製紅色中位數線
2.1.2 分佈描述
-
.describe()
df['col'].describe()
-
.quantile()
df['col'].quantile([0.5,0.75]) # 返回中位數和第三分位數
-
df['col'].var() # 方差 df['col'].std() # 標準差
2.1.3 MAD
-
MAD = median( |X_i - median(X)| )
-
abs_median_devs = abs(df['col'] - df['col'].median()) abs_median_devs.median() * 1.4826
2.1.4 偏度、峯度
-
偏度
- 是統計數據分佈偏斜方向和程度的度量
- 是統計數據分佈非對稱程度的數字特徵
- 右偏:長尾巴在右邊
df['col'].skew() # 大於0-右偏
-
峯度
- 表徵概率密度分佈曲線在平均值出峯值高低的特徵數
- 峯度高-看起來很尖
import scipy.stats as stats stats.kurtosis(數據集變量)
1 集中趨勢
-
df['col'].mean() # 均值 df['Age'].median() # 中位數 df['Age'].describe() # 描述統計 df['Age'].describe(percentiles=[0.5,0.75]) # 分位數求:中位數和第三分位數 df['Age'].quantile(0.5) # 分位數 df.mode() # 衆數 df['Age'].mode() # 衆數
2 離中趨勢
-
df['Age'].std() # 標準差 df['Age'].var() # 方差 df.sum() # 注意離散數據的求和
3 數據分佈
-
df.skew() # 偏態係數 df.kurt() # 峯度係數:這裏設定正態分佈的峯度爲0
分佈函數的生成
-
分佈函數的生成
import scipy.stats as ss
-
正態分佈
# 查看其性質: ss.norm.stats(moments='mvsk') # m:均值、v:方差、s:偏態係數、k:峯態係數 # 生成正態分佈集 ss.norm.rvs(size=1000) # 1000個符合正態分佈的數字 ss.norm.pdf(x=) # 指定橫座標,返回縱座標的值:分佈函數在x上的值 ss.norm.ppf(0.9) # 從負無窮大到 所求的值,其累積值爲0.9 ss.norm.cdf(2) # 從-無窮,到x=2,求其累計概率
-
卡方分佈
ss.chi2
-
t分佈
ss.t
-
f分佈
ss.f
抽樣
-
df.sample(n=10) # 抽取10個 df.sample(frac=0.01) # 抽樣1% df['col'].sample(n=10) # 抽樣10個
2.2 點估計與置信區間
2.3 概率分佈
2.4 檢驗
2.5 卡方檢驗
2.6 ANOVA
2.7 AB測試
2.8 態分佈
按數據類型選分析方式
自變量x | 因變量Y | 檢驗方式 |
---|---|---|
連續 | 分類 | 方差分析 |
分類 | 連續 | 方差分析 |
分類 | 分類 | 卡方檢驗 |
連續 | 連續 | 相關性分析 |
3. 估計
3.1 點估計
- 樣本對總體進行點估計
- 有偏差
-
數值類型集
-
點估計
# 構建總體 np.random.seed(2019) salary_1 = scipy.stats.poisson.rvs(mu = 2000, size = 10000) salary_2 = scipy.stats.poisson.rvs(mu = 3000, size = 15000) salary_all = np.concatenate((salary_1,salary_2)) salary_all.mean() # 抽樣(樣本) sample_salary = np.random.choice(salary_all,size=500) sample_salary.mean() - salary_all.mean()
-
-
分類數據集
-
點估計
import random random.seed(2019) a = (['doctor']*10000 +\ ['teacher']*25000 +\ ['farmer']*50000 +\ ['engineer']*25000 +\ ['other']*25000) demo_sample = random.sample(a,1000) for b in set(a): print(b + '標題一:') print(demo_sample.count(a)/1000) # 每種職業在樣本中的佔比 print(b + '標題二:') print(a.count(b)/135000) # 每種職業在總體中的佔比
-
3.2 中心極限定理
-
sampling distribution符合正態分佈
-
重複採樣2000次
np.random.seed(2020) sample_point = [] for x in range(2000): sample = np.random.choice(salary_all,size=500) sample_point.append(sample.mean()) # 可視化 pd.DataFrame(sample_point).plot(kind='density', # 概率密度圖 figsize=(9,9), xlim=(2000,3000) ) # 總體 與 重複採樣後均值 比較 salary_all.mean() - np.array(sample_point).mean()
3.3 置信區間
-
展現的是這個參數的真實值有一定概率落在測量結果周圍的程度
-
-
:關鍵值
-
:總體的標準差
-
:樣本的開平方根
-
By 儒冠多誤身 2019/04/21