关于数据挖掘预处理算法 fstream与数据格式的关系
-2015-5-12- 14:52 created by Sui
最近开始上数据挖掘课程,第一次做实验需要把来自txt格式 的数据读取到内存,本来以为很简单的问题,结果搞了一个多小时都没有成,以下总结一下教训,以便以后再遇到相似的问题。
一、预处理算法
本次要处理的数据是超市的流水单号,如下:
流水单号 门店号 POS机号 日期 商品序号 商品ID 购买数量 单价 总额
200304130001-001 1020 1020 2003年4月13日 1 1001891 1 34.5 34.5
200304130002-001 1020 1020 ### 1 1001171 1 2.3 2.3
200304130002-001 1020 1020 2003年4月13日 2 1006479 1 10.2 10.2
一开始只是按照自己的思路设计了一个保存的class,如下:
class Sales{
public:
void showInfo();
void dateNormalization(); //修正日期格式
void positiveNormalization(); //修正正负错误
public:
string _serial; //流水号
int _marketNum; //门店号
int _posNum; //POS机号
string _date; //日期
int _goodsNum; //购买商品序号
int _goodsID; //商品ID
double _buyNum; //购买数量
double _singlePrice; //单价
double _totalPrice; //总价
};
然后通过fstream 和vector进行读取
fstream file("1020.txt");
vector<Sales> salesVec;
//存入数据
while (!file.eof()){
Sales sale=Sales();
file>>sale._serial>>sale._marketNum>>sale._posNum
>>sale._date>>sale._goodsNum>>sale._goodsID
>>sale._buyNum>>sale._singlePrice>>sale._totalPrice;
salesVec.push_back(sale);
}
但是! 一个很意外的问题是: 购买数量可能不是int,这样在读取数据的时候,
如果读取到 购买数量:0.34 ,通过file>>_buyNum 的时候只会读取小数点前的数据,后面的数据恰好被单价读取。
如此这样,后边所有的数据都将错位。
二、数据预处理
修正日期格式:..
p.s.要上课啦,回来再写。
内容浅薄,还请高手不要鄙视。