数据分析1

一、常用数据处理模块Numpy

Numpy常用于高性能计算,在机器学习常常作为传递数据的容器。提供了两种基本对象:ndarray、ufunc。

ndarray具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组

ufunc提供了对数组快速运算的标准数学函数。

ndarry

创建

创建一维和二维数组,显示其属性值

import numpy as np
# 创建一维数组和二维数组,显示其属性值
a1 = np.array([1,2,3,4,3,5,6,9])
print(a1)
a2 = np.array([[1,2,3], [4,5,6], [7,8,9]])
print(a2)
# 特殊的ndarray
a3 = np.arange(1,100,5)
print('a3:\n', a3)
a4 = np.linspace(1,100,5)
print('a4:\n', a4)
a5 = np.logspace(1,3, 2)
print('a5:\n', a5)
a6 = np.logspace(0, 9, 10, base=2)
print('a6:\n', a6)
a7 = np.zeros((3,4))
print('a7:\n', a7)
a8 = np.eye(5)
print('a8:\n', a8)
a9 = np.ones((2,3))
print('a9:\n', a9)
a10 = np.diag([1,2,3,5])
print('a10:\n', a10)

结果

arange等差数列(开始值,终值,步长)
linspace等差数列(开始值,终值,元素数量)
logspace(a,b,c,base=d)等比数列(10的a次方到10的b次方共c个,基d默认为10)
zeros全为0的矩阵
ones全为1的矩阵
eye单位矩阵(对角线元素为1,其余为0)
diag对角矩阵(对角线元素为特定值,其余为0)

索引与切片

import numpy as np
# 一维数组的索引和切片
a1 = np.arange(10)
print('a1:\n', a1)
print(a1[5])
print(a1[3:6])
print(a1[:-1])
print(a1[5:1:-2])# 二维数组的索引和切片
a2 = np.array([[11,12,13,14,15], [21,22,23,24,25], [31,32,33,34,35]])
print('a2:\n', a2)
print(a2[0,3:5])
print(a2[1:,2:])
print(a2[:,2:])

设置形状

import numpy as np
# 设置数组形状
a = np.arange(12)
print('生成一个一维数组a:\n', a)
a = a.reshape(3,4)
print(a)
a.resize(2,6)
print(a)
a.shape = (4,3)
print(a)

展平

import numpy as np
# 展平数组
a = np.arange(12).reshape(3,4)
print('生成一个3*4数组a:\n',a)
b = a.ravel()
print('按行展平a:',b)
c = a.flatten('F')
print('按行展平a:',c)

排序

import numpy as np
a = np.array([[1,12,3,9],[2,4,6,8],[10,11,7,5]])
print(a)
print('调用sort函数')
print(np.sort(a))
print('按列排序:')
print(np.sort(a,axis = 0))# 在sort函数种排序字段
dt = np.dtype([('name','S10'),('age',int)])
ar = np.array([('fang', 26),('jie', 24),('ahao', 25),('ming', 22),('ajie', 28),('quan', 19)],dtype=dt)
print('原数组:\n',ar)
print('按name排序:\n')
print(np.sort(ar, order='name'))
print('按age排序:\n')
print(np.sort(ar, order='age'))

搜索

import numpy as np
x = np.arange(9).reshape(3,3)
print(x)
print('大于3的元素的索引:')
y = np.where(x>3)
print(y)
print('使用这些索引搜索满足要求的元素')
print(x[y])print('返回满足要求的元素')
condition = np.mod(x,2) == 0
print(np.extract(condition,x))

ufunc

算术运算、三角运算、集合运算、比较运算、逻辑运算、统计运算。

计算矩阵面积

import numpy as np
# 计算矩阵乘积(左上为1*5+2*7=19)
a = [[1,2],[3,4]]
b = [[5,6],[7,8]]
print(np.matmul(a,b))

结果:

[[19 22]
 [43 50]]

注:矩阵面积为左边的行乘右边的列,详见线性代数。结果的左上角19 = 1*5+2*7

二、常用数据处理模块Pandas

Pandas是基于Numpy创建的,为Python提供高性能、易使用的数据结构和数据分析工具。主要有Series和DataFrame

Series:基本数据结构,一维标签数组,能够保存任何数据类型

DataFrame:基本数据结构,一般为二维数组

Series

创建

pandas.Series(一维数组,数据索引标签(默认从0开始),数据类型,名称)

import numpy as np
import pandas as pd
# 用ndarray创建Series数据对象
print(pd.Series(np.arange(5),index=['a','b','c','d','e']))
# 用dict创建Series数据对象
print(pd.Series({'y':84,'h':94, 'w':96}))
# 用list创建Series数据对象
print(pd.Series([10,20,30],index=['a','b','c']))

数据访问

import pandas as pd
import numpy as np
data = np.arange(5)
s = pd.Series(data,index=['a','b','c','d','e'])
print(s)
print(s['b'])
s['c'] = 75
print(s)

 DataFrame

创建

import numpy as np
import pandas as pd
dict1 = {'col1':[0,1,2,3],'col2':[4,5,6,7]}
print(pd.DataFrame(dict1))
list1 = [[30,45],[65,76],[25,86]]
print(pd.DataFrame(list1, index=['a','b','c'],columns=['A','B']))

访问

import numpy as np
import pandas as pd
dict1 = {'col1':[0,1,2,3],'col2':[4,5,6,7]}
print(pd.DataFrame(dict1))
list1 = [[30,45],[65,76],[25,86]]
print(pd.DataFrame(list1, index=['a','b','c'],columns=['A','B']))

增、删、改

import pandas as pd
dict = {'y':[90,76,82,61,62,72],'a':[75,73,86,85,91,76],'b':[66,64,74,89,85,90]}
d = pd.DataFrame(dict)
print(d)
d['y'] = [80,82,86,92,95,77]
d['g'] = [90,96,85,84,83,93]
print(d)
d.drop(['y','g'],axis=1,inplace=True)
print(d)

三、常用数据可视化模块Matplotlib

一个2D绘图库。

matplotlib是最基础的扩展包,为pandas、seaborn提供基础绘图概念与语法。

它虽然不能直接提供绘制折线图的函数,但可以借助散点函数绘制折线图。

在我看来,它与MATLAB相比虽然需要手工导入函数,但可以与其他库配合使用。

import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif'] = ['SimHei']  # 用来正常显示中文标签
plt.rcParams['axes.unicode_minus'] = False    # 用来正常显示负号
month = ['一月','二月','三月','四月','五月']
sales_amounts = [26, 75, 89, 56, 64]
month_index = range(len(month))
fig = plt.figure()
ax1 = fig.add_subplot(1,1,1)
ax1.bar(month_index, sales_amounts,align='center',color='darkblue')
ax1.xaxis.set_ticks_position('bottom')
ax1.yaxis.set_ticks_position('left')
plt.xticks(month_index,month,rotation=0,fontsize='small')
plt.xlabel('月份')
plt.ylabel('销售额')
plt.title('每个月的销售额')
plt.savefig('matplotlib336.png')

四、数据收集、整理与清洗

数据收集

方法:

1.通过现有网络平台进行数据抽取而获得数据。

2.利用设备收集。利用各类传感器从系统外部收集数据并输入到系统内部。

3.系统日志采集方法。

4.网络数据采集方法。

以爬虫为例介绍如何从网络获取数据。

爬虫通过模拟是计算机对服务器端发起Request请求,接受服务器端的Response回应并解析,提取得到所需信息。

通过Python程序进行网络爬虫获取相关数据主要涉及3个Python库:Requests、Lxml、BeautifulSoup。

①Requests库的作用主要是请求网站获取网页数据。

import requests
res = requests.get('http://www.baidu.com')
print(res)
print(res.text)

②Lxml为XML解析库,同时很好的支持HTML文档的解析功能,除了能直接读取字符串,也能从文件中提取内容。

③BeautifulSoup库用于解析Requests库请求的网页,并把网页源代码解析为Soup文档,以便过滤和提取数据。

例:爬取《天工开物》

from urllib.request import urlopen
url = 'https://www.gutenberg.org//files/25273/25273-0.txt'
text = urlopen(url).read()
text = text.decode('utf-8')
print(len(text))
text1 = text[596:733]
print(text1)
print()import opencc
cc = opencc.OpenCC('t2s')
print(cc.convert(text1))

 例:爬取豆瓣图书TOP250的信息

from lxml import etree
import requests
import csv
fp = open('D:/pythoncode/aiSelf/P114book.csv','wt',newline="", encoding='utf-8')
writer = csv.writer(fp)
writer.writerow(('name','url','author','publisher','date','price','rate','comment'))
urls = ['https://book.douban.com/top250?start={}'.format(str(i)) for i in range(0,250,25)]
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/135.0.0.0 Safari/537.36 Edg/135.0.0.0'
}
for url in urls:html = requests.get(url, headers=headers)selector = etree.HTML(html.text)infos = selector.xpath('//tr[@class="item"]')for info in infos:name = info.xpath('td/div/a/@title')[0]url = info.xpath('td/div/a/@href')[0]book_infos = info.xpath('td/p/text()')[0]author = book_infos.split('/')[0]publisher = book_infos.split('/')[-3]date = book_infos.split('/')[-2]price = book_infos.split('/')[-1]rate = info.xpath('td/div/span[2]/text()')[0]comments = info.xpath('td/p/span/text()')comment = comments[0] if len(comments)>0 else '空'writer.writerow((name,url,author,publisher,date,price,rate,comment))
fp.close()
print('ok')

其他必需知识

user-agent的获取

进入目标网页,按F12或右键检查,进入控制台,找到网络(蓝色框),刷新网页后输入user(红色框)找到user-agent(绿色框),复制。

响应状态码

1xx服务器接收客户端消息,但没有接受完成,等待一段时间后发送的
2xx成功
3xx重定向
4xx客户端错误
5xx服务器端错误

 Requests库的七个主要方法

方法说明对应HTTP的
requests.request()构造一个请求,支撑以下各个方法的基础方法
requests.get()获取HTML网页的主要方法GET
requests.head()获取HTML头信息的方法HEAD
requests.post()向HTML提交POST请求的方法POST
requests.put()向HTML提交PUT请求的方法PUT
requests.patch()向HTML提交局部修改请求PATCH
requests.delete()向HTML提交删除请求DELETE

Response对象的属性

属性说明
r.status_codeHTTP请求的返回状态,200连接成功,404连接失败
r.textHTTP相应内容的字符串形式,即url对应的页面内容
r.encoding从HTTP header中猜测的相应内容编码方式
r.apparent_encoding从内容中分析出的相应内容编码方式(备选编码方式)
r.contentHTTP相应内容的二进制形式

Requests库的异常

异常说明
requests.ConnectionError

网络连接错误异常,

如DNS查询失败、拒绝连接等

requests.HTTPErrorHTTP错误异常
requests.URLRequiredURL缺失异常
requests.TooManyRedirects超过最大重定向次数,产生重定向异常
requests.ConnectTimeout连接远程服务器超时异常
requests.Timeout请求URL超时,产生超时异常

Python读写文件模式汇总

基本打开方式
模式

描述

文件存在

文件不存在

r只读打开文件报错(FileNotFoundError)
w只写清空文件创建新文件
a追加从末尾写入创建新文件
x排他创建报错(FileExistsError)创建新文件
组合模式
模式描述
r+读写(文件必须存在)
w+读写(清空文件或创建新文件)
a+读写(从末尾追加或创建新文件)
二进制模式

以上模式后加b,如rb,rb+,ab+。表示二进制模式。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/80896.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

DeepSeek智能时空数据分析(六):大模型NL2SQL绘制城市之间连线

序言:时空数据分析很有用,但是GIS/时空数据库技术门槛太高 时空数据分析在优化业务运营中至关重要,然而,三大挑战仍制约其发展:技术门槛高,需融合GIS理论、SQL开发与时空数据库等多领域知识;空…

2023ICPC合肥题解

文章目录 F. Colorful Balloons(签到)E. Matrix Distances(思维小结论)J. Takeout Delivering(最短路)G. Streak Manipulation(二分dp)C. Cyclic Substrings(回文自动机) 题目链接 F. Colorful Balloons(签到) int n;cin>>n;for(int i1;i<n;i) cin>>s[i];map<…

数字技术驱动下教育生态重构:从信息化整合到数字化转型的路径探究

一、引言 &#xff08;一&#xff09;研究背景与问题提出 在当今时代&#xff0c;数字技术正以前所未有的速度和深度渗透到社会的各个领域&#xff0c;教育领域也不例外。从早期的教育信息化整合到如今的数字化转型&#xff0c;教育系统正经历着一场深刻的范式变革。 回顾教…

terraform 动态块(Dynamic Blocks)详解与实践

在 Terraform 中&#xff0c;动态块&#xff08;Dynamic Blocks&#xff09; 是一种强大的机制&#xff0c;允许你根据变量或表达式动态生成配置块&#xff0c;避免重复编写相似的代码。这在处理需要重复定义的结构&#xff08;如资源参数、嵌套配置&#xff09;时特别有用。以…

Unity3D引擎框架及用户接口调用方式相关分析及汇总

分析目的 目前外网3D手游绝大部基于Unity3D引擎进行开发,Unity3D引擎属于商业引擎,引擎整理框架的运行机制较为神秘,本文介绍Unity引擎框架、对象组织方式、用户接口与引擎交互方式等原理,通过本文的分析和介绍可了解Unity3D框架中大致执行原理。 实现原理 Unity引擎作为…

react-09React生命周期

1.react生命周期&#xff08;旧版&#xff09; 1.1react初始挂载时的生命周期 1:构造器-constructor // 构造器constructor(props) {console.log(1:构造器-constructor);super(props)// 初始化状态this.state {count: 0}} 2:组件将要挂载-componentWillMount // 组件将要挂载…

【NVM】管理不同版本的node.js

目录 一、下载nvm 二、安装nvm 三、验证安装 四、配置下载镜像 五、使用NVM 前言&#xff1a;不同的node.js版本会让你在使用过程很费劲&#xff0c;nvm是一个node版本管理工具&#xff0c;通过它可以安装多种node版本并且可以快速、简单的切换node版本。 一、下载nvm htt…

八大排序——冒泡排序/归并排序

八大排序——冒泡排序/归并排序 一、冒泡排序 1.1 冒泡排序 1.2 冒泡排序优化 二、归并排序 1.1 归并排序&#xff08;递归&#xff09; 1.2 递归排序&#xff08;非递归&#xff09; 一、冒泡排序 1.1 冒泡排序 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换…

区块链随学随记

前情提要&#xff1a;本人技术栈为ganachehardhatpython ganache提供的是本地的区块链环境&#xff0c;相当于模拟以太坊&#xff0c;这样可以允许多个账户在本机交互。hardhat和remix都是区块链ide&#xff0c;用于编写和部署合约助记词有个数规定&#xff0c;只有满足这些个数…

Android原生开发基础

Android实战 Android 原生开发基础 知识点1 介绍了解2 系统体系架构3 四大应用组件4 移动操作系统优缺点5 开发工具6 配置工具7 下载相关资源8JDK下载安装流程9配置好SDK和JDK环境10 第一个Hello word11 AS开发前常用设置12模拟器使用运行13 真机调试14 AndroidUI基础布局15 加…

网页版 deepseek 对话问答内容导出为 PDF 文件和 Word 文件的浏览器插件下载安装和使用说明

文章目录 网页版 deepseek 浏览器扩展应用程序插件1. 预览效果2. 功能介绍3. 浏览器扩展应用程序下载3.1. 下载方式13.2. 下载方式24. 安装教程4.1. Chrome 浏览器安装步骤4.2. Edge 浏览器安装步骤5. 使用说明网页版 deepseek 浏览器扩展应用程序插件 1. 预览效果 预览效果 导…

DBdriver使用taos数据库

首先创建连接 连接后比如数据库里有三个库 选择其中的hypon 选中localhost&#xff0c;右键sql编辑器&#xff0c;打开sql控制台 就插入了一条数据

【前端】【面试】如何实现图片渐进式加载?有几种方法

前端图片渐进式加载 一、技术原理解析 渐进式加载是通过分阶段、按需加载图片&#xff0c;以提升用户体验和页面性能的优化技术。主要包括以下实现方式&#xff1a; 懒加载&#xff1a;基于IntersectionObserver API&#xff0c;当图片进入浏览器视口时才发起加载请求&#…

Spring Boot 中的条件注解

Spring Boot条件注解的汇总&#xff1a; 注解作用判断依据使用场景ConditionalOnBean容器中存在指定Bean时&#xff0c;被注解的配置或Bean定义生效指定Bean在容器中存在依赖其他已存在Bean时配置相关功能ConditionalOnCheckpointRestore在特定检查点恢复相关条件满足时生效满…

leetcode11-盛水最多的容器

leetcode 11 思路 问题分析 拆解问题&#xff0c;面积 底 * 高 宽度&#xff1a;两个竖直线之间的距离&#xff0c;显然是 right - left高度&#xff1a;容器的水位受限于较短的那根竖直线的高度&#xff0c;所以高度为 min(height[left], height[right]) 本题其实很容易…

HTTP:十二.HTTPS

HTTPS 概述 超文本传输安全协议(英语:HyperText Transfer Protocol Secure,缩写:HTTPS;常称为HTTP over TLS、HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,利用TLS加密数据包。 HTTPS的主要目的是提供对网站服务器…

MySQL数据库(14)—— 使用C操作MySQL

目录 一&#xff0c;下载库 二&#xff0c;安装库 三&#xff0c;使用库 3.1 连接数据库 3.2 发送SQL 3.3 获取结果 问题&#xff1a;为什么不使用C&#xff1f; 解答&#xff1a;使用C的库已经可以完成绝大部分MySQL操作了&#xff0c;并且C的库的使用更加复杂&#xff…

Redis故障防御体系:构建七层免疫系统的设计哲学

当Redis遭遇写入阻塞或服务崩溃时&#xff0c;本质上是系统边界的多重防御机制被击穿。本文摒弃碎片化的解决方案&#xff0c;从系统工程的全局视角&#xff0c;构建七层递进式防御体系&#xff0c;揭示高可用架构的深层设计逻辑。 第一层&#xff1a;动态资源调度 —— 内存的…

在线文本客服系统核心功能解析

在线文本客服系统核心功能解析 在互联网大厂的Java求职者面试中&#xff0c;经常会被问到关于在线文本客服系统的实现和设计。本文通过一个故事场景来展示这些问题的实际解决方案。 第一轮提问 面试官&#xff1a;马架构&#xff0c;欢迎来到我们公司的面试现场。请问您对在…

学成在线。。。

一:讲师管理 介绍:可以实现对讲师的分页展示,多条件组合分页查询,对讲师的添加,修改,删除操作。 针对于添加来说,使用requestBody注解,搭配postmapping接收数据,使用service层的对象,调用mapper方法,向数据库中保存数据。 修改: 先根据讲师id,查询出讲师,再去…