栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据分析(一)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据分析(一)

目录

数据加载

一、加载数据

载入数据: 

逐块读取

更改表头、索引

初步观察数据

 保存数据

pandas基础

Series

DataFrame

 筛选

探索性数据分析


数据加载

一、加载数据
import numpy as np
import pandas as pd

载入数据: 
df = pd.read_csv('train.csv') #相对路径
#绝对路径如:df = pd.read_csv('C:UsersLenovotrain.csv')
df.head(3) #输出头三行

  思考:tsv和csv的区别,pd.read_csv()和pd.read_table()的不同

各种格式文件读取:IO tools (text, CSV, HDF5, …) — pandas 1.4.2 documentation

pd.read_csv()一般是读取csv文件的,pd.read_table()读取txt文件。函数pd.read_csv()和pd.read_table()的内容相同,只是默认分隔符不同。

在read_csv()中,定界符为 “ , ” ,在read_table()中,定界符为 t 。

df = pd.read_table('train.csv')
df.head(3)


通过sep=’,’,让pd.read_table()实现pd.read_csv()的功能:

#此时输出内容与csv一致
df=pd.read_table('train.csv',sep=',')
df.head(3)

同理,通过sep=’t’,让pd.read_csv()实现pd.read_table()的功能。

逐块读取

当读取的文件较大时,这时若直接利用pandas读取,会给电脑造成太大的压力:

chunker = pd.read_csv('train.csv', chunksize=1000)
for chunk in chunker:
    print(chunk)

【提示】可以chunker(数据块)是什么类型?用for循环打印出来出处具体的样子是什么?

   读取pandas中DataFrame的数据类型。按列竖切切成几块读取,每次读1000行。

更改表头、索引

将表头改成中文,索引改为乘客ID

PassengerId => 乘客ID,Survived => 是否幸存,Pclass => 乘客等级(1/2/3等舱位),Name => 乘客姓名,Sex => 性别,Age => 年龄,SibSp => 堂兄弟/妹个数,Parch => 父母与小孩个数,Ticket => 船票信息,Fare => 票价,Cabin => 客舱,Embarked => 登船港口。

df = pd.read_csv('train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df.head()

思考:所谓将表头改为中文其中一个思路是:将英文列名表头替换成中文。还有其他的方法吗? 

df = pd.read_csv('train.csv')
df.rename(columns={'PassengerId':'乘客ID','Survived':'是否幸存','Pclass' :'仓位等级','Name' :'姓名','Sex' :'性别','Age' :'年龄','SibSp' :'兄弟姐妹个数','Parch' :'父母子女个数','Ticket' :'船票信息','Fare' :'票价','Cabin' :'客舱','Embarked' :'登船港口'}, inplace = True)
df =df.set_index('乘客ID')
df

初步观察数据
#查看数据的基本信息
df.info()

#观察表格前10行的数据和后15行的数据
df.head(10)
df.tail(15)

#判断数据是否为空,为空的地方返回True,其余地方返回False
df.isnull().head()

 保存数据
#将加载并做出改变的数据,在工作目录下保存为一个新文件train_chinese.csv
df.to_csv('train_chinese.csv')

pandas基础

Series

是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据便签(即索引)组成,仅由一组数据即可产生最简单的Series。

1、直接定义,自动生成索引

a=Series([9,-3,4,2])

输出:

0  9

1  -3

2  4

3  2

系统会自动为Series数据创建整数索引,可通过Series的values和index属性获取其数组表示形式和索引对象:

print(Series.values)

print(Series.index)

与字典型数据的keys(),values(),items()类似。

2、直接将一个字典型数据a转化为Series数据,Series(a)

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1

键值变成index,数据值变成columns。

3、创建Series时可自定义索引值

b=Series([9,-3,4,2],index=['a','c','d','b'])

那么访问Series中的值时可以直接用b['index']的方法,例如b['c'],b[['d','a']]可以同时选取多个值。

DataFrame

是一个表格型数据,含有一组有序的列,每一列可以是不同的类型值。DataFrame可以看成是由多个Series组成的字典,它们共用一个索引。

在构建DataFrame时,最常用的就是先创建一个data,data一般可以是字典和数组,再用a=DataFrame(data)来转换为DataFrame结构。在DataFrame(data)时也可以同时传入index和columns参数,两个参数必须是列表型。

#DataFrame会自动加上索引
data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],
        'year': [2000, 2001, 2002, 2001, 2002, 2003],'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}
example_2 = pd.DataFrame(data)
example_2

 任务:查看DataFrame数据的每列的名称

df.columns

任务: 查看某列的所有值 [有多种方法]

df['Cabin'].head(3)

#or

df.Cabin.head(3)

任务:加载文件"test_1.csv",然后对比"train.csv",看看有哪些多出的列,然后将多出的列删除

test_1 = pd.read_csv('test_1.csv')
test_1.head(3)

多了一列a

删除多余行:

del test_1['a']
test_1.head(3)

 思考:还有其他的删除多余的列的方式吗?

有的!

#不同于del方法,drop方法一次可删除多列
test_1 = test_1.drop(['a'],axis=1,inplace=True)
test_1.head(3)

任务:将['PassengerId','Name','Age','Ticket']这几个列元素隐藏,只观察其他几个列元素

#利用drop删除方法,但是未设置inplace=True,故相当于创建副本,隐藏表格内容。
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)

 筛选

以"Age"为筛选条件,显示年龄在10岁以下的乘客信息。

df[df["Age"]<10].head(3)

 以"Age"为条件,将年龄在10岁以上和50岁以下的乘客信息显示出来,并将这个数据命名为midage:

midage = df[(df["Age"]>10)& (df["Age"]<50)]
midage.head(3)

将midage的数据中第100行的"Pclass"和"Sex"的数据显示出来:

midage = midage.reset_index(drop=True)
midage.head(3)
midage.loc[[100],['Pclass','Sex']]

#reset_index()重置索引
#在获得新的index,原来的index变成数据列,保留在数据框中,不想保留原来的index的话可以使用参数drop=True,默认False。
#因为midage为原数据表摘出来的,索引是打乱的,所以需要reset_index()重置索引,才能进行摘取100行操作。

对比iloc和loc的异同:

loc是根据index来索引,比如df定义了一个index,那么loc就根据这个index来索引对应的行。iloc并不是根据index来索引,而是根据行号来索引,行号从0开始,逐次加1。

midage.loc[[100,105,108],['Pclass','Name','Sex']] 

midage.iloc[[100,105,108],[2,3,4]]

探索性数据分析

任务:利用Pandas对示例数据进行排序,要求升序

#自己构建一个都为数字的DataFrame数据
frame = pd.DataFrame(np.arange(8).reshape((2, 4)),#创建一个DataFrame对象 
                     index=['2', '1'], 
                     columns=['d', 'a', 'b', 'c'])
frame

frame.sort_values(by='c', ascending=True)
#构建的DataFrame中的数据根据c列,ascending=True升序排列

frame.sort_index() # 让行索引升序排序
frame.sort_index(axis=1) # 让列索引升序排序
frame.sort_index(axis=1, ascending=False) # 让列索引降序排序
frame.sort_values(by=['a', 'c'], ascending=False)# 让a,c两列数据同时降序排序


任务:利用Pandas进行算术计算,计算两个DataFrame数据相加结果

frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
frame1_a
frame1_b
frame1_a + frame1_b

    +          =

现在通过泰坦尼克号数据如何计算出在船上最大的家族有多少人?

'''
还是用之前导入的chinese_train.csv如果我们想看看在船上,最大的家族有多少人(‘兄弟姐妹个数’+‘父母子女个数’),我们该怎么做呢?
'''
max(text['兄弟姐妹个数'] + text['父母子女个数'])

 任务:Pandas describe()函数查看数据基本统计信息

#建立一个例子
frame2 = pd.DataFrame([[1.4, np.nan], 
                       [7.1, -4.5],
                       [np.nan, np.nan], 
                       [0.75, -1.3]
                      ], index=['a', 'b', 'c', 'd'], columns=['one', 'two'])
frame2

 

# 调用 describe 函数,观察frame2的数据基本信息

frame2.describe()

'''
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值
'''

 现在分别看看泰坦尼克号数据集中 票价、父母子女 这列数据的基本统计数据:

'''
看看泰坦尼克号数据集中 票价 这列数据的基本统计数据
'''
text['票价'].describe()


-------------------------------------------------------------------------------------------
'''
count    891.000000
mean      32.204208
std       49.693429
min        0.000000
25%        7.910400
50%       14.454200
75%       31.000000
max      512.329200
Name: 票价, dtype: float64
'''

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/971186.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号