数据分析&&可视化笔记

1.前言

​ -Ptthon3

​ -cell有两种模式:

​ -code:代码模式

​ -markdown:编写笔记模式

2.快捷键

​ -添加cell:a在选中的上方添加 b在选中的下方添加

​ -删除:x

​ -修改cell的模式:m:修改成markdown模式 y:修改成code模式

​ -执行cell:shift+enter

​ -自动补全:tab

3.数据分析三剑客:numpy pandas matplotib

3.1Numpy

​ 相当于一个容器,重在数值计算

​ Numpy的创建

​ 使用np.array()创建

			import numpy as np
			arr = np.array([1,2,3])

			array([[14, 29, 93, 73, 81, 24],

				[ 9, 78, 16, 17, 44, 37],
				[48, 66, 71, 57, 25, 48],
				[76, 44, 73, 29, 84, 75],
				[37, 15, 82, 4, 92, 39]])
3.1.1属性

​ 数组和列表的区别

​ 数组中存储的数据元素类型必须是统一类型

​ 优先级:字符串>浮点型>整数

​ shape 返回数组的形状 5行6列

​ ndim 输出数组的维度 2维

​ size 输出数组元素的个数

​ dtype 输出元素的类型

​ arr=np.array([1,2,3],dtype=‘int64’) dtype可指定元素类型

3.1.2numpy的索引和切片
					array([[41, 38, 16, 4, 42, 46],

						     [87, 15, 15, 13, 13, 35],

							[61, 99, 44, 40, 66, 40],

							[84, 4, 40, 7, 3, 93],

						  [58, 99, 81, 22, 73, 99]])
3.1.2.1切片操作属性

​ arr[[1,2]]输出的是第一第二行

​ arr[0:2] 输出的是第零到第一行

​ arr[1,2] 输出的是第一第二列的元素

​ arr[:,0:2] 逗号前面的切行后面切列若不切行前面一定要打: 这样输出前两列

​ arr[::-1]行倒置

​ arr[::-,::-1]列倒置

​ arr[::-1,::-1]行列倒置

3.3.2.2图片数组同理

​ plt.imshow(img_arr[:,::-1])左右对称倒置

​ 图片数组的三个坐标img_arr[行,列,颜色]

​ 图片也可通过数组元素切片进行切片

​ Reshape 可以改变数组维数 5行6列的数组改为1行30列的一维数组

3.1.3级联操作
				np.concatenate((合并的第一个数组, 合并的第二个数组),axis=0) axis为0列合并 为1 行合并

				arr.sum(axis=0) 求每一列的和 axis为0是行为1是列

				arr.max(axis=0) 求每一列的最大值 axis为0是行为1是列
3.1.4常用的数学函数

​ 标准三角函数 sin() cos() tan()

​ around(,decimals=) 函数返回指定数字的四舍五入 decimals为保留位数

​ numpy.amin0 和 numpy.amax0,用于计算数组中的元素沿指定轴的最小、最大值,

​ numpy.ptp0:计算数组中元素最大值与最小值的差(最大值 - 最小值)

​ numpy.median0 西数用于计算数组a中元素的中位数(中值)

​ 标准差std0:标准差是一组数据平均值分散程度的一种度量。

​ 公式:std = sart(mean((x - x.mean0)**2))

​ 如果数组是11,2,3,4,则其平均值为2.5。因此,差的平方是 12.25,0.25,0.25,2.25],并且其平均值的平方根除以

​ 4,即sqrt(5/4),结果为1.1180339887498949。

​ 方差var0:统计中的方差(样本方差) 是每个样本值与全体样本值的平均数之差的平方值的平均数,即mean(x - x.meanO)*

​ Eye()可以返回一个单位矩阵

​ np.eye(6).T ,T可以转置矩阵

​ np.dot(a1,a2) 矩阵相乘

3.2Matplotlib

				import matplotlib.pyplot as plt
				img_arr=plt.imread('./1.jpg\') //读取一张图片存到变量img_arr中
3.2.1属性
	//输出img_arr时是输出一个三维数组

				plt.imshow(img_arr) //将图片输出到一坐标上
				ones(shape=(3,4)) //生成三维数组每个里面有四个元素
				linspace(0,100,num=20) //生成0-10020个等差数列
				arange(10,50,step=2) //生成1050每隔两个生成一位数
				random.randint(0,100,size=(5,3)) //生成53列在0-100之间的随机数

3.3pandas

​ 主要存储非数值类对象

​ Series 类似于一维数组的对象

​ Value:一组数据

​ Index:相关的数据索引

	df=pd.read_excel('lemon.xlsx',sheet_name='student')#可以通过sheet_name来指定读取的表单
from pandas import Series  //引入
3.3.1series的常用属性

​ shape

​ size

​ index

​ values

3.3.2series的常用方法

​ head(),tail()

​ unique()

​ isnull()

​ notnull()

​ add() sub() mul() div()

​ 例子:

​ s.head(1) 输出前几个数据

​ s.tail(1) 输出后几个数据

​ s.unique() 去重

​ s.isnull() 判断是否为空 不是为false

​ s.notnull() 与上面相反

3.3.3series的算数法则

​ 索引一致的元素进行算数运算否则补空

3.3.4DataFrame

​ • DataFrame是一个【表格型】的数据结构。DataFrame由按 一定顺序排列的多列数据组成。设计初衷是Series的使用场 景从一维拓展到多维。DataFrame既有行素引,也有列引。

​ 行素引:index

​ 列素引:columns

​ 值:values

  from pandas import DataFrame

  df=DataFrame(data=[[1,2,3],[4,5,6]])

  df

​ df[1]取单列 df[[1,2]]取多列 都是显示索引

​ df.loc[1] 显示取行 df.iloc[1] 隐示取行

​ df.iloc[1,1] 隐示取第一行第一个

​ df[0:2] #切行 df.loc[0:2] #切列

​ 单独取一个值 a[行,列]

​ df.to_csv(’./maotai.csv’) 将数据存储到本地

​ df.drop 删除

3.3.5数据清洗
import numpy as np
type(None)  //None对象类型

type(np.nan)  //NAN浮点型

​ 为什么在数据分析中需要用到的是浮点类型的空而不是对象类型?

​ 数据分析中会常常使用某些形式的运算来处理原始数据,如果原数数据中的空值为NAN的形式,则不会干扰或者中断运

​ 算。

​ NAN可以参与运算的

​ None是不可以参与运算

3.3.5.1 方式1:对空值进行过滤(删除空行所在的数据)

​ 技术:isnull,notnull,any,all

df.isnull()

image-20211103181904942

df.isnull().any(axis=1)   //找出为空的行

image-20211103182111595

df.loc[df.isnull().any(axis=1)]                       
drop_index=df.loc[df.isnull().any(axis=1)].index         #要删除的索引
df.drop(labels=drop_index,axis=0)       

image-20211103182342044

​ 或者用

df.dropna(axis=0)

​ df.dropna(axis=0) pandas内集成的

3.3.5.2方法二:对缺失值的覆盖

​ Fillna

​ df.fillna(value=) 填充值

​ df.fillna(method=‘ffill’,axis=1) 填充前面的值 axis=1 左右填充 axis=0 纵向填充

​ df.fillna(method=‘bfill’,axis=1) 填充后面的值 axis=1左右填充 axis=0 纵向填充

	df.fillna(method='ffill',axis=1)
3.3.5.3使用drop_duplicates清洗重复行数据
		df.drop_duplicates(keep='first')    //保留重复的第一行
3.3.6DataFrame的级联

	pd.concat((df1,df2),axis=0,join='inner')         //axis的取值决定合并行或列 join的取值决定外内链接

​ 不匹配链接

​ 不匹配指的是级联的维度的索引不一致。例如纵向级联时列索引不一致,横向级联时索引不一致

3.3.6.1有两种连接方式

​ 外连接:补NaN(默认模式)

​ 内连接:只连接匹配的项

​ Append函数的使用 只能是列跟列的外级联

​ df1.append(df2)

3.3.7DataFrame的合并

pd.merge(df1,df2,on='employee' ,how=)  //on的值为合并条件 how的值为内外连接

​ 查找符合条件的数据,括号内为条件

​ abb_pop.query(’’)

3.3.8排序

abb_pop.sort_values(by=‘pop’,axis=0,ascending=False)

3.3.9替换操作

​ 替换操作可以同步作用于Serise和DataFrame中

3.3.9.1单值替换

​ 普通替换:替换所有符合要求的元素:to_replace=15,val='e

​ 按指定单值替换: to_replace=(列标签:替换值) value=‘value’

df.replace(to_replace=4,value='Two')
3.3.9.3多值替换

​ 列表替换:to_replace[] val=[]

​ 字典替换:to_replace={to_replace;value,to_replace:value}

df.replace(to_replace={97:'ome'})
3.3.10映射操作

​ 概念:创建一个映射关系列表,把values元素和一个特征值的标签或者字符串绑定

​ 创建一个df,两列分别是姓名和薪资,然后给其名字起对应的英文名

dic={
    'name':['张三','李四','张三'],
    'salary':[15000,2000,15000]
}
df=DataFrame(data=dic)
df

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1g7HpGA5-1647857721436)(https://cdn.jsdelivr.net/gh/kdmvp-lin/MarkdownImg/202203211812989.png)]

dic={
    '张三':'Tom',
    '李四':'Jack'
}
df['e_name']=df['name'].map(dic)
df

image-20211107164700474

​ Map是series的方法,只能被series调用

​ Map也可以充当运算工具

def after_sal(s):
    return s-(s-3000)*0.5

df['salary'].map(after_sal)

image-20211107164827464

​ 括号里写运算方法

3.3.11数据的分类处理

​ 数据分类处理的核心

​ Groupby()函数

df=DataFrame({
    'item':['Apple','Banana','Orange','Banana','Orange','Apple'],
    'color':['red','yellow','yellow','green','green','green'],
    'weight':[12,20,50,30,20,44]
})
df

image-20211107165820151

Groups属性查看分组情况

#想要水果种类进行分类
df.groupby(by='item')
df.groupby(by='item').groups  #按照item分类

image-20211107170334479

df.groupby(by='color')['weight'].mean()

image-20211107170400763

df.groupby(by=‘item’)[‘weight’].transform(my_mean) 使用transform自定义聚合操作my_mean为自定义函数

def my_mean(s):
    m_sum=0
    for i in s:
      m_sum += i
    return m_sum /len(s)
df.groupby(by='item')['weight'].transform(my_mean)

image-20211107170532917

3.3.12透视表和交叉表
import numpy as np
import pandas as pd
from pandas import DataFrame
df=pd.read_csv('./text_1/text1.txt')
df

image-20211107170954470

df.shape

image-20211107171024029

pd.read_csv('./text_1/text1.txt',header=None,sep='-')

image-20211107171050894

​ Header表示行的名称 sep表示设置分隔

#建立连接数据库 import sqlite3 as sqlit3 conn=sqlite3.connect(’./data/weather_2020.sqlite’)

#读取库表中的数据 sql_df=pd.read_sql(‘select * from weather_2020’,conn)

#将df中的数据值写入存储到db中 data.to_sql(‘sql_data123’,conn)

import pandas as pd
import numpy as np
df=pd.read_excel('./text_1/meal_order_detail.xlsx')
df

image-20211107171330111

df.pivot_table(index=['dishes_name'])

image-20211107171511488

Pivot_table有四个最重要的参数index,values,columns,aggfunc

Index参数:分类汇总条件

​ 每个pivot_table必须拥有一个index

image-20211107171619299

​ 在index内数据作为行名时只看values内的值

Columns可以设置列层次字段

​ 对values字段进行分类

df=DataFrame({
    'sex':['man','man','woman','woman','man','woman','man','woman','woman'],
    'age':[15,23,25,17,35,57,24,31,22],
    'smoke':[True,False,False,True,True,False,False,True,False],
    'height':[168,179,181,166,173,178,188,190,160]
})
df

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oddoXeqt-1647857721441)(https://cdn.jsdelivr.net/gh/kdmvp-lin/MarkdownImg/202203211814960.png)]

pd.crosstab(df.smoke,df.sex)     #以是否抽烟和年龄为条件统计

image-20211107171826936

pd.crosstab(df.age,df.smoke)  

image-20211107172004109

3.3.13iterows()

iterrows() 是在数据框中的行进行迭代的一个生成器,它返回每行的索引及一个包含行本身的对象。

所以,当我们在需要遍历行数据的时候,就可以使用 iterrows()方法实现了。

4.绘图

import matplotlib.pyplot as plt
import numpy as np

4.1单线图

#绘制单条线性图
x=np.array([1,2,3,4,5])
y=x+3
plt.plot(x,y)


image-20211107225004074

4.2多线图

#绘制多条线性图

plt.plot(x,y)
plt.plot(x+2,y-1)

image-20211107225041512

plt.plot(x,y,x+1,y+2)

image-20211107225113621

4.3设置坐标系的比例plt.figure(figsize=(a,b))

#设置坐标系的比例plt.figure(figsize=(a,b))
plt.figure(figsize=(5,9))
plt.plot(x,y)
image-20211107225156619

4.4#设置图例legend()

#设置图例legend()
plt.plot(x,y,label='one')
plt.plot(x+2,y-2,label='two')
plt.legend()

image-20211107225252031

4.5#设置标识

#设置标识
plt.plot(x,y)
plt.xlabel('temple')
plt.ylabel('dist')
plt.title('dist&temple')

image-20211107225323319

4.6#图例保存

#图例保存
fig =plt.figure()            #先建一个图像保存的对象
plt.plot(x,y,label='x,y')   
fig.savefig('./123.png')     #保存路径

image-20211107225404306

4.7柱状图

#柱状图
plt.bar(x,y)

image-20211107225445422

4.8直方图

#直方图 统计密度看出现的次数
data=[1,1,1,1,2,2,2,3,3,5,5,5,5,5,5,6,6,6,6]
plt.hist(data,bins=20)

image-20211107225511083

4.9饼图

#饼图
arr=[11,22,31,15]
plt.pie(arr)

image-20211107225541928

4.10散点图

#散点图
x=np.array([1,2,3,4,5,6])
y=x**2-3
plt.scatter(x,y)

image-20211107225603480

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值