儿童视力数据(2)
接上文
生成一個(gè)近視指標(biāo)。看看不同年齡段的近視比例
df['idx_of_nearSight'] = (df['sight_impaired'] == True ) & ((df['right_s'] < -0.5) |(df['left_s'] < -0.5))df['idx_of_nearSight'].value_counts()df.groupby('type')['idx_of_nearSight'].value_counts(normalize=True).unstack()?這里可以看出近視比例隨著學(xué)段,不斷上升了
那么做一個(gè)卡方檢驗(yàn)。
crs_of_nearSight = df.groupby('type')['idx_of_nearSight'].value_counts(normalize=True).unstack() crs_of_nearSight import scipy.stats as ss ss.chi2_contingency(crs_of_nearSight)保存crs_of_nearSight是為了后面用。
這樣就可以得到卡方檢驗(yàn)的結(jié)果。
crs_of_nearSight = df.groupby('type')['idx_of_nearSight'].value_counts().unstack() crs_of_nearSightimport scipy.stats as ss ss.chi2_contingency(crs_of_nearSight)?卡方檢驗(yàn)必須用絕對(duì)數(shù),所以 value_counts()里面的normalize不能有。
?結(jié)果,χ2值是1244,非常大,非常顯著。
為了寫(xiě)到論文里面,把這個(gè)表格賦值到剪切板里。發(fā)送到excel。好編輯。
import scipy.stats as ss ss.chi2_contingency(crs_of_nearSight) crs_of_nearSighty = ss.chi2_contingency(crs_of_nearSight) y crs_of_nearSight.loc['chi2'] = y[0] crs_of_nearSight.loc['P'] = y[1] crs_of_nearSight crs_of_nearSight.to_clipboard()?
?
?
?刪去chi2和P的后面的格就可以。
接下來(lái)可以看各個(gè)年級(jí)的近視率了。
這里生成一個(gè)交叉表,還是需要reindex
用pivot_table 也是可以的。
pd.pivot_table(index='nianji', data=df)['idx_of_nearSight']?
x = pd.pivot_table(index='nianji', data=df)['idx_of_nearSight'] nianji_order x.reindex(nianji_order)?
y = x.reindex(nianji_order) plt.plot(y) plt.xticks(rotation=45)?得到近視率
?可以看出,近視率從小學(xué)到初中,一路攀升。
這里也可以用crosstab
pd.crosstab(index = df['nianji'], columns = df['idx_of_nearSight'])?可以得到各個(gè)年級(jí)的近視人數(shù)。
?還是做一個(gè)圖
pd.crosstab(index = df['nianji'], columns = df['idx_of_nearSight'], normalize = 'index') pd.crosstab(index = df['nianji'], columns = df['idx_of_nearSight'], margins='row')?算百分比的。
?
?列出行總數(shù)的。
?當(dāng)然這個(gè)表也可以計(jì)算卡方。
還是做一個(gè)圖。
x = pd.crosstab(index = df['nianji'], columns = df['idx_of_nearSight'], normalize = 'index')[True]fig, ax = plt.subplots() ax.plot(x.reindex(nianji_order)) ax.set_xticklabels(labels = nianji_order, rotation= 45)?
另外還想分男女生作圖。
pd.pivot_table(index='nianji', columns = 'sex', data= df)['idx_of_nearSight']?用pivot_table 比較簡(jiǎn)潔。
?
也可以用grouby或者crosstab
x = df.groupby(['nianji', 'sex'])['idx_of_nearSight'].mean().unstack() x.reindex(nianji_order)?
?可以得到結(jié)果。
做一個(gè)圖看看。
plt.plot(x.reindex(nianji_order))?
?
?發(fā)現(xiàn),沒(méi)有標(biāo)明男女,那還是分別作圖。
fig, ax = plt.subplots() ax.plot(y['男'], label = '男生') ax.plot(y['女'], label = '女生') plt.legend() plt.xticks(rotation=45)?
?發(fā)現(xiàn),小學(xué)階段,女生近視率比男生高,一直到初中,初中階段也是女生近視率略高,這可能是因?yàn)?#xff0c;女生都比男生愛(ài)學(xué)習(xí)???
?另外一個(gè)任務(wù)就是,區(qū)分 視力不良的程度。 5.0當(dāng)然是最好的,4.9算是輕度,4.6-4.8算是中度不良,4.5及以下,就是重度。
#---------------------------------------------------------# #---- * 區(qū)分,輕度,重度,中度 * ----# #---------------------------------------------------------#xx = pd.cut(df['left'], bins = [0, 4.6, 4.85, 4.95, 6], right = True, labels = ["bad", "mid", "little", "good"]) xx.value_counts() yy = pd.cut(df['left'], bins = [0, 4.6, 4.85, 4.95, 6], right = True) yy.value_counts()?
?
?
?可以看出,good的是5.0的。4.6-4.9的是輕度,單純從左眼來(lái)看。
視力好的,有4933個(gè)人。輕度不良的(4.9)的有1007.因?yàn)閰^(qū)間是 (4.85, 4.95】
中度的是1471,區(qū)間是(4.55, 4.85】,重度的是 1366,區(qū)間是4.5及以下。
視力不良判別,程度判斷指標(biāo),只能分開(kāi)左右眼來(lái)判斷。分組也很麻煩。左右眼判斷要分別開(kāi)。這個(gè)就不做了。
比較簡(jiǎn)單的是分左右眼,統(tǒng)計(jì)均值。
pd.pivot_table(index='nianji', columns = ['sex'], values =['right', 'left'] , data = df)pd.crosstab(index = df['nianji'], columns=df['sex'], values=df['right'], aggfunc = 'mean') pd.crosstab(index = df['nianji'], columns=df['sex'], values= df['left'], aggfunc = 'mean')df.groupby(['nianji', 'sex'])['right', 'left'].mean().unstack()?上述三種方式,都可以。
x = df.groupby(['nianji', 'sex'])['right', 'left'].mean().unstack()x?用groupby。
?
x = x.reindex(nianji_order) x right_mean = x.loc[:, 'right'] left_mean = x.loc[:, 'left'] right_mean['男'] left_mean['女']fig, ax = plt.subplots() plt.plot(right_mean['男'], label = "男生, 右眼") plt.plot(right_mean['女'], label = "女生, 右眼", linestyle = '--') plt.plot(left_mean['男'], label = "男生, 左眼") plt.plot(left_mean['女'], label = "女生, 左眼", linestyle = '--') plt.legend(loc='best') plt.xticks(rotation=45)?
?可以看出,視力的頂峰是一年級(jí)時(shí)期。或者大班時(shí)期,這時(shí)候,視力發(fā)育成熟,基本都是5.0.從小學(xué)開(kāi)始,一路下降。
總結(jié)
- 上一篇: pandas to_json转换时强制中
- 下一篇: 抗日战争的胜利可以布置什么创新作业