SIT742 (Modern Data Science) Full Marks: 25 Assessment Task 01 2021 Trimester 1, Due: 8:00pm AEST, 17/04/2021 Students with difficulty in meeting the deadline because of illness, etc. must apply for...

1 answer below »
I have the Data set which I am happy to attach once I get the quotation. Thank you kindly.


SIT742 (Modern Data Science) Full Marks: 25 Assessment Task 01 2021 Trimester 1, Due: 8:00pm AEST, 17/04/2021 Students with difficulty in meeting the deadline because of illness, etc. must apply for an assignment extension (up to 3 days) no later than 12:00pm on 16/04/2021 (Friday). Instructions Six files are provided for this assessment task: HTWebLog_p1.zip The compressed zip file is for Part I of this assessment task, and it is a sample of Hotel TULIP Web log dataset, which contains the web access log information from 11/2006 to 02/2007. 1. Professor-list.csv This CSV file is for Part II of this assessment task, and it contains three columns: the professor name, the professor title and also the university. Professor-citation-information.csv This CSV file is for Part II of this assessment task, and it has 8 columns: the professor name, the professor title, th ecitation-all, the citation-since2016 (cita- tions after 2016), the h-index-all 2, the h-index-since2016, the i10-index-all 3 and also the i10-index-since2016. SIT742Task1.ipynb This is the notebook file for the Python code in ipynb, and the latest notebook is also released in SIT742Task1.ipynb. Web log This code snippet contains all the coding requirements and also hints for Part I of this assessment task. Web crawling This code snippet contains all the coding requirements and also hints is for Part II of this assessment task. You will need to complete the code in the notebook and make it run-able. The results on running the notebook will help you to develop your report, as well as generate the required files: Professor- list.csv and Professor-citation-information.csv. SIT742Task1-DataDictionary-Template.xlsx This is the Excel template file for the data dictionary, and it is for Part I of this assessment task. SIT742Task1-Report-Template.docx This is the Word template for your report SIT742Task1-Report.pdf. What to Submit? You are required to submit the following completed files to the corresponding Assignment (Dropbox) in CloudDeakin: SIT742-DataDictionary.xlsx The data dictionary for the Hotel TULIP Web log dataset. Professor-list.csv The csv file of all professors in Deakin University School of IT. Professor-citation-information.csv The csv file of all citation information on professors. SIT742Task1.ipynb The completed notebook with all the run-able code on all requirements. SIT742Report.pdf Your report for the both Part I and Part II of this assessment task. 1This file is exclusively for SIT742 educational purpose only. You are not allowed to further distribute it. 2h-index is the largest number h such that h publications have at least h citations. The second column has the “recent” version of this metric which is the largest number h such that h publications have at least h new citations in the last 5 years. 3i10-index is the number of publications with at least 10 citations. The second column has the “recent” version of this metric, which is the number of publications wit at least 10 new citations in the last 5 years. Page 1 of 5 https://github.com/tulip-lab/sit742/blob/master/Assessment/2021/SIT742Task1.ipynb SIT742 (Modern Data Science) Full Marks: 25 Assessment Task 01 2021 Trimester 1, Due: 8:00pm AEST, 17/04/2021 Part I Data Manipulation — Web Log Data Here is the hypothetical background: Hotel TULIP (a hypothetical organisation) is a five star hotel that locates in Australia. It is a very special hotel with an equally special purpose: Not only does it embody all the creative energy and spirit of TULIP-Lab, it’s a “learning environment” on which the tourism and hospitality students are trained for future hoteliers. In the past two decades, the Web server of Hotel TULIP has logged all the web traffic to the hotel website, and stored large amount of data related to the use of various web pages. The hotel’s CIO, Dr Bear Guts (not Bill Gates!), believes that those log files are great resources to help their Information Technology Division improve their potential customers’ online experience, and help their Market Promotion Division to identify potential customers and their behaviour patterns. Hence, Hotel TULIP would like to outsource the web usage mining task to Group- SIT742 (a hypothetical data analytics group with up to 3 data analysers) to analyse web log files and discover user accessing patterns of different web pages. The Web server is using Microsoft Internet Information Service (IIS), and the Web log format can be found at: https://msdn.microsoft.com/en-us/library/ms525807(v=vs.90).aspx You are employed within Hotel TULIP working in the Information Technology Division. Your manager, Dr Beer Guts (also not Bill Gates!), has asked you to prepare a set of documents for Group-SIT742 so that they can have an initial understanding of the data to be analysed. Task Description This task requires you to construct a data dictionary and develop a data exploration report for the provided Hotel TULIP Web log dataset. Without exploration or further analysis, ‘raw’ Web log data hardly reveals any insightful information. In this part, you are required to complete the Python code snippets to generate suitable numeric and visual description in the Hotel TULIP Web log dataset based on the detailed requirements in SIT742Task1.ipynb, and develop the report SIT742Task1Report.pdf to summarise the descriptive statistics information. The detailed requirements can also be found in the notebook SIT742Task1.ipynb, here we summarise them as follows: 1 ETL 1.1 Data Loading (4 marks) Complete the Python code snippets in SIT742Task1.ipynb as required in notebook, and complete the data dictionary and report. Code Load (may need unzip first) the Hotel TULIP Web log data HTWebLog_p1.zip into dataframe df_ht, and check how many files are loaded. Then check data statistics and general information by printing its top 5 rows. Data Dictionary Fill the data dictionary based on the Python code results. For a data scientist or business analyst, after obtaining the dataset, the first crucial task is to obtain a good understanding of the data to be analysed. This includes: examining the data attributes (or equivalently, data fields), seeing what they look like, what is the data type for each field, and from this information, determining suitable numerical/visual descriptions. Page 2 of 5 http://www.tulip.org.au https://msdn.microsoft.com/en-us/library/ms525807(v=vs.90).aspx https://github.com/tulip-lab/sit742/blob/master/Assessment/2021/SIT742Task1.ipynb https://github.com/tulip-lab/sit742/blob/master/Assessment/2021/SIT742Task1.ipynb SIT742 (Modern Data Science) Full Marks: 25 Assessment Task 01 2021 Trimester 1, Due: 8:00pm AEST, 17/04/2021 A systematic approach to this process, as we have learned from the lectures (Week-03), is to construct a data dictionary for the dataset. You are required to construct a data dictionary for the Hotel TULIP Web log dataset using the template: SIT742Task1-DataDictionary-Template.xlsx. SIT742Task1Report Add proper results for Section Dataset Description and Attribute Dictionary. 1.2 Data Cleaning (2 marks) Complete the Python code snippets in SIT742Task1.ipynb as required in notebook, and complete the data dictionary and report. Code • Check which columns have NAs, • For each of those columns, display how many records with NA values • Remove all records with any NAs. SIT742Task1Report Add proper results for: • the number NAs for each column. • the number of rows before removing NAs. • the number of rows after removing NAs. 2 Descriptive Statistics 2.1 Traffic Analysis (4 marks) Analyse the web traffic statistics; Code • Discover on the traffics by analysing hourly requests. • Plot into Bar Chart. • Filter the hourly requests by removing any below 490,000 and above 400,000. (hourly_request_amount >= 400000 & hourly_request_amount <= 490000)="" report="" •="" please="" add="" a="" figure="" of="" hourly="" requests="" bar="" chart="" from="" your="" notebook,="" and="" elaborate="" the="" findings="" from="" the="" figure.="" •="" please="" add="" a="" table="" of="" filter="" result="" (hourly_request_amount="">= 400000 & hourly_request_amount <= 490000) 2.2 server analysis (4 marks) analyse the server status statistics; code discover on the server status using ‘sc-status’ from dataframe, then plot it into pie chart. report • how many types of status reported? • figure ‘server status’ in pie chart. page 3 of 5 sit742 (modern data science) full marks: 25 assessment task 01 2021 trimester 1, due: 8:00pm aest, 17/04/2021 2.3 geographic analysis (4 marks) analyse the server geographic information statistics; code • select all requests at 01 jan 2007 from 20:00:00 pm to 20:59:59 pm. • discover the geographic information by analysing requests from country and city level. • plot countries and cities of all requests in two pie charts. • list top 3 of both with the request numbers. report • how many requests raised in the period of time? • how many countries and cities are involved? • figure ‘request by country’ and ‘request by city’ in pie charts. • list top 3 countries and cites with the request numbers. part ii data manipulation — web crawling google scholar is a web service that indexes the metadata of research articles on many scientists. majority of computer scientists choose to use google scholar to track their publications and research development. therefore, the web crawling on google scholar can provide the citation information on all professors with a public google scholar profile. task description in 2021, to better introduce all the emeritus professors, professors and associate professors in the school of it, deakin university wants to collect all the citation information on them. you are required to implement a web crawler, design and complete the code in the notebook and make sure that the web crawling code meets the requirements. you are free to use any python package for web crawling. 3 professor list generation you will need to import the suitable (or your chosen)web crawling library and use the corresponding li- brary to crawl the school of it staff list page: https://www.deakin.edu.au/information-technology/ staff-listing. 3.1 import and install your web crawling library (1 mark) you could use selenium by doing the pip install selenium, download the webdriver for chromedriver and define your webdriver for crawling. but you are free to use any other library. 3.2 crawl and generate the list (1 mark) the code must contain the necessary web crawling steps and necessary data save steps. the results of the code running will generate the professor-list.csv. without using the web crawling steps in the code will incur 0 mark. page 4 of 5 https://scholar.google.com.au https://www.deakin.edu.au/information-technology/staff-listing https://www.deakin.edu.au/information-technology/staff-listing sit742 (modern data science) full marks: 25 assessment task 01 2021 trimester 1, due: 8:00pm aest, 17/04/2021 4 professor citation information generation 4.1 professor citation information generation (2 marks) you will need to use the generated professor-list.csv to identify each professor’s google scholar profile page in google scholar platform, and then to crawl the citation information from each google scholar profile. you will need to design your code by using loops and condition statement (as some of the professors did not have google scholar profile) to complete this requirement. the results of code running will generate the professor-citation-information.csv. 4.2 identify the professor with the most citations (1 mark) you are required to do the sort and print by using pandas function to find out the professor with the most citations (please remove those without a public google scholar page). 4.3 identify the associate professor with the most i10-index since 2016 (1 mark) you are required to do the filer, 490000)="" 2.2="" server="" analysis="" (4="" marks)="" analyse="" the="" server="" status="" statistics;="" code="" discover="" on="" the="" server="" status="" using="" ‘sc-status’="" from="" dataframe,="" then="" plot="" it="" into="" pie="" chart.="" report="" •="" how="" many="" types="" of="" status="" reported?="" •="" figure="" ‘server="" status’="" in="" pie="" chart.="" page="" 3="" of="" 5="" sit742="" (modern="" data="" science)="" full="" marks:="" 25="" assessment="" task="" 01="" 2021="" trimester="" 1,="" due:="" 8:00pm="" aest,="" 17/04/2021="" 2.3="" geographic="" analysis="" (4="" marks)="" analyse="" the="" server="" geographic="" information="" statistics;="" code="" •="" select="" all="" requests="" at="" 01="" jan="" 2007="" from="" 20:00:00="" pm="" to="" 20:59:59="" pm.="" •="" discover="" the="" geographic="" information="" by="" analysing="" requests="" from="" country="" and="" city="" level.="" •="" plot="" countries="" and="" cities="" of="" all="" requests="" in="" two="" pie="" charts.="" •="" list="" top="" 3="" of="" both="" with="" the="" request="" numbers.="" report="" •="" how="" many="" requests="" raised="" in="" the="" period="" of="" time?="" •="" how="" many="" countries="" and="" cities="" are="" involved?="" •="" figure="" ‘request="" by="" country’="" and="" ‘request="" by="" city’="" in="" pie="" charts.="" •="" list="" top="" 3="" countries="" and="" cites="" with="" the="" request="" numbers.="" part="" ii="" data="" manipulation="" —="" web="" crawling="" google="" scholar="" is="" a="" web="" service="" that="" indexes="" the="" metadata="" of="" research="" articles="" on="" many="" scientists.="" majority="" of="" computer="" scientists="" choose="" to="" use="" google="" scholar="" to="" track="" their="" publications="" and="" research="" development.="" therefore,="" the="" web="" crawling="" on="" google="" scholar="" can="" provide="" the="" citation="" information="" on="" all="" professors="" with="" a="" public="" google="" scholar="" profile.="" task="" description="" in="" 2021,="" to="" better="" introduce="" all="" the="" emeritus="" professors,="" professors="" and="" associate="" professors="" in="" the="" school="" of="" it,="" deakin="" university="" wants="" to="" collect="" all="" the="" citation="" information="" on="" them.="" you="" are="" required="" to="" implement="" a="" web="" crawler,="" design="" and="" complete="" the="" code="" in="" the="" notebook="" and="" make="" sure="" that="" the="" web="" crawling="" code="" meets="" the="" requirements.="" you="" are="" free="" to="" use="" any="" python="" package="" for="" web="" crawling.="" 3="" professor="" list="" generation="" you="" will="" need="" to="" import="" the="" suitable="" (or="" your="" chosen)web="" crawling="" library="" and="" use="" the="" corresponding="" li-="" brary="" to="" crawl="" the="" school="" of="" it="" staff="" list="" page:="" https://www.deakin.edu.au/information-technology/="" staff-listing.="" 3.1="" import="" and="" install="" your="" web="" crawling="" library="" (1="" mark)="" you="" could="" use="" selenium="" by="" doing="" the="" pip="" install="" selenium,="" download="" the="" webdriver="" for="" chromedriver="" and="" define="" your="" webdriver="" for="" crawling.="" but="" you="" are="" free="" to="" use="" any="" other="" library.="" 3.2="" crawl="" and="" generate="" the="" list="" (1="" mark)="" the="" code="" must="" contain="" the="" necessary="" web="" crawling="" steps="" and="" necessary="" data="" save="" steps.="" the="" results="" of="" the="" code="" running="" will="" generate="" the="" professor-list.csv.="" without="" using="" the="" web="" crawling="" steps="" in="" the="" code="" will="" incur="" 0="" mark.="" page="" 4="" of="" 5="" https://scholar.google.com.au="" https://www.deakin.edu.au/information-technology/staff-listing="" https://www.deakin.edu.au/information-technology/staff-listing="" sit742="" (modern="" data="" science)="" full="" marks:="" 25="" assessment="" task="" 01="" 2021="" trimester="" 1,="" due:="" 8:00pm="" aest,="" 17/04/2021="" 4="" professor="" citation="" information="" generation="" 4.1="" professor="" citation="" information="" generation="" (2="" marks)="" you="" will="" need="" to="" use="" the="" generated="" professor-list.csv="" to="" identify="" each="" professor’s="" google="" scholar="" profile="" page="" in="" google="" scholar="" platform,="" and="" then="" to="" crawl="" the="" citation="" information="" from="" each="" google="" scholar="" profile.="" you="" will="" need="" to="" design="" your="" code="" by="" using="" loops="" and="" condition="" statement="" (as="" some="" of="" the="" professors="" did="" not="" have="" google="" scholar="" profile)="" to="" complete="" this="" requirement.="" the="" results="" of="" code="" running="" will="" generate="" the="" professor-citation-information.csv.="" 4.2="" identify="" the="" professor="" with="" the="" most="" citations="" (1="" mark)="" you="" are="" required="" to="" do="" the="" sort="" and="" print="" by="" using="" pandas="" function="" to="" find="" out="" the="" professor="" with="" the="" most="" citations="" (please="" remove="" those="" without="" a="" public="" google="" scholar="" page).="" 4.3="" identify="" the="" associate="" professor="" with="" the="" most="" i10-index="" since="" 2016="" (1="" mark)="" you="" are="" required="" to="" do="" the="">
Answered 2 days AfterApr 18, 2021SIT742Deakin University

Answer To: SIT742 (Modern Data Science) Full Marks: 25 Assessment Task 01 2021 Trimester 1, Due: 8:00pm AEST,...

Abr Writing answered on Apr 20 2021
148 Votes
Professor-list.csv
Name,Title,University
Lynn Batten,Emeritus Professor,Deakin University
Andrzej Goscinski,Emeritus Professor,Deakin University
Jemal Abawajy,Professor,Deakin University
Maia Angelova,Professor,Deakin University
Gleb Beliakov,Professor,Deakin University
Terry Caelli,Professor,Deakin University
Jinho Choi,Professor,Deakin University
Chang-Tsun Li,Professor,Deakin University
Robin Doss,Professor,Deakin University
Peter Eklund,Professor,Deakin University
Seng Loke,Professor,Deakin University
Antonio Robles-Kelly,Professor,Deakin University
Jean-Guy Schneider,Professor,Deakin University
Yong Xiang,Professor,Deakin University
John Yearwood,Professor,Deakin University
Arkady Zaslavsky,Professor,Deakin University
Mohamed Abdelrazek,Associate Professor,Deakin University
Andrew Cain,Associate Professor,Deakin University
Richard Dazeley,Associate Professor,Deakin University
Guangyan Huang,Associate Professor,Deakin University
Gang Li,Associate Professor,Deakin University
Jianxin Li,Associate Professor,Deakin University
Xiao Liu,Associate Professor,Deakin University
Vicky Mak,Associate Professor,Deakin University
Tim Wilkin,Associate Professor,Deakin University
Chetan Arora,Dr,Deakin University
Zubair Baig,Dr,Deakin University
Shaun Bangay,Dr,Deakin University
Muneera Bano,Dr,Deakin University
Carlo Barca,Dr Jan,Deakin University
Morshed Chowdhury,Dr,Deakin University
Niroshinie Fernando,Dr,Deakin University
Longxiang Gao,Dr,Deakin University
Shang Gao,Dr,Deakin University
Marek Gagolewski,Dr,Deakin University
Thuong Hoang,Dr,Deakin University
Michael Hobbs,Dr,Deakin University
Jingyu Hou,Dr,Deakin University
Shamsul Huda,Dr,Deakin University
Amani Ibrahim,Dr,Deakin University
Simon James,Dr,Deakin University
Frank Jiang,Dr,Deakin University
Chandan Karmakar,Dr,Deakin University
Elicia Lanham,Dr,Deakin University
Jesse Laeuchli,Dr,Deakin University
Kevin Lee,Dr,Deakin University
Wei Luo,Dr,Deakin University
Musa Mammadov,Dr,Deakin University
Kerri Morgan,Dr,Deakin University
Asef Nazari,Dr,Deakin University
Thanh Nguyen,Dr Duc,Deakin University
Thi Nguyen,Dr Thanh,Deakin University
Bahador Ofoghi,Dr,Deakin University
Lei Pan,Dr,Deakin University
Guillermo Pineda-Villavicencio,Dr,Deakin University
Chathu Ranaweera,Dr,Deakin University
Sutharshan Rajasegarar,Dr,Deakin University
Imran Razzak,Dr,Deakin University
Sergiy Shelyag,Dr,Deakin University
David Tay,Dr,Deakin University
Dhananjay Thiruvady,Dr,Deakin University
Rolando Trujillo Rasua,Dr,Deakin University
Julien Ugon,Dr,Deakin University
Nayyar Zaidi,Dr,Deakin University
Zili Zhang,Dr,Deakin University
Sasan Adibi,Dr,Deakin University
Adnan Anwar,,Deakin University
Sunil Aryal,Dr,Deakin University
Alexander Baldwin,Dr,Deakin University
Alessio Bonti,Dr,Deakin University
Reda Bouadjenek,Dr Mohamed,Deakin University
Greg Bowtell,Dr,Deakin University
Feifei Chen,Dr,Deakin University
Michelle Cyganowski,,Deakin University
Robert Dew,Dr,Deakin University
Imali Dias,Dr,Deakin University
Atabak Elmi,Dr,Deakin University
Shahid Ferdous,Dr Hasan,Deakin University
Anuroop Gaddam,Dr,Deakin University
Alireza Hassani,,Deakin University
Damien Hutchinson,Dr,Deakin University
Jonathan Kua,Dr,Deakin University
Glory Lee,Dr,Deakin University
Xuequan Lu,Dr,Deakin University
Daniel Ma,Dr,Deakin University
Somaiyeh MahmoudZadeh,Dr,Deakin University
Sophie McKenzie,,Deakin University
Valeh Moghaddam,Dr,Deakin University
Bahar Nakisa,Dr,Deakin University
Ghari Neiat,Dr Azadeh,Deakin University
Jihong Park,Dr,Deakin University
Shiva Pokhrel,Dr,Deakin University
Sergey Polyakovskiy,Dr,Deakin University
Justin Rough,Dr,Deakin University
Atul Sajjanhar,Dr,Deakin University
Arash Shaghaghi,Dr,Deakin University
Keshav Sood,Dr,Deakin University
Rui Wang,Dr,Deakin University
Jason Wells,,Deakin University
Guy Wood-Bradley,Dr,Deakin University
Luxing Yang,Dr,Deakin University
(Leo) Zhang,Dr Yu,Deakin University
Ye Zhu,Dr,Deakin University
Mumtaz Ali,Dr,Deakin University
Francisco Cruz,Dr,Deakin University
Jie Ding,Dr,Deakin University
Rasul Esmaeilbeigi,Dr,Deakin University
Belinda Huang,Dr,Deakin University
Jay Jeong,Dr,Deakin University
Tariq Khan,Dr,Deakin University
Thai Doan,Dr Chuong,Deakin University
Sunny Lee,,Deakin University
Xufeng Lin,Dr,Deakin University
Ming Liu,Dr,Deakin University
Alexey Medvedev,Dr,Deakin University
Iynkaran Natgunanathan,Dr,Deakin University
Thanh-Binh Nguyen,Dr,Deakin University
Tianrui Zong,Dr,Deakin University
Yevhen Zolotavkin,Dr,Deakin University
Amin Abken,Dr,Deakin University
Borui Cai,Dr,Deakin University
Grishma Khadka,Mr,Deakin University
Budi Kurniawan,Mr,Deakin University
Diaz Millan,Dr Reinier,Deakin University
Mendivez Vasquez,Mr Bruno,Deakin University
Jack Murley,Mr,Deakin University
Ashish Nanda,Dr,Deakin University
Patrick Scolyer-Gray,Dr,Deakin University
Youyang Qu,Mr,Deakin University
Nan Sun,Dr,Deakin University
Radhagayathri Udhayakumar,Dr,Deakin University
Di Wu,Dr,Deakin University
Roozbeh Zarei,Dr,Deakin University
Brendan Hill,Mr,Deakin University
Abid Adam,Adjunct Professor,Deakin University
Catherine Buhler,Adjunct Professor,Deakin University
Eshan Dissanayake,Adjunct Professor,Deakin University
Ben Doyle,Adjunct Professor,Deakin University
John Ellis,Adjunct Professor,Deakin University
Manohar Esarapu,Honorary Fellow,Deakin University
Patrick Fair,Adjunct Professor,Deakin University
David Fairman,Adjunct Professor,Deakin University
Mark Fitzgerald,Honorary Professor,Deakin University
Praveen Gauravaram,Adjunct Professor,Deakin University
Nigel Hedges,Adjunct Professor,Deakin University
Darren Kane,Adjunct Professor,Deakin University
Kerry Kirk,Honorary Fellow,Deakin University
Len Kleinman,Adjunct Professor,Deakin University
James Kotsias,Adjunct Professor,Deakin University
Berin Lautenbach,Adjunct Professor,Deakin University
Min Livanidis,Adjun
ct Professor,Deakin University
Phillip Magness,Adjunct Professor,Deakin University
Joseph Mathew,Adjunct Associate Professor,Deakin University
William Moran,Honorary Professor,Deakin University
Ana Novak,Honorary Associate Professor,Deakin University
Zahir Quettawala,Adjunct Professor,Deakin University
Anthony Robertshaw,Adjunct Associate Professor,Deakin University
Jamie Rossato,Adjunct Professor,Deakin University
Chadi Saliby,Adjunct Professor,Deakin University
Malcolm Shore,Adjunct Professor,Deakin University
Anthony Travers,Honorary Fellow,Deakin University
EJ Wise,Adjunct Professor,Deakin University
Fiona Ebdon,,Deakin University
Belinda Evans-Hunt,,Deakin University
Sheryl Pascoe,,Deakin University
Sheena Saunders,,Deakin University
Emmica Schlobohm,,Deakin University
Laura Wilson,,Deakin University
Sia Alavian,,Deakin University
Abbas Kudrati,Professor,Deakin University
Jesse Mcmeikan,,Deakin University
Thuy Nguyen,,Deakin University
Nghia Dang,,Deakin University
Justin Li,,Deakin University
Professor-citation-information.csv
Name,Title,citation-all,citation-since2016,h-index-all,h-index-since2016,i10-index-all,i10-index-since2016
Lynn Batten,Emeritus Professor,2535,1179,23,16,45,21
Andrzej Goscinski,Emeritus Professor,,,,,,
Jemal Abawajy,Professor,,,,,,
Maia Angelova,Professor,682,399,15,11,21,14
Gleb Beliakov,Professor,8182,4640,42,32,135,87
Terry Caelli,Professor,8669,1477,52,20,177,36
Jinho Choi,Professor,7836,5045,37,29,168,96
Chang-Tsun Li,Professor,4347,2341,33,21,104,65
Robin Doss,Professor,,,,,,
Peter Eklund,Professor,3968,783,34,14,72,23
Seng Loke,Professor,7188,2913,38,21,126,50
Antonio Robles-Kelly,Professor,3659,1538,24,15,62,27
Jean-Guy Schneider,Professor,1814,647,24,15,48,21
Yong Xiang,Professor,6318,4981,40,35,117,94
John Yearwood,Professor,3801,2006,32,23,92,45
Arkady Zaslavsky,Professor,14966,8361,50,33,177,80
Mohamed Abdelrazek,Associate Professor,1866,1265,16,15,27,23
Andrew Cain,Associate Professor,291,194,10,9,11,8
Richard Dazeley,Associate Professor,1478,956,16,13,24,15
Guangyan Huang,Associate Professor,1131,812,20,18,30,24
Gang Li,Associate Professor,,,,,,
Jianxin Li,Associate Professor,1467,1088,21,18,39,32
Xiao Liu,Associate Professor,3231,1760,26,20,52,42
Vicky Mak,Associate Professor,387,229,11,8,14,6
Tim Wilkin,Associate Professor,389,312,10,10,11,10
Chetan Arora,Dr,431,388,10,9,10,9
Zubair Baig,Dr,1491,1236,24,22,45,31
Shaun Bangay,Dr,,,,,,
Muneera Bano,Dr,1069,876,15,15,23,17
Carlo Barca,Dr Jan,,,,,,
Morshed Chowdhury,Dr,1825,1156,22,16,46,28
Niroshinie Fernando,Dr,2227,1532,9,9,8,8
Longxiang Gao,Dr,1698,1614,18,18,27,26
Shang Gao,Dr,410,293,8,6,5,3
Marek Gagolewski,Dr,743,518,15,12,21,16
Thuong Hoang,Dr,486,427,13,12,19,15
Michael Hobbs,Dr,987,212,13,7,17,7
Jingyu Hou,Dr,,,,,,
Shamsul Huda,Dr,1038,911,19,17,29,22
Amani Ibrahim,Dr,1332,639,14,12,17,13
Simon James,Dr,,,,,,
Frank Jiang,Dr,,,,,,
Chandan Karmakar,Dr,2489,1830,22,20,57,44
Elicia Lanham,Dr,168,34,7,3,5,1
Jesse Laeuchli,Dr,,,,,,
Kevin Lee,Dr,1440,448,15,10,21,13
Wei Luo,Dr,,,,,,
Musa Mammadov,Dr,1751,731,25,16,48,21
Kerri Morgan,Dr,147,73,7,4,6,2
Asef Nazari,Dr,223,119,8,6,8,4
Thanh Nguyen,Dr Duc,,,,,,
Thi Nguyen,Dr Thanh,,,,,,
Bahador Ofoghi,Dr,,,,,,
Lei Pan,Dr,748,656,14,13,24,19
Guillermo Pineda-Villavicencio,Dr,245,100,9,5,6,3
Chathu Ranaweera,Dr,648,521,13,12,15,13
Sutharshan Rajasegarar,Dr,,,,,,
Imran Razzak,Dr,,,,,,
Sergiy Shelyag,Dr,2402,1057,26,20,37,30
David Tay,Dr,1997,523,23,13,51,16
Dhananjay Thiruvady,Dr,519,274,13,10,17,13
Rolando Trujillo Rasua,Dr,804,609,15,13,21,18
Julien Ugon,Dr,1064,638,18,12,31,16
Nayyar Zaidi,Dr,414,326,9,8,8,7
Zili Zhang,Dr,,,,,,
Sasan Adibi,Dr,1557,890,18,14,30,19
Adnan Anwar,,,,,,,
Sunil Aryal,Dr,196,184,7,7,6,6
Alexander Baldwin,Dr,126,116,5,5,4,4
Alessio Bonti,Dr,403,212,6,5,5,4
Reda Bouadjenek,Dr Mohamed,368,315,10,10,11,11
Greg Bowtell,Dr,,,,,,
Feifei Chen,Dr,854,778,15,15,18,18
Michelle Cyganowski,,,,,,,
Robert Dew,Dr,,,,,,
Imali Dias,Dr,442,360,12,11,13,13
Atabak Elmi,Dr,382,294,9,9,9,9
Shahid Ferdous,Dr Hasan,447,374,10,10,12,10
Anuroop Gaddam,Dr,652,281,15,9,17,9
Alireza Hassani,,147,147,8,8,7,7
Damien Hutchinson,Dr,,,,,,
Jonathan Kua,Dr,247,243,3,3,2,2
Glory Lee,Dr,,,,,,
Xuequan Lu,Dr,239,225,9,9,9,8
Daniel Ma,Dr,,,,,,
Somaiyeh MahmoudZadeh,Dr,489,457,13,13,18,17
Sophie McKenzie,,322,202,9,8,8,7
Valeh Moghaddam,Dr,177,174,5,4,3,3
Bahar Nakisa,Dr,,,,,,
Ghari Neiat,Dr Azadeh,470,354,10,9,12,9
Jihong Park,Dr,1576,1555,16,16,30,30
Shiva Pokhrel,Dr,437,419,10,10,13,12
Sergey Polyakovskiy,Dr,,,,,,
Justin Rough,Dr,,,,,,
Atul Sajjanhar,Dr,826,276,11,8,17,6
Arash Shaghaghi,Dr,107,107,5,5,2,2
Keshav Sood,Dr,397,388,9,9,9,9
Rui Wang,Dr,,,,,,
Jason Wells,,248,95,8,5,7,2
Guy Wood-Bradley,Dr,12,9,2,2,0,0
Luxing Yang,Dr,2005,1509,25,24,36,35
(Leo) Zhang,Dr Yu,1475,1350,20,20,34,34
Ye Zhu,Dr,251,250,8,8,8,8
Mumtaz Ali,Dr,2517,2302,30,28,62,55
Francisco Cruz,Dr,,,,,,
Jie Ding,Dr,,,,,,
Rasul Esmaeilbeigi,Dr,77,76,3,3,3,3
Belinda Huang,Dr,,,,,,
Jay Jeong,Dr,,,,,,
Tariq Khan,Dr,763,676,17,17,24,22
Thai Doan,Dr Chuong,,,,,,
Sunny Lee,,,,,,,
Xufeng Lin,Dr,256,244,6,6,6,6
Ming Liu,Dr,,,,,,
Alexey Medvedev,Dr,610,588,10,10,11,10
Iynkaran Natgunanathan,Dr,1003,865,14,13,15,15
Thanh-Binh Nguyen,Dr,,,,,,
Tianrui Zong,Dr,,,,,,
Yevhen Zolotavkin,Dr,,,,,,
Amin Abken,Dr,62,60,5,5,1,0
Borui Cai,Dr,69,69,3,3,2,2
Grishma Khadka,Mr,,,,,,
Budi Kurniawan,Mr,,,,,,
Diaz Millan,Dr Reinier,82,64,6,6,4,3
Mendivez Vasquez,Mr Bruno,,,,,,
Jack Murley,Mr,,,,,,
Ashish Nanda,Dr,81,80,5,5,2,2
Patrick Scolyer-Gray,Dr,,,,,,
Youyang Qu,Mr,443,441,11,11,13,13
Nan Sun,Dr,,,,,,
Radhagayathri Udhayakumar,Dr,119,116,6,6,5,5
Di Wu,Dr,,,,,,
Roozbeh Zarei,Dr,137,109,7,5,3,3
Brendan Hill,Mr,,,,,,
Abid Adam,Adjunct Professor,,,,,,
Catherine Buhler,Adjunct Professor,,,,,,
Eshan Dissanayake,Adjunct Professor,,,,,,
Ben Doyle,Adjunct Professor,,,,,,
John Ellis,Adjunct Professor,,,,,,
Manohar Esarapu,Honorary Fellow,,,,,,
Patrick Fair,Adjunct Professor,,,,,,
David Fairman,Adjunct Professor,,,,,,
Mark Fitzgerald,Honorary Professor,,,,,,
Praveen Gauravaram,Adjunct Professor,,,,,,
Nigel Hedges,Adjunct Professor,,,,,,
Darren Kane,Adjunct Professor,,,,,,
Kerry Kirk,Honorary Fellow,,,,,,
Len Kleinman,Adjunct Professor,,,,,,
James Kotsias,Adjunct Professor,,,,,,
Berin Lautenbach,Adjunct Professor,,,,,,
Min Livanidis,Adjunct Professor,,,,,,
Phillip Magness,Adjunct Professor,,,,,,
Joseph Mathew,Adjunct Associate Professor,,,,,,
William Moran,Honorary Professor,,,,,,
Ana Novak,Honorary Associate Professor,,,,,,
Zahir Quettawala,Adjunct Professor,,,,,,
Anthony Robertshaw,Adjunct Associate Professor,,,,,,
Jamie Rossato,Adjunct Professor,,,,,,
Chadi Saliby,Adjunct Professor,,,,,,
Malcolm Shore,Adjunct Professor,,,,,,
Anthony Travers,Honorary Fellow,,,,,,
EJ Wise,Adjunct Professor,,,,,,
Fiona Ebdon,,,,,,,
Belinda Evans-Hunt,,,,,,,
Sheryl Pascoe,,,,,,,
Sheena Saunders,,,,,,,
Emmica Schlobohm,,,,,,,
Laura Wilson,,,,,,,
Sia Alavian,,,,,,,
Abbas Kudrati,Professor,,,,,,
Jesse Mcmeikan,,,,,,,
Thuy Nguyen,,,,,,,
Nghia Dang,,,,,,,
Justin Li,,,,,,,
SIT742-DataDictionary.xlsx
Dataset Description
                DATA SET NAME        HTWebLog_p1
                DATA SIZE        2,098,416,889 bytes
                DATE OF RELEASE        2021
                NO. OF FILES        120
                NO. OF ATTRIBUTES        15
                NO. OF DATA RECORDS        8438929
                DATA SOURCE PROVIDER        Hotel Tulip
                DATA PRIVACY        Publicly Available
                NOTES
                Prepared by:        [enter name here]
                Point of Contact:        [enter name, email address]
                Team Members:        [list team members if applicable]
                Data Type Name Convention        Main Type        Subtype
                MD        Metric Discrete        BIN - Binary
                MC        Metric Continous        DATE - Date/time
                                CURR - Currency
                CO        Categorical Ordinal
                CN        Categorical Nominal        DI - Dichotomous
                                STR - Free String
                                ID - Identification
                                URL - links such as URLs
                                ADDR - Address
Attribute Dictionary
        Attribute Name        Data Type        Data Subtype         Description        Examples        Additional otes
        date        MC        DATE        The date on which the activity occurred.                Default, Date
        time        MC        DATE        The time, in coordinated universal time (UTC), at which the activity occurred.                Default, Time
        s-sitename        CN                The Internet service name and instance number that was running on the client.                Service name and Instance number
        s-ip        CN        URL        The IP address of the server on which the log file entry was generated.                Default, Server IP Address
        cs-method        CN                The requested action, for example, a GET method.                Default, Method
        cs-uri-stem        CN        URL        The target of the action, for example, Default.htm.                Default, URI Stem
        cs-uri-query        CN        STR        The query, if any that the client was trying to perform. A Universal Resource Identifier (URI) query is necessary only for dynamic pages.                Default, URI Query
        s-port        CN                The server port number that is configured for the service.                Default, Server Port
        cs-username        CN                The name of the authenticated user who accessed your server. Anonymous users are indicated by a hyphen.                Default, User name
        c-ip        CN                The IP address of the client that made the request.                Default, Client IP Address
        cs(User-Agent)        CN        STR        The browser type that the client used.                Default, User Agent
        cs(Referrer)        CN        STR        The site that the user last visited. This site provided a link to the current site.                Referrer
        sc-status        CN                The HTTP status code.                Default, HTTP Status
        sc-substatus        CN                The sub status error code.                Default, Protocol Substatus
        sc-win32-status        CN                The Windows status code.                Win32 Status
SIT742Task1.ipynb
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "3D514Ei_kSUS"
},
"source": [
"# SIT742: Modern Data Science \n",
"**(2021 Assessment Task 01 - Data Manipulation)**\n",
"\n",
"---\n",
"- Please refer to the CloudDeakin for the detailed assessment requirements.\n",
"- Please submit to Clouddeakin before the due date.\n",
"- Students with difficulty in meeting the deadline because of illness, etc. must apply for an assignment extension (up to 3 days) no later than *12:00pm on 16/04/2021 (Friday)*.\n",
"\n",
"\n",
"Prepared by **SIT742 Teaching Team**\n",
"\n",
"\n",
"---\n",
"\n",
"
\n",
"Enter your information in the following cell. Please make sure you fill your Student ID and Name correctly. \n",
"
\n",
"\n",
"**Student Information:** Please fill your information below\n",
"\n",
"- Name: \n",
"- Student ID: \n",
"- Email: \n",
"- Lab Session and Tutor (for on campus students): \n",
"\n",
"---"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "1X7L24t43CoU"
},
"source": [
"# Part I - Web Log Data\n",
"\n",
"## Overview\n",
"\n",
"Hotel TULIP a five-star hotel located at Deakin University, and its CIO Dr Bear Guts has asked the Team-SIT742 team to analyse the weblogs files. As an employee for Hotel Tulip, working in the Information Technology Division, it is required to prepare a set of documentation for Team-SIT742 to allow them to understand the data being dealt with. Throughout this report, some source codes are to explore the weblog, which afterwards the information is presented to Dr Bear Guts in the format of a report.\n",
"\n",
"In this part, you are required to use give dataset to finish some required analysis, with the exploreation data analytics skills as well as visuilization skill.\n",
"\n",
"\n",
"You will be required to complete the coding to answer the questions with a neat and clean format, and you must keep outputs for code. Your commenting and adherence to code standards will also be considered when marking. Further information on Python standards, please visit https://www.python.org/dev/peps/pep-0008/ \n",
"\n",
"\n",
"**Note**: You are not necessary to stick to the partial code provided, and you can write your own code to implement the required tasks. But you should provide sufficient comments.\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "r85LNibZkSUZ"
},
"source": [
"\n",
"\n",
"## 1. Data ETL"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "HtL_9QR27_Iu"
},
"source": [
"### 1.1 Data Loading"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"id": "19EhpLspkSUZ"
},
"outputs": [],
"source": [
"import matplotlib.pyplot as plt\n",
"import numpy as np\n",
"import pandas as pd\n",
"import time\n",
"import datetime\n",
"from scipy import stats\n",
"import matplotlib"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jY2Br4cBN956"
},
"source": [
"
\n",
"\n",
"**Code**: \n",
" You are required to load Hotel TULIP data into dataframe df_ht and check how many files are loaded.\n",
"
\n",
" *Keep the outputs for code in your notebook.\n",
"
\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 38,
"metadata": {
"id": "IIB_xH-hOqEj",
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"120 files were loaded\n"
]
}
],
"source": [
"from zipfile import ZipFile\n",
"\n",
"field_names = [\n",
" \"date\",\n",
" \"time\",\n",
" \"s-sitename\",\n",
" \"s-ip\",\n",
" \"cs-method\",\n",
" \"cs-uri-stem\",\n",
" \"cs-uri-query\",\n",
" \"s-port\",\n",
" \"cs-username\",\n",
" \"c-ip\",\n",
" \"cs(User-Agent)\",\n",
" \"cs(Referer)\",\n",
" \"sc-status\",\n",
" \"sc-substatus\",\n",
" \"sc-win32-status\"\n",
"]\n",
"\n",
"data = []\n",
"with ZipFile(\"HTWebLog_p1.zip\") as zipfiles:\n",
" print(f'{len(zipfiles.namelist())} files were loaded')\n",
" file_list = zipfiles.namelist()\n",
" data = [pd.read_csv(file_name, \n",
" sep=' ',\n",
" comment='#',\n",
" engine='python',\n",
" na_values='-',\n",
" names=field_names)\n",
" for file_name in file_list]\n",
"df_ht = pd.concat(data)"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date 121\n",
"time 86372\n",
"s-sitename 1\n",
"s-ip 1\n",
"cs-method 6\n",
"cs-uri-stem 4761\n",
"cs-uri-query 1988\n",
"s-port 1\n",
"cs-username 0\n",
"c-ip 74548\n",
"cs(User-Agent) 4959\n",
"cs(Referer) 39703\n",
"sc-status 12\n",
"sc-substatus 4\n",
"sc-win32-status 14\n",
"dtype: int64"
]
},
"execution_count": 59,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ht.nunique()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Dyt9lwm_QKFV"
},
"source": [
"
\n",
"\n",
"**Code**: \n",
" Check the data statistics and general information by printing its top 5 rows.\n",
"
\n",
" *Keep the outputs for code in your notebook.\n",
"
\n",
"\n",
"
\n",
" \n",
"**Report**: \n",
" **Part I 1.1** Please include your result for this coding task into your SIT742-DataDictionary.xlsx, then add to your report - Part I with proper section title '1.1.1' and '1.1.2'.\n",
"
\n",
"
\n"
]
},
{
"cell_type": "code",
"execution_count": 118,
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"
\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"\n",
"
01234
date2006-11-01 00:00:002006-11-01 00:00:002006-11-01 00:00:002006-11-01 00:00:002006-11-01 00:00:00
time2021-04-20 00:00:082021-04-20 00:00:082021-04-20 00:00:082021-04-20 00:00:092021-04-20 00:00:09
s-sitenameW3SVC1W3SVC1W3SVC1W3SVC1W3SVC1
s-ip127.0.0.1127.0.0.1127.0.0.1127.0.0.1127.0.0.1
cs-methodGETGETGETGETGET
cs-uri-stem/Default.aspx/Tulip/home/en-us/home_index.aspx/Tulip/includes/js/CommonUtil.js/Tulip/common/common_style.aspx/Tulip/common/en-us/images/top_img.jpg
s-port8080808080
c-ip70.80.84.7670.80.84.7670.80.84.7670.80.84.7670.80.84.76
sc-status200200200200200
sc-substatus00000
sc-win32-status00000
\n",
"
"
],
"text/plain": [
" 0 1 \\\n",
"date 2006-11-01 00:00:00 2006-11-01 00:00:00 \n",
"time 2021-04-20 00:00:08 2021-04-20 00:00:08 \n",
"s-sitename W3SVC1 W3SVC1 \n",
"s-ip 127.0.0.1 127.0.0.1 \n",
"cs-method GET GET \n",
"cs-uri-stem /Default.aspx /Tulip/home/en-us/home_index.aspx \n",
"s-port 80 80 \n",
"c-ip 70.80.84.76 70.80.84.76 \n",
"sc-status 200 200 \n",
"sc-substatus 0 0 \n",
"sc-win32-status 0 0 \n",
"\n",
" 2 \\\n",
"date 2006-11-01 00:00:00 \n",
"time 2021-04-20 00:00:08 \n",
"s-sitename W3SVC1 \n",
"s-ip 127.0.0.1 \n",
"cs-method GET \n",
"cs-uri-stem /Tulip/includes/js/CommonUtil.js \n",
"s-port 80 \n",
"c-ip 70.80.84.76 \n",
"sc-status 200 \n",
"sc-substatus 0 \n",
"sc-win32-status 0 \n",
"\n",
" 3 \\\n",
"date 2006-11-01 00:00:00 \n",
"time 2021-04-20 00:00:09 \n",
"s-sitename W3SVC1 \n",
"s-ip 127.0.0.1 \n",
"cs-method GET \n",
"cs-uri-stem /Tulip/common/common_style.aspx \n",
"s-port 80 \n",
"c-ip 70.80.84.76 \n",
"sc-status 200 \n",
"sc-substatus 0 \n",
"sc-win32-status 0 \n",
"\n",
" 4 \n",
"date 2006-11-01 00:00:00 \n",
"time 2021-04-20 00:00:09 \n",
"s-sitename W3SVC1 \n",
"s-ip 127.0.0.1 \n",
"cs-method GET \n",
"cs-uri-stem /Tulip/common/en-us/images/top_img.jpg \n",
"s-port 80 \n",
"c-ip 70.80.84.76 \n",
"sc-status 200 \n",
"sc-substatus 0 \n",
"sc-win32-status 0 "
]
},
"execution_count": 118,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ht.head().T"
]
},
{
"cell_type": "code",
"execution_count": 41,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Imported data breakdown: \n",
"\n",
"Int64Index: 8438929 entries, 0 to 63745\n",
"Data columns (total 15 columns):\n",
" # Column Dtype \n",
"--- ------ ----- \n",
" 0 date object \n",
" 1 time object \n",
" 2 s-ip object \n",
" 3 cs-method object \n",
" 4 cs-uri-stem object \n",
" 5 cs-uri-query object \n",
" 6 s-port object \n",
" 7 cs-username float64\n",
" 8 c-ip float64\n",
" 9 cs(User-Agent) object \n",
" 10 cs(Referer) object \n",
" 11 sc-status object \n",
" 12 sc-substatus float64\n",
" 13 sc-win32-status float64\n",
" 14 time-taken float64\n",
"dtypes: float64(5), object(10)\n",
"memory usage: 1.0+ GB\n"
]
}
],
"source": [
"print(\"Imported data breakdown: \")\n",
"df_ht.info()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The most frequent IPs\n"
]
},
{
"data": {
"text/plain": [
"Series([], Name: c-ip, dtype: int64)"
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(\"The most frequent IPs\")\n",
"df_ht[\"c-ip\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 43,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The most frequent User Agents\n"
]
},
{
"data": {
"text/plain": [
"59.188.33.66 93769\n",
"210.184.71.81 92460\n",
"202.181.238.254 29934\n",
"158.132.12.80 18743\n",
"211.72.233.8 16319\n",
" ... \n",
"66.214.129.135 1\n",
"218.169.106.115 1\n",
"59.120.153.55 1\n",
"211.74.226.40 1\n",
"221.127.138.210 1\n",
"Name: cs(User-Agent), Length: 74548, dtype: int64"
]
},
"execution_count": 43,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(\"The most frequent User Agents\")\n",
"df_ht[\"cs(User-Agent)\"].value_counts()"
]
},
{
"cell_type": "code",
"execution_count": 48,
"metadata": {
"id": "1h7LqSGgQRUb"
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"The most frequent response code\n"
]
},
{
"data": {
"text/plain": [
"200.0 6073793\n",
"304.0 2137341\n",
"404.0 143641\n",
"206.0 72490\n",
"302.0 7368\n",
"500.0 2020\n",
"403.0 703\n",
"301.0 436\n",
"400.0 210\n",
"501.0 113\n",
"406.0 54\n",
"416.0 3\n",
"Name: sc-substatus, dtype: int64"
]
},
"execution_count": 48,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"print(\"The most frequent response code\")\n",
"df_ht[\"sc-substatus\"].value_counts()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "jDUDzs7lkSUa"
},
"source": [
"### 1.2 Data Cleaning"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "En0WOURqp7dB"
},
"source": [
"#### Remove all NAs from data"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Efxzawa7Xdv9"
},
"source": [
"\n",
"
\n",
"\n",
"**Code**: \n",
" 1. Check which columns have NAs,
\n",
" 2. For each of those columns, display the number of NA records,
\n",
" 3. emove all records with any NAs.\n",
"
\n",
" *Keep the outputs for code in your notebook.\n",
"
\n",
"\n",
"
\n",
" \n",
"**Report**: \n",
" **Part I 1.2** Please include your result for this coding task into your report Part I, with proper section title '1.2'.\n",
"
\n",
"
\n"
]
},
{
"cell_type": "code",
"execution_count": 61,
"metadata": {
"id": "GX3BeD361pTw"
},
"outputs": [
{
"data": {
"text/plain": [
"date 1\n",
"time 1\n",
"s-sitename 1\n",
"s-ip 1\n",
"cs-method 1\n",
"cs-uri-stem 1\n",
"cs-uri-query 7886533\n",
"s-port 1\n",
"cs-username 8438929\n",
"c-ip 1\n",
"cs(User-Agent) 3528\n",
"cs(Referer) 1309657\n",
"sc-status 757\n",
"sc-substatus 757\n",
"sc-win32-status 757\n",
"dtype: int64"
]
},
"execution_count": 61,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ht.isna().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"First dropping the columns with too many missing values"
]
},
{
"cell_type": "code",
"execution_count": 63,
"metadata": {},
"outputs": [],
"source": [
"df_ht.drop(['cs-uri-query', 'cs-username', 'cs(Referer)', 'cs(User-Agent)'],\n",
" axis=1, \n",
" inplace = True)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Dropping all the rows containing any `NaN`"
]
},
{
"cell_type": "code",
"execution_count": 65,
"metadata": {},
"outputs": [],
"source": [
"df_ht.dropna(inplace = True)"
]
},
{
"cell_type": "code",
"execution_count": 66,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date 0\n",
"time 0\n",
"s-sitename 0\n",
"s-ip 0\n",
"cs-method 0\n",
"cs-uri-stem 0\n",
"s-port 0\n",
"c-ip 0\n",
"sc-status 0\n",
"sc-substatus 0\n",
"sc-win32-status 0\n",
"dtype: int64"
]
},
"execution_count": 66,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ht.isna().sum()"
]
},
{
"cell_type": "code",
"execution_count": 64,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"date 1\n",
"time 1\n",
"s-sitename 1\n",
"s-ip 1\n",
"cs-method 1\n",
"cs-uri-stem 1\n",
"s-port 1\n",
"c-ip 1\n",
"sc-status 757\n",
"sc-substatus 757\n",
"sc-win32-status 757\n",
"dtype: int64"
]
},
"execution_count": 64,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"df_ht.isna().sum()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "mq3sWOXtrZhF"
},
"source": [
"## 2. Data Statistics Description"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "BJuh1nsirmOy"
},
"source": [
"### 2.1 Traffic Analysis"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "vzey2OZygD8u"
},
"source": [
"\n",
"
\n",
"\n",
"**Code**: \n",
" Discover on the traffics by analysing hourly requests, then plot it into Bar Chart.\n",
"
\n",
" *Keep the outputs for code in your notebook.\n",
"
\n",
"\n",
"
\n",
" \n",
"**Report**: \n",
" **Part I 2.1.A** Please include your result for this coding task into your report Part I, with proper section title '2.1.A'.\n",
"
\n",
"
\n"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "EpEeaqZtxIZg"
},
"source": [
"#### By day and plot \n",
"\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Defining date and time as `datetime` variables"
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [],
"source": [
"df_ht.date = pd.to_datetime(df_ht.date)\n",
"df_ht.time = pd.to_datetime(df_ht.time)"
]
},
{
"cell_type": "code",
"execution_count": 85,
"metadata": {},
"outputs": [],
"source": [
"hours = df_ht.time.dt.hour"
]
},
{
"cell_type": "code",
"execution_count": 89,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
""
]
},
"execution_count": 89,
"metadata": {},
"output_type": "execute_result"
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": []
},
{
"cell_type": "code",
"execution_count": 91,
"metadata": {
"id": "DAH1IrWbfQQW"
},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"
"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# Create a bar chart of the number of server requests by hour of the day\n",
"#\n",
"hours = df_ht.time.dt.hour.value_counts()\n",
"hours.plot.bar()\n",
"plt.title(\"Requests per Hour\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "aFEJDPvEy8ZR"
},
"source": [
"\n",
"
\n",
"\n",
"**Code**: \n",
" You are required to filter the hourly requests by removing any below 490,000 and above 400,000. (hourly_request_amount >= 400000 & hourly_request_amount <= 490000) \n",
"
\n",
" *Keep the outputs for code in your notebook.\n",
"
\n",
"\n",
"
\n",
" \n",
"**Report**: \n",
" **Part I 2.1.B** Please include your result for this coding task into your report, with proper section title '2.1.B'.\n",
"
\n",
"
\n"
]
},
{
"cell_type": "code",
"execution_count": 101,
"metadata": {
"id": "TLArAkrH0rig"
},
"outputs": [
{
"data": {
"image/png":...
SOLUTION.PDF

Answer To This Question Is Available To Download

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here