import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import os
import re
from sqlalchemy import create_engine
import seaborn as sn
import pymysql
#黄浩月 201706611108
#代码过多 建议注释分段运行
def get_pm25data():
path = "./PM25/"
data = pd.DataFrame()
files = os.listdir(path)
for file in files:
print(file)
if re.match(".*20170803", file) or re.match(".*20170201", file) or re.match(".*20160201.csv", file):
cache = pd.read_csv(path + file, header=3, usecols=[0, 2, 3, 4, 5, 6, 7, 9, 10], encoding="latin1")
else:
cache = pd.read_csv(path + file, header=2, usecols=[0, 2, 3, 4, 5, 6, 7, 9, 10], encoding="latin1")
data = data.append(cache)
return data
def write_csvxls():
bjdata = get_pm25data()
bjdata.to_csv("./output/out.csv")
bjdata.to_excel("./output/out.xlsx")
def write_sql():
bjdata = get_pm25data()
print("开始写入数据库")
engine = create_engine("mysql+pymysql://root:root@localhost:3306/apple?charset=utf8")
bjdata.to_sql('bjdata', engine, schema='apple', if_exists='append', index=False, index_label=False)
print("写入数据库成功")
def nothava2017():
bjdata = get_pm25data()
bj = bjdata.loc[:, ["Date (LST)", "Value"]]
bj.columns = ["date", "value"]
bj.set_index(pd.to_datetime(bj['date']), inplace=True, )
bj = bj[bj.value>0]
# df = bj.resample("1D").mean()
df = bj.resample("1D").mean()
df = df[df.value <= 75]
df.groupby(df.index.year).size().plot(title="每年健康天数对比图")
# print(pd.crosstab(index=bj.index.year, columns=bj.index.month))
# print(bj)
def sp(str):
if "-" in str:
year=str.split("-")[0]
else:
year=str.split("/")[2][:4]
return year
def main():
pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)
pd.set_option('max_colwidth', 200)
pd.set_option('expand_frame_repr', False)
if __name__ == '__main__':
main()
# write_sql()
# nothava2017()
bjdata=get_pm25data()
bj=bjdata.loc[:, ["Date (LST)","Value"]]
bj.columns=["date","value"]
bj.set_index(pd.to_datetime(bj['date']),inplace=True,)
bj = bj[bj.value > 0]
print("处理前数据总量为:{}".format(len(bj)))
print("含有缺失值数量:\n{}".format(len(bj)-len(bj[bj.value>0])))
print(pd.crosstab(index=bj.index.year,columns=bj.index.month))
avg = np.mean(bj.value)
print("用平均值{}进行缺失值填充".format(avg))
bj.value=np.where(bj.value<=0,avg,bj.value)
print("处理后含有缺失值数量:\n{}".format(len(bj) - len(bj[bj.value > 0])))
plt.rcParams['font.sans-serif'] = ['SimHei']
bj = bj.groupby(bj.index.weekday).describe()
bj =bj.iloc[:,[1,3,7]]
bj.plot(kind="bar",title="周日至周一PM2.5数据对比图")
print(bj.pivot_table(index = bj.index.year,columns=bj.index.month,values='value',aggfunc=np.max))
plt.rcParams['font.sans-serif'] = ['SimHei']
bj.groupby(bj.index.year).median().plot(kind="bar",title="2007-2017年pm2.5中位数")
bj.groupby(bj.index.year).max().plot(title="2007-2017年pm2.5最大值")
bj.groupby(bj.index.year).mean().plot(title="2007-2017年pm2.5平均值")
bj.groupby(bj.index.year).min().plot(title="2007-2017年pm2.5最小值")
print("2007-2017年pm2.5中位数")
print(bj.groupby(bj.index.year).median().value)
print("2007-2017年pm2.5最大值")
print(bj.groupby(bj.index.year).max().value)
print("2007-2017年pm2.5平均值")
print(bj.groupby(bj.index.year).mean().value)
print("2007-2017年pm2.5最小值")
print(bj.groupby(bj.index.year).min().value)
bj.groupby(bj.index.month).mean().plot(title="月度PM2.5数据平均值分析",)
bj.groupby(bj.index.year).plot.hist(bins=50)
bj01=bj.groupby(bj.index.year).sy
print(bj01)
bjo = get_pm25data()
# df = bj.value.resample("1D").mean()
bjo['date'] =bjo['date'].map(sp)
print(bjo)
df = pd.pivot(bjo, index=["date"],values=["value"])
print(df)
df = df[df.value <= 75]
print(len(df))
df.groupby(df.index.year).size().plot(title="每年健康天数对比图")
print(df.groupby(df.index.year).size())
df.groupby(df.index.year).plot.hist()
bj10=bjo["2010-1-1":"2010-12-31"]
bj10.value.plot.hist(title="2020年PM2.5浓度分布直方图",bins=20)
print(len(df.value.tolist()))
print(len(pd.date_range("2017/1/1","2017/6/30",freq="1D")))
plt.scatter(pd.date_range("2017/1/1","2017/6/30"),df.value.tolist())
plt.plot(pd.date_range("2017/1/1","2017/6/30"),df.value.tolist())
grid = sn.lmplot(x="1",y="2",data=df.value.tolist())
listdata=[int(i) for i in df.value.tolist()]
bj17 = bj["2017-1-1":"2017-6-30"]
df = bj17.resample("1D").mean()
df['x']=[i for i in range(1,len(df)+1)]
print(df)
grid = sn.lmplot(x="x",y="value",data=df)
plt.title("线性拟合2017年上半年数据")
plt.show()
没有合适的资源?快使用搜索试试~ 我知道了~
北京PM2.5数据分析【期末大作业】【代码+文档】
共3个文件
docx:2个
py:1个
需积分: 0 6 下载量 82 浏览量
2024-05-12
10:09:39
上传
评论
收藏 583KB ZIP 举报
温馨提示
分析近10年的PM2.5数据得出相关结论 1. 读取北京10年期间PM2.5数据并保存为CSV、EXCEL和保存到MYSQL数据库中 2. 对PM2.5数据做清理与重建 3. 对 PM2.5数据按照年进行分组拆分,计算出:每年PM2.5的平均值、中位数、最大值、最小值。 4. 绘制相关图形。 5. 对PM2.5数据的分析 5. 对PM2.5数据的分析 根据上图我们发现,随着时间的增长,PM2.5的年平均值数据呈现下降趋势,也就是说明,我国的空气质量正在逐渐的变好 绘制近几年统计北京PM2.5数据小于50的频率分布图,首先我们对数据进行重采样,将每天统计的24次数据进行平均计算统计出一天的PM2.5平均,绘制如下图。
资源推荐
资源详情
资源评论
收起资源包目录
PM2.5.zip (3个子文件)
PM2.5
bejingpm25.py 5KB
文档.docx 629KB
~$1706611108黄浩月.docx 162B
共 3 条
- 1
资源评论
noob_python
- 粉丝: 71
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功