将每个城市在每个月份平均PM2.5绘制成折线图
import pandas as pd
import matplotlib. pyplot as plt
df = pd. read_excel( './PM2.5.xlsx' )
display( df. head( 10 ) )
df. shape
城市 年份 月份 日期 小时 季节 PM2.5 露点 湿度 压强 温度 风向 累计风速 降水量 累计降水量 0 北京 2010 1 1 23 冬 129 -17.0 41.0 1020.0 -5.0 cv 0.89 0.0 0.0 1 北京 2010 1 2 0 冬 148 -16.0 38.0 1020.0 -4.0 SE 1.79 0.0 0.0 2 北京 2010 1 2 1 冬 159 -15.0 42.0 1020.0 -4.0 SE 2.68 0.0 0.0 3 北京 2010 1 2 2 冬 181 -11.0 63.5 1021.0 -5.0 SE 3.57 0.0 0.0 4 北京 2010 1 2 3 冬 138 -7.0 85.0 1022.0 -5.0 SE 5.36 0.0 0.0 5 北京 2010 1 2 4 冬 109 -7.0 85.0 1022.0 -5.0 SE 6.25 0.0 0.0 6 北京 2010 1 2 5 冬 105 -7.0 92.0 1022.0 -6.0 SE 7.14 0.0 0.0 7 北京 2010 1 2 6 冬 124 -7.0 92.0 1023.0 -6.0 SE 8.93 0.0 0.0 8 北京 2010 1 2 7 冬 120 -7.0 85.0 1024.0 -5.0 SE 10.72 0.0 0.0 9 北京 2010 1 2 8 冬 132 -8.0 85.0 1024.0 -6.0 SE 12.51 0.0 0.0
df2 = df. groupby( by = [ '城市' , '月份' ] ) [ [ 'PM2.5' ] ] . mean( ) . round ( 2 )
df2 = df2. unstack( level = - 1 )
df2. columns = df2. columns. droplevel( level= 0 )
df2
月份 1 2 3 4 5 6 7 8 9 10 11 12 城市 上海 80.77 59.58 59.38 55.32 52.23 41.48 31.03 26.61 32.69 42.28 64.02 86.54 北京 113.80 120.93 96.34 83.40 76.67 89.56 88.48 73.75 78.75 112.72 108.47 107.49 广州 80.03 58.73 48.75 67.04 46.95 35.34 26.14 38.63 40.47 60.10 53.13 61.99 成都 161.32 110.04 96.71 67.99 68.56 53.81 54.05 61.26 60.25 84.76 82.13 116.08 沈阳 111.04 103.11 77.39 65.51 53.89 47.88 42.25 43.94 46.79 89.03 101.67 112.61
df2. loc[ "上海" ]
df2. index
plt. rcParams[ 'font.family' ] = 'SimHei'
plt. rcParams[ 'font.size' ] = 18
months = df2. columns
plt. figure( figsize= ( 12 , 6 ) )
for city in df2. index:
plt. plot( months, df2. loc[ city] , marker= 'o' , label= city)
plt. title( 'PM2.5 Variation by City and Month' )
plt. xlabel( 'Month' )
plt. ylabel( 'PM2.5' )
plt. xticks( months)
plt. grid( True )
plt. legend( )
plt. show( )
将每个城市在每个季节最低温度绘制柱状图
df3 = df. groupby( by = [ '城市' , '季节' ] ) [ [ '温度' ] ] . min ( ) . round ( 2 )
df3 = df3. unstack( level= - 1 )
df3. columns = df3. columns. droplevel( level= 0 )
df3 = df3[ list ( '春夏秋冬' ) ]
df3 = df3. loc[ [ '北京' , '上海' , '广州' , '成都' , '沈阳' ] ]
df3
季节 春 夏 秋 冬 城市 北京 -9.0 13.0 -12.0 -19.0 上海 -1.0 17.0 -2.0 -4.0 广州 7.6 20.5 6.4 1.7 成都 5.0 18.0 5.0 -2.0 沈阳 -14.0 10.0 -18.0 -25.0
fig = plt. figure( figsize= ( 12 , 12 ) )
ax = fig. add_subplot( 1 , 1 , 1 )
df3. plot. bar( ax = ax)
plt. grid( color = 'gray' , ls = '--' )
plt. ylabel( '温度' )
plt. rcParams[ 'axes.unicode_minus' ] = False
各个城市最大风速随时间变化趋势
import numpy as np
fig, axes = plt. subplots( 2 , 2 , figsize = ( 16 , 12 ) )
df4 = df. groupby( by = [ '城市' , '年份' ] ) [ [ '累计风速' ] ] . max ( ) . round ( 2 )
df4 = df4. unstack( level = 0 )
df4. columns = df4. columns. droplevel( 0 )
df4 = df4[ [ '北京' , '上海' , '广州' , '沈阳' , '成都' ] ]
df4. plot( ax = axes[ 0 , 0 ] )
axes[ 0 , 0 ] . set_ylabel( "风速" )
df5= df. groupby( by = [ '城市' , '月份' ] ) [ [ '累计风速' ] ] . max ( ) . round ( 2 )
df5 = df5. unstack( level = 0 )
df5. columns = df5. columns. droplevel( 0 )
df5 = df5[ [ '北京' , '上海' , '广州' , '沈阳' , '成都' ] ]
ax = df5. plot( ax = axes[ 1 , 0 ] )
months = [ '一月' , '二月' , '三月' , '四月' , '五月' , '六月' , '七月' , '八月' , '九月' , '十月' , '十一月' , '十二月' ]
ax. set_xticks( np. arange( 1 , 13 ) )
_ = ax. set_xticklabels( months, rotation = 60 )
df6 = df. groupby( by = [ '城市' , '季节' ] ) [ [ '累计风速' ] ] . max ( ) . round ( 2 )
df6= df6. unstack( level = 0 )
df6 = df6. loc[ list ( '春夏秋冬' ) ]
df6. columns = df6. columns. droplevel( 0 )
df6 = df6[ [ '北京' , '上海' , '广州' , '沈阳' , '成都' ] ]
df6. plot( ax = axes[ 0 , 1 ] )
df7 = df. groupby( by = [ '城市' , '小时' ] ) [ [ '累计风速' ] ] . max ( ) . round ( 2 )
df7= df7. unstack( level = 0 )
df7. columns = df7. columns. droplevel( 0 )
df7 = df7[ [ '北京' , '上海' , '广州' , '沈阳' , '成都' ] ]
ax = df7. plot( ax = axes[ 1 , 1 ] )
_ = ax. set_xticks( np. arange( 0 , 24 ) )
plt. savefig( './各个城市最大风速随时间变化趋势.png' )