- 在线时间
- 514 小时
- 最后登录
- 2023-12-1
- 注册时间
- 2018-7-17
- 听众数
- 15
- 收听数
- 0
- 能力
- 0 分
- 体力
- 40222 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 12778
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1419
- 主题
- 1178
- 精华
- 0
- 分享
- 0
- 好友
- 15
TA的每日心情 | 开心 2023-7-31 10:17 |
|---|
签到天数: 198 天 [LV.7]常住居民III
- 自我介绍
- 数学中国浅夏
 |
AQI分析与预测AQI全称是Air Quality Index,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。$ e0 Q; w6 c/ Y* [! P& j. Q8 v1 m, l
本文的分析目标是:, L) J5 D+ f) W3 D7 g
一、描述性统计3 q! R4 K/ x0 q5 L6 A
那些城市的空气质量较好/较差?空气质量在地理位置分布上,是否具有一定的规律?二、推断统计
' }1 ], \1 V1 ~: I' a$ L临海城市的空气质量是否优于内陆城市?三、相关系数分析+ L; G1 s* e' e
空气质量主要受哪些因素的影响?四、区间估计4 z% T, h- h. Q/ M- }7 t
全国城市空气质量普遍处于哪种水平?五、统计建模4 A8 T8 @& w" I% G) b! R7 R
怎样预测一个城市的空气质量?导包并读取数据:import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
* u3 S$ u. A0 M- j4 h3 Jsns.set(style="darkgrid")plt.rcParams["font.family"] = "SimHei"plt.rcParams["axes.unicode_minus"] = False
S$ D5 M+ e/ w; M) }: Ndata = pd.read_csv("data/data.csv")print(data.shape)data.head()![]()
; L3 l- }1 a I7 Q4 ~# R4 @$ Q& z+ E% G3 K
数据集描述:
4 G. f0 U4 q+ i$ x5 q) p- A# }' _2 @( n& v! L- y
City:城市名
! p# e& x9 N" c* r6 z+ }# [- P: d8 ^: x
AQI:空气质量指数
( z- Y) ` [( Q( f$ Y% C
" a" x! C: w7 F" r4 v* {Precipitation:降雨量5 b$ K5 d- W" r5 T7 A5 [
, }# w: Y' N, @ G2 uGDP:人均生产总值
, W) X, Y+ [+ B5 n2 x: n& i( f' l; ]8 O# c) n! \/ E2 r: u; C
Tempearture:温度! B( `$ s2 i& q" u
p& v# c1 y i, \; Z' u$ bLongitude/Latitude:经/纬度* A+ J1 X9 c) R0 y
. F# o0 f- A1 A6 {Altitude:海拔高度
% v. m3 ~: t4 \! J8 ^5 n4 R: ~0 \' b) s3 I
PopulationDensity:人口密度2 G6 \5 H/ K# z$ _9 ^
4 r' \% X2 I( j; S
Coastal:是否沿海
2 n( D/ ~, {4 |
# Q. l% Y+ l) ~+ R' z2 A1 qGreenCoverageRate:绿化覆盖率
) z4 z4 W' o e% m/ r) W7 g$ H+ j# I: C% o1 S5 A4 Q7 `
Incineration(10,000ton):焚烧量(w吨)
( N, a7 q( Z9 d: j$ |$ B4 Y& ^+ } z. U) l- M
数据清洗& z$ n( S- W/ H+ _
检查缺失值:
3 E; s! q; b) T+ w5 [* I( A& c数据集描述:+ H, u. h$ m9 W% k4 L' S
8 l1 d3 y4 V+ T4 J; dCity:城市名. e/ q7 Z9 d+ z( L5 x, L/ @8 D
8 z7 Z* Y+ y7 j' w- L# [" F# J- eAQI:空气质量指数
) |. f5 D2 u0 \, L# }: b: ~
6 r4 A) Z0 E& P( N: Z( MPrecipitation:降雨量: }- s. ^2 G0 x+ E& u2 A, ~
* L2 i/ {/ o" O" `/ e$ b
GDP:人均生产总值- u- `! q7 R! P' u
: p. G8 o( S0 wTempearture:温度. J# C6 t5 |' P T1 @' Q. _
" h8 _) y2 p. o! r# X$ @5 i" I- vLongitude/Latitude:经/纬度
6 o7 K8 b: j1 U2 Y; N2 v0 n& C, p$ [1 O
Altitude:海拔高度1 o$ o3 ]1 C2 `
% B% R" Q$ Q) W' |. x2 G! SPopulationDensity:人口密度
* Z' B' U+ v& @1 c" Y. [( M2 ~3 R6 U" {
Coastal:是否沿海7 u4 ~9 _* x* a( G T: Q6 E, k
- ~+ r2 d" [- L# O
GreenCoverageRate:绿化覆盖率
$ @2 p! z- Q" \: V! C9 _
* H" Z' e: e2 W, WIncineration(10,000ton):焚烧量(w吨)
o( a$ f) J% {9 Y8 J- `) H! W' b! e5 L6 X
数据清洗
' [& N$ S7 y! U& ?2 H, [检查缺失值:
. A7 {% k' x9 B& o9 b" xdata.isnull().sum(axis=0)
) ?7 z Y7 `2 q; T9 W$ U+ `7 W- F; g/ ]: t
; d# |5 l7 V- |+ X- z/ v
" k1 s% z5 V0 C2 d2 i. U
/ u- ?% i8 H. Y- U查看含缺失值列数据的分布:
$ t; \9 s K) K7 ` C# J+ ?) i#print(data["Precipitation"].skew())#偏度 - O# {" m9 i. T4 C1 c, Y" ~- S9 f7 v
sns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图
2 u# ]% o$ R# W7 {( \) Eplt.title("分布密度图") t# G1 K: u( j
0.27360760671177387
9 {" c2 R% d* A: B4 ]
# D3 b; `/ A0 i- o) B8 U% D/ h 4 }: Y! T2 Q6 Y1 r' G
. j, W7 m' v* T5 ?
数值型变量,数据呈现右偏分布,所以使用中位数填充。 对缺失值进行中位数填充 data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)% M0 E5 P9 `. g+ s$ x/ H
检查异常值的三种方法- data.describe() 查看数据的描述:分位数、均值与标准差
- 基于正太分布 ±三个标准差涵盖99.7%的数据
- 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR)
& T! @# G: q' K# [. B F
查看数据集的偏度: 3 W4 a. h. X% t# j) w% p
data.skew()# d& R( |3 ~' F8 X4 M3 {$ ]
- k. `, ?% ]5 a4 `AQI 1.198754
7 v! \4 p5 S, l3 nPrecipitation 0.273608) X+ d( R0 {9 f( v; M$ c2 D8 i0 |% m
GDP 3.761428
( K' Q" v0 w$ `* RTemperature -0.597343
1 B; @0 N$ ?: F4 [5 C* \Longitude -1.407505- M- U: g9 Y! B. @
Latitude 0.253563# `) `! u! r' T9 \8 a
Altitude 3.067242 Y8 B* U# `1 M3 C: A) d
PopulationDensity 3.125853
! H- E- f% j1 w0 e5 vGreenCoverageRate -0.381786# g( @* S5 i( F" Q( e
Incineration(10,000ton) 4.342614; i( R! N+ D& S/ n8 w P
dtype: float64
+ \2 t2 V# \3 ~: T" \7 m$ H( Q; C. K f8 Y' q J2 x- q
可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。 下面我们查看以下GDP的异常值:
' T2 g$ R: O" y6 ]- O/ Wmean, std = data.GDP.mean(), data.GDP.std()1 Y7 Q% \0 x- o" \
lower, upper = mean - 3 * std, mean + 3 * std# ^1 w" D9 x. {) Z3 J% V1 B7 B' Z
D8 Y V# L6 `/ B/ r6 V. F& Aprint("均值:", mean)* E* u! F1 ^; L1 \2 B: O# a3 [
print("标准差:", std)
+ L1 z* ~" e {' Eprint("下限:", lower)
2 W; i; S- t" u2 Z) T, F+ G6 Kprint("上限:", upper): G+ ]# \) [$ B" b
data.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]& ~1 w& C, S) \
4 F9 _* n9 E* o- u
均值: 2390.901815384616+ A a2 F7 ~2 e% ^4 X% T4 f
标准差: 3254.876921271434
+ f( U7 L- R; \, ?: t, v3 P$ e下限: -7373.728948429687
% C, K: @. x' z9 }: s( u上限: 12155.5325791989181 {2 B% T; Z# E7 b" {
16 22968.60
# f' G7 l0 A1 w6 C& U63 18100.41
& H/ Q, F9 K6 i6 a) P& T; Y) d202 24964.99
; C# ]8 ]& o4 l8 U4 E207 17502.99
9 e( I/ Z; K. M6 O) ?- b215 14504.072 R5 u0 [: x8 b2 y5 W
230 16538.19
; g# B4 }# {' `256 17900.00
* y6 I! ^( F( c* s {) b9 Z( e1 L, ?314 15719.72
1 l3 l. d% b' ^! @5 c9 n3 N# p. BName: GDP, dtype: float647 D* K2 ^" q$ \' q& P
/ _+ Q, T* A) ?' B
' g/ L0 v1 S6 d1 o
% d* `; s9 J3 q# s H1 @- u7 [" {) L' x, P1 j
8 v( ^4 T5 i2 M6 Y9 _
|
zan
|