1.一维数据分析

#导入numpy包
import numpy as np#导入panda包
import pandas as pd

numpy 一维数组 array

#定义:numpy一维数组array
a=np.array([1,2,3,4,5])

1)查询元素

#查询元素
a[0]

输出:

1

2)切片访问

#切片访问
a[1:4]

输出:

array([2, 3, 4])

3)循环访问

for i in a:print (i,'time 3 =',i*3)

输出:

1 time 3 = 3
2 time 3 = 6
3 time 3 = 9
4 time 3 = 12
5 time 3 = 15

4)数据类型

#数据类型
a.dtype

输出:

dtype('int32')

  • numpy 一维数组与列表的区别:

1)区别1:numpy 一维数组的统计功能

#一维数组的平均值
a.mean()

输出:

3.0

#一维数组的标准差
a.std()

输出:

1.4142135623730951

2)区别2:numpy 一维数组的向量化计算

#向量相加
a[0:2]+a[3:5]

输出:

array([5, 7])

#乘以标量
a[0:5]*10

输出:

array([10, 20, 30, 40, 50])

pandas 一维数组 series

#定义:pandas一维数组series
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])

描述统计:

#获取描述统计信息
S1.describe()

输出:

count    4.000000
mean     2.500000
std      1.290994
min      1.000000
25%      1.750000
50%      2.500000
75%      3.250000
max      4.000000
dtype: float64

iloc 和 loc:

  • iloc属性用于根据位置查询值
#iloc属性用于根据位置获取值
S1.iloc[0]

输出:

1

  • loc属性用于根据索引获取值
#loc属性用于根据索引获取值
S1.loc['a']

输出:

1

向量相加

#向量化运算:向量相加
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S3=S1+S2
S3

输出 :

a    6.0
b    8.0
c    NaN
d    NaN
e    NaN
f    NaN
dtype: float64

以上存在缺失值。有以下解决方法:

方法1:删除缺失值

#删除缺失值
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S4=S1+S2
S4.dropna()

输出:

a    6.0
b    8.0
dtype: float64

方法2:填充缺失值

#填充缺失值
S1=pd.Series([1,2,3,4],index=['a','b','c','d'])
S2=pd.Series([5,6,7,8],index=['a','b','e','f'])
S5=S1.add(S2,fill_value=0)
S5

输出:

a    6.0
b    8.0
c    3.0
d    4.0
e    7.0
f    8.0
dtype: float64


2.二维数据分析

numpy二维数据结构

#定义:numpy二维数组
a=np.array([[1,2,3,4],[5,6,7,8],[9,10,11,12]])

1)查询元素

#查询第一行,第三列元素
a[0,2]

输出:

3

2)获取第n行

#获取第2行
a[1,:]

输出:

array([5, 6, 7, 8])

3)获取第n列

#获取第3列
a[:,2]

输出:

array([ 3,  7, 11])

numpy数轴参数

1)按行计算

#按行计算:axis=1计算每一行
a.mean(axis=1)

输出:

array([  2.5,   6.5,  10.5])

1)按列计算

#按列计算:axis=0计算每一列
a.mean(axis=0)

输出:

array([ 5.,  6.,  7.,  8.])

pandas数据框(DataFrame)

#第1步:定义一个字典,映射列明与对应列的值
salesDict={'购药时间':['2008-01-01 星期五','2018-01-02 星期六','2018-01-26 星期三'],'社保卡号':['001616528','001616528','0012602828'],'商品编码':[236701,236701,236701],'商品名称':['强力VC银翘片','清热解毒口服液','感康'],'销售数量':[6,1,2],'应收金额':[82.8,28,16.8],'实收金额':[69,24.64,15]
}
#第2步:定义数据框,参数传入字典
saleDf=pd.DataFrame(salesDict)
saleDf

输出:

1)有序的数据框

#第1步:定义一个字典,映射列明与对应列的值
salesDict={'购药时间':['2008-01-01 星期五','2018-01-02 星期六','2018-01-26 星期三'],'社保卡号':['001616528','001616528','0012602828'],'商品编码':[236701,236701,236701],'商品名称':['强力VC银翘片','清热解毒口服液','感康'],'销售数量':[6,1,2],'应收金额':[82.8,28,16.8],'实收金额':[69,24.64,15]
}
#第2步:导入有序字典
from collections import OrderedDict
#第3步:定义一个有序字典
salesOrderDict=OrderedDict(salesDict)
#第4步:定义数据框:传入字典,列名
salesDf=pd.DataFrame(salesOrderDict)
salesDf

输出:

2)平均值

#按列计算平均值
salesDf.mean()

输出:

商品编码    236701.000000
销售数量         3.000000
应收金额        42.533333
实收金额        36.213333
dtype: float64

  • iloc属性用于根据位置查询值

1)查询元素

#查询元素
salesDf.iloc[1,2]

输出:

236701

2)获取第n行

#获取第1行:
salesDf.iloc[0,:]

输出:

购药时间    2008-01-01 星期五
社保卡号         001616528
商品编码            236701
商品名称           强力VC银翘片
销售数量                 6
应收金额              82.8
实收金额                69
Name: 0, dtype: object

3)获取第n列

#获取第1列:
saleDf.iloc[:,0]

输出:

0    2008-01-01 星期五
1    2018-01-02 星期六
2    2018-01-26 星期三
Name: 购药时间, dtype: object

  • loc属性用于根据索引查询值

1)查询元素

#查询元素
salesDf.loc[0,'商品名称']

输出

'强力VC银翘片'

2)获取某行

#获取第1行:
salesDf.loc[0,:]

输出:

购药时间    2008-01-01 星期五
社保卡号         001616528
商品编码            236701
商品名称           强力VC银翘片
销售数量                 6
应收金额              82.8
实收金额                69
Name: 0, dtype: object

3)获取某列

#获取第1列:
salesDf.loc[:,'商品名称']

或者:

#查询 商品名称 列
salesDf['商品名称']

输出:

0    强力VC银翘片
1    清热解毒口服液
2         感康
Name: 商品名称, dtype: object

延伸:

#查询 商品编码 ,商品名称,销售数量 三列
salesDf[['商品编码','商品名称','销售数量']]

输出:

4)切片功能

#查询指定范围
salesDf.loc[:,'商品编码':'销售数量']

输出:

5)通过条件判断筛选

a. 构建查询条件

querySer=salesDf.loc[:,'销售数量']>2
querySer

输出:

0     True
1    False
2    False
Name: 销售数量, dtype: bool

#查看数据类型
type(querySer)

输出:

pandas.core.series.Series

b. 应用查询条件

salesDf.loc[querySer,:]

输出:


数据分析的基本过程

数据分析步骤:

提出问题→理解数据→数据清洗→构建模型→数据可视化

1提出问题

a.月均消费次数

b.月均消费金额

c.客单价

d.消费趋势

2理解数据

1)读取Excel数据

#读取Excel数据
fileNameStr='.../朝阳医院2018年销售数据.xlsx'
xls=pd.ExcelFile(fileNameStr)
salesDf=xls.parse('Sheet1')

2)数据集描述统计信息

a. 打印前5行

#打印前5行
salesDf.head()

输出:

b. 统计行数,列数

#统计行数,列数
salesDf.shape

输出:

(6578, 7)

c. 查询某列的数据类型

#查看'购药时间'一列的数据类型
salesDf.loc[:,'购药时间'].dtype

输出:

dtype('O')

d. 查看所有列的数据类型

#查看所有列的数据类型
salesDf.dtypes

输出:

购药时间    object
社保卡号    object
商品编码    object
商品名称    object
销售数量    object
应收金额    object
实收金额    object
dtype: object

e.每一列的统计数

#每一列的统计数
salesDf.describe()

输出:


3数据清洗

数据清洗的基本过程:

选择子集→列名重命名→缺失数据处理→数据类型转换→数据排序→异常值处理

1.选择子集

#选择子集
subSalesDf=salesDf.loc[0:4,'购药时间':'销售数量']
subSalesDf

输出:

2.列名重命名

colNameDict={'购药时间':'销售时间'}
'''
inplace=False,数据框本身不会变,而会创建一个新数据框,inplace默认Flase;
inplase=True,数据框本身会改动
'''
salesDf.rename(columns=colNameDict,inplace=True)
salesDf.head()

输出:

3.缺失数据处理

print('删除缺失值前的大小',salesDf.shape)
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
print('删除缺失值后的大小',salesDf.shape)

输出:

删除缺失值前的大小 (6578, 7)
删除缺失值后的大小 (6575, 7)

4.数据类型转换

(1)字符串转化为数值

#字符串转化为数值(浮点数)
salesDf['销售数量']=salesDf['销售数量'].astype('float')
salesDf['应收金额']=salesDf['应收金额'].astype('float')
salesDf['实收金额']=salesDf['实收金额'].astype('float')
print('转化后的数据类型:n',salesDf.dtypes)

输出:

转化后的数据类型:销售时间     object
社保卡号     object
商品编码     object
商品名称     object
销售数量    float64
应收金额    float64
实收金额    float64
dtype: object

(2)处理日期

'''
定义函数:分割销售日期,获得销售日期
输出:timecolSer销售时间一列是Series数据类型
输出:分割后的时间,返回也是个Serries数据类型
'''
def splitSaletime(timeColSer):timeList=[]for value in timeColSer:dateStr=value.split(' ')[0]timeList.append(dateStr)#将列表转换为一维数据Series类型timeSer=pd.Series(timeList)return timeSer
#获取销售时间一列
timeSer=salesDf.loc[:,'销售时间']
#分割字符串,获取销售日期
dateSer=splitSaletime(timeSer)
#修改销售时间一列的值
salesDf.loc[:,'销售时间']=dateSer
salesDf.head()

输出

(3)字符串转换为日期

salesDf.loc[:,'销售时间']=pd.to_datetime(salesDf.loc[:,'销售时间'],format='%Y-%m-%d',errors='coerce')
salesDf=salesDf.dropna(subset=['销售时间','社保卡号'],how='any')
salesDf.dtypes

输出:

销售时间    datetime64[ns]
社保卡号            object
商品编码            object
商品名称            object
销售数量           float64
应收金额           float64
实收金额           float64
dtype: object

5.数据排序

#按销售日期进行升序排序
salesDf=salesDf.sort_values(by='销售时间',ascending=True)
salesDf.head()

输出

#重命名行名(index)
salesDf=salesDf.reset_index(drop=True)
salesDf.head()

输出:

#每列的描述统计信息
salesDf.describe()

输出:

(6)异常值处理

#删除异常值:通过条件判断筛选出数据
#查询条件
querySer=salesDf.loc[:,'销售数量']>0
#应用查询条件
print('删除异常值前:',salesDf.shape)
salesDf=salesDf.loc[querySer,:]
print('删除异常值后:',salesDf.shape)

输出:

删除异常值前: (6549, 7)
删除异常值后: (6506, 7)

4、构建模型

业务指标1:月均消费次数=总消费次数/月份数

(总消费次数:同一天内,同一个人发生的所有消费算作一次消费)

求总消费次数

#第一步:删除重复数据
kpi1_Df=salesDf.drop_duplicates(subset=['销售时间','社保卡号'])
#第二步:行数
totalⅠ=kpi1_Df.shape[0]
print('总消费次数=',totalⅠ)

输出:

总消费次数= 5342

求月份数

#第一步:排序
#按销售时间升序
kpi1_Df=kpi1_Df.sort_values(by='销售时间',ascending=True)
#重命名排名
kpi1_Df=kpi1_Df.reset_index(drop=True)
#第二步:获取时间范围
#最小时间值
startTime=kpi1_Df.loc[0,'销售时间']
#最大时间值
endTime=kpi1_Df.loc[totalⅠ-1,'销售时间']
#第三步:计算月份数
#天数
daysⅠ=(endTime-startTime).days
#月份数
monthsⅠ=daysⅠ//30
print('月份数:',monthsⅠ)

输出

6

求月均消费次数

kip1_Ⅰ=totalⅠ//monthsⅠ
print('业务指标1:月均消费次数=',kip1_Ⅰ)

输出:

业务指标1:月均消费次数= 890

业务指标2:月均消费金额=总消费金额/月份数

#总消费金额
totalMoneyF=salesDf.loc[:,'实收金额'].sum()
#月均消费金额
monthMoneyF=totalMoneyF/monthsⅠ
print('业务指标2:月均消费金额=',monthMoneyF)

输出

业务指标2:月均消费金额= 50668.351666666305

业务指标3:客单价=总消费金额/总消费次数

pct=totalMoneyF/totalⅠ
print('客单价:',pct)

输出:

客单价: 56.9094178210404


总结:

数据分析步骤:

提出问题→理解数据→数据清洗→构建模型→数据可视化

数据清洗步骤:

选择子集→列名重命名→缺失数据处理→数据类型转换→数据排序→异常值处理

数据框按行拼接_利用Python进行数据分析相关推荐

  1. python 数据框按行拼接_使用python进行数据分析

    Python常用的两类数据分析包:numpy.pandas 一.一维数据分析 (1)numpy数据包的导入.一维数据组的赋值与查询 (2)numpy一维数据与列表的区别 1.可以用来实现统计功能 如计 ...

  2. python统计行号_利用Python进行数据分析(第三篇上)

    上一篇文章我记录了自己在入门 Python 学习的一些基础内容以及实际操作代码时所碰到的一些问题. 这篇我将会记录我在学习和运用 Python 进行数据分析的过程: 介绍 Numpy 和 Pandas ...

  3. java爬取网页数据_利用Python做数据分析—对前程无忧数据类岗位进行分析

    引言 随着时代的发展,我国在各行各业都需要大量的人才引进,处于近几年最热门的行业也称"最火行业":大数据.数据分析.数据挖掘.机器学习.人工智能,这五门行业各有不同又互有穿插.近几 ...

  4. python处理水站的数据_利用Python进行数据分析(一):数据清洗与准备

    b站的小伙伴们大家吼~~ 在b站摸了快四年鱼的菜鸡也想开始做知识分享了,虽然说是分享其实根本目的也是为了督促自己好好学习把QAQ. 从今天开始,我将会在专栏分享我在学习<利用Python进行数据 ...

  5. python输入数组并计算_利用Python进行数据分析——Numpy基础:数组和矢量计算

    利用Python进行数据分析--Numpy基础:数组和矢量计算 ndarry,一个具有矢量运算和复杂广播能力快速节省空间的多维数组 对整组数据进行快速运算的标准数学函数,无需for-loop 用于读写 ...

  6. 利用python进行数据分析 笔记_利用python进行数据分析(O#039;Relly)学习笔记-一团网...

    利用python进行数据分析(O'Relly)学习笔记 1.第一个bug import pandas plot(arrange(10)) #报错name 'plot' is not defined. ...

  7. python怎么做面板数据分析_利用python进行数据分析之准备(一)

    原标题:利用python进行数据分析之准备(一) 欢迎关注天善智能微信公众号,我们是专注于商业智能BI,大数据,数据分析领域的垂直社区. 对商业智能BI.大数据分析挖掘.机器学习,python,R等数 ...

  8. 利用python进行数据分析_利用python进行数据分析复现(1)

    一直以来,都想学习python数据分析相关的知识,总是拖拖拉拉,包括这次这个分享也是.<利用python进行数据分析 第2版>是一次无意之间在简书上看到的一个分享,我决定将很详细.一直都 ...

  9. 利用python进行数据分析 笔记_利用python进行数据分析--(阅读笔记一)

    原博文 2016-06-17 23:21 − 以此记录阅读和学习<利用Python进行数据分析>这本书中的觉得重要的点! 第一章:准备工作 1.一组新闻文章可以被处理为一张词频表,这张词频 ...

最新文章

  1. 友盟小米收不到推送消息_Android 手机收不到消息推送的设置指南 - 融云 RongCloud...
  2. 使用phpMyAdmin时出现PHP 5.3+is required的解决方案
  3. GPS经纬度算附近有什么 --- GeoHash核心原理解析
  4. python pip升级 指向不同python版本
  5. oracle_18c新建用户用normal登陆失败
  6. 微型计算机接口位于什么之间,io接口位于什么和什么之间
  7. 华人AI界痛失“一代宗师”,计算机视觉之父黄煦涛教授去世
  8. python开发转行渗透测试_月薪45K的大牛用Python开发一款密码攻击测试器!密码形同虚设!...
  9. [转载]ASP.NET 格式化字符串
  10. 使用ViewFlipper实现广告图片的自动轮播的效果
  11. 转 Java工程师成神之路
  12. protel 99se快捷键 总结
  13. Java精品项目源码第111期小蜜蜂扩音器网上商城系统
  14. 【UI设计】零基础带你入门UI设计
  15. 软件测试工作学习必备指南——硬实力
  16. 软件开发中 常见英文文档 缩写(转)
  17. 洛谷-3387 【模板】缩点
  18. word段落操作快捷键(一)
  19. python unicode编码转换中文_python实现unicode转中文及转换默认编码的方法
  20. python爬虫:爬虫进阶之多线程爬虫

热门文章

  1. 2013.10u-boot移植之SD保存环境变量
  2. react 遍历对象_探索:跟随《Build your own React》实现一个简易React
  3. ajax.ajaxmethod无效,jQuery Ajax调用httpget webmethod(C#)无效
  4. 云时代的智能运维平台,助力企业创新迭代
  5. 独家首发 | 900页阿里文娱技术实战,8大技术栈解析技术全景
  6. Cocos 2d-x 3.3版本升级 五大维度提升3D品质
  7. 第十届蓝桥杯省赛JavaC组真题——详细答案对照(完整版-包含打扫机器人的视频全过程讲解与编码内容对照)
  8. ORACLE TEXT DATASTORE PREFERENCE(三)
  9. Linux 上安装 appium
  10. noi.ac NA529 【神树的矩阵】