赞
踩
这里使用的数据是某地区影响发生火灾的因素以及火灾情况。
总体思想是创建一个类,在类里面创建处理数据的函数。
- import pandas as pd
- import matplotlib.pyplot as plt
- import numpy as np
- from sklearn.cluster import KMeans #引入sklearn模块里的机器学习算法Kmeans
-
-
- class fireArea():
-
- def detectDate(self,filePath):
- '''
- 探索数据
- :param filePath:
- :return:
- '''
- df = pd.read_csv(filePath)
- describe = df.describe(include='all')
- print(describe.T)
- df.to_excel('data/forestfires.xls')
- pass
-
- def cleanData(self, filePath):
- '''
- :param filePath:
- :return:
- '''
- df = pd.read_csv(filePath)
- df.to_excel('data/cleaned.xls')
- pass
- def chooseData(self, filePath):
- '''
- 拿出自己需要的数据
- :param filePath:
- :return:
- '''
- df = pd.read_excel(filePath)
- df = df[['FFMC', 'DMC', 'DC', 'ISI', 'temp', 'RH', 'wind', 'area']]
- df.to_excel('data/coredata.xls')
- pass
-
- def standardData(self, filePath):
- '''
- 一般标准化的方式:(原数据-平均值)/标准差
- :param filrPath:
- :return:
- '''
- df = pd.read_excel(filePath)
- df = (df - np.mean(df, axis=0))/np.std(df, axis=0)
- df[['FFMC', 'DMC', 'DC', 'ISI', 'temp', 'RH', 'wind', 'area']].to_excel('data/stdcoredata.xls')
- pass
- def classifyData(self,filePath, k=8):
- df = pd.read_excel(filePath)
- kmeans = KMeans(k)
- kmeans.fit(df[['FFMC', 'DMC', 'DC', 'ISI', 'temp', 'RH', 'wind', 'area']])
- print(kmeans.cluster_centers_)
- print(kmeans.labels_)
- df['label'] = kmeans.labels_
- # df.to_excel('data/air_result.xls')
- coreData = pd.DataFrame(kmeans.cluster_centers_)
- # coreData.to_excel('data/air_core.xls')
- coreData = np.array(kmeans.cluster_centers_)
- #
- #绘制雷达图
- #1.组织数据
- #构造x轴值
- xdata = np.linspace(0, 2*np.pi, k, endpoint=False)
- xdata = np.concatenate((xdata, [xdata[0]]))
-
- ydata1 = np.concatenate((coreData[0], [coreData[0][0]]))
- ydata2= np.concatenate((coreData[1], [coreData[1][0]]))
- ydata3 = np.concatenate((coreData[2], [coreData[2][0]]))
- ydata4= np.concatenate((coreData[3], [coreData[3][0]]))
-
- fig = plt.figure()
-
- ax = fig.add_subplot(111, polar=True)
-
- ax.plot(xdata, ydata1, 'b--', linewidth=1, label='customer1')
- ax.plot(xdata, ydata2, 'r--', linewidth=1, label='customer2')
- ax.plot(xdata, ydata3, 'g--', linewidth=1, label='customer3')
- ax.plot(xdata, ydata4, 'o--', linewidth=1, label='customer4')
-
-
- ax.set_thetagrids(xdata * 180 / np.pi, ['FFMC', 'DMC', 'DC', 'ISI', 'temp', 'RH', 'wind', 'area'])
- ax.set_rlim(-3, 3)
- plt.legend(loc='best')
- plt.show()
- print(xdata)
-
-
- pass
- pass
-
- if __name__ == '__main__':
- ad = fireArea()
- # ad.detectDate('data/forestfires.csv')
- #ad.cleanData('data/forestfires.csv')
- # ad.chooseData('data/cleaned.xls')
- #ad.standardData('data/coredata.xls')
- ad.classifyData('data/stdcoredata.xls', k=8)
- pass
运行结果为:
有一个数据发现它越界了,是因为有一天森林烧毁的面积非常大,这种数据还是有用的数据,不能删除。
下面是处理数据的情况(这个方法适合处理所有类型数据,只需要把相应的元素名变一下,代码稍作改动就好了):
1.原始数据(数据有很多条,这里只是截取一小部分)
2.处理好的数据(去除不要的数据)
3.把需要的数据标准化,方便分类
4.画图
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。