1. 程式人生 > 實用技巧 >python 資料視覺化

python 資料視覺化

1、散點圖

plot(x, y, '.', color = (r,g,b))

plt.xlable('x軸標籤')

plt.ylable('y軸標籤')

x,y x軸和y 軸的序列 ; '.', '。'小點還是大點 color, 散點圖的顏色,可以用rgb定義,也可以用英文字母定義

plt.grid(True, linestyle = "-.", color = "r", linewidth = "3")

# True 顯示網格 # linestyle 設定線顯示的型別(一共四種) # color 設定網格的顏色 # linewidth 設定網格的寬度

#散點圖
import
matplotlib#%% from pandas import read_csv#%% import matplotlib.pyplot as plt from matplotlib.font_manager import _rebuild _rebuild() from pylab import mpl #%% data = read_csv("/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.1/data.csv") #%% 設定成中文!!!! mpl.rcParams['font.sans-serif
']=[u'SimHei'] mpl.rcParams['axes.unicode_minus']=False #%% #plt.plot(data['廣告費用'], data['購買使用者數'], '.') #plt.plot(data['廣告費用'], data['購買使用者數'], 'o') plt.plot(data['廣告費用'], data['購買使用者數'], 'o', color='yellow') #plt.plot(data['廣告費用'], data['購買使用者數'], 'o', color=(1, 1, 0)) #plt.plot(data['廣告費用'], data['購買使用者數'], 'o', color='#FFFF00')
plt.xlabel('廣告費用')#%% plt.ylabel('購買使用者數') plt.grid(True) #%% plt.grid(True, linestyle = "-.", color = "r", linewidth = "3") #%% plt.show()

2、折線圖

plot(x, y, style, color, linewidth)

title('圖的標題')

style 畫線的樣式 color 畫線的顏色 linewidth 線的寬度

#折線圖
import pandas#%%
from pandas import read_csv#%%
from matplotlib import pyplot as plt


data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.2/data.csv')

#對日期格式進行轉換
data['日期']=pandas.to_datetime(data['日期'])
data.rename(columns={'日期':'購買日期'},inplace=True)


#設定線條粗細
plt.plot(data['購買日期'], data['購買使用者數'], '-', color='r', lineWidth=2)
plt.xlabel('購買日期')
plt.ylabel('購買使用者數')
#'-'    順滑的曲線
#'--'    虛線
#'-.'    線加點
#':'    由點組成的曲線
#'.'    散點圖
#','    畫素點的散點圖
#'o'    大點的散點圖
#'v'    下三角標記的散點圖
#'^'    上上角標記的散點圖
#'<'    左角標記的散點圖
#'>'    右角標記的散點圖
#'1'    傘形下的標記散點圖
#'2'    傘形上的標記散點圖
#'3'    傘形左的標記散點圖
#'4'    傘形右的標記散點圖
#'s'    正方形標記的散點圖
#'p'    五角形標記的散點圖
#'*'    五角星標記的散點圖
#'h'    多邊形標記的散點圖
#'H'    hexagon2 marker
#'+'    plus marker
#'x'    x marker
#'D'    diamond marker
#'d'    thin_diamond marker
#'|'    vline marker
#'_'    hline marker

plt.title('購買使用者數時間序列圖')

plt.show()

3、餅圖

pie(x, labels, colors, explode, autopct);

x 進行繪製的序列, labels 拼圖的個部分標籤, colors, 餅圖的各部分顏色,使用rgb標色 explode需要突出的塊狀序列,即各塊距離中心的位置 autopct 餅圖佔比的顯示格式 , %.2f: 保留兩位小數

import numpy
import matplotlib
from pandas import read_csv
import matplotlib.pyplot as plt#%%
 
data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.3/data.csv')
#%%
# 進行分組
gb = data.groupby(
    by=['通訊品牌'], 
    as_index=False
)['號碼'].agg({
    '使用者數':numpy.size
})
    #%%

#pip install matplotlib

font = {
    'family' : 'SimHei'
}

matplotlib.rc('font', **font)
#%%

plt.pie(gb['使用者數'], labels=gb['通訊品牌'],colors=[(1,0.1,1),(1,0.5,1),(0,0,1)],explode=[0.2,0,0.1],autopct='%.2f%%')#%%

plt.show()

4. 柱形圖:

d.bar(left, height, width, color)

barh(bottom, width, height,color)

left, x 軸的位置序列,一般採用arrange函式產生一個序列

height, y 軸的數值序列,也就是柱形圖的高度

width , 柱形圖的寬度,一般設定為1即可

color 柱形圖 填充顏色

d.xticks (位置,標籤)

d.yticks (位置,標籤)

普通 豎向/橫向 柱形圖

import numpy;
import matplotlib;
from pandas import read_csv;
from matplotlib import pyplot as plt;

font = {
    'family' : 'SimHei'
};
matplotlib.rc('font', **font);

data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.4/data.csv');

gb = data.groupby(
    by=['手機品牌']
)['月消費(元)'].sum()

index = numpy.arange(gb.size);

#豎向柱形圖
plt.bar(index, gb, 1, color='G');
plt.show();

#%%  加上了標籤
plt.bar(index, gb, 1, color='G');
plt.xticks(index + 1/2, gb.index);
plt.show();
#%%  
#橫向柱形圖  並加上了標籤
plt.barh(index, gb, 1, color='G');
plt.yticks(index + 1/2, gb.index);
plt.show();

多組柱狀圖

d.index.levels[a] :多層索引取第a層

d.[:,a] 多層索引 依據第二個索引求值 適用於series

d.legend(標籤,loc=2) loc為存放位置

import numpy
import matplotlib
from pandas import read_csv
from matplotlib import pyplot as plt

font = {
    'family' : 'SimHei'
}
matplotlib.rc('font', **font)

data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.4/data.csv')


d1 = '手機品牌'#%%
d2 = '通訊品牌'#%%
v = "月消費(元)"
#  進行分組 並將多級分組放入索引裡面
df = data.groupby(by=[d1,d2])['月消費(元)'].apply(lambda x: sum(x))
#%%
d1size = df.index.levels[0].size
#%%
d2size = df.index.levels[1].size
# 求出橫座標的為主
index = numpy.arange(d1size)
#%%
colors=['r', 'g', 'b']
#%%
a = df.index.levels[0]
b = df.index.levels[1]

#%%  
print(df[:,'全球通'])  # 依據第二格索引求值  適用於series
print(b[0])  # 索引的取值
#%%
for i in range(0, d2size):
    x = b[i]  # 求出索引名
    sb = df[:,x] # 通過索引求出值
    sa = sb.values  # 轉換成向量
    bar = plt.bar(index * d2size + i, sa, color=colors[i])  # 這裡用series 和array 即 sb 和 sa都行
lIndex = numpy.arange(d1size)*d2size  # 取等差數列

plt.xticks(lIndex + 3/2, df.index.levels[0])  # 確定橫座標的標籤

plt.legend(df.index.levels[1],loc=2) # 帶等於號的引數放在後面,此引數用來調整所在位置

#%%
plt.show()#%%

多分類累積柱狀圖

多了一個bottoms 引數

import numpy#%%
import matplotlib#%%
from pandas import read_csv#%%
from matplotlib import pyplot as plt#%%

font = {
    'family' : 'SimHei'
}#%%
matplotlib.rc('font', **font)#%%

data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.4/data.csv')#%%

d1 = '手機品牌'#%%
d2 = '通訊品牌'#%%
v = "月消費(元)"#%%

gb = data.groupby([d1, d2])['月消費(元)'].sum()#%%

d1size = gb.index.levels[0].size
d1 = gb.index.levels[0]
d2size = gb.index.levels[1].size
d2= gb.index.levels[1]

index = numpy.arange(d1size)#%%
colors = ['r', 'g', 'b']#%%
#%%
bsum = index*0.0#%%
print(bsum)
# 多分類累積柱狀圖  bsum 有點不太懂
for i in range(0, d2size): 
    x = d2[i]
    subgb = gb[:,x]    
    bar = plt.bar(index, subgb, color=colors[i], bottom=bsum) # 是為了讓最開始的不被覆蓋掉?
    bsum += subgb  # bottom需要傳入的是[第0個類別~(當前類別-1)]的資料總和。
 
plt.xticks(index+1/2, gb.index.levels[0])#%%

plt.legend(gb.index.levels[1])#%%
plt.show()#%%

5.直方圖

hist(x,color,bins,cumulative=False)

x 需要進行繪製的向量 color 直方圖的填充顏色 bins 設定直方圖的分組個數

cumulative 設定是否累積技術

import matplotlib;
from pandas import read_csv;
from matplotlib import pyplot as plt;
import numpy
font = {
    'family' : 'SimHei'
};
matplotlib.rc('font', **font);

data = read_csv('/Volumes/CHASESKY/python/03-資料分析與資料探勘篇/1-資料分析資料視覺化實戰-(Python3.5)/章節5資料視覺化/5/5.4/data.csv')
data['購買使用者數']=numpy.random.randint(0,100,31402) 
#%%
plt.hist(data['購買使用者數']);
plt.show();
# 設定了分組個數
plt.hist(data['購買使用者數'], bins=50);
plt.show();
# 進行累積
plt.hist(data['購買使用者數'], bins=20, cumulative=True);
plt.show();