干貨|利用Python自動根據(jù)數(shù)據(jù)生成降雨量統(tǒng)計分析報告

作者:小小明
簡介:Pandas數(shù)據(jù)處理專家,10余年編碼經(jīng)驗,至今已幫助過成千上萬名數(shù)據(jù)從業(yè)者解決工作實際遇到的問題,其中數(shù)據(jù)處理和辦公自動化問題涉及的行業(yè)包括會計、HR、氣象、金融等等,現(xiàn)為菜J學(xué)Python核心技術(shù)團隊成員之一。
點擊上方“IT共享之家”,進行關(guān)注
回復(fù)“資料”可獲贈Python學(xué)習(xí)福利

import?pandas?as?pd
df?=?pd.read_csv("11月份數(shù)據(jù).csv",?encoding='gbk')
#?當(dāng)前統(tǒng)計月份
month?=?11
df?=?df.query('月份==@month')
df.head(10)

pd.isnull(df).sum()
區(qū)域??????????0
月份??????????0
降雨量(mm)?????0
降雨距平(mm)????1
觀測站?????????0
dtype:?int64
df.dropna(inplace=True)
rainfall_high?=?df.eval('`降雨距平(mm)`?>?0').value_counts().get(True,?0)
rainfall_equal?=?df.eval('`降雨距平(mm)`?==?0').value_counts().get(True,?0)
rainfall_low?=?df.eval('`降雨距平(mm)`?0').value_counts().get(True,?0)
print(rainfall_high,?rainfall_equal,?rainfall_low)
13?1?18
p1?=?f"{month}月份"
if?rainfall_low?==?0?or?rainfall_high?==?0:
????if?rainfall_equal?!=?0:
????????p1?+=?f"除{rainfall_equal}個觀測站降雨量較往年無變化外,"
????if?rainfall_high?==?0:
????????p1?+=?f"各氣象觀測站降雨量較往年均偏低。"
????elif?rainfall_low?==?0:
????????p1?+=?f"各氣象觀測站降雨量較往年均偏高。"
else:
????#??10%以內(nèi)差異認(rèn)為是持平
????if?rainfall_high?>?rainfall_low*1.1:
????????p1?+=?f"大部分氣象觀測站降雨量較往年偏高。"
????elif?rainfall_low?>?rainfall_high*1.1:
????????p1?+=?f"大部分氣象觀測站降雨量較往年偏低。"
????else:
????????p1?+=?f"各氣象觀測站降雨量較往年整體持平。"
p1
'11月份大部分氣象觀測站降雨量較往年偏低。'
p2?=?""
t?=?df['降雨量(mm)']
p2?+=?f"各區(qū)域降雨量在{t.min()}~{t.max()}mm之間,其中{df.loc[t.argmax(),?'區(qū)域']}區(qū)域的降雨量最大,為{t.max()}mm。"
p2
'各區(qū)域降雨量在0.0~16.0mm之間,其中51a45區(qū)域的降雨量最大,為16.0mm。'
p3s?=?[]
for?station,?tmp?in?df.groupby('觀測站'):
????t?=?tmp['降雨量(mm)']
????p3?=?f"各區(qū)域降雨量在{t.min()}~{t.max()}mm之間,"
????rainfall_high_mask?=?tmp.eval('`降雨距平(mm)`?>?0')
????rainfall_equal_mask?=?tmp.eval('`降雨距平(mm)`?==?0')
????rainfall_low_mask?=?tmp.eval('`降雨距平(mm)`?0')
????rainfall_high?=?rainfall_high_mask.value_counts().get(True,?0)
????rainfall_equal?=?rainfall_equal_mask.value_counts().get(True,?0)
????rainfall_low?=?rainfall_low_mask.value_counts().get(True,?0)
#?????print(rainfall_high,?rainfall_equal,?rainfall_low)
????if?rainfall_low?==?0?or?rainfall_high?==?0:
????????if?rainfall_equal?!=?0:
????????????p3?+=?'除'
????????????p3?+=?'、'.join(tmp.loc[rainfall_equal_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年無變化外,"
????????if?rainfall_high?==?0:
????????????p3?+=?f"各區(qū)域降雨量均較往年偏低"
????????elif?rainfall_low?==?0:
????????????p3?+=?f"各區(qū)域降雨量均較往年偏高"
????????t?=?tmp['降雨距平(mm)'].abs()
????????p3?+=?f"{t.min()}~{t.max()}mm;"
????else:
????????if?rainfall_equal?!=?0:
????????????p3?+=?'除'
????????????p3?+=?'、'.join(tmp.loc[rainfall_equal_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年無變化,"
????????#??10%以內(nèi)差異認(rèn)為是持平
????????if?rainfall_high?>?rainfall_low*1.1:
????????????if?rainfall_equal?==?0:
????????????????p3?+=?'除'
????????????p3?+=?'、'.join(tmp.loc[rainfall_low_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年偏低"
????????????t?=?tmp.loc[rainfall_low_mask,?'降雨距平(mm)'].abs()
????????????if?t.shape[0]?>?1:
????????????????p3?+=?f"{t.min()}~{t.max()}mm"
????????????else:
????????????????p3?+=?f"{t.min()}mm"
????????????p3?+=?"外,"
????????????t?=?tmp.loc[rainfall_high_mask,?'降雨距平(mm)'].abs()
????????????p3?+=?f"其余各區(qū)域降雨量較往年偏高{t.min()}~{t.max()}mm;"
????????elif?rainfall_low?>?rainfall_high*1.1:
????????????if?rainfall_equal?==?0:
????????????????p3?+=?'除'
????????????p3?+=?'、'.join(tmp.loc[rainfall_high_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年偏高"
????????????t?=?tmp.loc[rainfall_high_mask,?'降雨距平(mm)'].abs()
????????????if?t.shape[0]?>?1:
????????????????p3?+=?f"{t.min()}~{t.max()}mm"
????????????else:
????????????????p3?+=?f"{t.min()}mm"
????????????p3?+=?"外,"
????????????t?=?tmp.loc[rainfall_low_mask,?'降雨距平(mm)'].abs()
????????????p3?+=?f"其余各區(qū)域降雨量較往年偏低{t.min()}~{t.max()}mm;"
????????else:
????????????if?rainfall_equal?!=?0:
????????????????p3?=?p3[:-1]+'外,'
????????????p3?+=?f"各區(qū)域降雨量較往年偏高和偏低的數(shù)量持平,其中"
????????????p3?+=?'、'.join(tmp.loc[rainfall_low_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年偏低"
????????????t?=?tmp.loc[rainfall_low_mask,?'降雨距平(mm)'].abs()
????????????if?t.shape[0]?>?1:
????????????????p3?+=?f"{t.min()}~{t.max()}mm,"
????????????else:
????????????????p3?+=?f"{t.min()}mm,"
????????????p3?+=?'、'.join(tmp.loc[rainfall_high_mask,?'區(qū)域']+'區(qū)域')
????????????p3?+=?"降雨量較往年偏高"
????????????t?=?tmp.loc[rainfall_high_mask,?'降雨距平(mm)'].abs()
????????????if?t.shape[0]?>?1:
????????????????p3?+=?f"{t.min()}~{t.max()}mm;"
????????????else:
????????????????p3?+=?f"{t.min()}mm;"
????p3s.append([station,?p3])
p3s[-1][-1]?=?p3s[-1][-1][:-1]+"。"
p3s
docxtemplate.docx的內(nèi)容:一、{{?month?}}月各氣象觀測站降雨量實況
(一)降水
{{?p1?}}
{{?p2?}}
{%p?for?station,p3?in?p3s?%}
{{?station?}}:{{?p3?}}
{%p?endfor?%}
from?docxtpl?import?DocxTemplate
tpl?=?DocxTemplate("docxtemplate.docx")
context?=?{
????'month':?month,
????'p1':?p1,
????'p2':?p2,
????'p3s':?p3s,
}
tpl.render(context)
tpl.save("11月降雨量報告.docx")

看完本文有收獲?請轉(zhuǎn)發(fā)分享給更多的人
IT共享之家
入群請在微信后臺回復(fù)【入群】
-------------------?End?-------------------
往期精彩文章推薦:
評論
圖片
表情
