一起入门数据分析

发布于:2024-03-18 ⋅ 阅读:(78) ⋅ 点赞:(0)

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 后查看

网站公告

今日签到

点亮在社区的每一天
去签到