假如我们在某个预测美国机场的飞机延误问题。这是我们的实际业务场景。我想对于许多经常需要旅行的朋友比如本人,这是一个非常有意义的问题。
在这个业务问题中,有这样的一些美国机场:
['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)