python-pandas初识

python-pandas初识

初学pandas库,通过分析得到的人力资源数据集将得到的数据分为6类,最后通过雷达图将其展现。以下为代码实现。

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
# 用来正常显示中文标签
plt.rcParams['font.sans-serif'] = ['SimHei']
# 用来正常显示负号
plt.rcParams['axes.unicode_minus'] = False
class PersonData():
    def explorData(self,filePath):
        '''
        探索数据,得到需要处理的数据列
        :param filePath:文件路径
        :return:  无
        '''
        df1=pd.read_csv(filePath[0])#读取出来的数据是DataFrame结构。
        df2=pd.read_csv(filePath[1],encoding='gb2312')  #文件中有汉字,出现编码错误,用gb2312读取文件
        #print(df2['age'][:15000])
        #得到需要处理的数据列
        df1['S']=df1['satisfaction_level']
        df1['L']=df1['last_evaluation']
        df1['N']=df1['number_project']
        df1['A']=df1['average_montly_hours']
        df1['T']=df1['time_spend_company']
        df1['G']=df2['age'][:15000]
        df1['E']=df2['Educational_time'][:15000]
        df1=df1[['S','L','N','A','T','G','E']]
        df1.to_excel('data1/per_data.xls')  #将得到的数据存入特定文件
        pass

    def cleanData(self,filePath):
        '''
        清洗无效数据:空值,不在合理的数据范围内的行
        :param filePath:
        :return:
        '''
        df=pd.read_excel(filePath)
        describe=df.describe().T  #通过describe函数来查看每一列是否有异常值和缺失值
        #describe.to_excel('data1/per_describe.xls')
        #print(describe)
        #过滤非法数据
        filter1=((df['G']>=18) )
        filter3=((df['G']<=60))  #G代表年龄
        filter2=((df['E']>=6))   #E代表受教育年龄
        filters=filter1 & filter2 & filter3
        df=df[filters]
        df.to_excel('data1/per_coredata.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[['S', 'L', 'N', 'A', 'T', 'G', 'E']].to_excel('data1/per_standata.xls')
        pass
    def classifyData(self,filePath,k=6):
        '''
        用kmeans算法对数据进行分类,分为六类
        :param filePath:
        :return: 返回中心点
        '''
        df=pd.read_excel(filePath)
        kmeans=KMeans(k)
        kmeans.fit(df[['S', 'L', 'N', 'A', 'T', 'G', 'E']])  #调用kmeans方法
        df['label']=kmeans.labels_   #设置新的列,把等级标签加入数据表
        df.to_excel('data1/per_findata.xls')
        coreData=np.array(kmeans.cluster_centers_)
        #print(coreData)
        return coreData
        pass

    def drawData(self,filePath,f):
        '''
        画雷达图,便于分析
        :param filePath:
        :param k:
        :return:
        '''
        data=self.classifyData(filePath)  #得到数据
        xdata=np.linspace(0,2*np.pi,f,endpoint=False)
        xdata=np.concatenate((xdata,[xdata[0]]))

        ydata1=np.concatenate((data[0],[data[0][0]]))
        ydata2 = np.concatenate((data[1], [data[1][0]]))
        ydata3 = np.concatenate((data[2], [data[2][0]]))
        ydata4 = np.concatenate((data[3], [data[3][0]]))
        ydata5 = np.concatenate((data[4], [data[4][0]]))
        ydata6 = np.concatenate((data[5], [data[5][0]]))

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

        ax.plot(xdata, ydata1, 'b--', linewidth=1, label='Person1')
        ax.plot(xdata, ydata2, 'r--', linewidth=1, label='Person2')
        ax.plot(xdata, ydata3, 'g--', linewidth=1, label='Person3')
        ax.plot(xdata, ydata4, 'o--', linewidth=1, label='Person4')
        ax.plot(xdata, ydata5, 'y--', linewidth=1, label='Person5')
        ax.plot(xdata, ydata6, 'p--', linewidth=1, label='Person6')

        ax.set_thetagrids(xdata * 180 / np.pi, ['S:满意度评分', 'L:能力评分', 'N:参与项目数', 'A:月工作时间', 'T:公司数', 'G:年龄', 'E:受教育年限'])
        ax.set_rlim(-2, 2,0.5)
        plt.legend(loc='best')
        plt.show()
    pass


if __name__=="__main__":
    pa=PersonData()
    #pa.explorData(['data1/HR_comma_sep.csv','data1/personal_income.csv'])
    #pa.cleanData('data1/per_data.xls')
    #pa.standarData('data1/per_coredata.xls')
    #pa.classifyData('data1/per_standata.xls')
    pa.drawData('data1/per_standata.xls',7)
    pass

以下为雷达图
人力资源雷达图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值