本案例重点有二:
重点一在于如何修改数据类型以降低内存占用,这对大数据非常重要;
重点二在于分析变量之间的关系,单变量分布,双变量相关或方差分析,多变量回归或分类;
一、数据基本信息
#导入必要的库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
warnings.filterwarnings("ignore")
#指定工作路径以导入数据或者存入数据
import os
os.chdir("D:\Data\File")
#可视化的必要设置
%matplotlib inline
plt.rcParams["font.sans-serif"] = ["KAITI"]
plt.rcParams["axes.unicode_minus"] = False
1.1 数据集查看
#导入数据并查看前两行
df = pd.read_csv("taobao_data.txt")
df.head(5)
宝贝 | 价格 | 成交量 | 卖家 | 位置 | |
---|---|---|---|---|---|
0 | 新款中老年女装春装雪纺打底衫妈妈装夏装中袖宽松上衣中年人t恤 | 99.0 | 16647 | 夏奈凤凰旗舰店 | 江苏 |
1 | 中老年女装清凉两件套妈妈装夏装大码短袖T恤上衣雪纺衫裙裤套装 | 286.0 | 14045 | 夏洛特的文艺 | 上海 |
2 | 母亲节衣服夏季妈妈装夏装套装短袖中年人40-50岁中老年女装T恤 | 298.0 | 13458 | 云新旗舰店 | 江苏 |
3 | 母亲节衣服中老年人春装女40岁50中年妈妈装套装夏装奶奶装两件套 | 279.0 | 13340 | 韶妃旗舰店 | 浙江 |
4 | 中老年女装春夏装裤大码 中年妇女40-50岁妈妈装夏装套装七分裤 | 59.0 | 12939 | 千百奈旗舰店 | 江苏 |
1.2 修改数据类型以节省空间
# 查看数据集的数据类型、数量和内存空间
df.info(memory_usage="deep") #memory_usage参数可以查看数据集导入内存需要占用多少内存,这在导入大型数据集时非常有用
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 宝贝 100 non-null object
1 价格 100 non-null float64
2 成交量 100 non-null int64
3 卖家 100 non-null object
4 位置 100 non-null object
dtypes: float64(1), int64(1), object(3)
memory usage: 33.4 KB
df.memory_usage()
Index 128
宝贝 800
价格 200
成交量 200
卖家 800
位置 464
销售额 400
dtype: int64
df.memory_usage().sum()
2992
以上可知有五个变量,一个整型,一个浮点型,三个对象型,数据集大小是33.4KB,长度为100行;
#找出卖家这一列中名字最长的店的长度
df["卖家"].apply(lambda x:len(x)).max()
15
#查看各个变量的数据的最大值,以确定是否更改数据类型以减少占用内存
#“宝贝”这一变量的数据类型是Object,它的内容是文字,既不能转换为数值,也不能转换为类别型,只能保留其数据类型
#价格的数据类型为浮点型,最大值为698.00,保留两位小数,numpy中float有float16(半精度),float32,float64三种,半精度可以表示的最大数为65504,最小数6.104×10^(-5),所以一般情况float316就够用了
#成交量的数据类型是整型,最大值为16647,最小值为3956,所以可以转换为uint16(无符号整数(0 to 65535)
#卖家的数据类型是Object,有85个唯一值,而且长度最长有15个汉字,占30个字节,如果转换成类别型数据比Object节省空间
#位置是省级行政区,可以转换为类别型数据
df["价格"] = df["价格"].astype("float16")
df.info(memory_usage="deep") #可以看到内存减少了0.6KB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 宝贝 100 non-null object
1 价格 100 non-null float16
2 成交量 100 non-null int64
3 卖家 100 non-null object
4 位置 100 non-null object
dtypes: float16(1), int64(1), object(3)
memory usage: 32.8 KB
df["成交量"] = df["成交量"].astype("uint16")
df.info(memory_usage="deep") #可以看到内存又减少了0.6KB
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 宝贝 100 non-null object
1 价格 100 non-null float16
2 成交量 100 non-null uint16
3 卖家 100 non-null object
4 位置 100 non-null object
dtypes: float16(1), object(3), uint16(1)
memory usage: 32.2 KB
df["位置"] = df["位置"].astype("category")
df.info(memory_usage="deep") #可以看到内存减少了7.3KB,减少的最多
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 100 entries, 0 to 99
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 宝贝 100 non-null object
1 价格 100 non-null float16
2 成交量 100 non-null uint16
3 卖家 100 non-null object
4 位置 100 non-null category
dtypes: category(1), float16(1), object(2), uint16(1)
memory usage: 24.9 KB
df["卖家"] = df["卖家"].astype("category")
df.info(memory_usage="deep")