python数据分析案例2

2023-10-26

# load datasets
import pandas as pd

df_08 = pd.read_csv('all_alpha_08.csv') 
df_18 = pd.read_csv('all_alpha_18.csv')

 

# view 2008 dataset
df_08.head(1)

# view 2018 dataset
df_18.head(1)

 

# drop columns from 2008 dataset
df_08.drop(['Stnd', 'Underhood ID', 'FE Calc Appr', 'Unadj Cmb MPG'], axis=1, inplace=True)

# confirm changes
df_08.head(1)

# drop columns from 2018 dataset
df_18.drop(['Stnd', 'Stnd Description', 'Underhood ID', 'Comb CO2'], axis=1, inplace=True)

# confirm changes
df_18.head(1)

# 将销售区域重命名为特定区域

df_08.rename(columns={'Sales Area': 'Cert Region'}, inplace=True)

# 确认更改
df_08.head(1)

 

 

# 在 2008 数据集中用下划线和小写标签代替空格
df_08.rename(columns=lambda x: x.strip().lower().replace(" ", "_"), inplace=True)

# 确认更改
df_08.head(1)

 

# 在 2018 数据集中用下划线和小写标签代替空格
df_18.rename(columns=lambda x: x.strip().lower().replace(" ", "_"), inplace=True)

# 确认更改
df_18.head(1)

# 确认 2008 和 2018 数据集的列标签相同
df_08.columns == df_18.columns

 

 

# 确定所有的列标签都相同,如下所示
(df_08.columns == df_18.columns).all()

 

# 保存新数据集,供下一段使用
df_08.to_csv('data_08.csv', index=False)
df_18.to_csv('data_18.csv', index=False)

 

 

 

 

 

过滤、丢空、去重

# load datasets
import pandas as pd

df_08 = pd.read_csv('data_08.csv')
df_18 = pd.read_csv('data_18.csv')

# view dimensions of dataset
df_08.shape

# view dimensions of dataset
df_18.shape

# filter datasets for rows following California standards
df_08 = df_08.query('cert_region == "CA"')
df_18 = df_18.query('cert_region == "CA"')

# confirm only certification region is California
df_08['cert_region'].unique()

# confirm only certification region is California
df_18['cert_region'].unique()

# drop certification region columns form both datasets
df_08.drop('cert_region', axis=1, inplace=True)
df_18.drop('cert_region', axis=1, inplace=True)

df_08.shape

df_18.shape

# view missing value count for each feature in 2008
df_08.isnull().sum()

# view missing value count for each feature in 2018
df_18.isnull().sum()

# drop rows with any null values in both datasets
df_08.dropna(inplace=True)
df_18.dropna(inplace=True)

# checks if any of columns in 2008 have null values - should print False
df_08.isnull().sum().any()

# checks if any of columns in 2018 have null values - should print False
df_18.isnull().sum().any()

 

# print number of duplicates in 2008 and 2018 datasets
print(df_08.duplicated().sum())
print(df_18.duplicated().sum())

 

 

# drop duplicates in both datasets
df_08.drop_duplicates(inplace=True)
df_18.drop_duplicates(inplace=True)

 

# print number of duplicates again to confirm dedupe - should both be 0
print(df_08.duplicated().sum())
print(df_18.duplicated().sum())

 

# save progress for the next section
df_08.to_csv('data_08.csv', index=False)
df_18.to_csv('data_18.csv', index=False)

 

import pandas as pd

df_08 = pd.read_csv('all_alpha_08.csv') 
df_18 = pd.read_csv('all_alpha_18.csv')

 

# drop columns from 2008 dataset
df_08.drop(['Stnd', 'Underhood ID', 'FE Calc Appr', 'Unadj Cmb MPG'], axis=1, inplace=True)

# confirm changes
df_08.head(1)

# drop columns from 2018 dataset
df_18.drop(['Stnd', 'Stnd Description', 'Underhood ID', 'Comb CO2'], axis=1, inplace=True)

# confirm changes
df_18.head(1)

 

# rename Sales Area to Cert Region
df_08.rename(columns={'Sales Area': 'Cert Region'}, inplace=True)

# confirm changes
df_08.head(1)

# replace spaces with underscores and lowercase labels for 2008 dataset
df_08.rename(columns=lambda x: x.strip().lower().replace(" ", "_"), inplace=True)

# confirm changes
df_08.head(1)

 

# replace spaces with underscores and lowercase labels for 2018 dataset
df_18.rename(columns=lambda x: x.strip().lower().replace(" ", "_"), inplace=True)

# confirm changes
df_18.head(1)

 

# confirm column labels for 2008 and 2018 datasets are identical
df_08.columns == df_18.columns

# make sure they're all identical like this
(df_08.columns == df_18.columns).all()

 

# save new datasets for next section
df_08.to_csv('data_08.csv', index=False)
df_18.to_csv('data_18.csv', index=False)

 

修正数据类型

 


import pandas as pd

df_08 = pd.read_csv('data_08.csv')
df_18 = pd.read_csv('data_18.csv')

 

# 尝试使用 Pandas 的 to_numeric 或 astype 功能将
# 2008 air_pollution_score 列转换成浮点——无法转换
df_08.air_pollution_score = df_08.air_pollution_score.astype(float)

结果是错误的  

df_08.iloc[582]

# 首先,获取 2008 年的所有混合动力
hb_08 = df_08[df_08['fuel'].str.contains('/')]
hb_08

# 2018年的混合动力
hb_18 = df_18[df_18['fuel'].str.contains('/')]
hb_18

# 创建 2008 混合动力数据框的两个副本
df1 = hb_08.copy()  # 每个混合动力车第一种燃料类型的数据
df2 = hb_08.copy()  # 每个混合动力车第二种燃料类型的数据

# 每个数据应该如下所示
df1

# 将被 "/" 分割的列
split_columns = ['fuel', 'air_pollution_score', 'city_mpg', 'hwy_mpg', 'cmb_mpg', 'greenhouse_gas_score']

# 对每个数据框副本的每个列应用分割功能
for c in split_columns:
    df1[c] = df1[c].apply(lambda x: x.split("/")[0])
    df2[c] = df2[c].apply(lambda x: x.split("/")[1])

 

# 这个数据框包含混合动力车第一种燃料类型的信息
# 也就是 "/" 前面的值
df1

# 这个数据框包含混合动力车第二种燃料类型的信息
# 也就是 "/" 后面的值
df2

 

# 将数据框组合,添加到原始数据框中
new_rows = df1.append(df2)

# 现在每辆车的每种燃料类型都有单独的行
new_rows

 

 

# 丢弃原始混合动力行
df_08.drop(hb_08.index, inplace=True)

# 添加新分割的行
df_08 = df_08.append(new_rows, ignore_index=True)

 

# 检查含有 "/" 的所有原始混合动力行是否都已删除
df_08[df_08['fuel'].str.contains('/')]

df_08.shape

# 创建 2018 混合动力数据框 hb_18 的两个副本
df1 = hb_18.copy()
df2 = hb_18.copy()

分割 fuelcity_mpghwy_mpgcmb_mpg 的值

不需要分割 air_pollution_score 或 greenhouse_gas_score 的值,因为这些列在 2018 数据集中已经是整数。

 

# 待分割列的列表
split_columns =  ['fuel', 'city_mpg', 'hwy_mpg', 'cmb_mpg']

# 对每个数据框副本的每个列应用分割功能
for c in split_columns:
    df1[c] = df1[c].apply(lambda x: x.split("/")[0])
    df2[c] = df2[c].apply(lambda x: x.split("/")[1])

# 添加这两个数据框
new_rows = df1.append(df2)


# 从原始 2018 数据框中丢弃每个混合动力行
# 对 hb_18 的索引进行 Pandas 的丢弃功能,实现上述步骤
df_18.drop(hb_18.index, inplace=True)

# 将 new_rows 添加到 df_18
df_18 = df_18.append(new_rows, ignore_index=True)

 

# 检查是否已删除
df_18[df_18['fuel'].str.contains('/')]

 

df_18.shape

(832, 13)

# 对于 2008 空气污染列,将字符串转换成浮点
df_08.air_pollution_score = df_08.air_pollution_score.astype(float)

# 对于 2018 空气污染列,将整数转换成浮点
df_18.air_pollution_score = df_18.air_pollution_score.astype(float)

df_08.to_csv('data_08.csv', index=False)
df_18.to_csv('data_18.csv', index=False)

 

 

 

修正 city_mpghwy_mpgcmb_mpg 数据类型

2008 和 2018:将字符串转换成浮点

# 加载数据集
import pandas as pd

df_08 = pd.read_csv('data_08.csv')
df_18 = pd.read_csv('data_18.csv')

# 将 mpg 列转换成浮点
mpg_columns = ['city_mpg', 'hwy_mpg', 'cmb_mpg']
for c in mpg_columns:
    df_18[c] = df_18[c].astype(float)
    df_08[c] = df_08[c].astype(float)

 

# 将浮点转换成整数
df_08['greenhouse_gas_score'] = df_08['greenhouse_gas_score'].astype(int)

得出结论

使用下列空间来处理数据集clean_08.csv 和clean_18.csv中的以下问题

# load datasets
import pandas as pd
import matplotlib.pyplot as plt
% matplotlib inline

# load datasets
df_08 = pd.read_csv('clean_08.csv')
df_18 = pd.read_csv('clean_18.csv')

df_08.head(1)

df_08.fuel.value_counts()

df_18.fuel.value_counts()

# how many unique models used alternative sources of fuel in 2008

alt_08 = df_08.query('fuel in ["CNG", "ethanol"]').model.nunique()
alt_08

# how many unique models used alternative sources of fuel in 2018

alt_18 = df_18.query('fuel in ["Ethanol", "Electricity"]').model.nunique()
alt_18

 

plt.bar(["2008", "2018"], [alt_08, alt_18])
plt.title("Number of Unique Models Using Alternative Fuels")
plt.xlabel("Year")
plt.ylabel("Number of Unique Models");

# total unique models each year
total_08 = df_08.model.nunique()
total_18 = df_18.model.nunique()
total_08, total_18

 

prop_08 = alt_08/total_08
prop_18 = alt_18/total_18
prop_08, prop_18

 

plt.bar(["2008", "2018"], [prop_08, prop_18])
plt.title("Proportion of Unique Models Using Alternative Fuels")
plt.xlabel("Year")
plt.ylabel("Proportion of Unique Models");

 

 

 

veh_08 = df_08.groupby('veh_class').cmb_mpg.mean()
veh_08

veh_18 = df_18.groupby('veh_class').cmb_mpg.mean()
veh_18

inc = veh_18 - veh_08
inc

# only plot the classes that exist in both years
inc.dropna(inplace=True)
plt.subplots(figsize=(8, 5))
plt.bar(inc.index, inc)
plt.title('Improvements in Fuel Economy from 2008 to 2018 by Vehicle Class')
plt.xlabel('Vehicle Class')
plt.ylabel('Increase in Average Combined MPG');

 

 

# smartway labels for 2008
df_08.smartway.unique()

# get all smartway vehicles in 2008
smart_08 = df_08.query('smartway == "yes"')

 

# explore smartway vehicles in 2008
smart_08.describe()

# smartway labels for 2018
df_18.smartway.unique()

# get all smartway vehicles in 2018
smart_18 = df_18.query('smartway in ["Yes", "Elite"]')

smart_18.describe()

 

top_08 = df_08.query('cmb_mpg > cmb_mpg.mean()')
top_08.describe()

top_18 = df_18.query('cmb_mpg > cmb_mpg.mean()')
top_18.describe()

 

 

合并数据集

用 Pandas Merges 创建 clean_08.csv 和 clean_18.csv 的合并数据集。

 

import pandas as pd

df_08 = pd.read_csv('clean_08.csv')
df_18 = pd.read_csv('clean_18.csv')

 

# 重命名 2008 列
df_08.rename(columns=lambda x: x[:10] + "_2008", inplace=True)

# 查看并检查名称
df_08.head()

 

 

# 合并数据集
df_combined = df_08.merge(df_18, left_on='model_2008', right_on='model', how='inner')

# 查看并检查合并结果
df_combined.head()

保存合并数据集

df_combined.to_csv('combined_dataset.csv', index=False)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python数据分析案例2 的相关文章

随机推荐

  • org.mybatis.generator.exception.XMLParserException: XML Parser Error on line 12: 对实体 “useUnicode“ 的

    org mybatis generator exception XMLParserException XML Parser Error on line 12 对实体 useUnicode 的引用必须以 分隔符结尾 在使用mybatis逆向工
  • shell编程基础

    1 它必须以如下行开始 必须放在文件的第一行 bin sh 符号 用来告诉系统执行该脚本的程序 本例使用 bin sh 编辑结束并保存后 如果要执行该脚本 必须先使其可执行 chmod x filename 此后在该脚本所在目录下 输入 f
  • 华为OD机试 - 字符串变换最小字符串(Java)

    题目描述 给定一个字符串s 最多只能进行一次变换 返回变换后能得到的最小字符串 按照字典序进行比较 变换规则 交换字符串中任意两个不同位置的字符 输入描述 一串小写字母组成的字符串s 输出描述 按照要求进行变换得到的最小字符串 备注 s是都
  • Oracle环境变量配置

    情况描述 最近在配置plsql环境后 plsql总是连接不上 由于对自己的记忆力过度自信 导致这个简单的问题不能得到解决 现在记录下来作为以后的参考 一 客户端安装 官网下载orcle对应版本的客户端 然后执行安装 二 环境变量 需要配置以
  • Futter 屏幕适配框架flutter_ScreenUtil 用法

    参考 前言 各位同学大家好 大家在做app开发的时候都会遇到屏幕适配的问题 安卓里面有dp iOS里面有pt 单位给我们用来处理屏幕适配 除此之外安卓还有 autosize等框架给我们使用 iOS也对应屏幕适配方案给我们使用 那么在flut
  • 基于Python的接口自动化unittest测试框架和ddt数据驱动详解

    这篇文章主要介绍了基于Python的接口自动化unittest测试框架和ddt数据驱动详解 本文给大家介绍的非常详细 对大家的学习或工作具有一定的参考借鉴价值 需要的朋友可以参考下 目录 引言 一 unittest测试框架 二 ddt数据驱
  • 用QML实现简单音视频播放器的实践

    用QML的MediaPlayer控件配合VideoOutput对可以对音频文件和视频文件进行播放 代码如下 VideoOutput id video out anchors fill parent source mediaPlayer Me
  • 给定一个无序整数数组,找出两个数字满足他们的和等于目标数字

    给定一个整数数组numbers 从数组中找出两个数满足相加之和等于目标数target 假设每个输入只对应唯一的答案 而且不可以使用重复的元素 返回两数下标值 以数组的形式返回 原始暴力算法 这个好想 建立两个嵌套的for循环 从头到尾遍历数
  • 【JDK新特性】一篇搞懂Lambda表达式 & 函数式接口

    必看 原创声明 转载请注明作者 文章来源 给伙伴们聊一下刷题事项 Lambda表达式 概述 Lambda是JDK8的语法糖 它可以对某些匿名内部类的写法进行简化 它是函数式编程的一个重要体现 让我们不用关注什么是对象 重点关注我们对数据做了
  • 夯实基础-JavaScript异步编程

    异步编程 JavaScript中异步编程问题可以说是基础中的重点 也是比较难理解的地方 首先要弄懂的是什么叫异步 我们的代码在执行的时候是从上到下按顺序执行 一段代码执行了之后才会执行下一段代码 这种方式叫同步 synchronous 执行
  • redis 配置

    root localhost hufh cd usr local src root localhost src ls redis 4 0 10 tar gz root localhost src tar zxvf redis 4 0 10
  • Vue 模拟通讯录列表用 js-pinyin 获取汉字首字母,形成字母索引

    效果图 流程 获取数据 提取首个字的拼音的首个字母 排序并分组 此功能用到Vant组件的 IndexBar 索引栏 1 安装 js pinyin npm地址 npm install js pinyin save 2 引入及使用
  • WindowsAPI 程序

    include
  • GZIP .gz 文件解压与压缩工具类

    package com ucf gatewaycheck utils import java util zip GZIPInputStream import java io FileOutputStream import java io F
  • 怎么提取图片里的颜色?图像颜色特征提取

    图像的颜色一直是研究和关注的热点 也是特征工程不可或缺的feature 今天就简单介绍一种非常基础的颜色的rgb特征 目的 我们希望图片的rgb特征转化成一个可衡量的指标 例如人的身高 体重 这样的指标173cm 60kg 用于后续工作 那
  • 在中断程序中,需要清中断标志,作用是什么?

    清中断标志的作用 响应中断条件是 中断使能和中断标志同时成立 一般来讲 响应中断后 有硬件清标志和软件清标志两种 如果硬件不能清标志 说明书会说明 单片机要靠查询中断标志来判断是否要进入中断 如果你不清除中断标志 本次中断退出 单片机又会检
  • ChatGPT 再遭禁用

    近日 三星电子宣布禁止员工使用流行的生成式AI工具 原因在于4月初三星内部发生的三起涉及 ChatGPT 误用造成的数据泄露事件 报道称 三星半导体设备测量资料 产品良率等内容或已被存入ChatGPT学习资料库中 去年11月上线以来 Cha
  • GoFrame系列:6、Swagger使用总结

    GoFrame系列 6 Swagger使用总结 文章目录 GoFrame系列 6 Swagger使用总结 1 swagger简述 2 GF框架使用swagger流程 3 示例 3 1 GET示例 3 2 POST示例 3 3 其它 4 最后
  • 各算法/协议知识理论笔记(fpga)

    一 利用fifo对3行数据求和 需要2个fifo保存第0行和第1行的数据 如下图 比如有20行数据 则将一行一行的输给fifo2 fifo2出来的数据再给fifo1 当fifo和fifo1有数据时 在准备给 fifo2输入新的一行数据时 同
  • python数据分析案例2

    load datasets import pandas as pd df 08 pd read csv all alpha 08 csv df 18 pd read csv all alpha 18 csv view 2008 datase