三.資料處理
首先新增python中常用的資料分析庫
import numpy as np
import pandas as pd
import os
import matplotlib.pyplot as plt
import plotly as py
import plotly.graph_objs as go
設定預設路徑,開啟文件檔案,觀察資料。
os.chdir(r'c:\users\administrator\desktop\jianli\python'
)#修改路徑
df = pd.read_csv(
'data.csv'
)#讀取檔案
df.head(
)#展示資料
接下來檢視資料的整體情況:
df.info(
)#檢視資料有效值
其中可以看到 description和customerid資料量與其他不同,存在缺失值。我們自定義函式,計算一下缺失率。
df.
(lambda x :
sum(x.isnull())
/len
(x))
#缺失率
其中customerid:使用者id資料缺失較多。另外檢視一下退貨資料存在多少
len
(df[df[
'invoiceno'].
str[0]
=='c'])
/len
(df)
#退貨資料
接下來進行資料清洗的內容,首先去除存在空值的數:
df1 = df.dropna(how =
'any'
).copy(
)#copy 防止修改df1時修改了原始資料
copy()函式是為了防止當我們操作df1時改變原始資料。如果存在疑問可以搜尋一下python中關於深拷貝和淺拷貝。
另外,我們需要對日期進行格式化,去除掉時分秒。
df1[
'invoicedate'
]= pd.to_datetime(df1[
'invoicedate'
],errors =
'coerce'
)#格式化日期
df1[
'price'
]= df1.
(lambda x: x[3]
*x[5
],axis =1)
# 單價乘以銷售量
利用groupby函式對其進行分組統計並排序獲取銷售量前十的國家:
df2 = df1[df[
'quantity'
]>0]
.groupby(
'country').
sum()[
'quantity'].\
sort_values(ascending =
false
).head(10)
#銷售量前10國家
df2
視覺化:
trace_basic =
[go.bar(x = df2.index.tolist(
),y = df2.values.tolist(),\
marker =
dict
(color=
'orange'
),opacity =.5)
]#傳入資料
layout = go.layout(title =
'購買商品前10的國家'
,xaxis =
dict
(title =
'國家'))
#布局figure_basic = go.figure(data = trace_basic, layout = layout )
同樣的**我們可以獲取到交易額前十的國家
trace_basic =
[go.bar(x = df3.index.tolist(
),y = df3.values.tolist(),\
marker =
dict
(color=
'orange'
),opacity =.5)
]#傳入資料
layout = go.layout(title =
'消費金額前10的國家'
,xaxis =
dict
(title =
'國家'
),yaxis =
dict
(title =
'消費金額'))
#布局figure_basic = go.figure(data = trace_basic, layout = layout )
哪個月份銷量最佳,我們需要對日期進行處理,獲取月份資訊:
df1[
'month'
]= pd.to_datetime(df1[
'invoicedate'
],errors=
'coerce'
).dt.month
df4 = df1[df[
'quantity'
]>0]
.groupby(
'month').
sum()[
'quantity'
]df4
trace_basic =
[go.bar(x = df4.index.tolist(
),y = df4.values.tolist(),\
marker =
dict
(color=
'orange'
),opacity =.5)
]#傳入資料
layout = go.layout(title =
'月份銷售額'
,xaxis =
dict
(title =
'月份'
),yaxis =
dict
(title =
'銷量'))
#布局figure_basic = go.figure(data = trace_basic, layout = layout )
py.offline.plot(figure_basic,filename =
'fth.html'
)
後續兩個問題再補充- - python kaggle比賽資料收集
需要在兩天之類解決乙個糖尿病 問題,所以需要直接上手打kaggle比賽的一些經驗!用python參加kaggle的些許經驗總結 getting started with python getting started with python ii getting started with random...
thinkphp 資料分表
對於大資料量的應用,經常會對資料進行分表,有些情況是可以利用資料庫的分割槽功能,但並不是所有的資料庫或者版本都支援,因此我們可以利用thinkphp內建的資料分表功能來實現。幫助我們更方便的進行資料的分表和讀取操作。和資料庫分割槽功能不同,內建的資料分表功能需要根據分表規則手動建立相應的資料表。在需...
openvswich sflow監控資料分析
這篇部落格的任務是如何獲得一組虛擬機器伺服器的通訊矩陣,及任意兩台虛擬機器在一段時間的通訊量。如標題所示,是基於openvswitch sflow環境的,關於openvswitch和sflow在前幾篇部落格已經介紹了,這裡不再贅述。sflowtool提供了乙個awk指令碼,這個指令碼的任務是獲得任意...