IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> datawhale_data_analysis_task1_数据载入及初步观察 -> 正文阅读

[Python知识库]datawhale_data_analysis_task1_数据载入及初步观察

第一章:数据载入及初步分析

1.1载入数据

1.1.1导入pandas和numpy

import numpy as np
import pandas as pd

简单来说,numpy是用来处理N维数组(线性代数)问题的工具,pandas是一个数据分析工具。这两个也是数据分析中最主要的工具。

1.1.2 载入数据

载入数据的路径有两种表达方式,相对路径和绝对路径,但都需要用到pd.read_代码,本章我们使用的数据是csv格式,所以载入数据的代码就是pd.read_csv

#df = pd.read_csv('../train.csv')

由于一些未知因素,我没有办法在jupyter里通过相对路径载入数据,但是其他编辑器里可以,这里为了不影响代码的整体工作,直接写成注释pass了。

df=pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train.csv')
df.head(3)
PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

绝对路径载入数据。

【总结】
1.载入数据一般是通过pd.read_文件格式载入
2.csv(Comma-Separated-Values):是使用逗号(或其他分隔符号)分隔,以纯文本形式储存数据的一种文件。纯文本意味着其中存在编码和解码问题。Excel在读取csv文件时会先识别BOM,BOM标识了这份文档是用什么编码的,而utf-8编码是直接忽略BOM的,所以在python中用encoding=(‘utf-8’)输出的csv文件是没有BOM的,此时Excel打开会出现乱码。一种解决方法是使用utf_8_sig编码。

1.1.3 数据分块

reader = pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train.csv', chunksize=500)
for chunk in reader:
    print(chunk.head(3))
   PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   

                                                Name     Sex   Age  SibSp  \
0                            Braund, Mr. Owen Harris    male  22.0      1   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   
2                             Heikkinen, Miss. Laina  female  26.0      0   

   Parch            Ticket     Fare Cabin Embarked  
0      0         A/5 21171   7.2500   NaN        S  
1      0          PC 17599  71.2833   C85        C  
2      0  STON/O2. 3101282   7.9250   NaN        S  
     PassengerId  Survived  Pclass                            Name     Sex  \
500          501         0       3                Calic, Mr. Petar    male   
501          502         0       3             Canavan, Miss. Mary  female   
502          503         0       3  O'Sullivan, Miss. Bridget Mary  female   

      Age  SibSp  Parch  Ticket    Fare Cabin Embarked  
500  17.0      0      0  315086  8.6625   NaN        S  
501  21.0      0      0  364846  7.7500   NaN        Q  
502   NaN      0      0  330909  7.6292   NaN        Q  

篇幅有限,只展示前三项(.head(3)的意思就是前三项),可以看到chunksize=500将数据分块,每一块是500行,且chunk的类型是dataframe。
在处理大文件时,有可能会导致内存溢出且十分耗时,用chunk分块并配合for或while方法可以分快处理数据,防止占用过多内存。

1.1.4 更改表头

df = pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train.csv', names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'],index_col='乘客ID',header=0)
df.head(3)
是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

index_col=‘索引列’,这是在规定索引列;header=行数,这是在规定新的表格从第几行开始读取数据。

1.2 初步观察数据

1.2.1 查看数据基本信息

df.info()
<class 'pandas.core.frame.DataFrame'>
Int64Index: 891 entries, 1 to 891
Data columns (total 11 columns):
 #   Column  Non-Null Count  Dtype  
---  ------  --------------  -----  
 0   是否幸存    891 non-null    int64  
 1   仓位等级    891 non-null    int64  
 2   姓名      891 non-null    object 
 3   性别      891 non-null    object 
 4   年龄      714 non-null    float64
 5   兄弟姐妹个数  891 non-null    int64  
 6   父母子女个数  891 non-null    int64  
 7   船票信息    891 non-null    object 
 8   票价      891 non-null    float64
 9   客舱      204 non-null    object 
 10  登船港口    889 non-null    object 
dtypes: float64(2), int64(4), object(5)
memory usage: 83.5+ KB

1.2.2 观察前几行和后几行的数据

df.head(10)
是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS
411Futrelle, Mrs. Jacques Heath (Lily May Peel)female35.01011380353.1000C123S
503Allen, Mr. William Henrymale35.0003734508.0500NaNS
603Moran, Mr. JamesmaleNaN003308778.4583NaNQ
701McCarthy, Mr. Timothy Jmale54.0001746351.8625E46S
803Palsson, Master. Gosta Leonardmale2.03134990921.0750NaNS
913Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg)female27.00234774211.1333NaNS
1012Nasser, Mrs. Nicholas (Adele Achem)female14.01023773630.0708NaNC
df.tail(10)
是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
88203Markun, Mr. Johannmale33.0003492577.8958NaNS
88303Dahlberg, Miss. Gerda Ulrikafemale22.000755210.5167NaNS
88402Banfield, Mr. Frederick Jamesmale28.000C.A./SOTON 3406810.5000NaNS
88503Sutehall, Mr. Henry Jrmale25.000SOTON/OQ 3920767.0500NaNS
88603Rice, Mrs. William (Margaret Norton)female39.00538265229.1250NaNQ
88702Montvila, Rev. Juozasmale27.00021153613.0000NaNS
88811Graham, Miss. Margaret Edithfemale19.00011205330.0000B42S
88903Johnston, Miss. Catherine Helen "Carrie"femaleNaN12W./C. 660723.4500NaNS
89011Behr, Mr. Karl Howellmale26.00011136930.0000C148C
89103Dooley, Mr. Patrickmale32.0003703767.7500NaNQ

1.2.3判断数据是否为空

df.isnull().head(5)
是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
乘客ID
1FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
2FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
3FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse
4FalseFalseFalseFalseFalseFalseFalseFalseFalseFalseFalse
5FalseFalseFalseFalseFalseFalseFalseFalseFalseTrueFalse

其中False表示非空True表示空。

1.3 保存数据

1.3.1 将更改后的数据输出到文件

df.to_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train_chinese.csv', encoding = 'utf_8_sig')

1.4 数据类型

1.4.1 DataFrame和Series

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}
example_1 = pd.Series(sdata)
example_1
Ohio      35000
Texas     71000
Oregon    16000
Utah       5000
dtype: int64
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
stateyearpop
0Ohio20001.5
1Ohio20011.7
2Ohio20023.6
3Nevada20012.4
4Nevada20022.9
5Nevada20033.2

Series可以看作是从一个一维空间到另一个一维空间的双射,DataFrame则是从一个多维空间到一维空间的双射,DATaFrame可以分成许多Series来观察。

1.4.2简单分析数据

df = pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train_chinese.csv')
df.columns
Index(['乘客ID', '是否幸存', '仓位等级', '姓名', '性别', '年龄', '兄弟姐妹个数', '父母子女个数', '船票信息',
       '票价', '客舱', '登船港口'],
      dtype='object')

.columns为显示列名称。

df['客舱'].head(3)
0    NaN
1    C85
2    NaN
Name: 客舱, dtype: object
df.客舱.head(3)
0    NaN
1    C85
2    NaN
Name: 客舱, dtype: object

df[‘列名称’]和df.列名称为显示这列的数据。

1.4.3简单数据处理

引入新数据集test_1,删除多余列。

test_1 = pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/test_1.csv')
test_1.head(3)
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarkeda
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS100
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C100
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS100
del test_1['a']
test_1.head(3)
Unnamed: 0PassengerIdSurvivedPclassNameSexAgeSibSpParchTicketFareCabinEmbarked
00103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
11211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
22313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

1.4.4隐藏列

df.drop(['乘客ID','姓名'],axis = 1).head(3)
是否幸存仓位等级性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
003male22.010A/5 211717.2500NaNS
111female38.010PC 1759971.2833C85C
213female26.000STON/O2. 31012827.9250NaNS

.drop表示隐藏,axis = 1表示隐藏列名称, axis = 0表示隐藏行名称
加入implace = True即可完全删除数据结构

1.5筛选

1.5.1 按照列的范围筛选数据

youngage = df[df['年龄']<10]
youngage.head(3)
乘客ID是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
7803Palsson, Master. Gosta Leonardmale2.03134990921.075NaNS
101113Sandstrom, Miss. Marguerite Rutfemale4.011PP 954916.700G6S
161703Rice, Master. Eugenemale2.04138265229.125NaNQ
midage = df[(df['年龄']>=10) & (df['年龄']<=50)]
midage.head(3)
乘客ID是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
0103Braund, Mr. Owen Harrismale22.010A/5 211717.2500NaNS
1211Cumings, Mrs. John Bradley (Florence Briggs Th...female38.010PC 1759971.2833C85C
2313Heikkinen, Miss. Lainafemale26.000STON/O2. 31012827.9250NaNS

1.5.2 筛选后找出midage中100位的数据

midage = midage.reset_index(drop=True)
midage.loc[[100],['姓名','性别']]
姓名性别
100Byles, Rev. Thomas Roussel Davidsmale

这里一定要先用新的midage数据集覆盖掉原有的,reset_index是为了抹除原有的索引,建立新的,drop = True是为了覆盖掉原有数据集。

midage.iloc[[100,105,120],[3,4]]
姓名性别
100Byles, Rev. Thomas Roussel Davidsmale
105Cribb, Mr. John Hatfieldmale
120Carbines, Mr. Williammale

.iloc要求loc的项目都为第几行第几列,而非列名称行名称。

1.6了解数据

首先,先导入刚才的中文版数据

text = pd.read_csv('/Users/WEH5SZH/Desktop/data_analysis/U1/train_chinese.csv')

1.6.1 排序操作

#先引入有序数组并规定行和列
frame = pd.DataFrame(np.arange(8).reshape((2, 4)), index=['2', '1'],columns=['d', 'a', 'b', 'c'])
frame
dabc
20123
14567

pd.DataFrame创建DataFrame对象,.arange生成0-7八个数的数组,.reshape规定行数和列数,index建立索引列并命名,colunms建立索引索引行。

#按c列升序
frame.sort_values(by='c',ascending = True)
dabc
20123
14567

ascending,True表示升序,False表示降序,by = ‘排序索引对象’

#行索引升序
frame.sort_index()
dabc
14567
20123
#列索引降序
frame.sort_index(axis = 1, ascending = False)
dcba
20321
14765

.sort_index(默认axis = 0),0行索引,1列索引

1.6.2 综合排序

text.sort_values(by=['票价','年龄'], ascending = False).head(3)
乘客ID是否幸存仓位等级姓名性别年龄兄弟姐妹个数父母子女个数船票信息票价客舱登船港口
67968011Cardeza, Mr. Thomas Drake Martinezmale36.001PC 17755512.3292B51 B53 B55C
25825911Ward, Miss. Annafemale35.000PC 17755512.3292NaNC
73773811Lesurer, Mr. Gustave Jmale35.000PC 17755512.3292B101C

1.6.3 Pandas算术特征

frame1_a = pd.DataFrame(np.arange(9.).reshape(3, 3),
                     columns=['a', 'b', 'c'],
                     index=['one', 'two', 'three'])
frame1_a
abc
one0.01.02.0
two3.04.05.0
three6.07.08.0
frame1_b = pd.DataFrame(np.arange(12.).reshape(4, 3),
                     columns=['a', 'e', 'c'],
                     index=['first', 'one', 'two', 'second'])
frame1_b
aec
first0.01.02.0
one3.04.05.0
two6.07.08.0
second9.010.011.0
#将frame_a和frame_b进行相加
frame1_a + frame1_b
abce
firstNaNNaNNaNNaN
one3.0NaN7.0NaN
secondNaNNaNNaNNaN
threeNaNNaNNaNNaN
two9.0NaN13.0NaN

【总结】
1.两个数据集相加得到的结果还是个数据集
2.相加时,运算逻辑是对应相加,无法对应则返回NaN

1.6.4 船上存活的最大家族的人数是多少

max(text['兄弟姐妹个数'] + text['父母子女个数'])
10

1.6.5 查看数据基本信息

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

【总结】
.describe()显示的信息:
count : 样本数据大小
mean : 样本数据的平均值
std : 样本数据的标准差
min : 样本数据的最小值
25% : 样本数据25%的时候的值
50% : 样本数据50%的时候的值
75% : 样本数据75%的时候的值
max : 样本数据的最大值

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-07-14 10:49:15  更:2021-07-14 10:49:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 0:28:01-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码