首页 文章 精选 留言 我的

精选列表

搜索[AI 双师课堂],共10000篇文章
优秀的个人博客,低调大师

课堂随笔1 - MOOC网站日志分析

大数据Clouder:MOOC网站日志分析 日志,log,事件记录网站日志:系统日志,程序日志 网站的系统访问日志,有通用格式 网站日志分析:(1)价值/重要性:运行,安全,运营,用户信息(2)流程:采集,处理,展现,结果 重要性:①网站运行状况(如网站PV,UV),②网站安全状况(如恶意攻击,密码暴力破解),③网站运营状况(如搜索引擎流量来源),④网站用户信息(如操作系统,浏览器)。 流程:①数据采集(Tomcat、Nginx、使用程序自定义采集),②数据处理(清理、转换、抽取,SQL、Java、Python、Hadoop),③数据展现(图表化、Tableau、D3.js、Python),④结果处理(程序优化、服务器调整、SEO优化)。 Nginx:Nginx(engine x)是一个高性能的HTTP和反向代理服务器。用户请求分发,简单的负载均衡。默认不开启访问日志。修改配置文件。开启访问日志,配置访问日志格式。Tomcat:Tomcat服务器是一个免费的开放源代码的Web应用服务器。默认不开启访问日志。修改配置文件。 正则表达式,提取属性HTTP请求类型:GET,POST。判断是否为恶意攻击的依据:大量的404状态的HTTP请求。 网站用户访问日志清理:用户的IP,访问时间,请求链接,来源链接,客户端信息。 网站的流量分析:IP(独立IP),PV(访问量),UV(独立客户),访问趋势图。网站的来源分析:访问来源分析,搜索引擎来源。网站的访问分析:访问链接TopN,恶意攻击IP。网站的访客分析:访客地域分布,访客浏览器,访客操作系统,访客网络运营商。 网络优化:程序优化,服务器优化,搜索引擎推广。 MaxCompute(本文中简称MC),Quick BI MC概述:大数据计算服务(MaxCompute,原名ODPS)由阿里云自主研发,提供针对TB/PB级数据、实时性要求不高的数据仓库解决方案。MC产品特点:分布式架构,简单易用,安全可靠,管理与授权。MC概念名词:项目空间project,表table,分区partition,任务task,资源resource。MC基础架构,ODPS:计算层,逻辑层,接入层,客户端。 Quick BI使用哪些技术进行数据分析:数据仓库技术,线上分析技术,数据挖掘,数据展现技术。Quick BI:支持多种源数据,成本低,速度快,易操作,安全。Quick BI实现:数据分析,数据自助获取,业务数据探查,报表制作,数据门户搭建。Quick BI优势和价值:无缝集成云上数据库,图表,分析(多维度数据分析),快速搭建数据门户,实时,安全管控数据权限。 MOOC网站用户访问日志分析 网站运行过程中遇到的问题:①用户抱怨网站加载内容很慢,②用户抱怨网站样式错乱,③领导认为课程销量不行,④网站偶尔发生崩溃。 使用Java对文本预处理:增加一个自增长的ID列。由于访问时间精度不够,(只有秒级别,如果是毫秒就不用增加ID列了)。 提取IP中的信息:城市,网络服务商。 纯真IP数据库:是全国的IP段,只提供IP地址查询。收集全国和主要国家地区的几乎所有IP段对应的城市信息。之前IPQQ对应城市就是利用这个数据库来完成的,是目前公开的更新最快最全的IP地址库 。就是一个可以查询ip地址的软件。属性:IP起,IP止,地址信息,运营商。 IP转数字:a.b.c.d=>a256256256+b256256+c256+d 使用tunnel命令行上传数据到MC:①下载odpscmd客户端②配置,odpscmd_public->conf->odps_config.ini:项目名,Access Key ID ,Access Key Secret③开启,odpscmd_public->bin->odpscmd.bat④使用建表: create tabel t_web_access_log_content(content string); --日志文件 create table t_cz_ip_content(content string); --IP库文件使用tunnel上传数据: tunnel upload -fd "NoDelimiter" D:access.log t_web_access_log_content; tunnel upload -fd "NoDelimiter" D:ip.txt t_cz_ip_content;查看: show tables; select * from t_test limit 5; 正则表达式 使用正则表达式提取:①日志属性(MOOC网站的用户访问日志),②IP属性(纯真IP数据库),③省信息和有效访问链接(省、自治区、直辖市、港澳),④访问时间处理和来源分类(self、google、baidu、bing、360),⑤访问客户端信息处理(操作系统、浏览器) ,⑥访问链接TopN(group by url --使用url分组,limit 10 --显示前10个),⑦每个访客的第一条日志(独立访客,即独立客户端),⑧IP黑名单(status="404",group by ip,count>10) 。注意:在提取IP时,将IP的第一个段单独提取存放,使用IP的第一个段可以进行表关联的优化,(因为目前还没有运营商的IP是跨第一个段的)。有了①②,就可以从IP表中查询城市和运营商信息。MaxCompute不支持非等值join,可以使用MapJoin,但mapjoin的表不能太大,不能超过512MB,(默认的join是reduce join)。对IP和客户端信息一起group by来保证独立访客,即独立客户端。判断是否为恶意攻击的依据:大量的404状态的HTTP请求。 对应的沙箱实验 网址:https://edu.aliyun.com/lab/courses/9f0e0b2dd2984081b17b0fd494064233/detail?purchaseRecordId=f49454db14b143618e661c654f883830实验环境:JAVA环境,odpscmd客户端,DataWorks->项目->进入工作区->IDE页面。实验步骤:(1)使用MaxCompute处理数据,(2)使用Quick BI展现数据。 (1)使用MC处理数据:1、对日志文件进行预处理:增加一个自增长的ID列。在每行最前面加上一个ID,然后以空格隔开。方法一:采用Java编程语言处理。方法二:使用excel处理(数据量不大的情况下)。注意:Tab键是tabulator(制表键)。①使用excel打开日志文件access.log。②在第一列前插入一列新列->在A1单元格中填入数字“1”->全选选中A列->点击填充->序列->终止值:61279。③在C1单元格中写入函数公式:=CONCATENATE(A1," ",B1)->回车->选中C1单元格,在其右下角鼠标由空心加号变成实心加号处双击->计算出全部C列结果。④将整个C列复制到文本文件,保存为log.txt。 2、使用tunnel命令行上传数据到MC中: CREATE TABLE t_web_access_log_content (content STRING); CREATE TABLE t_cz_ip_content (content STRING); tunnel upload -fd "NoDelimiter" D:testdatalog.txt t_web_access_log_content; tunnel upload -fd "NoDelimiter " D:testdataip.txt t_cz_ip_content; show tables; list tables; select * from t_web_access_log_content limit 2; select * from t_cz_ip_content limit 2;注意:如果中文不能正常显示是展示的编码不对,可以在启动入口odpscmd.bat中的开头加入新行:chcp 936,然后重新打开执行查询,当然也可以不处理,因为对数据没影响,只是展示问题。 3、DataWorks->项目->进入工作区->IDE页面->新建任务->工作流任务,日志处理,手动调度->点击创建->拖拽节点组件,虚节点、ODPS_SQL组件->写入sql->点击右上角的自动布局->保存->提交->测试运行->点击前往运维中心,可以看到提交的任务->点击示例名称,可以看到当前执行流程,查看跑出的数据。注意:绿色表示执行完成,蓝色表示正在执行,黄色表示等待,红色表示执行失败。刷新页面,查看执行流程,执行过程大概在10分钟以内,如果全是绿色表全部执行完毕且成功。注意:在使用MC做任务时,节点的逻辑及sql代码,很重要,一旦有错误会直接导致得到的数据存在质量问题,导致数据分析的错误,可以利用元数据来查找管理数据质量问题。 (2)使用Quick BI展现数据:(标准版)1、添加数据源显示名称:网站日志分析注意:添加之前可以连接测试一下,通过即可。注意:在Quick BI中使用MaxCompute来新建数据源,在新建好的数据源里包含了这个项目空间中的所有表。 2、创建、编辑数据集为t_web_access_log,t_web_access_log_url_top,t_web_access_log_first,t_web_access_log_ip_black四个表分别创建四个数据集。注意:点击编辑,系统默认将表的字符串类型(Str.)属性归类到维度属性,数值类型(No.)字段归类到度量。注意:编辑完成后,要保存。 3、新建仪表板注意:点击全局设置,可以去除水印。注意:经常保存以免操作丢失。 新建计算字段(维度)->名称:运营商,数据类型:文本,表达式: case when instr([isp],'电信')>0 then '电信' when instr([isp],'移动')>0 then '移动' when instr([isp],'联通')>0 then '联通' else '其他' end新建计算字段(维度)->名称:访问来源,数据类型:文本,表达式: case when [搜索引擎] = 'self' then '直接访问' when [搜索引擎] = 'other' then '其他链接' else '搜索引擎' end

优秀的个人博客,低调大师

杨老师课堂之ArrayList集合解析

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kese7952/article/details/80542813 ArrayList集合常用方法的解析 ArrayList集合常用方法的解析 1.概述 1.1集合的创建 1.2 集合中常用方法 1.3 集合中常用方法 1.4 集合中的常用方法补充 1.概述 ​ 在前面我们学习了数组,数组可以保存多个元素,但在某些情况下无法确定到底要保存多少个元素,此时数组将不再适用,因为数组的长度不可变。例如,要保存一个学校的学生,由于不停有新生来报道,同时也有学生毕业离开学校,这时学生的数目很难确定。为了保存这些数目不确定的元素,JDK中提供了一系列特殊的类,这些类可以存储任意类型的元素,并且长度可变,统称为集合。在这里,我们先介绍ArrayList集合,其他集合在后续课程中学习。 ​ ArrayList集合是程序中最常见的一种集合,它属于引用数据类(类)。在ArrayList内部封装了一个长度可变的数组,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储这些元素,因此可以将ArrayList集合看作一个长度可变的数组。 2. 1.1集合的创建 创建集合的常用格式在此说明一下: 导包:import java.util.ArrayList; 创建对象:与其他普通的引用数据类型创建方式完全相同,但是要指定容器中存储的数据类型: ArrayList<要存储元素的数据类型>变量名 = new ArrayList<要存储元素的数据类型>(); 1、集合中存储的元素,只能为<>括号中指定的数据类型元素; 2、“<要存储元素的数据类型>”中的数据类型必须是引用数据类型,不能是基本数据类型; 我们通过举几个例子,来明确集合的创建方式: 存储String类型的元素 ArrayList list = new ArrayList(); 存储int类型的数据 ArrayList list = new ArrayList(); 存储Phone类型的数据 ArrayListlist = new ArrayList(); 1.2 集合中常用方法 ​ 接下来,我们来学习下ArrayList集合提供的一些常用方法,如下表: 通过代码演示上述方法的使用:ArrayListDemo01.java package cn.javabs.list.demo; import java.util.ArrayList; public class ArrayListDemo01 { public static void main(String[] args) { // 创建ArrayList集合 ArrayList<String> list = new ArrayList<String>(); // 向集合中添加元素 list.add("stu1"); list.add("stu2"); list.add("stu3"); list.add("stu4"); // 获取集合中元素的个数 System.out.println("集合的长度:" + list.size()); // 取出并打印指定位置的元素 System.out.println("第1个元素是:" + list.get(0)); System.out.println("第2个元素是:" + list.get(1)); System.out.println("第3个元素是:" + list.get(2)); System.out.println("第4个元素是:" + list.get(3)); } } 代码运行后截图: 1.3 集合中常用方法 通过集合遍历,得到集合中每个元素,这是集合中最常见的操作。集合的遍历与数组的遍历很像,都是通过索引的方式,集合遍历方式如下:ArrayListDemo02.java 1 package cn.javabs.list.demo; 2 import java.util.ArrayList; 3 public class ArrayListDemo02 { 4 public static void main(String[] args) { 5 //创建ArrayList集合 6 ArrayList<Integer> list = new ArrayList<Integer>(); 7 //添加元素到集合 8 list.add(13); 9 list.add(15); 10 list.add(22); 11 list.add(29); 12 //遍历集合 13 for (int i = 0; i < list.size() ; i++) { 14 //通过索引,获取到集合中每个元素 15 int n = list.get(i) ; 16 System.out.println(n); 17 } 18 } 19 } 上述代码中,第5行定义了一个可以存储int元素的集合;第7-10行,实现将int类型数值存储到集合中; ​ 第12-16行,实现遍历集合元素。这里要强调一点,get方法返回值的类型为集合中元素的类型。 1.4 集合中的常用方法补充 ArrayList集合提供的一些常用方法,如下表: boolean add(int index, Object obj) 功能:在集合中指定index位置,添加新元素obj 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用add(1,“javaWeb”)后,集合list中的元素为[“java”,“javaWeb”,“JavaEE”]。 Object set(int index, Object obj) 功能:用指定元素obj替代集合中指定index位置的元素 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用set(0,“javaWeb”)后,集合list中的元素为[“javaWeb”,“JavaEE”]。 Object remve(int index) 功能:从集合中删除指定index处的元素,返回该元素 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用remove(0)后,集合list中的元素为[“JavaEE”],返回值为“java”。 void clear() 功能:清空集合中所有元素 功能说明:假设集合list中有元素[“java”,“javaEE”],当使用clear()后,集合list中的元素为空[ ]。 作者: 杨校 出处: https://blog.csdn.net/kese7952 分享是快乐的,也见证了个人成长历程,文章大多都是工作经验总结以及平时学习积累,基于自身认知不足之处在所难免,也请大家指正,共同进步。 本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 如有问题, 可邮件(397583050@qq.com)咨询。

优秀的个人博客,低调大师

pythonY轴

import matplotlib.pyplot as plt import numpy as np x = np.arange(0., np.e, 0.01) y1 = np.exp(-x) y2 = np.log(x) fig = plt.figure() sns.set_style('white') ax1 = fig.add_subplot(111) ax1.plot(x, y1) ax1.set_ylabel('Y values for exp(-x)') ax1.set_title("Double Y axis") ax2 = ax1.twinx() # this is the important function ax2.plot(x, y2, 'r') ax2.set_xlim([0, np.e]) ax2.set_ylabel('Y values for ln(x)') ax2.set_xlabel('Same X for both exp(-x) and ln(x)') plt.show() fig.savefig('doubleY.pdf') # 生成画布, 并设定标题 plt.figure(figsize=(8, 6), dpi=80) plt.grid(True) # 画图的另外一种方式 ax_1 = plt.subplot(111) ax_1.plot(x, y_cos, color="blue", linewidth=2.0, linestyle="--", label="cos") ax_1.legend(loc="upper left", shadow=True) # 设置Y轴(左边) ax_1.set_ylabel("cosy") ax_1.set_ylim(-1.0, 1.0) ax_1.set_yticks(np.linspace(-1, 1, 9, endpoint=True)) # 画图的另外一种方式 ax_2 = ax_1.twinx() ax_2.plot(x, y_sin, color="green", linewidth=2.0, linestyle="-", label="sin") ax_2.legend(loc="upper right", shadow=True) # 设置Y轴(右边) ax_2.set_ylabel("siny") ax_2.set_ylim(-2.0, 2.0) ax_2.set_yticks(np.linspace(-2, 2, 9, endpoint=True)) # 设置X轴(共同) ax_1.set_xlabel("x") ax_1.set_xlim(-4.0, 4.0) ax_1.set_xticks(np.linspace(-4, 4, 9, endpoint=True)) # 图形显示 plt.show()

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

用户登录
用户注册