- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40322 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12808
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
AQI分析与预测AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。
+ Z1 x3 Q- T, j& P( v$ g) l本文的分析目标是:3 | r3 W1 \) t+ l
一、描述性统计
, q4 M0 m6 s* s5 ]0 A" a. l+ u那些城市的空气质量较好/较差?空气质量在地理位置分布上,是否具有一定的规律?二、推断统计
/ P) F1 ~1 [& r6 X+ u* W临海城市的空气质量是否优于内陆城市?三、相关系数分析
1 E2 E/ \1 Y7 L, N6 @% J; H/ o2 _空气质量主要受哪些因素的影响?四、区间估计
+ ?' a) B) D" L- p3 F n全国城市空气质量普遍处于哪种水平?五、统计建模0 F, f7 d( E: q7 m
怎样预测一个城市的空气质量?导包并读取数据:import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns: U. F$ m" ? {( c) M
sns.set(style="darkgrid")plt.rcParams["font.family"] = "SimHei"plt.rcParams["axes.unicode_minus"] = False/ I: z+ i2 K1 _# |' e
data = pd.read_csv("data/data.csv")print(data.shape)data.head()![]()
, u& k W/ O, P. u7 k+ W y' [/ w# W3 h) ]1 n
数据集描述:9 X4 V _; _, o! d r/ @
; P) ^3 m @& T7 p/ V Z: d2 ]
City:城市名6 c. A% k7 S. f, l1 Y- i( A
+ s" s1 J* g: a. F7 zAQI:空气质量指数
- z9 c3 ?2 X3 g7 I7 V
- @$ u' ^2 d' o1 W6 m vPrecipitation:降雨量
6 _/ N9 c8 G& f; |& h( n/ l5 e6 ~
GDP:人均生产总值( l+ q5 q- j% M( Y
: [. ]- I+ ~ W# _5 {3 S" ~5 M0 I$ ]Tempearture:温度/ O0 c. y% N/ U- P* f
+ d) m4 u7 K6 P* P3 ULongitude/Latitude:经/纬度
7 g) `8 ~: ^% P8 j
% o: i4 p7 p$ f2 g7 fAltitude:海拔高度! o2 t( C3 x2 A1 h% {, J+ q. d
8 r x/ U4 f2 yPopulationDensity:人口密度
# R1 S4 Q# D, N
1 h; Y9 v5 a7 L/ s( w& _2 d. a& oCoastal:是否沿海
* e( I0 A9 U! E* s
* N! |1 \5 K) H- k7 _GreenCoverageRate:绿化覆盖率: W/ [7 b0 i% b, ^
8 I b1 X" B+ O: {Incineration(10,000ton):焚烧量(w吨)" u: N6 [+ Q6 F
! z/ E E6 _3 E( r数据清洗- P! f# z& c5 j& K+ E% {! C
检查缺失值:% m' \& c% t4 E0 L# |9 k" b
数据集描述:
+ Y- x5 m- }# F
1 t/ [; V. C. \8 O) W' iCity:城市名. N9 c$ p0 Y, f- N8 l
. I% l K) p& q
AQI:空气质量指数
# @9 e( }# m6 M6 j) y9 ?" {' }
% b8 \3 i+ n1 X% ePrecipitation:降雨量7 O- V$ T2 H3 Q" R
+ L4 D: S2 S1 V
GDP:人均生产总值
: e- D# `* P/ ~0 `6 v0 t ]9 A% U9 k/ [
Tempearture:温度! o* v* ^/ F7 ]1 v5 D% i# o9 v! D
8 C0 M, e4 R! FLongitude/Latitude:经/纬度
! p' Z+ v) X2 M5 \: n4 Z, b2 @- }+ t) ^. g' m( |5 x ?
Altitude:海拔高度- S2 Y, l- T; G( p, [6 _, |
) J( m2 l# F p# E3 S0 l
PopulationDensity:人口密度" ]9 M) Y6 ^! Y# h6 G
" J" T L: L9 _3 M$ g
Coastal:是否沿海8 k/ y& O( } ~( J# F, [+ S) m
5 K1 O. b4 ~/ g" I5 v$ l6 iGreenCoverageRate:绿化覆盖率) P3 b# C2 \7 a! A4 e2 `2 S$ d7 s
; n" t/ X0 T; s: G; v( yIncineration(10,000ton):焚烧量(w吨)
- N2 O6 z) y* h- B3 M' L4 V7 v) c% L, i' K/ t. D, j
数据清洗* U2 s2 t: s# X. ~ a
检查缺失值:
- a$ P2 E0 d- N' e3 @1 q6 S4 ^; Ydata.isnull().sum(axis=0)8 @" G- i% L" ^5 V2 S, p
5 J5 D! Y1 p4 x2 M( V+ L
- @5 D# p2 f/ y. O" C; o o![]()
6 p' i* \ {% E1 D3 \3 s3 @$ p2 |! C( Z# o9 V6 u$ T/ V
查看含缺失值列数据的分布: A" B+ d3 W* @
#print(data["Precipitation"].skew())#偏度
9 p" I4 z! W6 t) Y2 h# |5 H4 Ysns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图
+ y8 O$ R, C& y- P) e) j1 Jplt.title("分布密度图")
Q: M& G8 X9 v v$ p4 n S. i0.27360760671177387
H I4 B- I" H* V( H
( K! h5 {3 ~# W$ }5 [: A: Q- Z" V ( ~: g1 m, t9 x$ f! U0 w$ B+ `
! o' d- q0 L6 B4 T( ?
数值型变量,数据呈现右偏分布,所以使用中位数填充。 对缺失值进行中位数填充 data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)
( x- E& c" e/ n' {检查异常值的三种方法- data.describe() 查看数据的描述:分位数、均值与标准差
- 基于正太分布 ±三个标准差涵盖99.7%的数据
- 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR). I% U7 V8 a! X% ~
查看数据集的偏度: % j5 m, q- S. e3 L: y
data.skew()2 O3 m! D% g- @- N% d
: Y6 z+ X6 N. M& q0 c' L
AQI 1.198754% @ B) q8 S# ~% a
Precipitation 0.273608) r" H; f5 r# e2 Q
GDP 3.761428
4 ]8 C' p! _9 S! n9 p' j( hTemperature -0.597343) q+ y# g, E; ]8 i
Longitude -1.407505: X, F2 o- g% E6 [( N1 ]6 U
Latitude 0.253563
1 O0 b/ J2 \8 x& AAltitude 3.067242
: V1 g$ d; ]/ s, E4 T2 Q9 i: KPopulationDensity 3.125853, g$ h" w# k4 o5 f$ x6 N
GreenCoverageRate -0.3817864 b% v* O" P+ r: D$ ~
Incineration(10,000ton) 4.342614
: x8 [- B" q% `4 @- V" bdtype: float64
- E d. o' E5 _2 N( c g
, Q) Q. p. W, k- U可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。 下面我们查看以下GDP的异常值:
' g) @. y5 ?) l9 O7 Z) ymean, std = data.GDP.mean(), data.GDP.std()! I3 z7 @( a9 z) ]) ~$ G: O2 m& }1 k6 M9 |
lower, upper = mean - 3 * std, mean + 3 * std
, O4 r6 ~ `1 W5 l3 R6 O7 M$ }( z: _; z: K+ k+ b
print("均值:", mean): I/ K1 U- u( X5 l, s2 K
print("标准差:", std)' s# X3 D' g" r/ @5 X* H
print("下限:", lower)6 }2 Y( R+ O+ ?9 P: V" C7 x, p. _( c
print("上限:", upper)9 A: ^% \' Z& V, u) |$ R9 U
data.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]
& D4 ^; W+ z3 J. n* @5 ]# Z6 z
3 c8 g" |2 ~+ b均值: 2390.901815384616: X' L% V3 a% c7 Y F
标准差: 3254.876921271434
% r9 G. ?8 O: T. O7 `下限: -7373.728948429687
: t1 R, J0 x. N: w- ]. j1 s上限: 12155.532579198918' z) S; y! M' c. o3 K9 M
16 22968.60/ i+ N- K, n+ ~$ z4 O, D2 X# Z
63 18100.41
* }! I" B2 g' X/ M: o2 Y3 t202 24964.99
! d( `3 m: k* U. z& v f: O207 17502.99
& D" n( Q0 e: q: N/ Z8 l215 14504.07
, m; N8 k) t: Q9 _' z3 V9 o/ S230 16538.19
) P; }7 K( L7 a! z) ?. I. q: f256 17900.00$ u) x# A/ M. w# {# G$ Z+ K) L
314 15719.72
+ F& k6 ] o- P( JName: GDP, dtype: float64
, u8 P3 b# Y7 e5 m' d" {8 Q
0 O$ A1 ?* H+ S; ?% j6 c9 g2 I2 d& i; B) m$ z
* Q8 H+ k! R2 z& h7 r
0 ~ y$ ]( u8 v6 M
R3 A; |* u$ ^% ] |
zan
|