Python—数据可视化_数据分析

步骤一:了解需求背景和挖掘目标;
步骤二:分析并建立流程图;

在这里插入图片描述

步骤三:探索,并处理数据;
步骤四:数据建模及应用,及可视化;

实现代码:

import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from sklearn.cluster import KMeans  # 引入sklearn模块里的机器学习算法 k_means

class AirLightData():

    def detectData(self, filePath):
        '''
        探索数据
        :param filePath:文件路径
        :return: 无   (数据的DF结构 (dataframe))
        '''
        df = pd.read_csv(filePath)
        describe = df.describe(include='all')
        print(describe.T)
        # df.to_excel('data/air_data.xls')
        describe.T.to_excel('data/air_descrlib.xls')
        pass
    def cleanData(self,filePath):
        '''
        清洗掉无效数据:空值行、不在合理的数据范围内的行
        :param filePath:
        :return:
        '''
        df = pd.read_csv(filePath)
        # 就是用布尔(bool)索引过滤
        # 过滤非法的票价
        filter1 = df['SUM_YR_1'].notnull() | df['SUM_YR_2'].notnull()  # 过滤同为空
        filter2 = (df['SUM_YR_1'] != 0) | (df['SUM_YR_2'] != 0)
        filter3 = df['avg_discount'] != 0
        filter4 = df['SEG_KM_SUM'] != 0

        filter = filter1 & filter2 & filter3 & filter4
        df = df[filter]
        df.to_excel('data/air_cleaned.xls')
        # 过滤非法的 里程数 和 折扣率%

        pass
    def chooseData(self, filePath):
        '''
        从清洗之后的数据选取需要的列
        :param filePath:
        :return:
        '''
        df = pd.read_excel(filePath)
        df = df[['FFP_DATE', 'LOAD_TIME', 'FLIGHT_COUNT', 'SEG_KM_SUM', 'LAST_TO_END', 'avg_discount']]
        df.to_excel('data/air_coredata.xls')
        pass
    def transformData(self, filePath):
        df = pd.read_excel(filePath)
        df['L'] = (pd.to_datetime(df['LOAD_TIME'])-pd.to_datetime(df['FFP_DATE']))/30
        df['R'] = df['LAST_TO_END']/30
        df['F'] = df['FLIGHT_COUNT']
        df['M'] = df['SEG_KM_SUM']
        df['C'] = df['avg_discount']

        df = df[['L', 'R', 'F', 'M', 'C']]
        df.to_excel('data/air_coretransformdata.xls')
        pass
    def standarData(self,filePath):
        '''
        一般标准化的方式:(原数据-平均值)/ 标准差
        :param filePath:
        :return:
        '''
        df = pd.read_excel(filePath)
        df = (df - np.mean(df, axis=0))/np.std(df, axis=0)
        df[['L', 'R', 'F', 'M', 'C']].to_excel('data/air_stdcoredata.xls')
        pass

    def classifyData(self, filePath, k=5):
        df = pd.read_excel(filePath)
        kmeans = KMeans(k)
        kmeans.fit(df[['L', 'R', 'F', 'M', 'C']])
        print(kmeans.cluster_centers_)
        print(kmeans.labels_)
        df['label'] = kmeans.labels_
        # df.to_excel('data/air_result.xls')
        # corData = pd.DataFrame(kmeans.cluster_centers_)
        # corData.to_excel('data/air_core.xls')
        corData = 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((corData[0], [corData[0][0]]))
        ydata2 = np.concatenate((corData[1], [corData[1][0]]))
        ydata3 = np.concatenate((corData[2], [corData[2][0]]))
        ydata4 = np.concatenate((corData[3], [corData[3][0]]))
        ydata5 = np.concatenate((corData[4], [corData[4][0]]))

        fig = plt.figure()
        ax = fig.add_subplot(111, polar=True)

        ax.plot(xdata, ydata1, 'bo--', linewidth=1,label='customer1')
        ax.plot(xdata, ydata2, 'ro--', linewidth=1, label='customer2')
        ax.plot(xdata, ydata3, 'go--', linewidth=1, label='customer3')
        ax.plot(xdata, ydata4, 'yo--', linewidth=1, label='customer4')
        ax.plot(xdata, ydata5, 'co--', linewidth=1, label='customer5')

        ax.set_thetagrids(xdata * 180 / np.pi, ['L', 'R', 'F', 'M','C'])
        ax.set_rlim(-3, 3)
        plt.legend(loc='best')
        plt.show()
        pass

    pass

if __name__ == "__main__":
    ad = AirLightData()
    # ad.detectData('data/air_data.csv')
    # ad.cleanData('data/air_data.csv')
    # ad.chooseData('data/air_cleaned.xls')
    # ad.transformData('data/air_coredata.xls')
    # ad.standarData('data/air_coretransformdata.xls')
    ad.classifyData('data/air_stdcoredata.xls', k=5)
    pass

最后效果展示:
在这里插入图片描述
在这里插入图片描述

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值