numpy pandas2

numpy和pandas是使用python进行数据分析的两个基本工具。numpy在线性代数中运用较多,而pandas则更多的用来分析表结构的数据。numpy与pandas都有一维和二维数据结构。

numpy的一维数组我们称之为array。定义方式如下:

import numpy as np
a=np.array([1,2,3,4,5])

还有几个基本的应用:

#查询元素
a[0]
#切片访问
a[1:3]
#循环访问
for i in a:
   print(i)
#数据类型
a.dtype

我们可以发现List和array一维数组的样子很像,那么它们有什么区别呢?
numpy之所以适用于数据分析,就是因为它具有许多List不具有的功能:

(1)统计功能

#求平均值
a.mean()
#求标准差
a.std()
#向量相加
a=np.array([1,2,3])
b=np.array([4,5,6])
a+b
a*b

pandas的一维数据结构称之为series。定义方式如下:

import pandas as pd

stocks=pd.Series([54.74,190.9,173.14,1050.3,181.86,1139.49],

index=[‘腾讯‘,‘阿里巴巴‘,‘苹果‘,‘谷歌‘,‘Facebook‘,‘亚马逊‘])

如果说array一维数组和List比较类似,那Series就和Dictionary相像,每个索引值对应一个值。Series就是array一维数组的升级版,具有许多它不具有的功能:

#获取描述统计信息
stocks.describe()
#运用iloc属性根据位置获取值
stocks.iloc[1]
#运用loc属性根据索引值获取值
stocks.loc[‘腾讯‘]
#根据索引值进行向量的加减乘除,若索引值不对应,则会产生数值型缺失值NaN
s1=pd.Series([1,2,3,4],index=[‘a‘,‘b‘,‘c‘,‘d‘])
s2=pd.Series([10,20,30,40],index=[‘a‘,‘b‘,‘e‘,‘f‘])
s3=s1+s2
s3
#那出现缺失值了,如何删除呢
s3.dropna()
s3

下面我们来看二位数据结构,既有行也有列。

Numy中利用array来创建二维数组,而Pandas利用DataFrame来创建二维数组。

先来看array二维数组的几个简单操作:

#定义二维数组(创建一个三行四列二维数组)
a=np.array([
           [1,2,3,4],
           [5,6,7,8],
           9,10,11,12]
                      ])
#查询元素 前面代表行号,后面代表列号
a[0,2]
#获取第一行
a[0,:]
#获取第一列
a[:,0]
#计算平均值、标准差的办法(array一维数组则没有这个功能)
 #计算整个数组所有元素的平均值/标准差
a.mean()
a.std()
  #计算每一行的平均值/标准差
a.mean(axis=1)
a.std(axis=1)
  #计算每一列的平均值/标准差
a.mean(axis=0)
a.std(axis=0)

再来看Pandas二维数组DataFrame,它和我们的Excel十分类似。

以下是其简单操作:

#第一步需要定义字典
salesDict={‘购药时间‘:[‘2008-01-01 星期五‘,‘2018-01-01 星期六‘,‘2018-01-06 星期三‘],
          ‘社保卡号‘:[‘001616528‘,‘001616528‘,‘001616528‘],
          ‘商品编码‘:[236701,236701,236701],
          ‘商品名称‘:[‘强力VC银翘片‘,‘清热解毒口服液‘,‘感康‘],
          ‘销售数量‘:[6,1,2],
          ‘应收金额‘:[82.8,28,16.8],
          ‘实收金额‘:[69,24.64,15]}
salesDf=pd.DataFrame(salesDict)
salesDf
#但由于字典是无序的,如果需要让它按照我们输入的键排列的话,就需要定义有序字典
from collections import OrderedDict
salesOrderedDict=OrderedDict(salesDict)
salesDf=pd.DataFrame(salesOrderDict)
#平均值计算,按每列来求
salesDf.mean()
#运用iloc属性根据位置获取值,前面代表行号,后面代表列号
salesDf.iloc[0,1]
  #获取第一行
salesDf.iloc[0,:]
  #获取第一列
salesDf.iloc[:,0]
#运用loc属性根据索引值获取值,前面代表行名,后面代表列名
salesDf.loc[0,‘商品编码‘]
    #获取第一行
salesDf.loc[0,:]
    #获取第一列
salesDf.iloc[:,‘商品名称‘]
#查询范围
  #查询某几列
salesDf.[[‘商品名称‘],[‘销售数量‘]]
  #查询指定连续的列
salesDf.loc[:,‘商品名称‘,‘销售数量‘]
#通过条件判断筛选符合条件的行
querySer=salesDf.loc[:,‘销售数量‘]>1
querySer
salesDf.loc[querySer,:]
#查看数据有多少行和列
salesDf.shape
#查看每一列的统计数
salesDf.describe()

下面我们介绍数据分析的基本过程:

总共是5步,分别是提出问题/理解数据/数据清洗/构建模型/数据可视化

首先提出问题:我们打算求数据集:朝阳医院2018年销售数据 的

月均消费次数/月均消费金额/客单价 三个值

再是理解数据

#读取数据
FileNameStr=‘./朝阳医院2018年销售数据‘
xls=pd.ExcelFile(FileNameStr,dtype=‘object‘)
salesDf=xls.parse(‘Sheet1‘,dtype=‘object‘)

接着进行数据清洗:

这个步骤共有6小步,分别是 选择子集/列名重命名/缺失数据处理/数据类型转换/数据排序/异常值处理

#选择子集
subsalesDf=salesDf.loc[0:4,‘购药时间‘:‘销售数量‘]
subsalesDf
#列名重命名 前面是旧列名,后面是新列名,inplace=True是将原数据框变成新数据框,
  而False则是创建一个改动的新数据框
colNameDict={‘购药时间‘:‘销售时间‘}
salesDf.rename(columns=colNameDict,inplace=True)
#缺失数据处理 选取的列数值有缺失就会被删掉
salesDf=salesDf.dropna(subset=[‘销售时间‘,‘社保卡号‘],how=‘any‘)
#数据类型转换
salesDf[‘销售数量‘]=salesDf[‘销售数量‘].astype(‘float‘)
salesDf[‘应收金额‘]=salesDf[‘应收金额‘].astype(‘float‘)
salesDf[‘实收金额‘]=salesDf[‘实收金额‘].astype(‘float‘)
print(‘转换后的数据类型:\n‘,salesDf.dtypes)
#分割销售日期 ,将‘2008-01-01 星期五‘分割,取‘2008-01-01‘
def splitSaletime(timeColSer):
    timeList=[]
    for value in timeColSer:
          dateStr=value.split(‘‘)[0]
          timeList.append(dateStr)
    timeSer=pd.Series(timeList)
     return timeSer
timeSer=salesDf.loc[:,‘销售时间‘]
dateSer=splitSaletime(timeSer)
#修改销售时间这一列的值
salesDf.loc[:,‘销售时间‘]=dateSer
#字符串转换日期
salesDf.loc[:,‘销售时间‘]=pd.to_datetime(salesDf.loc[:,‘销售时间‘],
                                        format=‘%Y-%m-%d‘,
                                         errors=‘coerce‘)
#将转换日期过程中不符合日期格式的数值转换而成的空值None删除掉
salesDf=salesDf.dropna(subset=[‘销售时间‘,‘社保卡号‘],how=‘any‘)
#将数据排序 ascending=True表示升系,False降序
salesDf=salesDf.sort_values(by=‘销售时间‘,ascending=True)
#排列后行数顺序会乱,所以要重命名
salesDf=salesDf.reset_index(drop=True)
#异常值处理 通过条件判断筛选出我们想要的数据
querySer=salesDf.loc[:,‘销售数量‘]>0
salesDf=salesDf.loc[querySer,:]

再进行构建模型:

月均消费次数=总消费次数/月份数

(将同一个社保卡号的人同一天的消费算作是以此消费)

#删除重复数据
kpi1Df=salesDf.drop_duplicates(subset=[‘销售时间‘,‘社保卡号‘])
#查看kpi1Df总共有多少行,即总消费次数
totalkpi1Df=kpi1Df.shape[0]
#按销售时间排序并重命名
kpi1Df=kpi1Df.sort_value(by=‘销售时间‘,ascending=True)
kpi1Df=kpi1Df.reset_index(drop=True)
#获取时间范围
startTime=kpi1Df.loc[0,‘销售时间‘]
endTime=kpi1Df.loc[totalkpi1Df-1,‘销售时间‘]
#计算月份数
days=(endTime-startTime).days
months=days//30
#总消费次数/月份数
kpi1=totalkpi1Df//months

月均消费金额=总消费金额/总月份数

#总消费金额
totalMoney=salesDf.loc[:,‘实收金额‘].sum()
#总消费金额/总月份数
monthMoney=totalMoney/months

客单价=总消费金额/总消费次数

pct=totalMoney/kpi1

最后一步就是数据可视化,来反映变化趋势。这需要用到matplotlib这个绘图工具了。这个且听下回分解。

在学习这块内容的时候,我在定义完分割函数splitSaletime后,调用函数显示错误的情况,如下图所示:

在大神的帮助下,了解到原因是因为我那一列的数据中含有缺失值为浮点数据类型的数据,所以我就运用dropna函数将其删除...随后成功。

这一块数据分析的内容比较基础,容易理解,也让我掌握了在excel之外进行数据分析的一个技能,而且相比excel,代码记熟后还是用python更舒服~人生苦短,我用python!

原文地址:https://www.cnblogs.com/fan-1994716/p/11965675.html

时间: 2024-11-02 19:58:18

numpy pandas2的相关文章

numpy数据类型dtype转换

这篇文章我们玩玩numpy的数值数据类型转换 导入numpy >>> import numpy as np 一.随便玩玩 生成一个浮点数组 >>> a = np.random.random(4) 看看信息 >>> a array([ 0.0945377 , 0.52199916, 0.62490646, 0.21260126]) >>> a.dtype dtype('float64') >>> a.shape (4,

numpy的random模块

[说明] 翻译自官网的文档. 随机抽样 (numpy.random) 简单的随机数据 rand(d0, d1, ..., dn) 随机值 >>> np.random.rand(3,2) array([[ 0.14022471, 0.96360618], #random [ 0.37601032, 0.25528411], #random [ 0.49313049, 0.94909878]]) #random randn(d0, d1, ..., dn) 返回一个样本,具有标准正态分布.

NumPy基础:数组和失量计算

NumPy : Numerical Python,是高性能科学计算和数据分析的基础包. 部分功能: ndarray:一个具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组: 用于对整组数据进行快速运算的标准数学函数(无需编写循环): 用于读写磁盘数据的工具以及用于操作内存映射文件的工具: 线性代数.随机数生成以及傅里叶变换功能: 用于集成C.C++.Fortran等语言编写的代码工具: 大部分数据分析应用关注的功能: 用于

【学习】基础知识:数组和矢量计量【Numpy】

Numpy是高性能科学计算和数据分析的基础包.功能如下: ndarray 一个具有矢量算法运算和复杂广播能力的快速且节省空间的多维数组 用于对整组数据进行快速运算的标准数学函数(无需编写循环) 用于读写磁盘数据的工具以及用于操作内存映射文件的工具. 线性代数.随机数生成以及傅里叶变换功能 用于集成由C\C++\Fortran等语言编写的代码的工具 numpy本身并没有提供多么高级的数据分析功能,理解numpy数组以及面向数组的计算将有助于更加高效地使用诸如pandas之类的工具 关注的功能集中在

数据分析之Numpy库入门

1.列表与数组 在python的基础语言部分,我们并没有介绍数组类型,但是像C.Java等语言都是有数组类型的,那python中的列表和数组有何区别呢? 一维数据:都表示一组数据的有序结构 区别: 列表:数据类型可以不同,如:[3.1413,'pi',3.1404,[3.1402,2.34],'3.2376'] 数组:数据类型相同 .如[3.14,34.34,3433.3,343.23] 二维数据:二维数据由多个一维数据构成,是一维数据的集合形式!表格是典型的二维数据! 注意:表格的表头,可以是

python科学计算之numpy

1.np.logspace(start,stop,num): 函数表示的意思是;在(start,stop)间生成等比数列num个 eg: import numpy as np print np.logspace(1,4,4) 结果为: [    10.    100.   1000.  10000.] 2. np.fromstring('admin',dtype=np.int8):函数的作用是将字符串装换成对应的ascii值 import numpy as np print np.fromstr

NumPy基础(一)

安装自行解决 ##为什么使用NumPy 文件 vectorSumCompare.py #!/usr/bin/env python # -*- coding:utf-8 -*- __author__ = 'teng' import sys from datetime import datetime import numpy as np def numpysum(n):     a = np.arange(n)**2     b = np.arange(n)**3     c = a+b     r

python 3.4 装matplotlib numpy

为了装个matplotlib包,搞了好久: python3.4,官方没有对应版本的包,只能去下面这个地方下对应的版本: http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载试了下,后发现出错,好像还缺个numpy的包 python 3.4 numpy官方也没有对应版本, 貌似得到下面的网站下载 http://www.lfd.uci.edu/~gohlke/pythonlibs/#pyparsing 最后终于可以了 python 3.4 装matplotlib

《Python数据分析常用手册》一、NumPy和Pandas篇

一.常用链接: 1.Python官网:https://www.python.org/ 2.各种库的whl离线安装包:http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn 3.数据分析常用库的离线安装包(pip+wheels)(百度云):http://pan.baidu.com/s/1dEMXbfN 密码:bbs2 二.常用库 1.NumPy NumPy是高性能科学计算和数据分析的基础包.部分功能如下: ndarray, 具有矢量算术运算和