第一节:python环境和数据分析(代码片段)

快乐江湖 快乐江湖     2022-12-04     652

关键词:

文章目录

一:Python简介和运行环境

(1)Python介绍

Python是一门面向对象的解释型语言,由于非常灵活且具有丰强大的库,所以在机器学习、深度学习等领域有着广泛应用。Python这门语言内容也是比较多的,但是如果你只想要用作人工智能领域,那么目前只学习其基础部分是完全够用的,所有有关Python的一些基础部分知识请移步下面的专栏

(2)运行环境

本专栏所有理论和实践的学习都离不开以下三个东西

注意:安装Python包时,如果包太大或者速度太慢的话可以更改镜像源,这里推荐清华镜像源,如下

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/

(3)Pycharm使用


二:数据分析常用库介绍

注意

  • 数据分析相关Python库是非常多,而且每一个库都很复杂,所以要想彻底学完整、学好是不太可能的,而且最关键的一点是我们经常使用到的可能只有你学到的那20%,所以这里我们只介绍相关库的最核心的用法,剩余的知识,在应用时如果不会了可以去查
  • 相关库的详细介绍,可以移步此专栏Python数据分析三板斧

(1)Numpy

Numpy:Numpy是Python的一种开源的数值计算扩展。这种工具可用来存储和处理大型矩阵,它提供了许多高效的数值编程工具

import numpy as np

A:基本介绍

:Numpy中的所有操作都围绕一个Ndarrary对象展开,其本质是一个N维数组。当然,在Python中也有一种常用的数据类型list可以表示数组,比如下面是一个二维数组

array = [[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]

list有不便于对列表内的单个对象操作(相对而言)

NumPy 中的N 维数组对象 ndarray是一系列同类型数据元素的集合,每个元素都有索引,从0开始。换句话说,ndarray对象是一个存放了同类型元素的多维数组ndarray中每个元素在内存中都有相同存储大小的区域,由以下内容组成

  • 一个指向数据(内存或内存映射文件中的一块数据)的指针(在Python中就是一个变量)

  • 数据类型或 dtype:描述在数组中的每个元素所占大小

  • 一个表示数组形状(shape)的元组:表示各维度大小

  • 一个跨度元组(stride):其中的整数指的是为了前进到当前维度下一个元素需要"跨过"的字节数

这里,你可以调用array()函数创建一个简单的ndarray对象

  • 为了便于演示,采用直接传入列表的方式创建
a = np.array([1, 2, 3, 4])

可以直接打印查看

:Numpy数组(N-addary)和Python中List不是一个东西

  • Python中List是可以追加任何数据类型的
a = np.linspace(0, 1, 11)  # 等差数列
l = [0, 0.1, 0.2,  0.3, 0.4, 0.5, 0.6, 0.7, 0.8,  0.9, 1]
print(type(a))
print(type(l))

:Numpy底层使用C/C++实现,只是接口做得和Python一样。所以在使用时会存在一些细节问题,例如Python中的某些数值如果设置的不合理放在Numpy中就会溢出

import numpy as np

a = np.arange(0, 10)
print(a)
a[2] = 10000000000

所以这里要特别注意Numpy的dtype(数据类型)

a = np.arange(0, 10)
print(a.dtype)
a = a.astype(np.int64)  # 数据类型转换
print(a.dtype)

由于底层使用C/C++实现,所以Numpy数组进行扩容是及其不方便的,通常我么使用“堆叠”数组这种方式完成间接扩容

a = np.arange(5)
b = np.arange(100, 107)
c = np.concatenate((a, b))
print(a)
print(b)
print(c)

初次接触Numpy的同学,可能对其维度比较迷惑(尤其是后面的索引和切片操作)。当然这个问题日后会细说。这里有一个很简单的方法去判断数组的维度:第一个元素前面有几个左中括号[它就是几维的,例如

a = np.array([1, 2, 3])  # 一维
b = np.array([[1, 2, 3], [1, 2, 3]])  # 二维
c = np.array([[[1, 2, 3], [1, 2, 3]], [[1, 2, 3], [1, 2, 3]]])  # 三维
print(a)
print("-"*20)
print(b)
print("-"*20)
print(c)

B:索引和切片操作

:基本索引切片方式如下,针对一维数组进行

  • 高维数组的索引和切片可能稍显复杂,大家可以查看上面的专栏
a = np.arange(5)
b = np.arange(100, 107)
c = np.concatenate((a, b))
print(c)
print(c[3])
print(c[3:6])  # 区间为左闭右开
print(c[3:])  # 从索引为3的位置开始一直截取到末尾
print(c[:6])  # 从开始位置开始,一直截取到索引为6的位置之前
print(c[4:-3])  # 从索引为4的位置开始截取到索引为-3的位置之前
print(c[::2])  # 步长为2正向截取
print(c[-5::-1])  # 反向截取

:索引和切片也可以进行运算

a = np.arange(5)
b = np.arange(100, 107)
c = np.concatenate((a, b))
print(c)
print(c[:-1])
print(c[1:])
print(c[:-1] - c[1:])

(2)Pandas

A:基本介绍

Pandas:Pandas是2008年WesMcKinney开发出的库,是一个专门用于数据挖掘的开源Python库,它以Numpy为基础,借力Numpy模块在计算方面性能高的优势,又基于Matplotlib,可以简便的画图,而且还拥有自己独特的数据结构

  • Pandas 可以从各种文件格式比如 CSV、JSON、SQL、Microsoft Excel 导入数据

  • Pandas 可以对各种数据进行运算操作,比如归并、再成形、选择,还有数据清洗和数据加工特征

  • Pandas 广泛应用在学术、金融、统计学等各个数据分析领域

import pandas as pd

:Pandas核心数据类型为DataFrame。Numpy注重运算,所以对于数据意义的表达没有那么清楚,比如下面用Numpy生成了一个符号正态分布的10支股票5天的涨幅情况

  • 这样的数据表现形式让人有点难受,因为完全不知道它在表达什么
stock_change = np.random.normal(0, 1, (10, 5))
print(stock_change)


[[ 0.22129238  1.72192263  0.49808165 -0.70501369 -0.57315298]
 [-0.05685967 -1.59493883  0.20770355  2.03934052 -0.91647225]
 [-0.64659703 -1.7586049  -0.53091496 -0.95453855  0.84446516]
 [ 0.02877987  1.53110344 -0.90623823  1.41938924 -1.24248129]
 [-0.36990152 -0.17153907  0.24179436  0.82450977  1.1865927 ]
 [-0.14524005 -0.57297533 -0.08680693  0.07105316 -0.12050658]
 [ 0.50399736  1.56385492 -0.38175291  0.52144963  0.51322901]
 [ 0.71534998 -0.61644881  0.15437358  0.00324533 -0.830954  ]
 [-0.65036464 -1.71639338 -1.18670887  0.34092581 -0.8870423 ]
 [-0.89061683 -0.93671895 -0.19911303  0.49350255  2.02240886]]


因此,我们的DataFrame就是为了让数据更有意义的显示。这里可以直接调用pd.DataFrame(),然后将numpy数组传入进去

stock_change = np.random.normal(0, 1, (10, 5))
a = pd.DataFrame(stock_change)
print(a)

:DataFrame 是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔型值)。DataFrame 既有行索引也有列索引,它可以被看做由 Series 组成的字典(共同用一个索引)

:Pandas导入数据有很多种方式,这里以最常用的csv数据为例,导入鸢尾花数据集

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
print(data)

其中Pandas与Numpy数组对应关系如下

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
print(data)
print(data.values)
print(data.columns)
print(data.index)

B:索引操作

:Pandas中index默认给出的是一个列表生成器,可以自定义索引,如下

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
new_index = []
for i in data.index:
    new_index.append('第' + str(i+1) + '行')
data.index = new_index
print(data)


还有其他写法

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
new_index = []
for i in data.index:
    new_index.append('第%03d行' % (i+1))
data.index = new_index
print(data)

设置columns时可以传入一个列表

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
data.columns = ['序号','花瓣长度', '花瓣宽度', '花萼长度', '花萼宽度', '种类']
print(data)

:Pandas默认是对列进行索引而不是行。要索引行应该这样做

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
new_index = []
for i in data.index:
    new_index.append("第"+str(i+1)+"行")
data.index = new_index
print(data.loc['第4行'])

进行列索引时,而Numpy索引基本一致(注意多列索引时必须加入中括号[]

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
new_index = []
for i in data.index:
    new_index.append("第"+str(i+1)+"行")
data.index = new_index
print(data[['Id', 'Species']])

当然,行列索引可以配合使用

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
data.columns = ['序号','花瓣长度', '花瓣宽度', '花萼长度', '花萼宽度', '种类']
sel1 = [i for i in range(0, 30, 3)]
sel2 = data['序号'] % 10 == 0
print(data.loc[sel1, ['序号', '花瓣长度', '花瓣宽度']])
print("="*20)
print(data.loc[sel2, ['序号', '花瓣长度', '花瓣宽度']])

:索引时,pandas中的iloc函数更为简单,它可以同时对行列进行任意索引(注意索引都是数字)

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
data.columns = ['序号','花瓣长度', '花瓣宽度', '花萼长度', '花萼宽度', '种类']
print(data.iloc[[i for i in range(0, 150, 20)], [3, 4, 5]])

:Pandas可以直接对列进行运算,例如

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')

test = data['SepalLengthCm']  # 拿出seriese
print(test > 5)  # 返回大于5的数据,如果大于3则显示true

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')

test = data['SepalLengthCm']  # 拿出seriese
nums = pd.value_counts((test > 5))  # 统计大于5的个数
print(nums)

:类似于SQL,很多时候我们需要对行列同时进行索引,所以可以这样做

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
new_index = []
for i in data.index:
    new_index.append('第'+str(i+1)+'行')
data.index = new_index
select1 = data['Species'] == 'Iris-setosa'  # 选择类别为Iris-setosa
select2 = data['SepalLengthCm'] > 5  # 选择SepalLengthCm>5
select = select1 & select2  # 同时满足select1和select2
ret = data.loc[select]
print(ret)

:Pandas也可以对数据进行分组(groupBy),操作如下

data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
data_g = data.groupby(by='Species')  # 以Species对原数据进行分组,分为3组
data_g_size = data_g.size()
print(data_g_size.index)
for flower_type in data_g_size.index:
    print("=" * 20)
    print(flower_type)
    flower_type_data = data_g.get_group(flower_type)  # 通过index获取该组的数据
    print(flower_type_data)
    print("="*20)

:如果数据量很大,那么Pandas在读入时花费的时间也会成倍增长,这不利于代码的编写。所以在实际应用中,我们常编写以下代码,首次读入后就将该数据读入缓存,下次就能直接读入了

if os.path.exists('Iris.chache'):
    data = pd.read_pickle('Iris.chache')

else:
    data = pd.read_csv(r'E:\\Postgraduate\\Dataset\\Iris.csv')
	data.to_pickle('Iris.chache')

《nuitka打包实战指南》第一节下载和环境配置(代码片段)

第一节下载和环境配置目录1.1下载Nuitka1.2 下载并配置MinGW64和gcc1.3 下载并配置ccache1.4 下载并配置DependencyWalker在本节,笔者会一步步引导你下载安装好Nuitka及打包所需的资源,并配置好打包环境。1.1下载Nuitka使用以下p... 查看详情

《nuitka打包实战指南》第一节下载和环境配置(代码片段)

第一节下载和环境配置目录1.1下载Nuitka1.2 下载并配置MinGW64和gcc1.3 下载并配置ccache1.4 下载并配置DependencyWalker在本节,笔者会一步步引导你下载安装好Nuitka及打包所需的资源,并配置好打包环境。1.1下载Nuitka使用以下p... 查看详情

pandas第一节概览(代码片段)

Pandas是什么?Pandas是Python的核心数据分析支持库,提供快速、灵活、明确的数据结构,旨在简单直观地处理关系型、标记型数据。Pandas适用于处理以下类型的数据:   1、与SQL或Excel表类似的,含异构列的表... 查看详情

pandas总结第一节pandas简介与series,dataframe的创建(代码片段)

一、Pandas简介Pandas是使用Python语言开发的用于数据处理和数据分析的第三方库。它擅长处理数字型数据和时间序列数据,当然文本型的数据也能轻松处理。Pandas可以处理的数据格式非常多,常见的数据文件格式都可以快速导入,... 查看详情

python笔记第一节--环境搭建(代码片段)

💕💕💕博主昵称:摆烂阳💕💕💕🥰点击跳转到博主主页链接👩‍💻博主研究方向:web渗透测试、python编程📃博主寄语:希望本篇文章能给大家带来帮助,有不足的地方&... 查看详情

深度学习模型的准备和使用教程,lstm用于锂电池soh预测(第一节)(附python的jypter源代码)(代码片段)

本Python笔记本显示和分析了如何处理NASA获得的电池充电/放电数据集。对于这个模型的训练阶段,需要安装Python3.x以及以下库:Tensorflow2.0NumpyPandasScipySci-kitlearnMatplotSeaborn对于该模型的预测阶段,除了Matplot和Seaborn之外,... 查看详情

数据的表示和运算-第一节3:无符号数的表示和运算(代码片段)

文章目录一:机器数的定点表示二:无符号整数的概念及其在计算机中的应用三:无符号整数的表示四:无符号整数的运算(1)加法运算(2)减法运算一:机器数的定点表示根据小数点的位置是否固定,在计算机中有两类数据... 查看详情

第一节3:dbscan性能分析优缺点和参数选择方法(代码片段)

文章目录七:性能分析八:优缺点(1)优点(2)缺点九:参数选择(1)修改参数的基本原则(2)根据`K-dist`图调参十:DBSCAN算法和K-Means算法比较七:性能分析DBSCAN算法对... 查看详情

第一节——junit单元测试(代码片段)

Junit单元测试一、Junit使用步骤定义一个测试类:类名建议为xxxTest,测试类建议放在xxxTest包下面(命名时不能只有Test,否侧会和注解@Test重叠)定义测试方法给测试方法添加上:@Test注解导入junit依赖... 查看详情

(王道408考研数据结构)第一章绪论-第一节:数据结构的基本概念三要素逻辑结构和物理结构(代码片段)

文章目录一:基本概念和基本术语(1)数据(2)数据元素和数据项(3)数据对象(4)数据结构二:数据结构三要素(1)逻辑结构A:集合B:线性结构C:树形结构D:... 查看详情

第一节——数据库(代码片段)

数据库的使用一、数据库的创建完整命令:CREATEDATABASE名称[[WITH][OWNER[=]用户名]//规定数据库属于哪个账户,默认属于创建账户 [TEMPLATE[=]模版] [ENCODING[=]字符集编码]//默认使用utf-8 [LC_COLLATE[=]排序规则] [L... 查看详情

u-boot代码分析--第一节(代码片段)

u-boot代码分析--第一节编者:weirdo时间:2020-5-12QQ:2651293248标题:u-boot代码分析第一节1.u-boot.lds文件?? 这里指的是顶层目录下面的u-boot.lds,这里需要注意的是这个文件是根据arch/arm/cpu/armvx/对应的u-boot.lds模板生成的,在不严格的... 查看详情

第一节课(代码片段)

2020-03-29python基础:多种python版本,直接编码让c解释的是cpython,pypy是最快的python编码:ascll码只能表示256种无法解释中文,utf8个根据字符长短按需表示最实用  unicode国标码浪费资源  脚本开头定义编码格式可以防止用python2... 查看详情

特征向量与矩阵分析——第一节:向量向量空间和线性相关性(代码片段)

文章目录一:标量和向量(1)基本概念(2)坐标系中的向量表示二:向量运算(1)加减与数乘(2)向量内积A:为什么需要向量内积B:向量内积C:柯西-施瓦茨不等式(3ÿ... 查看详情

文件管理-第一节2:文件的逻辑结构(代码片段)

文章目录一:无结构文件二:有结构文件(1)顺序文件(2)索引文件(3)索引顺序文件和数据结构中的逻辑结构与物理结构一样,文件也具有逻辑结构和物理结构逻辑结构:从用户角度看,文件内部的数据应该是如何组织起来... 查看详情

关系查询处理和关系优化-第一节:查询处理(代码片段)

文章目录一:查询处理步骤(1)查询分析(2)查询检查(3)查询优化(4)查询执行二:实现查询操作的算法示例(1)选择操作的实现①:全表扫描②:索引(或散列... 查看详情

递归与分治策略-第一节:递归和典型递归问题(代码片段)

文章目录一:LeetCode中有关递归和分治的题目二:递归与分治概述三:递归基本概念四:典型递归问题分析(1)阶乘(2)Fibonacci数列(3)排列问题(4)整数划分(5)汉诺塔... 查看详情

第一节检测依赖(代码片段)

    令人惊讶的是,这很容易。记住单元测试的一个黄金法则:隔离。在程序中,如果另一个函数被调用或另一个类时,则含有它的代码不被隔离。这可能导致测试方法或功能之外的测试失败。因此,它不能被视为... 查看详情