1.处理文件

本次数据量巨大,且同一类数据被切割为了好几个文件。所以先将同类数据整合到一起。方便处理。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
def data_get(path_dir):
df_all = pd.DataFrame()
# 按列合并文件
for parents, dirnames, filenames in os.walk(path_dir):
for filename in filenames:
# print(filename)
df = pd.read_csv(os.path.join(parents, filename), encoding="gbk")
df_all = df_all.append(df, ignore_index=True)
df_all = df_all.dropna(axis=1, how='all')
# 删除列名为空的列
for i in range(1, df_all.shape[1]):
if (i % 2 == 0):
unnamed = "Unnamed: " + str(i)
df_all = df_all.drop(unnamed, axis=1)
df_all = df_all.sort_values(by='Time')
return df_all

path_dir7 = './7'
df7 = data_get(path_dir7)
print(df7)
df7.to_csv('data7.csv', index=False, encoding="gbk")

然后将整合后的各个文件需要的数据再次进行提取。放到一个文件里方便处理。如下所示。

1
2
3
4
5
Input1 = pd.read_csv('data1.csv', encoding="gbk").iloc[:,0:7]
Input2 = pd.read_csv('data7.csv', encoding="gbk").iloc[:,1:4]
Input3 = pd.read_csv('data5.csv', encoding="gbk").iloc[:,2:3]
Input = pd.concat([Input1,Input2,Input3],axis=1)
Input.to_csv('input.csv', index=False, encoding="gbk")

这样输入数据和预测数据就都整合放到了两个文件中。

2.爬虫爬取数据(另记录)

用爬虫爬取数据也是获取数据的重要途径,要学会分析url以及使用正则表达式。本次获取的是北京的天气。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
months = ["01", "02", "03", "04", "05", "06", "07", "08", "09", "10", "11", "12"]
years = [2019,2020,2021]
city = [54511] # 北京代码54511,也可以设置其他城市
index_ = ['MaxTemp','MinTemp', 'WindDir', 'Wind', 'Weather'] # 选取的气象要素
data = pd.DataFrame(columns=index_) # 建立一个空dataframe
for y in years:
for m in months:
for c in city:
# 找到json格式数据的url
url = "http://tianqi.2345.com/t/wea_history/js/"+str(y)+str(m)+'/'+str(c)+"_"+str(y)+str(m)+".js"
print(url)
response = requests.get(url=url)
if response.status_code == 200: # 防止url请求无响应
response2 = response.text.replace("'", '"') # 这一步可以忽略
# 利用正则表达式获取5个气象要素(方法不唯一)
date = re.findall("[0-9]{4}-[0-9]{2}-[0-9]{2}", response2)[:-2] # 去除最后两个无关的数据
mintemp = re.findall('yWendu:"(.*?)℃', response2)
maxtemp = re.findall('bWendu:"(.*?)℃', response2)
winddir = re.findall('fengxiang:"([\u4E00-\u9FA5]+)', response2)
wind = re.findall('fengli:"(\d)[\u4E00-\u9FA5]+', response2)
weather = re.findall('tianqi:"([[\u4E00-\u9FA5]+)~?', response2)
data_spider = pd.DataFrame([maxtemp,mintemp, winddir, wind, weather]).T
data_spider.columns = index_ # 修改列名
data_spider.index = date # 修改索引
data = pd.concat((data,data_spider), axis=0) # 数据拼接
print('%s年%s月的数据抓取成功' % (y, m))
else:
print('%s年%s月的数据不存在' % (y, m))
break
data.to_excel('weatherdata.xlsx',)
print('爬取数据展示:\n', data)

有一个网站PM2.5历史数据_空气质量指数历史数据_中国空气质量在线监测分析平台历史数据 (aqistudy.cn)反爬虫十分到位。目前还没有爬成功,日后有这方面学习需求的话再做研究。

3.处理数据

有些神经网络需要数据是三维的。形如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[[[-1.92283338 -1.38891292 -0.98388424 ... -1.15294841 -0.7899982
-0.86735202]]

[[-1.29066595 -1.2984917 -1.4348906 ... -1.86754608 -1.18622128
-1.73779653]]

[[-1.63376665 -1.04331814 -1.81573089 ... -2.17953055 -1.72465222
-2.25899368]]

...

[[ 0.19824151 -0.43152073 -0.20943708 ... -0.48789435 -0.47502591
-0.83735348]]

[[-0.43903476 -1.11660206 -1.12666921 ... -0.57763023 -0.67938426
-0.59679148]]

[[-0.6374504 -0.78135393 -1.16010012 ... 0.06634989 -0.0451765
-0.46545446]]]

这是行×步长1×列的。

处理成这样需要使用reshaperesize函数。一维转二维,二维转三维。这里如果除不尽该如何处理?

4.可视化

1
2
3
4
5
6
7
8
import seaborn as sns
plt.figure(figsize=(16,8))
sns.pointplot(x='t1', y='cnt', data=dataset)
plt.show()

plt.figure(figsize=(16,8))
sns.lineplot(x='t2', y='cnt', data=dataset)
plt.show()