の続きです。
どのページにアクセスが多いのか? それを日にちごとにわかるように変更を加えます。またそのときの流入元もわかるようにしました。

アクセス元をわかりやすくするためにセルに色をつけています。
Google検索からならOrange
Yahoo検索ならLightBlue
Bing検索であればLightGreen
サイト内のリンクをクリックした場合はYellow
それ以外(その他のサイトのリンクやブックマークからのアクセス)であればWhite
それから同じurlに同じIPアドレスからアクセされた場合は無視しています。
ではコードをみてみましょう。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | using ClosedXML.Excel; using System.IO; public partial class Form1 : Form {     void OutputOrderByDescendingUrlDate(string excelFilePath, string outputExcelFilePath)     {         List<Data> datas = GetDataFromExcel(excelFilePath);         datas = datas.Distinct(new EqualityComparer()).ToList();         using(XLWorkbook newWorkbook = new XLWorkbook())         {             // ワークシートを追加する             IXLWorksheet newWorksheet = newWorkbook.Worksheets.Add("解析結果");             newWorksheet.Cell(1, "A").Value = "URL";             newWorksheet.Cell(1, "B").Value = "アクセス数";             newWorksheet.Cell(1, "C").Value = "日";             newWorksheet.Cell(1, "D").Value = "時刻";             newWorksheet.Cell(1, "E").Value = "IPアドレス";             newWorksheet.Cell(1, "F").Value = "アクセス元";             var query1 = datas.GroupBy(x => x.Url).ToList();             query1 = query1.OrderByDescending(x => x.Count()).ToList();             int row = 2;             foreach(var group1 in query1)             {                 string url = group1.Key;                 var query2 = group1.GroupBy(x => x.Date).ToList();                 query2 = query2.OrderByDescending(x => x.Count()).ToList();                 int startUrl = row;                 foreach(var group2 in query2)                 {                     string date = group2.Key;                     int startIp = row;                     foreach(Data data in group2)                     {                         newWorksheet.Cell(row, "D").Value = data.Time;                         newWorksheet.Cell(row, "E").Value = data.IP;                         if(data.Referer.IndexOf("https://www.bing.com/search?") != -1)                             newWorksheet.Cell(row, "F").Value = "https://www.bing.com/";                         else if(data.Referer.IndexOf("https://www.google.co.jp/url?") != -1)                             newWorksheet.Cell(row, "F").Value = "https://www.google.co.jp/";                         else                             newWorksheet.Cell(row, "F").Value = data.Referer;                         if(newWorksheet.Cell(row, "F").GetString() == "")                             newWorksheet.Cell(row, "F").Value = "不明(ブックマークからか?)";                         if(newWorksheet.Cell(row, "F").GetString().IndexOf("google.") != -1)                             SetBackColor(newWorksheet, row, XLColor.Orange);                         else if(newWorksheet.Cell(row, "F").GetString().IndexOf("yahoo.") != -1)                             SetBackColor(newWorksheet, row, XLColor.LightBlue);                         else if(newWorksheet.Cell(row, "F").GetString().IndexOf("bing.") != -1)                             SetBackColor(newWorksheet, row, XLColor.LightGreen);                         else if(newWorksheet.Cell(row, "F").GetString().IndexOf("https://lets-csharp.com/") != -1)                             SetBackColor(newWorksheet, row, XLColor.Yellow);                         row++;                     }                     int endIp = row - 1;                     newWorksheet.Range(startIp, 3, endIp, 3).Merge();                     newWorksheet.Cell(startIp, "C").Value = date;                     newWorksheet.Cell(startIp, "C").Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;                 }                 int endUrl = row - 1;                 newWorksheet.Range(startUrl, 1, endUrl, 1).Merge();                 newWorksheet.Cell(startUrl, "A").Value = group1.Key;                 newWorksheet.Cell(startUrl, "A").Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;                 newWorksheet.Cell(startUrl, "A").Style.Alignment.WrapText = true;                 newWorksheet.Range(startUrl, 2, endUrl, 2).Merge();                 newWorksheet.Cell(startUrl, "B").Value = group1.Count();                 newWorksheet.Cell(startUrl, "B").Style.Alignment.Vertical = XLAlignmentVerticalValues.Top;             }             newWorkbook.SaveAs(outputExcelFilePath);         }     }     void SetBackColor(IXLWorksheet newWorksheet, int row, XLColor color)     {         newWorksheet.Cell(row, "E").Style.Fill.BackgroundColor = color;         newWorksheet.Cell(row, "F").Style.Fill.BackgroundColor = color;     } } | 
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | class EqualityComparer : IEqualityComparer<Data> {     public bool Equals(Data x, Data y)     {         if(x.IP == y.IP && x.Url == y.Url)             return true;         else             return false;     }     public int GetHashCode(Data obj)     {         return 0;     } } | 
このプログラムをつくってわかったこと。
一番アクセスが多いhttps://lets-csharp.com/excel-edit-cs/はBingからのアクセスがほとんど、二番目にアクセスが多いhttps://lets-csharp.com/how-to-use-tesseract/はGoogleからのアクセスがほとんどである。


そして全体に対していえることとして、検索サイトからのアクセスはGoogleとBingからのものが大半をしめていて、Yahooからのアクセスはほとんどないということがわかった。GoogleとYahooは同じアルゴリズムを採用しているのですが、ユーザーの傾向が違うのかな?
