在线时间 514 小时 最后登录 2023-12-1 注册时间 2018-7-17 听众数 15 收听数 0 能力 0 分 体力 40277 点 威望 0 点 阅读权限 255 积分 12794 相册 0 日志 0 记录 0 帖子 1419 主题 1178 精华 0 分享 0 好友 15
TA的每日心情 开心 2023-7-31 10:17
签到天数: 198 天
[LV.7]常住居民III
自我介绍 数学中国浅夏
AQI分析与预测 AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。
, o# i' l, P* T3 S7 q% B8 X% U: k 本文的分析目标是:
* F2 \8 c" j; L 一、描述性统计
) y1 F8 C8 T) d( ~7 | 那些城市的空气质量较好/较差? 空气质量在地理位置分布上,是否具有一定的规律? 二、推断统计 ( z: C# P0 D* j" |' a
临海城市的空气质量是否优于内陆城市? 三、相关系数分析 % m- ?9 _# h2 F: u1 ~" g
空气质量主要受哪些因素的影响? 四、区间估计
( N6 F: v, l. z* ]$ U 全国城市空气质量普遍处于哪种水平? 五、统计建模 1 W! s3 |8 a C, Z: o0 l1 o
怎样预测一个城市的空气质量? 导包并读取数据: import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns
! _% c: `- Z, S1 b. ?+ T ^ sns.set(style="darkgrid") plt.rcParams["font.family"] = "SimHei" plt.rcParams["axes.unicode_minus"] = False
- f9 Z, X. K4 v8 T7 s2 [$ W data = pd.read_csv("data/data.csv") print(data.shape) data.head() * r3 V, Y& v& O! \0 I# m0 X
9 a6 D' M% b/ O' g
数据集描述:
7 {6 o9 _; B" b2 o
' U4 z* h& s4 J% W5 w0 Y# e7 G City:城市名
" ]; n0 ]% Z) Q 5 J* F- u9 @/ ]% d8 [
AQI:空气质量指数
& t% U" E" O6 V0 G+ o+ Y
) y* e4 M6 x1 @5 Q Precipitation:降雨量* p E6 X2 o$ Q& q
: X" B+ ^( h: x. w5 R
GDP:人均生产总值. I4 Z4 U) o( L9 P/ }
/ d$ w* B# ?- r8 ^' U! i6 l, h
Tempearture:温度
' ^: e4 x: \, g, C3 z
7 i2 u a9 }7 ], _ Longitude/Latitude:经/纬度4 `- v% a% w1 D. L# Z% k
% r, Q N' I" W* C# T6 _* w
Altitude:海拔高度
0 I) O" [/ C9 Z8 u& w9 D5 v % V r, j- i. c, p9 Y. ?' b5 g$ ^
PopulationDensity:人口密度7 g$ N, P% ] u) S2 P9 e
/ @+ ]& [% I! G. K
Coastal:是否沿海9 Y6 N- \+ A* `$ [% v! ~7 `
5 {/ s% {- Y [5 z GreenCoverageRate:绿化覆盖率
8 C) ^/ j2 D4 E8 K' d6 D. ~0 p3 L
0 ]3 J: r/ Z, y Incineration(10,000ton):焚烧量(w吨)
c1 w: \- X* u$ I, S$ }1 M
% x" t- ]0 W6 y% H" U 数据清洗: \' @& S+ D9 n* I# e! y
检查缺失值: D4 }" A, b/ P% g8 h' d1 ]
数据集描述: B7 o, J7 V- U3 k+ x* p E
6 i0 G5 R, E8 s* ?9 m$ ]3 h City:城市名. `% b. |! \0 c, C9 }
0 i0 @1 k) c$ c9 t) Z( s" c AQI:空气质量指数
2 O" B% Q1 e, w3 B* D ; ^" {: \# ~/ j0 g, H
Precipitation:降雨量0 ^- l" ?+ m5 N9 d0 ^
* w* k/ ?5 u! p GDP:人均生产总值. T% \% t" p9 y
M* j5 I, c) I Tempearture:温度* K" l8 A' E, y
L( p3 O9 P# A7 [0 j
Longitude/Latitude:经/纬度3 f" t$ ~- W+ o/ e- [2 x
+ G+ q* Y9 z @; L5 U: g Altitude:海拔高度
& X- C8 E. v/ ? u9 M 9 x' q& m9 ^0 j+ e5 ?- V1 E9 w' U
PopulationDensity:人口密度" n, \: v/ A0 F, G+ c/ T
/ n0 M9 S+ P/ B$ j# d) x
Coastal:是否沿海/ _! T5 Y0 Q1 {$ \# X! U, M
3 a' h$ f; a( c2 n7 } GreenCoverageRate:绿化覆盖率- o: m/ v, V! c3 h) T4 a, S
$ s3 F6 G. A, T Incineration(10,000ton):焚烧量(w吨)$ M& U9 q5 i! s6 ^2 I1 s
2 l3 G- s- s0 q% T
数据清洗
0 B7 D' i/ I6 @9 b 检查缺失值:% l2 ^+ R' x/ h: m/ z& E
data.isnull().sum(axis=0)
4 {* k l9 b2 G; q# ]7 ^, `# _ + l, i J4 B8 p% f$ _) } ?) H
( `) M0 B6 Q0 h! k! ]# H2 n. k
) U @2 N! G; l! S. g3 f& ?
9 k9 F4 u8 e) o# e, o N" K# q O0 h 查看含缺失值列数据的分布: ) N1 C) P6 U) K6 T& i+ o
#print(data["Precipitation"].skew())#偏度
8 e& h0 t0 \, ?/ ?2 T% F2 g; i+ H' O7 E sns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图7 |) p! V1 J3 R+ n8 N6 p3 ]; l! p
plt.title("分布密度图")
( E: m" @! j9 E% O/ S" n, U8 L 0.27360760671177387
4 I: b. `- r- p ; c; u9 E. z* G. M' z/ P" d
% V' w& W' \3 Z @; w. o
8 t. m7 J; a( f0 [& b
数值型变量,数据呈现右偏分布,所以使用中位数填充。
对缺失值进行中位数填充
data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
: j# \& O" [% i( | 检查异常值的三种方法 data.describe() 查看数据的描述:分位数、均值与标准差 基于正太分布 ±三个标准差涵盖99.7%的数据 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR)
' T0 H, i7 P4 ?4 u$ L 查看数据集的偏度:
I+ |3 Z2 x+ {2 ?& |6 C data.skew()
& i9 U8 z( ~( q6 o. e & O$ @* a- W# [( } P. }! w' s
AQI 1.1987549 F1 h3 x* J: s" |1 u
Precipitation 0.2736089 x# R* A1 u& }% }6 ^: e
GDP 3.761428* B8 O+ n% x8 ~/ ~/ t8 k
Temperature -0.5973438 R/ j8 s( d; q- k4 o4 O2 U3 w
Longitude -1.407505
$ d% R3 @4 K* r5 f Latitude 0.253563: }+ x7 X" y i2 l: Q" V" `# B
Altitude 3.0672425 P# t! z5 l# T) H* G1 M) l. _
PopulationDensity 3.125853" W% j w4 ^3 m4 \( i1 ^+ B" c# a
GreenCoverageRate -0.381786 c0 A; [. Z8 p# I8 P$ {; ~- g
Incineration(10,000ton) 4.3426143 Y5 Z" W2 d8 t. m/ _
dtype: float64
6 b: U1 B; `7 Q& d
3 A# g2 q9 s2 Z5 z7 C' B% e" b1 ` 可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。
下面我们查看以下GDP的异常值:
/ P- U2 Z2 p2 I3 g4 Z* P9 E mean, std = data.GDP.mean(), data.GDP.std()$ S1 h, S* w5 r! C* g ~& |+ z
lower, upper = mean - 3 * std, mean + 3 * std6 F. m t' i0 S6 ]; S' W
, H6 h9 y0 c' o. z print("均值:", mean)
2 G p! h8 [ o& e5 M! G7 w& T2 s2 S print("标准差:", std)
$ y! A, d1 [4 h0 W print("下限:", lower)
1 |/ i: j& @) B1 z1 Q' s3 o: w print("上限:", upper)" \( n" ~0 v$ M2 X; j* S0 p# D3 [, {
data.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]
$ Y* E" Y0 I" v & ]% Q/ L6 d- R* j
均值: 2390.901815384616, ?2 M. [9 p4 l! l4 g: m
标准差: 3254.876921271434
' R) | f1 p- ?4 N& h) g 下限: -7373.728948429687
* n& {" ]0 U0 L) Z. e2 `, _. P- E 上限: 12155.532579198918
3 x8 d1 ]& A* M7 P; j2 v) r( ^ 16 22968.609 M1 T Y: N1 `* Z
63 18100.41- i( K: z7 H, }. e$ C! u' W" d6 u" X
202 24964.99
& _. ]& o+ l6 m* ? 207 17502.99& X! E; D. W! C+ W0 o9 \/ b
215 14504.07
7 y4 q( a: I, j% S8 |+ F 230 16538.19
, \3 o Z# _8 F& o( ^ _$ U 256 17900.00- i; v! a1 R+ z- u
314 15719.72
- I6 _: j; e* _# L* D' ?: @' D# K* z Name: GDP, dtype: float64+ ^- d' n8 u* z# V6 I @
; j& f( K1 m. u0 y1 o; d) z% B
% A5 v8 A. w; |6 Q& A
3 I1 t% b" P6 U1 r# I0 J
3 \9 T `# t1 o2 {$ V5 @ 4 ` J0 m+ a' p, U! p- @: ~9 R; N
zan