- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40301 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12801
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
AQI分析与预测AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。. O* c5 z% `7 M
本文的分析目标是:- X5 j; m1 Z% g' |2 l7 V
一、描述性统计
5 j0 M: n5 W2 x- I& u# E! i那些城市的空气质量较好/较差?空气质量在地理位置分布上,是否具有一定的规律?二、推断统计: |% i" y$ [" f6 P
临海城市的空气质量是否优于内陆城市?三、相关系数分析
% k8 _! S4 L! N7 M( n- D空气质量主要受哪些因素的影响?四、区间估计
& Z* [" r0 [2 b$ }5 z全国城市空气质量普遍处于哪种水平?五、统计建模
; a; I3 c, g6 L怎样预测一个城市的空气质量?导包并读取数据:import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
# g8 O3 G- \, ?' c, X9 Z( k; t" f7 |sns.set(style="darkgrid")plt.rcParams["font.family"] = "SimHei"plt.rcParams["axes.unicode_minus"] = False5 T- h: S" `, W7 s, ?
data = pd.read_csv("data/data.csv")print(data.shape)data.head() / a& x. L0 I9 F) E1 |8 C" ~
5 `/ G% U5 f! _1 F数据集描述:
, M2 f e% c4 c! R7 p7 V* r a$ @5 E' r; @
City:城市名
0 T6 i' |' ~# g) R- Q2 P6 c, _3 t3 L7 X0 f4 ]
AQI:空气质量指数 L4 A: Z( V4 K( o( L- m
) F( ^, C3 N8 q& h; e1 n7 uPrecipitation:降雨量7 `' H2 f, }- S: [
l; F! S9 S. A7 ?& f( yGDP:人均生产总值) K; ?! _/ G, F
2 |! ] b0 s5 l" i; D
Tempearture:温度
: ]' ?' \% j& Z; ~1 m% x( A0 B1 D, ^ y a# o7 d) ^
Longitude/Latitude:经/纬度
* n. o" O8 S8 a5 B1 M
. x+ ]: a8 j% l* lAltitude:海拔高度( h: i5 a1 c6 p3 Q$ h; v+ U/ {
0 }2 {* W. p* w# O. B: cPopulationDensity:人口密度; B8 n3 @8 N% u' F, j" a
8 I& F+ n0 x; F: |# R2 XCoastal:是否沿海) L/ h5 q; v( Y3 C( p1 _' K
: t* J- J8 H9 u3 ]$ K( FGreenCoverageRate:绿化覆盖率
7 L/ v4 ]6 d9 G8 m
! e% p: k+ ?3 S3 W1 AIncineration(10,000ton):焚烧量(w吨)- m* m1 ?- u0 E6 G& X. O2 x5 J( y
8 I: ?/ l9 ^5 E8 m/ }
数据清洗
5 p; k; z, f+ q6 j" L检查缺失值:
2 Q! L5 C3 h- l: z; ~( D数据集描述:9 L/ Z2 a, l4 ^% n& ?
( S8 O9 b# M; j4 |- g3 j1 c( m
City:城市名2 P$ B/ i' R9 @: H3 V$ B* F! ?
' q5 S" z+ T& }5 L! }* q+ p c0 @4 a
AQI:空气质量指数0 b# [: j5 Y* I: `# f
. ^6 G2 N! z0 Q0 ?! k; Q
Precipitation:降雨量
3 X0 a7 `( D+ E$ V" }
" f, E, z* Y3 ^1 e3 d* O3 rGDP:人均生产总值3 k" k* ~1 U$ n ?
' s7 V: l# Z0 k% f- F, R8 w' a$ c) M
Tempearture:温度
+ e Q7 \/ ?1 g a5 Q
9 i% Q5 e: G: M: d& s3 p+ CLongitude/Latitude:经/纬度
n2 N) ^& R, z+ d" t0 F8 V/ B `3 B6 G" O$ }; ^2 V1 W& d
Altitude:海拔高度
3 h* X0 \$ k5 f, B: h7 {9 a6 }0 R, T6 v* S$ j/ Z: }
PopulationDensity:人口密度2 b1 b' W! f& J: I, ~! }5 W
7 f/ \& i" G. s/ ECoastal:是否沿海
: t" W2 d% G$ }) I# h
' `: z1 P; k! e8 IGreenCoverageRate:绿化覆盖率1 |4 O% g% H4 z8 w; k
! J2 _+ x: ]2 Q8 x/ nIncineration(10,000ton):焚烧量(w吨)$ B; Z) T }& b. b6 F
# d0 k2 s6 a7 u% J) y
数据清洗
* z0 T; q9 U. G0 `& A) P检查缺失值:" s1 Y! e6 G# \
data.isnull().sum(axis=0)
: k9 N* d4 L% b( ?; b% X. c5 ?9 e/ ^$ E3 z q6 Y, V1 A
2 \* o" V9 r* H$ c$ e 5 e% v9 [0 t a' g4 b- }
5 L' T' b$ Y5 ~2 o" o( R) t0 Q
查看含缺失值列数据的分布:* @" C3 G1 O) z
#print(data["Precipitation"].skew())#偏度 6 J5 [: o' v$ q8 J+ E
sns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图9 a; ?/ v6 M7 e
plt.title("分布密度图") O! X5 p: D1 n7 \- E
0.27360760671177387
h" ~" l9 n% k" u; Y( G
* l4 p, G, V& [![]()
: ?9 z$ J6 L, [# r9 I/ O" f) d& _' ~9 b6 ~! v6 T; n, ~
数值型变量,数据呈现右偏分布,所以使用中位数填充。 对缺失值进行中位数填充 data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)$ d" H/ t5 p$ z; ]/ m* p
检查异常值的三种方法- data.describe() 查看数据的描述:分位数、均值与标准差
- 基于正太分布 ±三个标准差涵盖99.7%的数据
- 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR)
+ R9 Q, g2 P8 y; y+ c" S
查看数据集的偏度:
- V5 P* P* }" c( r9 mdata.skew()
$ G3 ?: m9 D6 F4 _: n
/ ^0 r2 p( [- f. I& l" H+ G) C: u% hAQI 1.198754
) ], [' m4 S+ {& zPrecipitation 0.2736085 O3 G. A2 A" O( O. D
GDP 3.761428
d( p$ I4 A+ u$ P$ e% iTemperature -0.597343
" P# ?" G5 n7 L0 J+ i. m5 GLongitude -1.407505( k* v; e0 J! ^
Latitude 0.253563" J) e7 o# y5 p9 {
Altitude 3.067242/ u- ~( x2 f( `# u& D/ x# B
PopulationDensity 3.125853
# n$ w* L( m$ aGreenCoverageRate -0.3817860 m( L0 M' w- }
Incineration(10,000ton) 4.342614/ X u% Y# b4 I8 X# A6 a5 {
dtype: float64; i2 S# t1 W, Z; w% x
$ j3 D" j3 k, Z. }, L$ J; I
可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。 下面我们查看以下GDP的异常值: 3 j* K3 P g/ N: a+ P& ?& P, Y
mean, std = data.GDP.mean(), data.GDP.std()2 C! B. W4 d9 e0 m2 c# t
lower, upper = mean - 3 * std, mean + 3 * std C, I: Z0 A3 z+ N4 [8 Q, x3 h2 u
% X8 I% k$ Q: lprint("均值:", mean)
2 ]% n" [! p$ z: w3 uprint("标准差:", std)+ X3 \6 g8 _- c' b) D* i
print("下限:", lower)8 |1 @/ T% r# l0 Y& W
print("上限:", upper)
! U$ a! y* a) hdata.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]3 K. _. M+ ?! a+ D
9 y9 p5 l8 ?5 P& k; I/ Q( _均值: 2390.901815384616- H: \) ?* d# H
标准差: 3254.876921271434+ \. y( L0 p3 T8 J
下限: -7373.7289484296879 d+ x$ v+ P4 D X1 j/ B
上限: 12155.532579198918
* }/ e: z! F; E+ t' b* `16 22968.604 e# @0 p! M0 v1 b; D' [ E0 ]
63 18100.41- g( |, y0 T. ]9 U3 K$ ^
202 24964.991 D% }' d; Z: X
207 17502.99
8 P* w" A K" P215 14504.07. ^" I) o3 K& e2 | A+ ~
230 16538.19, N, ~. y; b5 a1 ^# K
256 17900.000 f% ^7 O3 J+ {) U: H' Q4 c, J
314 15719.72
5 ?/ L9 \5 S+ l: G% R1 ~; }- jName: GDP, dtype: float645 S; o( b1 b( f- D8 `' K
* _/ V7 ?; i3 T, w$ Y, ]* I0 i- t
8 H6 I% G: m3 ^
2 s# d# B4 J+ p
6 k; J5 }6 r) S% G3 `& r7 R) q2 t: Z8 U9 M a, Y3 R
|
zan
|