private static void BuyOnlineCount() { string dir = Global.MainDirName + @"\answers"; if (Directory.Exists(dir) == false) { Directory.CreateDirectory(dir); } string filename = dir + @"\{0}.csv"; string totalFile = dir + @"\count.csv"; Console.WriteLine("本程序用来自动提取标准答案"); Console.WriteLine("将输出至:{0}", dir); Console.WriteLine("正在尝试读取数据库..."); using (AliRecommend2DataEntities db = new AliRecommend2DataEntities()) { var itemids = db.T_Item.Select(d => d.itemid).Distinct(); HashSet <int> itemIdSet = new HashSet <int>(); foreach (var id in itemids) { itemIdSet.Add(id); } Console.WriteLine("o2o数据集读取成功"); DateTime firstDate = db.T_UserAction.Min(d => d.actiondate).Date; DateTime lastDate = db.T_UserAction.Max(d => d.actiondate).Date; StreamWriter totalWriter = new StreamWriter(totalFile); totalWriter.WriteLine("date,count"); for (DateTime date = firstDate; date <= lastDate; date = date.AddDays(1)) { DateTime tommorrow = date.AddDays(1); Console.WriteLine("---------------------"); Console.WriteLine("正在获取{0}的购买记录。", date.ToString("yyyyMMdd")); var data = db.T_UserAction.Where(d => d.behaviortype == 4).Where(d => d.actiondate >= date && d.actiondate < tommorrow).Select(d => new { d.userid, d.itemid }).Distinct(); var items = data.ToList(); Console.WriteLine("正在输出..."); int count = 0; using (StreamWriter writer = new StreamWriter(String.Format(filename, date.ToString("yyyyMMdd")))) { writer.WriteLine("userid,itemid"); foreach (var item in items) { if (itemIdSet.Contains(item.itemid) == false) { continue; } writer.WriteLine("{0},{1}", item.userid, item.itemid); count++; } } totalWriter.WriteLine("{0},{1}", date.ToString("yyyyMMdd"), count); Console.WriteLine("{0}输出完毕.", date.ToString("yyyyMMdd")); } totalWriter.Close(); Console.WriteLine("BuyOnlineCount 所有数据输出完毕."); } }
public void Run() { using (AliRecommend2DataEntities db = new AliRecommend2DataEntities()) { ((IObjectContextAdapter)db).ObjectContext.CommandTimeout = 600; long startTime = DateTime.Now.Ticks; var data = db.T_UserAction.Where(d => d.actiondate >= StartDate && d.actiondate < PredictDate).ToList(); Console.WriteLine("数据库数据读取完毕,正在进行处理中..."); FeatureCollection features = new FeatureCollection(); features.UpdateOnlineItemSet(db); Console.WriteLine("正在读取正例数据..."); features.UpdatePositiveSet(db, PredictDate); var categories = data.GroupBy(d => d.category); Console.WriteLine("正在添加类别特征..."); foreach (var categoryData in categories) { CategoryFeature categoryFeature = new CategoryFeature(categoryData.Key, PredictDate); categoryFeature.Update(categoryData); features.AddCategoryFeature(categoryFeature); } var items = data.GroupBy(d => d.itemid); Console.WriteLine("正在添加商品特征..."); //按商品分组,itemData是每个商品的所有记录 foreach (var itemData in items) { ItemFeature itemFeature = new ItemFeature(itemData.Key, PredictDate); itemFeature.Update(itemData); itemFeature.IsOnline = features.CheckIsOnline(itemFeature.Id); //向ItemFeature绑定CategoryFeature itemFeature.CategoryFeature = features.CategoryFeatureDict[itemFeature.CategoryId]; features.AddItemFeature(itemFeature); } var users = data.GroupBy(d => d.userid); Console.WriteLine("正在添加用户相关特征..."); foreach (var userData in users) { UserFeature userFeature = new UserFeature(userData.Key, PredictDate); userFeature.Update(userData); features.AddUserFeature(userFeature); var userCategories = userData.GroupBy(d => d.category); foreach (var userCategoryData in userCategories) { UserCategoryFeature userCategoryFeature = new UserCategoryFeature(userCategoryData.Key, PredictDate); userCategoryFeature.Update(userCategoryData); userFeature.UserCategorieDict.Add(userCategoryFeature.CategoryId, userCategoryFeature); features.AddUserCategoryFeature(userCategoryFeature); } var userItems = userData.GroupBy(d => d.itemid); foreach (var userItemData in userItems) { UserItemFeature userItemFeature = new UserItemFeature(userFeature, userItemData.Key); userItemFeature.Update(userItemData); //是否是正例 userItemFeature.Label = features.CheckIsPositive(userItemFeature.UserId, userItemFeature.ItemId); //向UserItemFeature 绑定ItemFeature userItemFeature.ItemFeature = features.ItemFeatureDict[userItemFeature.ItemId]; //向UserItemFeature绑定UserCategoryFeature userItemFeature.UserCategoryFeature = userItemFeature.UserFeature.UserCategorieDict[userItemFeature.ItemFeature.CategoryId]; features.AddUserItemFeature(userItemFeature); } } if (Global.Normalized) { features.Normalize(); } string dirname = Global.GetDirectoryName(); if (Directory.Exists(dirname) == false) { Directory.CreateDirectory(dirname); } string filename = dirname + Global.GetFileName(PredictDate); features.Write(filename); Console.WriteLine("运行完毕,耗时{0}s", (DateTime.Now.Ticks - startTime) / 10000000); Console.WriteLine("{0} 输出完毕。", filename); } //Console.ReadKey(); }