day18总结

[TOC]

numpy模块

简介

#numpy模块:用来做数据分析,对numpy数组(既有行又有列)---矩阵进行科学运算
#TensorFlow/pytorch(数学专业/计科专业/物理专业/硕士及以上):用来做数据分析,对TensorFlow数组(既有行又有列还有层,三维以上)---张量进行科学运算
# gpu---图形显卡

lt1 = [1,2,3]
lt2 = [4,5,6]
lt = []
for i in range(len(lt1)):
    lt.append(lt1[i]*lt2[i])
print(lt)

numpy中的一维和三维数组

import numpy as np  #约定俗成的潮流
# #一维numpy数组---不考虑,可直接使用列表
# arr = np.array([1,2,3])
# print(type(arr),arr)
#三维numpy数组---不考虑,一般TensorFlow做三维数据处理

二维numpy数组的属性

import numpy as np
#创建二维numpy数组
arr = np.array([[1,2,3],[4,5,6]])
# print(arr)

#二维numpy数组的常用属性
    #1. T---数组的转置(行列互换)
print(arr.T)

    #2. dtype---数组元素的数据类型, numpy数组数据类型是属于python解释器的, 数组元素数据类型int32是属于numpy数组的
print(arr.dtype)

    #3. size---数组元素的个数
print(arr.size)

    #4. ndim---数组的维数
print(arr.ndim)

    #5. shape---数组的维度大小,输出结果为元组,几行几列
print(arr.shape)
print(arr.shape[0]) #行数
print(arr.shape[1]) #列数

    #6. astype---类型转换---numpy数组是可变数据类型
arr = arr.astype(np.float64)
print(arr)

二维numpy数组取值/修改值

import numpy as np
arr = np.array([[1,2,3],
                [4,5,6]])
#numpy数组单个取值
print(arr[0,0])

#numpy数组切片
print(arr[0:2,-2:]) # 行,列---骨头不顾尾

#逻辑取值
print(arr[arr>2])   #输出结果为一维数组

#赋值
    #1.单个元素赋值
arr[0,0] = 0
print(arr)

    #2.整行赋值
arr[0:1,:] = 0
print(arr)

    #3.整个二维数组赋值
arr[:,:] = 0
print(arr)

numpy数组的合并

import numpy as np
#数组的合并
arr1 = np.array([[1,2,3],
                [4,5,6]])
arr2 = np.array([[55,66,77],
                 [11,22,33]])
print(np.hstack((arr1,arr2)))   #水平合并,只能放元组
print(np.vstack((arr1,arr2)))   #垂直平合并

print(np.concatenate((arr1,arr2),axis=1))  #合并数组,0表示行,1表示列,默认为0以行合并

通过函数创建numpy数组

import numpy as np
#通过函数创建numpy数组
print(np.ones((2,3)))
print(np.zeros((2,3)))
print(np.eye(3,3))  #创建3*3单位矩阵
print(np.linspace(0, 20, 5))    #构造一个等差数列,取头也取尾
print(np.arange(2,10)) #一维

#reshape
arr = np.zeros((1,12))
print(arr.reshape(4,3)) #重构数组行列数

numpy数组的运算

import numpy as np
#数组运算
print(np.ones((3,4))*4)
print(np.sin(arr1))

#点乘
arr1 = np.ones((6,5))*3
arr2 = np.ones((5,6))*4
print(np.dot(arr1,arr2))

#求逆
print(np.linalg.inv([[1,2,3],
                     [4,5,6],
                     [9,8,9]]))

numpy数组数学和统计方法

import numpy as np
#numpy数组数学和统计方法
arr1 = np.ones((6,5))*3
print(np.sum(arr1))
print(np.sum(arr1[0:1,:]))

numpy.random生成随机数

#numpy.random生成随机数---非常重要

print(np.random.rand(3,4))  #产生(0,1)之间均匀分布的维度大小为 "3*4" 的二维数组
print(np.random.randn(3,4))  #产生(0,1)之间标准正态分布的维度大小为 "3*4" 的二维数组

# np.random.seed(1)   #随机数种子控制是否随机
print(np.random.random((3,4)))

s = np.random.RandomState(1)    #等同于随机数种子
print(s.random((3,4)))

arr2 = np.array([[55,66,77],
                 [11,22,33]])
np.random.shuffle(arr2) #对数组随机洗牌
print(arr2)

print(np.random.choice([1,2,3,4,5],2))  #针对一维数组,随机选择

#针对某一范围随机指定维度大小的整数数组
print(np.random.randint(1,100,(4,5)))

matplotlib模块

画条形图

#matplotlib模块:画各种数据统计图
from matplotlib import pyplot as plt    #约定俗成的潮流
from matplotlib.font_manager import FontProperties  #导入修改字体模块

#一.条形图
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
# 修改背景为条纹
plt.style.use('ggplot')
classes = ['3班','4班','5班','6班']
students = [50,55,45,60]
classes_index = range(len(classes))
plt.bar(classes_index,students,color='green')
plt.xticks(classes_index,classes,FontProperties=font)
plt.xlabel('班级',FontProperties=font)
plt.ylabel('学生人数',FontProperties=font)
plt.title('班级-学生人数条形图',FontProperties=font)
plt.show()

画直方图

#二.直方图
import numpy as np
from matplotlib import pyplot as plt    #约定俗成的潮流
from matplotlib.font_manager import FontProperties  #导入修改字体模块
plt.style.use('ggplot')
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
x1 = np.random.randn(10000)
x2 = np.random.randn(10000)
fig = plt.figure()  #生成一张画布
ax1 = fig.add_subplot(1,2,1) #1行两列去第一个
ax2 = fig.add_subplot(1,2,2) #1行两列去第二个
ax1.hist(x1,bins=50,color='purple')
ax2.hist(x2,bins=50,color='orange')
ax1.set_title('x1的正态分布',FontProperties=font)    #加子标题
ax2.set_title('x2的正态分布',FontProperties=font)    #加子标题
fig.suptitle('两个正态分布',FontProperties=font)  #加总标题
plt.show()

画折线图

#三.折线图
import numpy as np

#叠加
arr = np.array([[1,2,3]])
print(arr.cumsum()) #每个数是前面所有数的叠加和

from matplotlib import pyplot as plt    #约定俗成的潮流
from matplotlib.font_manager import FontProperties  #导入修改字体模块
plt.style.use('ggplot')
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
np.random.seed(1)   #固定随机数种子使画出来的四条折线图不会每次运行都变化
x1 = np.random.randn(40).cumsum()
x2 = np.random.randn(40).cumsum()
x3 = np.random.randn(40).cumsum()
x4 = np.random.randn(40).cumsum()
plt.plot(x1,color='blue',linestyle='-',marker='o',label='蓝圆线') # "linestyle" 控制线条类型
plt.plot(x2,color='pink',linestyle='--',marker='x',label='粉虚线') # "marker" 控制主机形状,默认间隔为1
plt.plot(x3,color='green',linestyle='-.',marker='*',label='绿方线')
plt.plot(x4,color='purple',linestyle=':',marker='s',label='紫方线')
plt.legend(loc='best',prop=font)
plt.show()

画散点图+折线图

#四.散点图+折线图
import numpy as np
from matplotlib import pyplot as plt    #约定俗成的潮流
from matplotlib.font_manager import FontProperties  #导入修改字体模块
plt.style.use('ggplot')
font = FontProperties(fname='C:\Windows\Fonts\simsun.ttc')
fig = plt.figure()
ax1 = fig.add_subplot(1,2,1)
ax2 = fig.add_subplot(1,2,2)
x = np.arange(20)
y1 = x*2
y2 = x**2
ax1.scatter(x,y1,c='b',label='蓝散点')
ax1.plot(x,y2,c='r',label='红折线')
ax2.plot(x,y1,c='black',label='黑折线')
ax2.scatter(x,y2,c='green',label='绿散点')
ax1.legend(prop=font)
ax2.legend(prop=font)
ax1.set_title('散点折线图1',FontProperties=font)
ax2.set_title('散点折线图2',FontProperties=font)
fig.suptitle('两幅图',FontProperties=font)
plt.show()

pandas模块---重要

pandas模块的数据类型

#pandas模块:更多的是对excel/csv(类似于txt文件,占用空间小但是具有表格特征)文件处理,对numpy+xlrd模块作了一层封装

import pandas as pd #约定俗成的潮流
import numpy as np

#pandas的数据类型
    #Series(现在一般不使用(一维))
df = pd.Series(np.array([1,2,3,4]))
print(df)

    #DataFrame(多维)
        #创建DataFrame数据结构
dates = pd.date_range('20190101',periods=6,freq='M')
print(dates)
np.random.seed(1)
values = np.random.rand(6,4)*10
print(values)
columns = ['c1','c2','c3','c4']
df = pd.DataFrame(values,index=dates,columns=columns)
print(df)

DataFrame数据结构的属性

import pandas as pd #约定俗成的潮流
import numpy as np

#创建DataFrame数据结构
dates = pd.date_range('20190101',periods=6,freq='M')
print(dates)
np.random.seed(1)
values = np.random.rand(6,4)*10
print(values)
columns = ['c1','c2','c3','c4']
df = pd.DataFrame(values,index=dates,columns=columns)
print(df)

#DataFrame数据结构的属性
print(df.dtypes)    #获取数据类型---对象类型
print(df.index) #获取行标签
print(df.columns)   #获取列标签
print(df.describe())    #查看数据每一列的极值,均值等
print(df.T) #转置
print(df.sort_values('c2')) #按照c2的值从小到大排序
print(df.sort_index(ascending=False))   #按行标签排序

DataFrame数据结构的取值/修改值

import pandas as pd #约定俗成的潮流
import numpy as np

#创建DataFrame数据结构
dates = pd.date_range('20190101',periods=6,freq='M')
print(dates)
np.random.seed(1)
values = np.random.rand(6,4)*10
print(values)
columns = ['c1','c2','c3','c4']
df = pd.DataFrame(values,index=dates,columns=columns)
print(df)

#DataFrame数据结构取值
print(df[['c1','c2']])  #按列标签取值
print(df.loc['2019-03-31':'2019-05-31'])   #通过自定义标签取值
print(df[1:4])  #通过行标签取值
print(df.values[0,0])   #通过行列取出单个值

print(df.iloc[0,0])
print(df.iloc[:,0]) #通过切片取值,必须加 ".iloc"

print(df['c1']>4)
print(df[df['c1']>4])   #逻辑取值

df.iloc[0,0] = 1    #修改某个数值
print(df)

pandas操作表格

#pandas操作表格

test_data = '''
5.1,,1.4,0.2
4.9,3.0,1.4,0.2
4.7,3.2,,0.2
7.0,3.2,4.7,1.4
6.4,3.2,4.5,1.5
6.9,3.1,4.9,
'''

from io import StringIO
print(test_data)
test_data = StringIO(test_data) #把test_data读入内存,相当于变成文件
print(test_data)
df = pd.read_csv(test_data,header=None)
print(df)

#缺失值处理
print(df.dropna(axis=1))  #获取删除含有缺失值的列之后的结果
print(df.dropna(axis=0))  #获取删除含有缺失值的行之后的结果
print(df.dropna(thresh=4))  #获取删除行值个数小于4个的行之后的结果

#合并数据处理
df2 = pd.DataFrame(np.zeros((2,3)))
df3 = pd.DataFrame(np.ones((2,3)))
print(df2)
print(df3)
print(pd.concat((df2,df3))) #默认按行合并
print(pd.concat((df2,df3),axis=1)) #调整为按列合并
print(df2.append(df3,ignore_index=True))  #只能按行追加

#导入导出数据
df.index = ['nick','json','tank','egon','alex','蔡启龙']
df.to_csv('test18.csv')

pandas读取json文件

#pandas读取json文件
json_txt = '[{"ttery":"min","issue":"20130801-3391","code":"8,4,5,2,9","code1":"297734529","code2":null,"time":1013395466000},\
{"ttery":"min","issue":"20130801-3390","code":"7,8,2,1,2","code1":"298058212","code2":null,"time":1013395406000},\
{"ttery":"min","issue":"20130801-3389","code":"5,9,1,2,9","code1":"298329129","code2":null,"time":1013395346000},\
{"ttery":"min","issue":"20130801-3388","code":"3,8,7,3,3","code1":"298588733","code2":null,"time":1013395286000},\
{"ttery":"min","issue":"20130801-3387","code":"0,8,5,2,7","code1":"298818527","code2":null,"time":1013395226000}]'
print(pd.read_json(json_txt,orient='records'))  #读取json文件,orient控制json文件需满足的格式

collections模块

有名元组

# collections模块: 提供更加复杂的数据类型

# 有名元组
from collections import namedtuple
point = namedtuple('point',['x','y'])
p = point(1,2)
print(p.x)	#通过属性引用
print(p.y)

默认字典

#普通字典,取值时key不存在会报错
# dic = {'a':1}
# print(dic['b'])

# 默认字典
from collections import defaultdict
dic = defaultdict(lambda :'nan')  # dic = {}  # 如果找不到赋了一个默认值
dic['a'] = 1
print(dic['a'])
print(dic['c'])	#取值时key不存在不报错,返回设定的默认值

双端队列

#普通列表,append只能末尾追加值,pop只能删除末尾值
# lis = [1,2,3]  # 线性表
# lis.append(4)
# print(lis)

# 双端队列
from collections import deque  # 链表
de = deque([1,2,3])
de.append(4)
print(de)
de.appendleft(0)	#在最左端加值
print(de)
de.popleft()
de.popleft()	#删除最左端的值
print(de)

计数器

s= 'programming'

#正常使用多行代码统计字符串s中每个字符出现次数
# dic = {}
# for i in s:
#     if i in dic:
#         dic[i]+=1
#     else:
#         dic[i] =1
# print(dic)

# 计数器
from collections import Counter
c = Counter()  # 字典
for i in s:
    c[i] +=1
print(c)

猜你喜欢

转载自www.cnblogs.com/-406454833/p/11627650.html