动手学数据分析Task01 数据加载及探索性数据分析

学习目标:

边做边学,完成kaggle上泰坦尼克的任务,实战数据分析全流程。


学习内容:

第一章第一节 数据载入及初步观察

1.1 载入数据

        数据集下载 Titanic - Machine Learning from Disaster | Kaggle

import numpy as np
import pandas as pd

# 相对路径载入
df = pd.read_csv('train.csv')
df.head(3)

# 绝对路径载入
df = pd.read_csv('D:hands-on-data-analysis-master/data/Titanic/train.csv') 
# 地址变为反斜杠
df.head(3)

        将表头改为中文,两种方法:names选项或rename columns

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

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

# header=0 读取第一行到 DataFrame 的列名,names将之替换;
# header = None第一行不是列名而是内容,列名为names


# 方法二:
# 使用columns更改列名,中文要在前面加u
df.rename(columns = {u"是否幸存": 'Survived'}, inplace=True)
df.head()

# 如果用了inplace=True,再用df=df.rename(),那么右边直接对df进行操作,
# 不是返回dataframe而是返回none,df.head()就会报错,因为nonetype没有head属性

1.2 初步观察

# 【总结】
df.info()         # 打印摘要
df.describe()     # 描述性统计信息(数值型变量)
df['性别'].value_counts(dropna=False)    # 查看某个字段的频数分布,保留nan
df.values         # 数据<ndarray>,注意是属性.values,不是方法.values()
df.to_numpy()     # 数据<ndarray>
df.shape          # 形状 (行数, 列数)
df.columns        # 列标签 <Index>
df.columns.values # 列标签 <ndarray>
df.index          # 行标签 <Index>
df.index.values   # 行标签 <ndarray>,全部列出
df.head(10)       # 查看前10行
df.tail(15)       # 查看后15行
df.isnull().head()# 判断数据是否为空,空的地方返回True,其余地方返回False

1.3 保存数据

df.to_csv('train_chinese.csv')

问题探讨:

1. 相对路径载入报错时,尝试使用os.getcwd()查看当前工作目录。

import os
os.getcwd()

2. 知道数据加载的方法后,试试pd.read_csv()和pd.read_table()的不同,如果想让他们效果一样,需要怎么做?了解一下'.tsv'和'.csv'的不同,如何加载这两个数据集?

        1) csv: comma-separated values;     tsv: tab-separated values 

        2) read_csv()读取','分隔符文件,read_table()读取'\t'分隔符文件,后者以行为单位进行存储,即一行只有一列

        3)指定read_table()分隔符为','可实现read_csv()效果

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

df2 = pd.read_table('train.csv',sep=',')
df2.head(3)

3. 逐块读取

        逐块读取本质就是将文本分成若干块,每次处理 chunksize 行的数据,最终返回一个TextParser 对象,对该对象进行迭代遍历,可以完成逐块统计的合并处理。

        该对象中的每一个元素为DataFrame,shape为 chunksize 行 x 原有 列。

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

学习心得:

        魔鬼藏在细节中,但每一次看似费时费力地解决问题,都是为未来打下基础,随着时间慢慢积累,实现复利效应。而如果糊弄过去,就错过了真正造成改变的机会,恐怕未来每一刻都会重复此刻的困境。

上一篇:Java ClassLoader笔记


下一篇:2021-09-28