- 在线时间
- 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,指空气质量指数,用来衡量空气清洁或者污染的程度,值越小,表示空气质量越好。
' j6 B: j' K+ m本文的分析目标是:& p/ S1 q' o' r3 B2 U
一、描述性统计! X: E' y1 _9 C
那些城市的空气质量较好/较差?空气质量在地理位置分布上,是否具有一定的规律?二、推断统计
+ X6 X9 U) x4 p临海城市的空气质量是否优于内陆城市?三、相关系数分析
; r5 M) K1 X) R6 d空气质量主要受哪些因素的影响?四、区间估计
2 ~* Q7 S7 P2 _4 k+ e% D全国城市空气质量普遍处于哪种水平?五、统计建模
. N Q+ k, b# @ I7 N& |7 `怎样预测一个城市的空气质量?导包并读取数据:import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as sns
' i2 Z1 _% o. x. [1 asns.set(style="darkgrid")plt.rcParams["font.family"] = "SimHei"plt.rcParams["axes.unicode_minus"] = False. k+ R3 V) ?3 p* N; H N
data = pd.read_csv("data/data.csv")print(data.shape)data.head() : }+ r/ n/ {) t. k8 O
. w1 v" ~# I/ m9 g$ m' x) W* x' V( U数据集描述:( Q4 ?6 J" u# x
4 i5 _: k+ ~4 M7 l1 [7 g2 KCity:城市名% t( P# d$ y# R7 p F3 ~
& D" o" m3 P, V8 w
AQI:空气质量指数/ C" R2 _0 v- E4 |3 p0 c. \
0 f# @7 |) F! M- M7 m* ~
Precipitation:降雨量+ i2 H' F. i" A& w) M
: A# c$ i" G, p! F* u t: y
GDP:人均生产总值8 Z/ W$ H' x9 i% D2 Q
5 \% X6 F8 j4 j8 g STempearture:温度
: L8 C2 N( ~/ e* S/ e% |5 U4 o
: Q+ y: a& [* G% h6 R6 f1 iLongitude/Latitude:经/纬度. d, W6 S# Z! F: K: E3 i
, d, n, k) T$ ?8 M ~8 F) B% jAltitude:海拔高度
" p( q! G* Z" X2 |5 k8 P4 i2 Q x" z: O& Y
PopulationDensity:人口密度2 u5 t: ?7 i- G# R
5 v- t- q* ~8 {0 p2 Z" D1 f
Coastal:是否沿海5 o9 Z6 J4 b* ?$ F6 v
1 `! C+ N% I+ E3 P, K1 C
GreenCoverageRate:绿化覆盖率' N3 L2 z1 B% ?3 k! W
$ q, ?2 N. b4 Y( S1 p! j& CIncineration(10,000ton):焚烧量(w吨), A e% a1 H& x& F5 A, N
( k4 m7 P9 V; L
数据清洗
3 V# _! D9 X- K% r# r检查缺失值:; c8 t+ t) c9 ^5 y6 u
数据集描述:
9 @: z" w# X0 m. _0 Z8 t6 T: r
6 {% P* ]0 y- e/ A; o bCity:城市名
$ m( C. \/ }8 L4 A3 V, c% u( D5 o% B" g) j: D$ R; y: `* e4 J% {
AQI:空气质量指数/ I% s4 @2 h0 n' D4 w
# }/ o. Z& V9 n, p
Precipitation:降雨量) `; T+ h0 s5 X+ U( L) @
# P ?' Z* f' B
GDP:人均生产总值% Q/ S6 f! M6 y, {/ ~
& S; a6 h. Z) t8 bTempearture:温度
+ G, B+ G1 c9 D
/ G7 k7 N3 G( _7 c0 R9 \: v; bLongitude/Latitude:经/纬度
0 \ G! `4 z3 n# Q1 R# z
0 W U+ v0 ?7 [Altitude:海拔高度
0 H+ j1 R4 ]3 n3 _, O8 ]; z/ B+ b f2 o" R6 [ r& i
PopulationDensity:人口密度
* b+ w( L" ^5 Q& U+ y* e8 T: w% o1 p/ j# a5 R0 t. O
Coastal:是否沿海$ K- f" K y$ V9 ^
P) ^. i' J7 b: z* B, K
GreenCoverageRate:绿化覆盖率
6 A E: g* W8 N) V5 o) d' B/ r0 t
8 ~3 r: v5 [# O* X1 }* e0 WIncineration(10,000ton):焚烧量(w吨)
; Z; V- K5 Z' X* D& @9 J' g/ M0 Z) B& T" _( y- f
数据清洗
U: O0 @% A* {5 t) o检查缺失值:- ]$ a7 T: f$ M$ g9 Y
data.isnull().sum(axis=0)
* `$ q7 R6 z" l9 H* v( I, \( N
' L5 N; h6 a6 ?" S: ^/ [/ \; }, h5 c! c
. d, _$ f$ f+ w- W ~
|; S% A5 m4 S7 r
查看含缺失值列数据的分布:
# k- P' ]( R% H: K5 C2 y#print(data["Precipitation"].skew())#偏度 ' [, Q# J- o- p; V: f6 V
sns.distplot(data["Precipitation"].dropna())#要删除NA值才能做分布密度图) O+ s& c% f- \% A
plt.title("分布密度图")
+ c5 p: _+ u" e0.273607606711773875 R6 B0 ^1 k1 ]- E7 P. ^
9 G% }2 n: B# E6 z6 [![]()
' M: o) K- O2 E9 R- A7 G+ t, g5 J4 B
数值型变量,数据呈现右偏分布,所以使用中位数填充。 对缺失值进行中位数填充 data.fillna({"Precipitation":data["Precipitation"].median()},inplace=True)8 v% X" |; C4 {8 b p# ~; q g" z) t
检查异常值的三种方法- data.describe() 查看数据的描述:分位数、均值与标准差
- 基于正太分布 ±三个标准差涵盖99.7%的数据
- 箱线图(四分位距IQR=Q3-Q1,上下边界:Q3/Q1 ±1.5IQR)
" E) q. Z7 L) i; I
查看数据集的偏度: 9 `4 P. h5 Y* e% F% q8 ~( B( O
data.skew()
6 ]2 n' \; k* v$ ]9 H1 G/ V
) k. A: E+ j7 x8 A( o2 ?1 U4 |AQI 1.198754
+ Y% W" T2 t" \* x+ w: L. }Precipitation 0.273608+ x, p) Z' N7 O4 y1 k0 {
GDP 3.7614280 W3 q8 w/ P: G' ~
Temperature -0.597343$ B- r- U9 ~! w
Longitude -1.407505' w6 T( v# z$ w2 n( _/ S( t7 o" e
Latitude 0.253563
" y. U- o# d" f6 @2 \Altitude 3.067242, L: R; Y$ y ?8 D1 @
PopulationDensity 3.125853
$ G0 ^! ^% a0 q1 |2 |) a1 zGreenCoverageRate -0.381786
# E/ ?& s5 t) t/ Y4 gIncineration(10,000ton) 4.342614: E' I) o0 _4 b5 [
dtype: float64
]/ @$ v$ t# V0 m9 i
6 K0 x2 P3 A- G [可以看到GDP和人口密度等都出现了严重的右偏分布,意味着存在很多极大的异常值。 下面我们查看以下GDP的异常值: 5 W1 w; y5 R6 H) a( u
mean, std = data.GDP.mean(), data.GDP.std()
( H6 B, Z0 Z- m2 X8 f0 J: r" \- Tlower, upper = mean - 3 * std, mean + 3 * std
; r L9 x/ q; {1 g# a6 C" h
% F1 s* h8 [& u# F4 a: U$ {print("均值:", mean)3 z# q% k8 f( s) C% g
print("标准差:", std)1 I/ ?& h. p- F( g5 p9 J
print("下限:", lower)/ \) W& {# |2 Z% r2 h& Z+ d
print("上限:", upper)8 _$ K1 E4 `5 `2 x7 P# T3 @
data.loc[(data.GDP < lower) | (data.GDP > upper), "GDP"]
! ^; j. \7 u! m* y8 C
8 p8 C6 H7 V" Y. I0 W: }' T, |均值: 2390.901815384616
5 u! _9 I7 v) P5 |3 u- r标准差: 3254.876921271434. Y9 s [' e% E1 Q) A9 C
下限: -7373.728948429687
$ o& Q3 y; h/ Q) m' U上限: 12155.532579198918
; g( V2 a P: E8 m K7 b16 22968.603 [* q& t+ C3 ^6 H2 `
63 18100.41. q+ K' d5 o( p2 c+ X: _9 G# D
202 24964.99
/ F- _2 p- i" @207 17502.99
1 v" ]* V0 D6 o; A9 Y215 14504.075 ?6 O7 U) ~5 {! k
230 16538.195 G/ B+ `) O8 p5 j" v. Z
256 17900.002 g4 Y. ]% ]3 e7 R8 j S" _/ n/ T
314 15719.72
1 t6 J. W. O3 YName: GDP, dtype: float64- v% y9 B/ K6 f, q
{& C5 _8 u+ h3 C; K4 p6 D. u5 d1 c1 F: z$ |+ D% u. U$ F
% x. f5 A3 G# }4 f
8 W! _3 x K. c1 I6 v9 Q. {, }# f, G) S$ L3 W! a
|
zan
|