(Python)在机器学习中如何使用pandas处理categorical values

假如我们在某个预测美国机场的飞机延误问题。这是我们的实际业务场景。我想对于许多经常需要旅行的朋友比如本人,这是一个非常有意义的问题。

在这个业务问题中,有这样的一些美国机场:

['BWI', 'PHL', 'CLT', 'CLE', 'MKE', 'PIT', 'TPA', 'LGA', 'DFW',
       'BUF', 'BOS', 'ROC', 'DCA', 'MHT', 'CRW', 'MEM', 'DTW', 'CMH',
       'GSO', 'IAD', 'IAH', 'BHM', 'HPN', 'CHS', 'STL', 'AVP', 'ATL',
       'GSP', 'RDU', 'MCI', 'ORF', 'MYR', 'ALB', 'RIC', 'BNA', 'PVD',
       'BGM', 'TOL', 'SAV', 'ROA', 'IND', 'MDT', 'BTV', 'ELM', 'ITH',
       'JAX', 'PBI', 'SRQ', 'MSY', 'FLL', 'EWR', 'GRR', 'MSP', 'ORD',
       'ABE', 'LAS', 'BDL', 'MIA', 'MCO', 'CAE', 'ILM', 'SFO', 'SJU',
       'SDF', 'RSW', 'DAY', 'SYR', 'PNS', 'AVL', 'CAK', 'SBN', 'ERI',
       'HSV', 'CHA', 'SEA', 'TYS', 'FAY', 'LEX', 'STT', 'PWM', 'TRI',
       'STX', 'MDW', 'DAL', 'HOU', 'OKC', 'HRL', 'LIT', 'CRP', 'TUL',
       'LBB', 'MAF', 'ABQ', 'AMA', 'PHX', 'SAN', 'SMF', 'ISP', 'LAX',
       'AUS', 'PDX', 'ELP', 'OAK', 'ONT', 'SJC', 'JAN', 'RNO', 'BOI',
       'TUS', 'BUR', 'SAT', 'SLC', 'GEG', 'OMA', 'SNA', 'MSN', 'MBS',
       'FAR', 'ICT', 'GPT', 'VPS', 'DEN', 'TVC', 'FNT', 'GRB', 'GFK',
       'MOT', 'BIS', 'AZO', 'LAN', 'BZN', 'FCA', 'DLH', 'DSM', 'FSD',
       'FWA', 'GTF', 'CVG', 'SUX', 'RAP', 'LSE', 'ANC', 'HNL', 'RST',
       'BIL', 'BTR', 'EGE', 'MSO', 'JFK', 'COS', 'PSP', 'HDN', 'OGG',
       'SGF', 'MFE', 'LNK', 'CID', 'MLI', 'KOA', 'LIH', 'JAC', 'EUG',
       'GUC', 'MFR', 'SBA', 'MOB', 'DAB', 'MLU', 'SHV', 'MLB', 'TLH',
       'PSC', 'FAI', 'HLN', 'LGB', 'BFL', 'FAT', 'SBP', 'MRY', 'ABI',
       'XNA', 'TXK', 'FSM', 'ACT', 'LFT', 'LRD', 'SPS', 'GGG', 'BPT',
       'ILE', 'LAW', 'SJT', 'CLL', 'TYR', 'PIA', 'BMI', 'EVV', 'CMI',
       'DBQ', 'BGR', 'ORH', 'APF', 'EYW', 'SWF', 'MTJ', 'DRO', 'ITO',
       'DUT', 'ADQ', 'BET', 'OME', 'OTZ', 'SCC', 'JNU', 'KTN', 'CDV',
       'YAK', 'SIT', 'PSG', 'WRG', 'BRW', 'BQN', 'BRO', 'MQT', 'ACY',
       'AKN', 'DLG', 'LWB', 'GST', 'RDR', 'MAZ']

假如是初学者,我们第一或许会去忽略这些数据。但很显然这些数据在我们的机器学习问题里是非常有用的指标。比如经常在冬天遭遇暴风雪袭击的芝加哥机场,和终年气候没什么变化的洛杉矶机场,在12月遭遇飞机延误的概率自然是完全不同的。还有一种很容易想到的思路就是把他按照1-数十的顺序分别去标记。但很显然,在这个问题里如此处理是非常荒谬的(为什么纽约是30,而芝加哥却是40呢?)

当然,以上这样的标注方法对于某些问题可能是适用的。比如这样的问题:在公共政策管理中的投票,被调查的用户可以选择:坚决支持,支持,一般,不支持,坚决反对。

在机器学习业务中我们可以使用pandas将string values转化为categorical values。这样我们就可以对其进行量化表示。

我们所使用的方法就是astype(“category”)。例如,还是同样的问题。

import pandas as pd

首先我们先定义这个ndarray。

a=np.array(['BWI', 'PHL', 'CLT', 'CLE', 'MKE', 'PIT', 'TPA', 'LGA', 'DFW',
       'BUF', 'BOS', 'ROC', 'DCA', 'MHT', 'CRW', 'MEM', 'DTW', 'CMH',
       'GSO', 'IAD', 'IAH', 'BHM', 'HPN', 'CHS', 'STL', 'AVP', 'ATL',
       'GSP', 'RDU', 'MCI', 'ORF', 'MYR', 'ALB', 'RIC', 'BNA', 'PVD',
       'BGM', 'TOL', 'SAV', 'ROA', 'IND', 'MDT', 'BTV', 'ELM', 'ITH',
       'JAX', 'PBI', 'SRQ', 'MSY', 'FLL', 'EWR', 'GRR', 'MSP', 'ORD',
       'ABE', 'LAS', 'BDL', 'MIA', 'MCO', 'CAE', 'ILM', 'SFO', 'SJU',
       'SDF', 'RSW', 'DAY', 'SYR', 'PNS', 'AVL', 'CAK', 'SBN', 'ERI',
       'HSV', 'CHA', 'SEA', 'TYS', 'FAY', 'LEX', 'STT', 'PWM', 'TRI',
       'STX', 'MDW', 'DAL', 'HOU', 'OKC', 'HRL', 'LIT', 'CRP', 'TUL',
       'LBB', 'MAF', 'ABQ', 'AMA', 'PHX', 'SAN', 'SMF', 'ISP', 'LAX',
       'AUS', 'PDX', 'ELP', 'OAK', 'ONT', 'SJC', 'JAN', 'RNO', 'BOI',
       'TUS', 'BUR', 'SAT', 'SLC', 'GEG', 'OMA', 'SNA', 'MSN', 'MBS',
       'FAR', 'ICT', 'GPT', 'VPS', 'DEN', 'TVC', 'FNT', 'GRB', 'GFK',
       'MOT', 'BIS', 'AZO', 'LAN', 'BZN', 'FCA', 'DLH', 'DSM', 'FSD',
       'FWA', 'GTF', 'CVG', 'SUX', 'RAP', 'LSE', 'ANC', 'HNL', 'RST',
       'BIL', 'BTR', 'EGE', 'MSO', 'JFK', 'COS', 'PSP', 'HDN', 'OGG',
       'SGF', 'MFE', 'LNK', 'CID', 'MLI', 'KOA', 'LIH', 'JAC', 'EUG',
       'GUC', 'MFR', 'SBA', 'MOB', 'DAB', 'MLU', 'SHV', 'MLB', 'TLH',
       'PSC', 'FAI', 'HLN', 'LGB', 'BFL', 'FAT', 'SBP', 'MRY', 'ABI',
       'XNA', 'TXK', 'FSM', 'ACT', 'LFT', 'LRD', 'SPS', 'GGG', 'BPT',
       'ILE', 'LAW', 'SJT', 'CLL', 'TYR', 'PIA', 'BMI', 'EVV', 'CMI',
       'DBQ', 'BGR', 'ORH', 'APF', 'EYW', 'SWF', 'MTJ', 'DRO', 'ITO',
       'DUT', 'ADQ', 'BET', 'OME', 'OTZ', 'SCC', 'JNU', 'KTN', 'CDV',
       'YAK', 'SIT', 'PSG', 'WRG', 'BRW', 'BQN', 'BRO', 'MQT', 'ACY',
       'AKN', 'DLG', 'LWB', 'GST', 'RDR', 'MAZ'], dtype=object)

print (a)
print (type(a))

因为astype(“category”)只有pandas才有,所以我们要把这个ndarray数据类型变成series。

b=pd.Series(a)
print (b)

c=b.astype("category")
print (c)

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值