###### tags: `計算智慧與規劃` `期末專題`
# 處理資料程式碼 - 正規化
```python=
import csv
def pick(data) :
newdata = []
for i in range(len(data)) :
if (data[i][2] == "PM2.5 " or data[i][2] == "AMB_TEMP ") :
newdata.append(data[i])
if (data[i][2] == "CO " or data[i][2] == "NO ") :
newdata.append(data[i])
if (data[i][2] == "NO2 " or data[i][2] == "NOx ") :
newdata.append(data[i])
if (data[i][2] == "O3 " or data[i][2] == "PM10 ") :
newdata.append(data[i])
if (data[i][2] == "RAINFALL " or data[i][2] == "RH ") :
newdata.append(data[i])
if (data[i][2] == "SO2 ") :
newdata.append(data[i])
return newdata
def changeType(data, name) :
#averageList = []
for i in range(len(data)) :
data[i][0] = name
num = 0
for j in range(3,len(data[i])) :
try :
data[i][j] = float(data[i][j])
except :
data[i][j] = "empty"
#url = 'output'+name+'_2018.csv'
#with open(url, 'w', newline='') as csvfile:
# writer = csv.writer(csvfile, delimiter=',')
# writer.writerows(data)
def check(data) :
newdata = []
for i in range(len(data)) :
num = 0
for j in range(len(data[i])) :
if data[i][j] != "empty" :
num = num + 1
if (num == 12) :
newdata.append(data[i])
return newdata
def turn(data) :
# 12 項分別是10個變數、pM2.5、時間
newdata = [["empty" for i in range(12)] for i in range(366*24)]
num = 0
print(data[0:24])
for i in range(366) :
for pos in range(24) :
try :
newdata[i*24+pos][0] = data[i*11][1] + str(pos)
for v in range(11) :
newdata[i*24+pos][v+1] = data[i*11+v][pos+3]
except :
newdata[i*24+pos][0] = "empty"
return newdata
def changeSpace(data) :
pos = len(data[0])
for i in range(len(data)) :
tmp = data[i][pos-1]
data[i][pos-1] = data[i][pos-4]
data[i][pos-4] = tmp
#print(data[len(data)-1],data[len(data)-2])
def aver(data) :
MinList = [1000 for i in range(11)]
MaxList = [0 for i in range(11)]
print(data[0])
for i in range(len(data)) :
for pos in range(11) :
if (MaxList[pos] < data[i][pos+1]) :
MaxList[pos] = data[i][pos+1]
if (MinList[pos] > data[i][pos+1]) :
MinList[pos] = data[i][pos+1]
print("MinList", MinList, "MaxList", MaxList)
for i in range(len(data)) :
for pos in range(11) :
data[i][pos+1] = (data[i][pos+1] - MinList[pos]) / (MaxList[pos] - MinList[pos])
def main() :
data = []
name = input()
#url = "C:/Users/rita5/Desktop/鋼鐵/全部_2019/高屏空品區_2019/高屏空品區/"+name+'_2019.csv'
url = "C:/Users/rita5/Desktop/鋼鐵/全部_2020/"+name+'_2020.csv'
with open(url, newline= '') as csvfile :
rows = csv.reader(csvfile, delimiter = ',')
for row in rows :
data.append(row)
#print(data[2])
data = pick(data)
#print(data[0])
changeType(data, name)
data = turn(data)
data = check(data)
changeSpace(data)
# 正規化
aver(data)
print(data)
url = 'Normailization'+name+'_2020.csv'
with open(url, 'w', newline='') as csvfile:
writer = csv.writer(csvfile, delimiter=',')
writer.writerows(data)
if __name__ == "__main__" :
main()
```