の続きです。
どのページにアクセスが多いのか? それを日にちごとにわかるように変更を加えます。またそのときの流入元もわかるようにしました。
アクセス元をわかりやすくするためにセルに色をつけています。
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は同じアルゴリズムを採用しているのですが、ユーザーの傾向が違うのかな?