(datawhale开源课程)本次做的是分析kaggle 泰坦尼克号数据,数据集包括训练集和测试集。
数据特征如下:
一、数据导入及基本了解
先导入需要用的库,如果没有这个库请使用下面的命令在Python环境下安装:
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple (库名)
首先,导入训练集数据train.csv:
# 导入库
import pandas as pd
import numpy as np
import os
# 导入数据(相对路径)
df = pd.read_csv("..\\第一单元项目集合\\train.csv")
# 另一种数据加载方法
# pd.read_table("..\\第一单元项目集合\\train.csv", sep=",")
# 查看文件的绝对路径(也可以使用绝对路径载入数据)
os.path.abspath("train.csv")
# 查看当前工作目录
# os.getcwd()
# 打印前(后)几行数据
df.head(5)
df.tail(5)
# 查看数据大小。(891,12)表示891行12列
print(df1.shape)
逐块读取:读取前…行(修改参数chunksize)
# 逐块读取
df2 = pd.read_csv("..\\第一单元项目集合\\train.csv", chunksize=20)
df2.get_chunk()
修改表头成中文:
# 替换表头
# df.columns = ['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口']
# 增加新表头?!(保留疑问)
df = pd.read_csv("..\\第一单元项目集合\\train.csv", names=['乘客ID','是否幸存','仓位等级','姓名','性别','年龄','兄弟姐妹个数','父母子女个数','船票信息','票价','客舱','登船港口'], index_col='乘客ID', header=0)
df.head(5)
其次,初步分析数据:判断数据是否为空
# 判断数据是非为空
df.isnull().head()
# 查看数据基本信息
# 查看索引、数据类型和内存信息
df.info()
# 查看行索引
df.index
# 查看列索引
df.columns
# 查看数值型列的汇总统计
df.describe()
最后将修改后的数据保存到train_chainese.csv:
# 保存数据到文件
try:
# 保存 DataFrame 到 CSV 文件
df.to_csv('train_chinese.csv', index=False, encoding='utf-8-sig')
print("Successfully saved!")
except Exception as e:
# 如果有异常发生,打印异常信息
print(f"An error occurred: {e}")
这里我用了try-except来捕捉处理异常。
二、pandas基础
Pandas 的主要数据结构是 Seriesopen in new window(一维数据)与 DataFrameopen in new window(二维数据)。通过官方文档学习pandas。
#写入代码
df1 = pd.read_csv('test_1.csv')
df1.head()
# 删除a列
# del df1['a']
df1.pop('a')
# 该方法返回一个副本(不在原文件上修改)
df1.drop(['a'], axis=1).head()
# 可修改inplace参数为Ture:在原文件修改
# 观察此外其他几列数据
df.drop(['PassengerId','Name','Age','Ticket'],axis=1).head(3)
# 以"Age"为筛选条件,显示年龄在10岁以下的乘客信息
df[df['Age'] < 10]
# 将年龄在10岁以上和50岁以下的乘客信息显示出来
mid = df[(df['Age'] > 20) & (df['Age'] < 50)]
mid.head()
# 定位出第100行的"Pclass"和"Sex"的数据
mid.loc[[100], ['Pclass', "Sex", 'Name']]
# 重新设置了索引0123……
midage = mid.reset_index(drop=True)
midage.loc[[100], ['Pclass', "Sex", 'Name']]
# 索引为0123……不按照原本的
mid.head(3)
mid.iloc[[100, 105, 108], [3,4,5]]
三、 探索性数据分析
排序操作:
sample = pd.DataFrame(np.random.rand(3,4),
index=list('321'),
columns=list('dcba'))
# 按照a列的值排序(升序)
sample.sort_values('a')
# 按照行索引排序(升序)
sample.sort_index()
# 按照列索引排序(升序)
sample.sort_index(axis=1)
# (降序)
sample.sort_index(axis=1, ascending=False)
# 选两列排序则会优先进行第一列“a”(按照列的值降序)
sample.sort_values(['a','c'], ascending=False)
两个DataFrame数据相加,需要行和列索引都一样,否则为空值:
a = pd.DataFrame(np.random.rand(3,4),
index=list('321'),
columns=list('asdf'))
b = pd.DataFrame(np.random.rand(3,4),
index=list('1xc'),
columns=list('dcba'))
print(a)
print(b)
a + b
train文件分析:
# 计算两列相加最大值
max(df['兄弟姐妹个数'] + df['父母子女个数'])
# 找到这一行数据
print(df.loc[(df['兄弟姐妹个数'] + df['父母子女个数']).idxmax()])
# 检验
df.loc[[159]]
使用plt画频率直方图(hist函数)
# 统计性描述
df.describe()
from matplotlib import pyplot as plt
# 画出年龄的频率直方图
plt.hist(df['年龄'])
df['票价'].describe()
plt.hist(df['票价'])
本文含有隐藏内容,请 开通VIP 后查看