python-数据描述与分析(1)

[复制链接]
发表于 2022-10-1 18:52:28 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
数据描述与分析
   在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等;而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。目前在数据描述和简单分析方面做的比较好的是Pandas库。当然,它还需要结合我们之前提到的Numpy,Scipy等科学计算相关库才能发挥功效。
1.Pandas 数据结构
  在进行Pandas相关介绍时我们首先需要知道的是Pandas 的两个数据结构(即对象)Series 和 DataFrame,这是Pandas的核心结构,掌握了此二者结构和属性要素,会在具体的数据处理过程中如虎添翼。
1.1 Series 简介
Series 是一种类似于以为数据的对象,它由两部分组成,第一部分是一维数据,另外一部分是与此一维数据对应的标签数据。具体如下:
  1. import pandas as pd
  2. centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",])
  3. print (centerSeries)
复制代码
  1. #output:
  2. 0     中国科学院
  3. 1    文献情报中心
  4. 2        大楼
  5. 3     北四环西路
  6. dtype: object
复制代码
因为我们没有指定它的标签数据,而python默认是通过数字排序进行标识,接下来给他添加标示数据,具体如下:
  1. centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
  2. print (centerSeries) #index的size和Series的size必须一样长,否则报错
复制代码
  1. #output:
  2. a     中国科学院
  3. b    文献情报中心
  4. c        大楼
  5. d     北四环西路
  6. dtype: object
复制代码
对比之前的默认标识,我们可以看出它由1,2,3,4变成了a,b,c,d。接下来将解释这样标识的意义,具体如下:
  1. import pandas as pd
  2. centerSeries =pd.Series(["中国科学院","文献情报中心","大楼","北四环西路",],index=["a","b","c","d"])
  3. print (centerSeries[0])  #通过一维数组进行获取数据
  4. print (centerSeries[1])
  5. print (centerSeries["c"])  #通过标识index获取数据
  6. print (centerSeries["d"])
复制代码
  1. #output:
  2. 中国科学院
  3. 文献情报中心
  4. 大楼
  5. 北四环西路
复制代码
另外,我们可以看到通过一维数组格式获取数据和通过index标识获取数据都可以,这样的index就像曾经学过的数据库中的id列的作用,相当于建立了每个数据的索引。当然,针对Series的操作不只限于此,还有很多需要我们自己去通过“help”查看得到的。

1.2 DataFrame 简介
  DataFrame 是一个表格型的数据结构,它包含有列和行的索引,当然你也可以把它看作是由Series组织成的字典。需要说明的是,DataFrame的每一列中不需要数据类型相同,且它的数据是通过一个或者多个二维块进行存放,在了解DataFrame之前如果读者对层次化索引有所了解,那么DataFrame 可能相对容易理解,当然如果读者并不知道何谓层次化索引也没关系,举个例子:他类似于常见的excel的表格格式,可将它理解为一张excel表,具体如下:
  1. #简单的DataFrame 制作
  2. #字典格式的数据
  3. data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
  4.         "year":["2012","2013","2014","2015"],
  5.        "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
  6.        "student":["甲","乙","丙","丁"]}
  7. centerDF = pd.DataFrame(data)
  8. print(centerDF)
复制代码
  1. #output:
  2. name  year  local student
  3. 0     国科图  2012  北四环西路       甲
  4. 1     国科图  2013  北四环西路       乙
  5. 2  文献情报中心  2014  北四环西路       丙
  6. 3  文献情报中心  2015  北四环西路       丁
复制代码
  1. #调整列的顺序
  2. data = {"local":["北四环西路","北四环西路","北四环西路","北四环西路"],
  3. "name":["国科图","国科图","文献情报中心","文献情报中心"],
  4. "year":["2012","2013","2014","2015"],
  5. "student":["甲","乙","丙","丁"]}
  6. centerDF = pd.DataFrame(data,columns=["year","name","local","student"])
  7. print(centerDF)
复制代码
  1. #output:   
  2. year    name  local student
  3. 0  2012     国科图  北四环西路       甲
  4. 1  2013     国科图  北四环西路       乙
  5. 2  2014  文献情报中心  北四环西路       丙
  6. 3  2015  文献情报中心  北四环西路       丁
复制代码
  1. #更改index的默认设置
  2. data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
  3.         "year":["2012","2013","2014","2015"],
  4.        "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
  5.        "student":["甲","乙","丙","丁"]}
  6. centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
  7. print(centerDF)
复制代码
  1. #output:   
  2. year    name  local student
  3. a  2012     国科图  北四环西路       甲
  4. b  2013     国科图  北四环西路       乙
  5. c  2014  文献情报中心  北四环西路       丙
  6. d  2015  文献情报中心  北四环西路       丁
复制代码
既然DataFrame 是行列格式的数据,那么理所当然可以通过行、列的方式进行数据获取,按列进行数据据获取,具体如下:
  1. data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
  2.         "year":["2012","2013","2014","2015"],
  3.        "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
  4.        "student":["甲","乙","丙","丁"]}
  5. centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
  6. print (centerDF["name"])
  7. print (centerDF["student"])
复制代码
  1. #output:
  2. a       国科图
  3. b       国科图
  4. c    文献情报中心
  5. d    文献情报中心
  6. Name: name, dtype: object
  7. a    甲
  8. b    乙
  9. c    丙
  10. d    丁
  11. Name: student, dtype: object
复制代码
另外,可以看出按列进行获取时他们的index标识是相同的,且每一列是一个Series 对象
按行进行数据获取,其实是通过index进行操作,具体如下:
  1. data = {"name":["国科图","国科图","文献情报中心","文献情报中心"],
  2.         "year":["2012","2013","2014","2015"],
  3.        "local":["北四环西路","北四环西路","北四环西路","北四环西路"],
  4.        "student":["甲","乙","丙","丁"]}
  5. centerDF = pd.DataFrame(data,columns=["year","name","local","student"],index=["a","b","c","d"])
  6. print (centerDF.loc["a"])
  7. #在使用进行DataFrame.ix进行表中的数据块选择的时候,会抛出’DataFrame’ object has no attribute ‘ix’,这个是由于在不同的pandas的版本中,DataFrame的相关属性已过期,已不推荐使用导致的。
  8. #参考代码先锋网<br><img src="[img]https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWcyMDIyLmNuYmxvZ3MuY29tL2Jsb2cvMjk4NTQ3NC8yMDIyMTAvMjk4NTQ3NC0yMDIyMTAwMTE4MjEyOTg2OC0xMzE4MjM1OTUucG5n[/img]" alt="" width="816" height="257">
复制代码
  1. #output:
  2. year        2012
  3. name         国科图
  4. local      北四环西路
  5. student        甲
  6. Name: a, dtype: object
复制代码
另外,同样可以看出每一行是一个Series 对象,此时该Series的index其实就是DataFrame 的列名称,综上来看,对于一个DataFrame 来说,它是纵横双向进行索引,只是每个Series(纵横)都共用一个索引而已
1.3 利用Pandas加载、保存数据
在进行数据处理时我们首要工作是把数据加载到内存中,这一度成为程序编辑的软肋,但是Pandas包所提供的功能几乎涵盖了大多数的数据处理的加载问题,如read_csv、read_ExcelFile
(1)加载csv格式的数据
  1. import pandas as pd
  2. data_csv = pd.read_csv("D:/python_cailiao/test.csv")  #它的默认属性有sep=","
  3. data_csv
复制代码
  1. #output:<br>school    institute    grades    name
  2. 0    中国科学院大学    文献情报中心    15级    田鹏伟
  3. 1    中国科学院大学    文献情报中心    15级    李四
  4. 2    中国科学院大学    文献情报中心    15级    王五
  5. 3    中国科学院大学    文献情报中心    15级    张三
复制代码
  1. data_csv = pd.read_csv("D:/python_cailiao/test.csv",sep="#")   #更改默认属性sep="#"
  2. data_csv
复制代码
  1. #output:
  2. school,institute,grades,name
  3. 0    中国科学院大学,文献情报中心,15级,田鹏伟
  4. 1    中国科学院大学,文献情报中心,15级,李四
  5. 2    中国科学院大学,文献情报中心,15级,王五
  6. 3    中国科学院大学,文献情报中心,15级,张三
复制代码
  1. data_csv = pd.read_csv("D:/python_cailiao/test.csv",header=None,skiprows=[0])  #不要表头Header
  2. data_csv
复制代码
  1. #output:
  2. school    institute    grades    name
  3. 0    中国科学院大学    文献情报中心    15级    田鹏伟
  4. 1    中国科学院大学    文献情报中心    15级    李四
  5. 2    中国科学院大学    文献情报中心    15级    王五
  6. 3    中国科学院大学    文献情报中心    15级    张三
复制代码
  1. data_csv.columns=["school","institute","grades","name"]
  2. data_csv  #自行添加表头列
复制代码
  1. #output:
  2. school    institute    grades    name
  3. 0    中国科学院大学    文献情报中心    15级    田鹏伟
  4. 1    中国科学院大学    文献情报中心    15级    李四
  5. 2    中国科学院大学    文献情报中心    15级    王五
  6. 3    中国科学院大学    文献情报中心    15级    张三
复制代码
另外,综上,通过对csv格式的文件进行读取,我们可以指定读入的格式(sep=","),也可以指定他的header为空None,最后添加column,而之所以可以后来添加的原因是读入的csv已经是DataFrame格式对象
(2)保存csv数据
  1. [/code][code]data_csv.loc[1,"name"]="顾老师"
  2. data_csv.to_csv("D:/python_cailiao/save.csv")
复制代码
  1. [/code](1)加载excel格式的数据
  2. [code]
复制代码
  1. data_excel = pd.read_excel("D:/python_cailiao/excel.xlsx",sheet_name="test")
  2. data_excel
复制代码
  1. [/code][code]#output:
  2. school    institute    grades    name
  3. 0    中国科学院大学    文献情报中心    15级    田鹏伟
  4. 1    中国科学院大学    文献情报中心    15级    李四
  5. 2    中国科学院大学    文献情报中心    15级    王五
  6. 3    中国科学院大学    文献情报中心    15级    张三
复制代码
  1. data_excel.loc[1,"name"]="顾立平老师"
  2. data_excel
复制代码
  1. #output:
  2. school    institute    grades    name
  3. 0    中国科学院大学    文献情报中心    15级    田鹏伟
  4. 1    中国科学院大学    文献情报中心    15级    顾立平老师
  5. 2    中国科学院大学    文献情报中心    15级    王五
  6. 3    中国科学院大学    文献情报中心    15级    张三
复制代码
(2)保存数据
  1. data_excel.to_excel("D:/python_cailiao/save.xlsx",sheet_name="test")
复制代码
 
另外,对于excel文件来说同csv格式的处理相差无几,但是excel文件在处理时需要指定sheetname属性(读取和写入sheet_name)
参考书目:《数据馆员的python简明手册》
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表