数据描述与分析

在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等;而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。目前在数据描述和简单分析方面做的比较好的是Pandas库。当然,它还需要结合我们之前提到的Numpy,Scipy等科学计算相关库才能发挥功效。

1.Pandas 数据结构
在进行Pandas相关介绍时我们首先需要知道的是Pandas 的两个数据结构(即对象)Series 和 DataFrame,这是Pandas的核心结构,掌握了此二者结构和属性要素,会在具体的数据处理过程中如虎添翼。

1.1 Series 简介
Series 是一种类似于以为数据的对象,它由两部分组成,第一部分是一维数据,另外一部分是与此一维数据对应的标签数据。具体如下:

import pandas as pd
centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",])
print (centerSeries)
#output:
0 中国科学院
1 文献情报中心
2 大楼
3 北四环西路
dtype: object

因为我们没有指定它的标签数据,而python默认是通过数字排序进行标识,接下来给他添加标示数据,具体如下:

centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
print (centerSeries) #index的size和Series的size必须一样长,否则报错
#output:
a 中国科学院
b 文献情报中心
c 大楼
d 北四环西路
dtype: object

对比之前的默认标识,我们可以看出它由1,2,3,4变成了a,b,c,d。接下来将解释这样标识的意义,具体如下:

import pandas as pd
centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
print (centerSeries[0]) #通过一维数组进行获取数据
print (centerSeries[1])
print (centerSeries["c"]) #通过标识index获取数据
print (centerSeries["d"])
#output:
中国科学院
文献情报中心
大楼
北四环西路

另外,我们可以看到通过一维数组格式获取数据和通过index标识获取数据都可以,这样的index就像曾经学过的数据库中的id列的作用,相当于建立了每个数据的索引。当然,针对Series的操作不只限于此,还有很多需要我们自己去通过“help”查看得到的。

1.2 DataFrame 简介
DataFrame 是一个表格型的数据结构,它包含有列和行的索引,当然你也可以把它看作是由Series组织成的字典。需要说明的是,DataFrame的每一列中不需要数据类型相同,且它的数据是通过一个或者多个二维块进行存放,在了解DataFrame之前如果读者对层次化索引有所了解,那么DataFrame 可能相对容易理解,当然如果读者并不知道何谓层次化索引也没关系,举个例子:他类似于常见的excel的表格格式,可将它理解为一张excel表,具体如下:

#简单的DataFrame 制作
#字典格式的数据
data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data)
print(centerDF)
#output:
name year local student
0 国科图 2012 北四环西路 甲
1 国科图 2013 北四环西路 乙
2 文献情报中心 2014 北四环西路 丙
3 文献情报中心 2015 北四环西路 丁
#调整列的顺序
data = {"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"])
print(centerDF)
#output:
year name local student
0 2012 国科图 北四环西路 甲
1 2013 国科图 北四环西路 乙
2 2014 文献情报中心 北四环西路 丙
3 2015 文献情报中心 北四环西路 丁
#更改index的默认设置
data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print(centerDF)
#output:
year name local student
a 2012 国科图 北四环西路 甲
b 2013 国科图 北四环西路 乙
c 2014 文献情报中心 北四环西路 丙
d 2015 文献情报中心 北四环西路 丁

既然DataFrame 是行列格式的数据,那么理所当然可以通过行、列的方式进行数据获取,按列进行数据据获取,具体如下:

data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print (centerDF["name"])
print (centerDF["student"])
#output:
a 国科图
b 国科图
c 文献情报中心
d 文献情报中心
Name: name, dtype: object
a 甲
b 乙
c 丙
d 丁
Name: student, dtype: object

另外,可以看出按列进行获取时他们的index标识是相同的,且每一列是一个Series 对象

按行进行数据获取,其实是通过index进行操作,具体如下:

data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
"year":["2012","2013","2014","2015"],
"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
"student":["甲","乙","丙","丁"]}
centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
print (centerDF.loc["a"]) #在使用进行DataFrame.ix进行表中的数据块选择的时候,会抛出’DataFrame’ object has no attribute ‘ix’,这个是由于在不同的pandas的版本中,DataFrame的相关属性已过期,已不推荐使用导致的。
#参考代码先锋网
#output:
year 2012
name 国科图
local 北四环西路
student 甲
Name: a, dtype: object

另外,同样可以看出每一行是一个Series 对象,此时该Series的index其实就是DataFrame 的列名称,综上来看,对于一个DataFrame 来说,它是纵横双向进行索引,只是每个Series(纵横)都共用一个索引而已

1.3 利用Pandas加载、保存数据
在进行数据处理时我们首要工作是把数据加载到内存中,这一度成为程序编辑的软肋,但是Pandas包所提供的功能几乎涵盖了大多数的数据处理的加载问题,如read_csv、read_ExcelFile

(1)加载csv格式的数据

import pandas as pd
data_csv = pd.read_csv("D:/python_cailiao/test.csv") #它的默认属性有sep=","
data_csv
#output:
school institute grades name
0 中国科学院大学 文献情报中心 15级 田鹏伟
1 中国科学院大学 文献情报中心 15级 李四
2 中国科学院大学 文献情报中心 15级 王五
3 中国科学院大学 文献情报中心 15级 张三
data_csv = pd.read_csv("D:/python_cailiao/test.csv",sep="#")   #更改默认属性sep="#"
data_csv
#output:
school,institute,grades,name
0 中国科学院大学,文献情报中心,15级,田鹏伟
1 中国科学院大学,文献情报中心,15级,李四
2 中国科学院大学,文献情报中心,15级,王五
3 中国科学院大学,文献情报中心,15级,张三
data_csv = pd.read_csv("D:/python_cailiao/test.csv",header=None,skiprows=[0])  #不要表头Header
data_csv
#output:
school institute grades name
0 中国科学院大学 文献情报中心 15级 田鹏伟
1 中国科学院大学 文献情报中心 15级 李四
2 中国科学院大学 文献情报中心 15级 王五
3 中国科学院大学 文献情报中心 15级 张三
data_csv.columns=["school","institute","grades","name"]
data_csv #自行添加表头列
#output:
school institute grades name
0 中国科学院大学 文献情报中心 15级 田鹏伟
1 中国科学院大学 文献情报中心 15级 李四
2 中国科学院大学 文献情报中心 15级 王五
3 中国科学院大学 文献情报中心 15级 张三

另外,综上,通过对csv格式的文件进行读取,我们可以指定读入的格式(sep=","),也可以指定他的header为空None,最后添加column,而之所以可以后来添加的原因是读入的csv已经是DataFrame格式对象

(2)保存csv数据


data_csv.loc[1,"name"]="顾老师"
data_csv.to_csv("D:/python_cailiao/save.csv")


(1)加载excel格式的数据


data_excel = pd.read_excel("D:/python_cailiao/excel.xlsx",sheet_name="test")
data_excel

#output:
school institute grades name
0 中国科学院大学 文献情报中心 15级 田鹏伟
1 中国科学院大学 文献情报中心 15级 李四
2 中国科学院大学 文献情报中心 15级 王五
3 中国科学院大学 文献情报中心 15级 张三
data_excel.loc[1,"name"]="顾立平老师"
data_excel
#output:
school institute grades name
0 中国科学院大学 文献情报中心 15级 田鹏伟
1 中国科学院大学 文献情报中心 15级 顾立平老师
2 中国科学院大学 文献情报中心 15级 王五
3 中国科学院大学 文献情报中心 15级 张三

(2)保存数据

data_excel.to_excel("D:/python_cailiao/save.xlsx",sheet_name="test")

另外,对于excel文件来说同csv格式的处理相差无几,但是excel文件在处理时需要指定sheetname属性(读取和写入sheet_name)

参考书目:《数据馆员的python简明手册》

python-数据描述与分析(1)的更多相关文章

  1. Python数据描述与分析

    在进行数据分析之前,我们需要做的事情是对数据有初步的了解,比如对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等:而后才是对数据进行建模分析, ...

  2. python数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  3. python - 数据描述符(class 内置 get/set/delete方法 )

    数据描述符(class 内置 get/set/del方法 ): # 什么是描述符 # 官方的定义:描述符是一种具有“捆绑行为”的对象属性.访问(获取.设置和删除)它的属性时,实际是调用特殊的方法(_g ...

  4. python数据描述符

    Python的描述符是接触到Python核心编程中一个比较难以理解的内容,自己在学习的过程中也遇到过很多的疑惑,通过google和阅读源码,现将自己的理解和心得记录下来,也为正在为了该问题苦恼的朋友提 ...

  5. python 数据描述字符串转整数

    q3 = int(float(q3.replace('万', '')) * 10000)

  6. 数据抓取分析(python + mongodb)

    分享点干货!!! Python数据抓取分析 编程模块:requests,lxml,pymongo,time,BeautifulSoup 首先获取所有产品的分类网址: def step(): try: ...

  7. 毕设之Python爬取天气数据及可视化分析

    写在前面的一些P话:(https://jq.qq.com/?_wv=1027&k=RFkfeU8j) 天气预报我们每天都会关注,我们可以根据未来的天气增减衣物.安排出行,每天的气温.风速风向. ...

  8. python数据处理(七)之数据探索和分析

    1.探索数据 1.1 安装agate库 1.2 导入数据 1.3 探索表函数 a.排序 b.最值,均值 c.清除缺失值 d.过滤 e.百分比 1.4 连结多个数据集 a.捕捉异常 b.去重 c.缺失数 ...

  9. 用Python爬取《王者荣耀》英雄皮肤数据并可视化分析,用图说话

    大家好,我是辰哥~ 今天辰哥带大家分析一波当前热门手游<王者荣耀>英雄皮肤,比如皮肤上线时间.皮肤类型(勇者:史诗:传说等).价格. 1.获取数据 数据来源于<王者荣耀官方网站> ...

随机推荐

  1. led闪烁(时序输入输出,自定义变量,时钟仿真,执行顺序)

    1.设计定义 设计一个以200ms亮,200ms暗交替闪烁的led灯,并且有一个复位按钮可以停止工作. 2.设计输入 2.1端口 以固定周期交替闪烁说明由时钟控制,需要一个时钟控制端口clk,要求复位 ...

  2. gitlab+jenkins自动构建jar包并发布

    一.背景介绍: 公司软件都是java开发的,一般都会将java代码打包成jar包发布:为了减轻运维部署的工作量,合理偷懒,就需要自动化流程一条龙服务:开发将代码提交到gitlab--->jenk ...

  3. springmvc静态资源配置

    <servlet> <servlet-name>dispatcher</servlet-name> <servlet-class>org.springf ...

  4. Spring源码-入门

    一.测试类 public class Main { public static void main(String[] args) { ApplicationContext applicationCon ...

  5. [HNOI2011]卡农 (数论计数,DP)

    题面 原题面 众所周知卡农是一种复调音乐的写作技法,小余在听卡农音乐时灵感大发,发明了一种新的音乐谱写规则. 他将声音分成 n n n 个音阶,并将音乐分成若干个片段.音乐的每个片段都是由 1 1 1 ...

  6. [HDU6057] Kanade‘s convolution (FWT)

    题面 出自HDU6057 给你两个数列 A [ 0... 2 m − 1 ] A[0...2^m-1] A[0...2m−1] 和 B [ 0... 2 m − 1 ] B[0...2^m-1] B[ ...

  7. 第三课:nodejs npm和vue

    1.安装node js 2.node js给windows提供了一个可以直接执行js的环境{node提供翻译} 3.npm是包管理器 a.npm是nodejs的组成部分 b.管 包(package) ...

  8. Gitea 1.17.1 正式发布 | 08 累积更新

    Gitea 1.17.1 已正式发布.在这个小的版本更新中我们合并了 35 个 PR,没有包含功能性的更改,但我们强烈建议用户升级到此版本以获得重要的修复补丁. 致谢:感谢报告问题的安全研究人员,同时 ...

  9. vue3+three.js实现疫情可视化

    前言 自成都九月份以来疫情原因被封了一两周,居家着实无聊,每天都是盯着微信公众号发布的疫情数据看,那种页面,就我一个前端仔来说,看着是真的丑啊!(⊙_⊙)?既然丑,那就自己动手开整!项目是2022.9 ...

  10. Java中如何创建不可变(immutable)类

    什么是不可变类 1. 不可变类是指类的实例一经创建完成,这个实例的内容就不会改变. 2. Java中的String和八个基本类型的包装类(Integer, Short, Byte, Long, Dou ...