0

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

 1 year ago
source link: https://www.cnblogs.com/dd0016/p/16747580.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

数据描述与分析

   在进行数据分析之前,我们需要做的事情是对数据有初步的了解,这个了解就涉及对行业的了解和对数据本身的敏感程度,通俗来说就是对数据的分布有大概的理解,此时我们需要工具进行数据的描述,观测数据的形状等;而后才是对数据进行建模分析,挖掘数据中隐藏的位置信息。目前在数据描述和简单分析方面做的比较好的是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")
2985474-20221001183500878-1532486300.png

(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")
2985474-20221001183607509-90496518.png

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

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


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK