import numpy as np
import pandas as pd
#DataFrame的操作方法见 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.html
data_part1 = pd.read_csv('meinian_round1_data_part1_20180408.txt', sep='$', low_memory=False)
data_part2 = pd.read_csv('meinian_round1_data_part2_20180408.txt', sep='$', low_memory=False)#数据的维度
data_part1.shape
data_part2.shape
#数据的列名
data_part1.columns
#第一行的table_id
data_part1.table_id[0]#拼接两个数据,参数axis=0表示上下拼接,axis=1表示左右拼接
data_part = pd.concat( [df1,df2],axis=0).reset_index()
data_part.shapedef saveTable_id_size_type(data_part,fileName):#全部的体检项 2795 个table_ids = data_part.table_id.unique()print("一共有:%s个体检项目" % len(table_ids))#未查全部替换为NaN  DataFrame属性的操作方法见 http://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.htmldata_part.field_results.replace('未查',np.nan,inplace=True)data_part.field_results.replace('弃查',np.nan,inplace=True)#每个体检项的数据情况 字符还是数字?有多少不重复的可选项?table_id_size_type=[]#table_id_dict={}strNum=0for table_id in table_ids:subData = data_part[(data_part.table_id==table_id)]field_results = subData.field_results.unique()size_type=[]dtype = 'float'first=field_results[0]for rs in field_results:try:min = float(rs)except:dtype='str'first=rsstrNum=strNum+1breaksize_type.append(len(field_results))size_type.append(dtype)size_type.append(first)table_id_size_type.append(size_type)#table_id_dict[table_id]=size_typeprint(table_id,size_type)#用DataFrame的to_csv()保存到csvdf = pd.DataFrame(table_id_size_type)df.columns = ['size','dtype','first']df.insert(0,'table_id',table_ids)df=df.sort_values(by='size')df.to_csv(fileName,index=None,sep='$')saveTable_id_size_type(data_part,'table_id_dict.csv')
#只有一个选项的体检项没有用,应该去掉
subData = data_part[(data_part.table_id=='8401')]
subData = data_part[(data_part.table_id=='789033')]#只有两个选项的数据 有些项目的体检人数也很少,应该去掉
subData = data_part[(data_part.table_id=='509060')]#只有三个选项的数据
subData = data_part[(data_part.table_id=='G99122')]#下面来看看待预测数据,共有 9538 个用户  -- 先用记事本打开meinian_round1_test_a_20180409.csv,然后再另存为 utf-8格式
data_test = pd.read_csv('meinian_round1_test_a_20180409.csv', sep=',', low_memory=False)
#将待预测用户的体检数据查询加载进来(相当于左连接查询 data_test inner join data_part on data_test.vid=data_part.vid)
data_test = pd.merge(data_test,data_part)
#统计体检项保存到csv文件
saveTable_id_size_type(data_test,'table_id_dict_test.csv')#-----第二天---------------------------------------------------------------------------------------
#体检项去掉没有用的
table_id_dict_test = pd.read_csv('table_id_dict_test.csv', sep='$', low_memory=False)
table_id_dict_test = table_id_dict_test.loc[:,['table_id','size','dtype']]
table_id_dict_test = table_id_dict_test[(table_id_dict_test['size']>2)]
table_id_dict = pd.read_csv('table_id_dict.csv', sep='$', low_memory=False)
table_id_dict = table_id_dict.loc[:,['table_id','size','dtype']]
table_id_dict = table_id_dict[(table_id_dict['size']>2)]
#只取预测集及测试集都有的体检项
tableIds = pd.merge(table_id_dict_test,table_id_dict,on=['table_id','dtype'])#体检表
data_part1 = pd.read_csv('meinian_round1_data_part1_20180408.txt', sep='$', low_memory=False)
data_part2 = pd.read_csv('meinian_round1_data_part2_20180408.txt', sep='$', low_memory=False)
data_part = pd.concat( [data_part1, data_part2],axis=0).reset_index()
#训练用户
user_train = pd.read_csv('meinian_round1_train_20180408.csv', sep=',', low_memory=False)
user_train.columns=['vid', 'y1', 'y2', 'y3', 'y4', 'y5']
user_train = user_train[(user_train['y1']!='未查')]
user_train = user_train[(user_train['y2']!='未查')]
user_train = user_train[(user_train['y3']!='未查')]user_train = user_train[(user_train['y1']!='弃查')]
user_train = user_train[(user_train['y2']!='弃查')]
user_train = user_train[(user_train['y3']!='弃查')]#
#测试用户
user_test = pd.read_csv('meinian_round1_test_a_20180409.csv', sep=',', low_memory=False)
user_test.columns=['vid', 'y1', 'y1', 'y3', 'y4', 'y5']#空值转换为0
def toFloat(x):try:v = float(x)if(v>0):return velse:return 0;except TypeError as err:return 0from scipy.sparse import csr_matrix
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn import preprocessing
#稀疏矩阵数组
train_sparses=[]
test_sparses=[]
#对于的体检项
sparses_tableId=[]
diuqi = 0
for index, tableId in tableIds.iterrows():#print(tableId.table_id,tableId['dtype'])#取得当前体检项的所有数据data = data_part[(data_part.table_id==tableId.table_id)]#同一用户重复的体检项保留最后一项data = data.drop_duplicates(subset=['vid'],keep='last')data.field_results.replace('未查',np.nan,inplace=True)data.field_results.replace('弃查',np.nan,inplace=True)if data.shape[0]<50:#舍去太少数据的体检项diuqi = diuqi + 1print('丢弃',tableId.table_id)else: print('table_id',tableId.table_id)sparses_tableId.append(tableId)#取得训练用户-体检表data_train = pd.merge(user_train,data,how='left')#取得测试用户-体检表data_test = pd.merge(user_test,data,how='left')if 'float'==tableId['dtype']:#数值类型的体检项,直接构建稀疏矩阵#空值转换为0rs_train = data_train.field_results.apply(toFloat)#体检结果转换为稀疏矩阵train_sparses.append( csr_matrix(rs_train.values.reshape(-1,1)) )#空值转换为0rs_test = data_test.field_results.apply(toFloat)            #体检结果转换为稀疏矩阵test_sparses.append( csr_matrix(rs_test.values.reshape(-1,1)) )else:train_feature = data_train.field_resultstrain_feature = train_feature.where(train_feature.notnull(), '')train_feature = train_feature.valuestest_feature = data_test.field_resultstest_feature = test_feature.where(test_feature.notnull(), '')if tableId['size_x']<10:#可选项少的用one-hot处理#第一步 文本转换为整数label_encoder = preprocessing.LabelEncoder()integer_train = label_encoder.fit_transform(train_feature)#避免y contains new labels 测试数据出现了训练数据中没有的选项test_feature = test_feature.apply(lambda s: '' if s not in label_encoder.classes_ else s)test_feature = test_feature.valuesinteger_test = label_encoder.transform(test_feature)#第二步 转换为one-hot处理enc = preprocessing.OneHotEncoder()onehot_train=enc.fit_transform(integer_train.reshape(-1,1))onehot_test=enc.transform(integer_test.reshape(-1,1))train_sparses.append(onehot_train)test_sparses.append(onehot_test)                else:test_feature = test_feature.values#文本用TF-IDF处理#第一步 TFcount_vect = CountVectorizer()train_counts = count_vect.fit_transform(train_feature)test_counts = count_vect.transform(test_feature)#第二步 TF-IDFtfidf_transformer =  TfidfTransformer()train_tfidf = tfidf_transformer.fit_transform(train_counts)test_tfidf = tfidf_transformer.transform(test_counts)train_sparses.append(train_tfidf)test_sparses.append(test_tfidf)print(train_tfidf.shape)#将各体检项的稀疏矩阵破解为一个大的矩阵
from scipy.sparse import hstack
train_sparse = csr_matrix((user_train.shape[0],0))
test_sparse = csr_matrix((user_test.shape[0],0))
for trainsp,testsp,tableId in zip(train_sparses,test_sparses,sparses_tableId):print(trainsp.shape[0],testsp.shape[0],tableId.table_id,tableId['dtype'],tableId['size_x'],tableId['size_y'])train_sparse = hstack([train_sparse,trainsp]);test_sparse = hstack([test_sparse,testsp]);#保存稀疏矩阵,以备用
from scipy.sparse import save_npz
save_npz('train_sparse.npz', train_sparse)
save_npz('test_sparse.npz', test_sparse)
#----------------以上都是特征工程-----------------#训练模型及预测
import xgboost as xgb
model = xgb.XGBRegressor(max_depth=5, learning_rate=0.1, n_estimators=160, silent=True, objective='reg:gamma')
y_train = user_train.y1.astype('float64')
y_train = y_train.values.reshape(-1,1)
model.fit(train_sparse, y_train)
# 对测试集进行预测
p_y1 = model.predict(test_sparse)# 显示重要特征 重要特征(值越大,说明该特征越重要)
from xgboost import plot_importance
from matplotlib import pyplot as plt
plot_importance(model)
plt.show()

pandas.DataFrame及xgboost代码示例相关推荐

  1. pandas get_dummies用法及代码示例

    get_dummies 是 pandas 实现one hot encode的方式 ​  one-hot的基本思想:将离散型特征的每一种特征取值都看成一种状态,若指定离散特征中有N个 不相同的取值,那么 ...

  2. python中concat的用法_python pandas concat用法及代码示例

    沿特定轴将 pandas 对象与其他轴上的可选设置逻辑连接起来. 也可以在串联轴上添加一层分层索引,如果标签在传递的轴号上相同(或重叠),则可能很有用. 参数: objs:a sequence 或 m ...

  3. 怎么把竖列中的数相加python_关于python中pandas.DataFrame对行与列求和及添加新行与列示例代码...

    pandas是python环境下最有名的数据统计包,而DataFrame翻译为数据框,是一种数据组织方式,这篇文章主要给大家介绍了关于python中pandas.DataFrame对行与列求和及添加新 ...

  4. Pandas DataFrame.columns用法及代码示例

    1.简介 ​ Pandas DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构.算 术运算在行和列标签上对齐.可以将其视为Series对象的dict-like容器.它也 ...

  5. python中convert函数用法_Python Pandas DataFrame.tz_convert用法及代码示例

    Pandas DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构.算术运算在行和列标签上对齐.可以将其视为Series对象的dict-like容器.这是 Pandas ...

  6. python中columns是什么意思_Python Pandas DataFrame.columns用法及代码示例

    Pandas DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构.算术运算在行和列标签上对齐.可以将其视为Series对象的dict-like容器.这是 Pandas ...

  7. python records_Python Pandas DataFrame.to_records用法及代码示例

    Pandas DataFrame是带有标签轴(行和列)的二维大小可变的,可能是异构的表格数据结构.算术运算在行和列标签上对齐.可以将其视为Series对象的dict-like容器.这是 Pandas ...

  8. python中change的用法_Python Pandas dataframe.pct_change()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas dataframe.pct ...

  9. python boxplot用法_python pandas DataFrame.boxplot用法及代码示例

    从DataFrame列制作箱形图. 从DataFrame列制作box-and-whisker图,可以选择按其他一些列进行分组.箱形图是一种通过四分位数以图形方式描绘数字数据组的方法.该框从数据的Q1四 ...

  10. python中mean的用法_Python Pandas dataframe.mean()用法及代码示例

    Python是进行数据分析的一种出色语言,主要是因为以数据为中心的python软件包具有奇妙的生态系统. Pandas是其中的一种,使导入和分析数据更加容易. Pandas dataframe.mea ...

最新文章

  1. 在ASP.NET MVC 模型中 选择最好的方法将多个model(数据模型)传递到视图
  2. 数据通信技术_共建价值空间 共赢发展契机——2020华为贵数通新技术创享会在遵义市圆满举行...
  3. java中打印输出数组内容的三种方式
  4. VTK:Utilities之RenderScalarToFloatBuffer
  5. React学习小结(二)
  6. 三周的 软件工程实践课 课程安排建议
  7. 计算机辅助设计与制造考试题,计算机辅助设计与制造考试习题大集合..
  8. 金陵科技学院c语言实验报告册,C语言实验报告册a
  9. 专利服务器拒收 文件异常解压,电子申请专利常见错误总结.pdf
  10. 快速失败(ail-fast)和安全失败(fail-safe)机制
  11. 购物车中选择物品结算功能的实现
  12. HDU 6143 Killer Names(容斥+组合)
  13. 后台ui大全(有这些你就够了)
  14. python绘制相频特性曲线_数据分析之Matplotlib和机器学习基础
  15. 【大话Mysql面试】-常见SQL语句书写
  16. 致敬每一位劳动者,感恩每一次付出!清微智能祝您劳动节快乐~
  17. 我的世界java地狱更新_【我的世界】我得世界:1.16地狱大年夜更新_玩得好游戏攻略...
  18. 挑战巨头,主打安全的Telegram、超信胜算几何?
  19. Undefined/Null/Boolean数据类型
  20. 田亮晒森碟与海豚亲吻照 父女开心超有爱

热门文章

  1. DiskFileItemFactory
  2. Mysql 的 GROUP_CONCAT() 函数拼接串
  3. VDI序曲十九 无须×××直接mstsc到内网服务器
  4. Luogu2665[USACO08FEB] 连线游戏
  5. mongodb linux用户验证登陆,转载:linux下mongodb的用户查询_【Linux】MongoDB创建数据库(开启用户认证)...
  6. python隐式调用_python 的隐式指针特征与class inheritance
  7. springcloud gateway介绍
  8. php env 函数不存在,php-Laravel 5.2无法读取env fi
  9. reduce python3_Python3的高阶函数:map,reduce,filter
  10. java excel通用导入类_java excel 文件导入通用接口