kaggle电子商务数据在线零售商的实际交易数据分析

时间:2025-03-29 09:43:17
import numpy as np import pandas as pd import os import matplotlib.pyplot as plt import plotly as py import seaborn as sns import plotly.graph_objs as go #画图直接使用plotly函数比matplotlib方便一些 #下面两行是使用plotly画图时需要的 py.offline.init_notebook_mode() pyplot = py.offline.iplot #下面两行是解决中文乱码问题 plt.rcParams['-serif'] = ['SimHei'] plt.rcParams['axes.unicode_minus'] = False os.chdir('C:\\Users\\asus\\Desktop\\七天成为数据分析师\\数据集\\data') #表示定位到需要的文件夹 data = pd.read_csv('', encoding = 'ISO-8859-1', dtype = {'CustomerID': str}) """ encoding我用uft-8和gbk都不好使,只有用ISO-8859-1才好使,ISO-8859-1称Latin-1或“西欧语言”, 是国际标准化组织内ISO/IEC 8859的第一个8位字符集。它以ASCII为基础,在空置的0xA0-0xFF的范围内, 加入96个字母及符号,藉以供使用附加符号的拉丁字母语言使用。实际上Windows-1252代码页包含了所有出现在ISO-8859-15中的字符。 ISO-8859-1对应的Windows代码页是Windows-28591。[4]然而,英文版的Windows 7、Windows10家庭中文版 系统上没有Windows-28591代码页。 """ #理解数据 data.info() #查看数据(字段)的基本信息,看是否存在缺失值 data[data['InvoiceNo'].str[0] == 'C'] #查看是否有退货的 #数据清洗 data.apply(lambda x: sum(x.isnull())/len(x), axis = 0) #lambda表示匿名函数,sum(())/len(x)表示缺失率,axis=0表示沿着纵向进行检索(对每一列进行操作) df1 = data.dropna(how = 'any').copy() """ dropna表示如果存在缺失值,则用NULL进行填充,any表示只要一行中有一个变量存在缺失值,则对全行进行null填充即删除, copy函数表示怕对df1进行操作时会改变原数据,则先对其进行拷贝 """ df1['InvoiceDate'] = pd.to_datetime(df1['InvoiceDate'], errors = 'coerce') #把订单日期转化为标准的时间格式,因为日期有可能是str格式,errors表示如果时间格式不是12/1/2010 8:26(日月年)这样的格式就把其转换为缺失值,即进行容错处理 df1['InvoiceDate'] = df1['InvoiceDate'].dt.date #表示把日期提取为date,date格式为年月日形式 df1['Price'] = df1.apply(lambda x: x[3] * x[5], axis = 1) #根据第二问因此要计算出消费总额,消费总额=数量(第4个元素)×单价(第六个元素),然后在表后添加一列名为Price里面存放消费总额;axis=1表示沿着横向进行检索(对每一行进行操作) df1.head() #数据分析和可视化 #购买商品数前十的国家有哪些? quantity_first_10 = df1[df1['Quantity'] > 0].groupby('Country').sum()['Quantity'].sort_values(ascending = False).head(10) """ 统计商购买数量,所以退货的就不能算在里面即Quantity数量<0的就不能放在里面,groupby表示根据国家来进行分组统计每个国家的Quantity总和, ascending表示是否按升序进行排序 """ quantity_basic = [go.Bar(x = quantity_first_10.index.tolist(), y = quantity_first_10.values.tolist(), marker = dict(color = 'orange'), opacity = 0.5)] """ bar表示条形图,quantitly_first_10.index表示把索引值(国家名)列出来其为Series(索引在左边,值在右边)形式然后放在x轴, quantitly_first_10.values表示把值(商品数量)列出来其为Series(索引在左边,值在右边)形式然后放在y轴, tolist表示把索引值从series形式转为列表形式,marker表示设置图形的属性,opacity表示透明度 """ layout = go.Layout(title = '购买商品数前十的国家', xaxis = dict(title = '国家')) #layout表示设置画布的属性,xaxis表示设置x轴的属性 figure_basic = go.Figure(data = quantity_basic, layout = layout) pyplot(figure_basic)