首页 > 编程语言 >python数据分分析

python数据分分析

时间:2023-08-09 17:56:24浏览次数:38  
标签:分析 python some value 列表 字典 数据 元组 d1

数据处理的步骤

graph LR 处理数据-->清洗数据

目的:如何用python操作数据
对象:需要的是结构化的数据
工具:用到的库

库名 用途
Numpy
Pandas
matplotlib
JupyterNotebook
Scipy
Scikit-learn
Statsmodels

python的内建数据结构;元组、列表、字典

元组

>tuple = (4,5,6)

元组的拆包特性:

>tuple = (4,5,6)
>a,b,c = tup
>b
5

嵌套元组的拆包特性

>tuple = 4,5,(6,7)
>a,b,(c,d) = tuple
>d
7

利用元组的拆包特性,实现交换

>a,b =1,2
>b,a = a,b
>a
2
>b
1

python自带的更高级的拆包特性:*rest(余下的部分),帮助你从某个起始部分采集数据

>values = 1,2,3,4,5,6
>a,b,*rest = values
>rest
[4,5,6]

一般为了方便,开发者会用 *_代替*rest来表示非采集部分的变量

元组的统计计数:count,统计某个元素出现的次数

>a = (1,2,2,2,3,4,4,2)
>a.count(2)
4

元组和列表的区别:可变与不可变。

列表

增加与移除元素的方法

  1. 增加到尾巴:append
  2. 插入到任意位置:insert
  3. 移除元素:pop、
  4. 移除第一个符合的元素:remove

不考虑性能,可以使用append和remove,将python列表作为一个完全合适的数据结构

查找元素

  1. 查找元素是否在列表中:in
  2. 查找元素是否不在列别中: not in

列表的查找性能很差

列表与“字典和集合”相比,检查列表中是否有一个值,是非常缓慢的,这是因为python在列表中是线性逐个扫描的机制,而在集合和字典中是全局同时。

python数据结构 检查方式
列表 逐个扫描
字典、集合 全局扫描

性能更好的添加列表的方式

用“+”号可以添加列表内容,但因为这样链接过程创建了新的列表,是一种相对高代价的操作(内存占用),所以使用extend将元素加到已存在的列表是更好的方式。

排序:sort

  1. 正常引用sort用大小排序
  2. 给排序附加条件:(key=)
b.sort(ley = len) #按字符长度排序

使用二分搜索并将值插到合适的位置
bisect.bisect:找到元素应被插入的位置,保持排序
bisect.insort:将元素插入到对应位置

import bisect
> c = [1,2,2,2,3,4,7]
> bisect.bisect(c,2) # 排序2,显示应该排队位置在4。位置从0开始,此时并未插入元素
> 4
> bisect.bisect(c,5) # 5对应排序,显示应该排队位置在6,位置从0开始,此时并未插入元素
> 6
> bisect.insort(c,6) # 插入6,此时插入元素
> c
> [1,2,2,2,3,4,6,7]

需要注意:
bisect并不会检测列表是否自己排序,如果对未排序的列表使用bisect,他能用但结果不一定正确。

切片

切片基本上使用[start:stop]这种形式.。
负索引可以反着搜索。
步进值:[::2]

如果需要对元组或者列表进行翻转,可以将步进值传入-1:[::-1]

构建索引:enumerate(翻译成中文:列举、枚举)

for i,v in enumerate(list): # i是索引,v是值

比如我们要构建索引:

> some_list = ["foo","bar","baz"]
> mapping = {}
> for i,v in enumerate(some_list):
>	mapping[v] = i
> mapping
{"foo":1,"bar:2","baz":3}

按照顺序排列,然后出一个新序列:sorted

> sorted([7,1,2,2,6,0,3,2])
[0, 1, 2, 2, 3, 6, 7]
> sorted("horse race")
[' ', 'a', 'c', 'e', 'e', 'h', 'o', 'r', 'r', 's']

配对zip

> seq1 = ["foo","bar","baz"]
> seq2 = ["one","two","three"]
> zipped = (seq1,seq2)
> list(zipped)
[['foo', 'bar', 'baz'], ['one', 'two', 'three']]

zip处理的长度由最短的序列决定

> seq3 =[False,True]
> list(zip(seq1,seq2,seq3))

[('foo', 'one', False), ('bar', 'two', True)]

zip的使用场景:同时遍历多个序列

> for i,(a,b) in enumerate(zip(seq1,seq2)):
>    print("{0}:,{1},{2}".format(i,a,b))

0:,foo,one
1:,bar,two
2:,baz,three

zip的使用场景:行列置换

> people = [("ZQ","She"),("Kate","Liu"),("Sopu","Wu")]
> first_names,last_names = zip(*people)
> first_names

('ZQ', 'Kate', 'Sopu')

> last_names

('She', 'Liu', 'Wu')

倒序排序:reversed

reversed是一个生成器(生成器:没有实例的时候,是不会产生一个倒序的列表)

> list(reversed(range(10)))

[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

字典dict

{key:value} 键值对,添加

empty_dict = {}
d1 = {"a":"some value","b":[1,2,3.4]}
print(d1)
d1[7] = "an integer" #添加键值对
print(d1)

> {'a': 'some value', 'b': [1, 2, 3.4]}
> {'a': 'some value', 'b': [1, 2, 3.4], 7: 'an integer'}

只能搜索键,不能搜索值:in

"b" in d1

> True

删除的两种方式:del,pop

graph LR A("dict的删除")---B("del:直接删除") A---C("pop:pop方法删除的同时返回被删的值,并删除键")
d1[5] = "some value"
d1["dummy"]="another value"
print(d1)

> {'a': 'some value', 'b': [1, 2, 3.4], 7: 'an integer', 5: 'some value', 'dummy': 'another value'}

del d1[5] # 直接删除模式
d1
> {'a': 'some value','b': [1, 2, 3.4],7: 'an integer','dummy': 'another value'}

remo = d1.pop("dummy") #先存储返回值
d1 #然后才能删除
> {'a': 'some value', 'b': [1, 2, 3.4], 7: 'an integer'}

迭代器:返回的keys值,values值

list(d1.keys())
> ['a', 'b', 7]

list(d1.values())
> ['some value', [1, 2, 3.4], 'an integer']

d1.update({"b":"foo","c":12}) # update可以用来合并两个字典
d1
> {'a': 'some value', 'b': 'foo', 7: 'an integer', 'c': 12}
  • 排序会乱:update方法改变了字典中元素位置,
  • 会覆盖相同的:因此对于任何原字典中已经存在的键,如果传给update方法的数据也含有相同的键,则它的值将会被覆盖。

两个序列按元素配对

mapping ={}
for key,value in zip(key_list,value_list):
	mapping[key]=value  #构建字典

字典的本质是:含有两个元素的元组,基于这个原理,我们可以用“元组”的数据结构来构建“字典”

\[含有2个元素的元组=字典 \]

mapping={}
dict(zip(range(5),reversed(5))) #用两个元组构建字典
mapping
> {0:4,1:3,2:2,3:1,4:0} # 构建字典成功

还有一种字典推导式

设置默认值
第一种解题方法:通常情况下的代码逻辑:

if key in some_dict:
	value = some_dict[key]
else:
	value = default_value

第二种解题方法:get方法 和 pop方法

value = some_dict.get(key,default_value)

会在不是字典的时候发生的情况:

  1. get方法,返回none
  2. pop方法,抛出异常

你能想象一个场景,用一些字词组组成数据结构“列表”

words = ["apple","bat","bar","atom","book"]

接下来实现一个要求:1.分类

by_letter = {}
for word in words:
	letter = word[0]
	if letter not in by_letter:
	by_letter[letter] = [word] # 以首字母形成字典
	else:
	by_letter[letter].append(word) # 在字典内部添加

by_letter
> {"a":["apple","atom"],"b":["bat","bar","book"]}

实现分类更简单的方法

字典的setdefault方法,实现分类

for word in words:
	letter = word[0]
	by_letter.setdefault(letter,[]).append(word)

内建得集合模块类:defaultdict,实现分类功能

from collections import defaultdict
by_letter = defaultdict(list)    # 传入类型
for word in words:
	by_letter[word[0]].append(word)

字典中得“键"是不可变得对象:所以我引用了哈希值得概念,我们可以使用哈希函数让值变得唯一。

hash('string') # 字符串是唯一得
>  
hash((1,2,(2,3))) # 元组是唯一得
> 
hash((1,2,[2,3])) # 列表是可变得,所以会哈希失败
>

为了将列表作为键、一种方式就是将其转换成元组。元组内部可以哈希化,它就可以哈希化。

集合:set

集合得特性:无序、唯一

创建方式:set函数、或者大括号{}。

编制模块


标签:分析,python,some,value,列表,字典,数据,元组,d1
From: https://www.cnblogs.com/shezq/p/17608421.html

相关文章

  • 解决window移植到linux shell执行Python脚本提示找不到模块问题
    1、将工程目录添加到sys.path中(测试有效importsyscpath='project_path'#写成项目的地址最好是绝对地址因为有的地方确实会报错不清楚原因sys.path.append(cpath) eg:sys_path=os.path.abspath(os.curdir)sys.path.append(sys_path.split('test_case')[0])#为了......
  • 线性判别分析(LDA)模型笔记
    目录模型概况模型定义模型求解模型概况线性判别方法(LinearDiscriminationAnalysis)是一种经典的线性学些方法,最早由Fisher提出,也叫“Fisher判别分析”。LDA的思想非常朴素,也即是,将样例投影到一条直线上使得同类样例的投影点尽可能近,异类样例的投影点尽可能远,总结六个字就是......
  • 数据清理在数据科学中的重要性
    什么是数据清理?推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景在数据科学中,数据清理是识别不正确数据并修复错误的过程,以便最终数据集可供使用。错误可能包括重复字段、格式不正确、字段不完整、数据不相关或不准确以及数据损坏。源在数据科学项目中,清理阶段在数据管......
  • CDC 数据复制:技术、权衡、见解
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景在本文中,我将定义CDC数据复制,简要讨论最常见的用例,然后讨论常见技术及其权衡。最后,我将提供一些我作为数据集成公司Dataddo的首席执行官和创始人所学到的一般实现见解。什么是变更数据捕获(CDC)数据复制?CDC数据复制是......
  • 【校招VIP】java语言考点之基本数据类型
    考点介绍:基本数据类型的长度、自动升级、JVM存储和封装类的相关考点,是校招常见考点。基础考点不能出错一、考点题目1、JAVA中的几种基本数据类型是什么,各自占用多少字节解答:先了解2个单词先:1、bit--位:位是计算机中......2、byte--字节:字节是......2、JAVA是不是完全的面向......
  • 面向数据科学家和分析师的统计基础
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景“统计学是科学的语法。卡尔·皮尔逊统计学在数据科学和数据分析中的重要性不容低估。统计提供了查找结构和提供更深入数据见解的工具和方法。统计学和数学都喜欢事实,讨厌猜测。了解这两个重要主题的基础知识将使您能够批......
  • 利用 3D 地理空间数据实现Cesium的沉浸式环境
    推荐:使用NSDT场景编辑器助你快速搭建可编辑的3D应用场景为了将大量异构3D地理空间数据处理和分散到各行各业的地理空间应用程序和运行时引擎,Cesium创建了3DTiles,这是一种用于高效流式传输和渲染大量异构数据集的开放标准。3DTiles是一种可流式传输的优化格式,旨在支持最苛刻......
  • Modbus通信协议实践(1)-通过modbusRTU实现TPC7022kt对电流表数据的读取
    需求:1.昆仑通泰TPC7022kt触摸屏2.安装了MCGSpro的PC一台3.能使用RS485通讯协议的数显直流电流表一个 操作步骤:1.以常规1mm电线和双绞线连接电流表和昆仑通泰触摸屏,网线连接触摸屏和pc。2.根据数显直流表的说明书,设置该表的通讯地址为01,波特率为9600,N81无校验位,8个数据位,1......
  • python 应用包nltk了解
    NLTK(NaturalLanguageToolkit)是一个用于自然语言处理(NLP)的Python库。它为处理和分析人类语言数据提供了许多工具和接口。NLTK包含了一系列用于文本处理、分析、语言学研究以及机器学习的函数和类。NLTK提供了许多功能,包括:1.文本处理:NLTK提供了处理文本的工具,如分词......
  • 前端shp文件写到本地时,原生的shp-write存在的不能写入多条数据及中文乱码问题
    shp-write·Doraemon22333/前端-码云-开源中国(gitee.com)参考(1)https://github.com/hwbllmnn/shp-write/tree/maintenance(2)https://blog.csdn.net/qq_37748236/article/details/131804606......