10套练习,教你如何用Pandas做数据分析【6-10】

Pandas是入门Python做数据分析所必须要掌握的一个库,本文精选了十套练习题,帮助读者上手Python代码,完成数据集探索。

本文内容由科赛网翻译整理自Github,建议读者完成科赛网 从零上手Python关键代码 和 Pandas基础命令速查表 教程学习的之后,再对本教程代码进行调试学习。

【小提示:本文所使用的数据集下载地址:DATA | TRAIN 练习数据集

上集:10套练习,教你如何用Pandas做数据分析【1-5】


练习6-统计

探索风速数据

相应数据集:wind.data

步骤1 导入必要的库

# 运行以下代码

import pandas as pd

import datetime

步骤2 从以下地址导入数据

import pandas as pd

# 运行以下代码

path6 = "../input/pandas_exercise/exercise_data/wind.data"  # wind.data

步骤3 将数据作存储并且设置前三列为合适的索引

import datetime

# 运行以下代码

data = pd.read_table(path6, sep = "\s+", parse_dates = [[0,1,2]])

data.head()

out[293]:

步骤4 2061年?我们真的有这一年的数据?创建一个函数并用它去修复这个bug

# 运行以下代码

def fix_century(x):

    year = x.year - 100 if x.year > 1989 else x.year

    return datetime.date(year, x.month, x.day)

# apply the function fix_century on the column and replace the values to the right ones

data['Yr_Mo_Dy'] = data['Yr_Mo_Dy'].apply(fix_century)

# data.info()

data.head()

out[294]:

步骤5 将日期设为索引,注意数据类型,应该是datetime64[ns]

# 运行以下代码

# transform Yr_Mo_Dy it to date type datetime64

data["Yr_Mo_Dy"] = pd.to_datetime(data["Yr_Mo_Dy"])

# set 'Yr_Mo_Dy' as the index

data = data.set_index('Yr_Mo_Dy')

data.head()

# data.info()

out[295]:

步骤6 对应每一个location,一共有多少数据值缺失

# 运行以下代码

data.isnull().sum()

out[296]:

步骤7 对应每一个location,一共有多少完整的数据值

# 运行以下代码

data.shape[0] - data.isnull().sum()

out[297]:

步骤8 对于全体数据,计算风速的平均值

# 运行以下代码

data.mean().mean()

out[298]:

10.227982360836924

步骤9 创建一个名为loc_stats的数据框去计算并存储每个location的风速最小值,最大值,平均值和标准差

# 运行以下代码

loc_stats = pd.DataFrame()

loc_stats['min'] = data.min() # min

loc_stats['max'] = data.max() # max

loc_stats['mean'] = data.mean() # mean

loc_stats['std'] = data.std() # standard deviations

loc_stats

out[299]:

步骤10 创建一个名为day_stats的数据框去计算并存储所有location的风速最小值,最大值,平均值和标准差

# 运行以下代码

# create the dataframe

day_stats = pd.DataFrame()

# this time we determine axis equals to one so it gets each row.

day_stats['min'] = data.min(axis = 1) # min

day_stats['max'] = data.max(axis = 1) # max

day_stats['mean'] = data.mean(axis = 1) # mean

day_stats['std'] = data.std(axis = 1) # standard deviations

day_stats.head()

out[300]:

步骤11 对于每一个location,计算一月份的平均风速

(注意,1961年的1月和1962年的1月应该区别对待)

# 运行以下代码

# creates a new column 'date' and gets the values from the index

data['date'] = data.index

# creates a column for each value from date

data['month'] = data['date'].apply(lambda date: date.month)

data['year'] = data['date'].apply(lambda date: date.year)

data['day'] = data['date'].apply(lambda date: date.day)

# gets all value from the month 1 and assign to janyary_winds

january_winds = data.query('month == 1')

# gets the mean from january_winds, using .loc to not print the mean of month, year and day

january_winds.loc[:,'RPT':"MAL"].mean()

out[301]:

步骤12 对于数据记录按照年为频率取样

# 运行以下代码

data.query('month == 1 and day == 1')

out[302]:

步骤13 对于数据记录按照月为频率取样

# 运行以下代码

data.query('day == 1')

out[303]:


练习7-可视化

探索泰坦尼克灾难数据

相应数据集:train.csv

步骤1 导入必要的库

# 运行以下代码

import pandas as pd

import matplotlib.pyplot as plt

import seaborn as sns

import numpy as np

%matplotlib inline

步骤2 从以下地址导入数据

# 运行以下代码

path7 = '../input/pandas_exercise/exercise_data/train.csv'  # train.csv

步骤3 将数据框命名为titanic

# 运行以下代码

titanic = pd.read_csv(path7)

titanic.head()

out[306]:

步骤4 将PassengerId设置为索引

# 运行以下代码

titanic.set_index('PassengerId').head()

out[307]:

步骤5 绘制一个展示男女乘客比例的扇形图

# 运行以下代码

# sum the instances of males and females

males = (titanic['Sex'] == 'male').sum()

females = (titanic['Sex'] == 'female').sum()

# put them into a list called proportions

proportions = [males, females]

# Create a pie chart

plt.pie(

    # using proportions

    proportions,


    # with the labels being officer names

    labels = ['Males', 'Females'],


    # with no shadows

    shadow = False,


    # with colors

    colors = ['blue','red'],


    # with one slide exploded out

    explode = (0.15 , 0),


    # with the start angle at 90%

    startangle = 90,


    # with the percent listed as a fraction

    autopct = '%1.1f%%'

    )

# View the plot drop above

plt.axis('equal')

# Set labels

plt.title("Sex Proportion")

# View the plot

plt.tight_layout()

plt.show()

步骤6 绘制一个展示船票Fare, 与乘客年龄和性别的散点图

# 运行以下代码

# creates the plot using

lm = sns.lmplot(x = 'Age', y = 'Fare', data = titanic, hue = 'Sex', fit_reg=False)

# set title

lm.set(title = 'Fare x Age')

# get the axes object and tweak it

axes = lm.axes

axes[0,0].set_ylim(-5,)

axes[0,0].set_xlim(-5,85)

out[309]:

(-5, 85)

步骤7 有多少人生还?

# 运行以下代码

titanic.Survived.sum()

out[310]:

342

步骤8 绘制一个展示船票价格的直方图

# 运行以下代码

# sort the values from the top to the least value and slice the first 5 items

df = titanic.Fare.sort_values(ascending = False)

df

# create bins interval using numpy

binsVal = np.arange(0,600,10)

binsVal

# create the plot

plt.hist(df, bins = binsVal)

# Set the title and labels

plt.xlabel('Fare')

plt.ylabel('Frequency')

plt.title('Fare Payed Histrogram')

# show the plot

plt.show()


练习8-创建数据框

探索Pokemon数据

相应数据集:练习中手动内置的数据

步骤1 导入必要的库

# 运行以下代码

import pandas as pd

步骤2 创建一个数据字典

# 运行以下代码

raw_data = {"name": ['Bulbasaur', 'Charmander','Squirtle','Caterpie'],

            "evolution": ['Ivysaur','Charmeleon','Wartortle','Metapod'],

            "type": ['grass', 'fire', 'water', 'bug'],

            "hp": [45, 39, 44, 45],

            "pokedex": ['yes', 'no','yes','no']                       

            }

步骤3 将数据字典存为一个名叫pokemon的数据框中

# 运行以下代码

pokemon = pd.DataFrame(raw_data)

pokemon.head()

out[314]:

步骤4 数据框的列排序是字母顺序,请重新修改为name, type, hp, evolution, pokedex这个顺序

# 运行以下代码

pokemon = pokemon[['name', 'type', 'hp', 'evolution','pokedex']]

pokemon

out[315]:

步骤5 添加一个列place

# 运行以下代码

pokemon['place'] = ['park','street','lake','forest']

pokemon

out[316]:

步骤6 查看每个列的数据类型

# 运行以下代码

pokemon.dtypes

out[317]:

name object

type object

hp int64

evolution object

pokedex object

place object

dtype: object


练习9-时间序列

探索Apple公司股价数据

相应数据集:Apple_stock.csv

步骤1 导入必要的库

# 运行以下代码

import pandas as pd

import numpy as np

# visualization

import matplotlib.pyplot as plt

%matplotlib inline

步骤2 数据集地址

# 运行以下代码

path9 = '../input/pandas_exercise/exercise_data/Apple_stock.csv'  # Apple_stock.csv

步骤3 读取数据并存为一个名叫apple的数据框

# 运行以下代码

apple = pd.read_csv(path9)

apple.head()

out[320]:

步骤4 查看每一列的数据类型

# 运行以下代码

apple.dtypes

out[321]:

Date object

Open float64

High float64

Low float64

Close float64

Volume int64

Adj Close float64

dtype: object

步骤5 将Date这个列转换为datetime类型

# 运行以下代码

apple.Date = pd.to_datetime(apple.Date)

apple['Date'].head()

out[322]:

0 2014-07-08

1 2014-07-07

2 2014-07-03

3 2014-07-02

4 2014-07-01

Name: Date, dtype: datetime64[ns]

步骤6 将Date设置为索引

# 运行以下代码

apple = apple.set_index('Date')

apple.head()

out[323]:

步骤7 有重复的日期吗?

# 运行以下代码

apple.index.is_unique

out[324]:

True

步骤8 将index设置为升序

# 运行以下代码

apple.sort_index(ascending = True).head()

out[325]:

步骤9 找到每个月的最后一个交易日(business day)

# 运行以下代码

apple_month = apple.resample('BM')

apple_month.head()

out[326]:

步骤10 数据集中最早的日期和最晚的日期相差多少天?

# 运行以下代码

(apple.index.max() - apple.index.min()).days

out[327]:

12261

步骤11 在数据中一共有多少个月?

# 运行以下代码

apple_months = apple.resample('BM').mean()

len(apple_months.index)

out[328]:

404

步骤12 按照时间顺序可视化Adj Close值

# 运行以下代码

# makes the plot and assign it to a variable

appl_open = apple['Adj Close'].plot(title = "Apple Stock")

# changes the size of the graph

fig = appl_open.get_figure()

fig.set_size_inches(13.5, 9)


练习10-删除数据

探索Iris纸鸢花数据

相应数据集:iris.csv

步骤1 导入必要的库

# 运行以下代码

import pandas as pd

步骤2 数据集地址

# 运行以下代码

path10 ='../input/pandas_exercise/exercise_data/iris.csv'  # iris.csv

步骤3 将数据集存成变量iris

# 运行以下代码

iris = pd.read_csv(path10)

iris.head()

out[332]:


步骤4 创建数据框的列名称

iris = pd.read_csv(path10,names = ['sepal_length','sepal_width', 'petal_length', 'petal_width', 'class'])

iris.head()

out[333]:

步骤5 数据框中有缺失值吗?

# 运行以下代码

pd.isnull(iris).sum()

out[334]:

sepal_length 0

sepal_width 0

petal_length 0

petal_width 0

class 0

dtype: int64

步骤6 将列petal_length的第10到19行设置为缺失值

# 运行以下代码

iris.iloc[10:20,2:3] = np.nan

iris.head(20)

out[335]:

步骤7 将缺失值全部替换为1.0

# 运行以下代码

iris.petal_length.fillna(1, inplace = True)

iris

out[336]:

步骤8 删除列class

# 运行以下代码

del iris['class']

iris.head()

out[337]:

步骤9 将数据框前三行设置为缺失值

# 运行以下代码

iris.iloc[0:3 ,:] = np.nan

iris.head()

out[338]:

步骤10 删除有缺失值的行

# 运行以下代码

iris = iris.dropna(how='any')

iris.head()

out[339]:

步骤11 重新设置索引

# 运行以下代码

iris = iris.reset_index(drop = True)

iris.head()

out[340]:

转载本文请联系 科赛网kesci.com 取得授权。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,001评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,210评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,874评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,001评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,022评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,005评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,929评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,742评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,193评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,427评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,583评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,305评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,911评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,564评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,731评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,581评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,478评论 2 352