当前位置: 首页 > news >正文

数据分析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+。表示二进制模式。

相关文章:

  • 一文读懂Tomcat应用之 CentOS安装部署Tomcat服务
  • LabVIEW开发之困境中逼出成长力
  • 基于 Spring Boot 瑞吉外卖系统开发(八)
  • 如何在idea中写spark程序。
  • 工业通讯现场中关于EtherCAT转TCPIP网关的现场应用
  • 【爬虫】码上爬第1题:动态数据采集
  • 4月28日星期一今日早报简报微语报早读
  • Linux 内核网络协议栈中的关键数据结构:inet_skb_parm 与 ip_options
  • 软件设计师速通其一:计算机内部数据表示
  • C# wpf
  • 快速上手Prism WPF 工程
  • Python----卷积神经网络(卷积为什么能识别图像)
  • 普通IT的股票交易成长史--20250428晚
  • EXCEL中跨行匹配两组数据
  • C++编程指南39 - 不要特化函数模板
  • 【优秀三方库研读】【性能优化点滴】odygrd/quill 解决伪共享
  • DrissionPage采集京东系列——自动化登录
  • Vue 前端项目部署涉及多个文件和配置
  • 【Vue3-Bug】中路由加载页面直接显示空白
  • 电路研究9.3.2——合宙Air780EP中的AT开发指南:HTTP(S)-PDP的研究
  • 国家发改委答澎湃:将建立和实施育儿补贴制度,深入实施提振消费专项行动
  • 四川苍溪县教育局通报“工作人员辱骂举报学生”:停职检查
  • 文旅部:推动离境退税购物便利化有利于更多国内优质商品走出去
  • 体坛联播|巴萨“三杀”皇马夺国王杯,陈妤颉破亚洲少年纪录
  • 剪纸纹样“流动”在水乡,谁不忆江南
  • 亚振家居控制权将变更:济南域潇集团实控人成新控股股东