python --數據可視化
一、python -- pyecharts庫的使用
pyecharts--> 生成Echarts圖標的類庫
1、安裝:
pip install pyecharts
pip install pyecharts_snapshot
2、入門test
首先,測試繪制個圖表
from pyecharts import Bar bar = Bar("我的第一個圖表", "這里是副標題") bar.add("服裝", ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"], [5, 20, 36, 10, 75, 90]) bar.show_config() bar.render("temperature.html")
add()
主要方法,用於添加圖表的數據和設置各種配置項-
show_config()
打印輸出圖表的所有配置項 -
render()
默認將會在根目錄下生成一個 render.html 的文件,支持 path 參數,設置文件保存位置,如 render(r"e:\my_first_chart.html"),文件用瀏覽器打開。
默認的編碼類型為 UTF-8,在 Python3 中是沒什么問題的,Python3 對中文的支持好很多。但是在 Python2 中,編碼的處理是個很頭疼的問題,暫時沒能找到完美的解決方法,目前只能通過文本編輯器自己進行二次編碼,我用的是 Visual Studio Code,先通過 Gbk 編碼重新打開,然后再用 UTF-8 重新保存,這樣用瀏覽器打開的話就不會出現中文亂碼問題了。
基本上所有的圖表類型都是這樣繪制的:
-
chart_name = Type()
初始化具體類型圖表。 -
add()
添加數據及配置項。 -
render()
生成 .html 文件。
3、圖表類型
3.1、Bar(柱狀圖/條形圖)
from pyecharts import Bar attr = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"] v1 = [2.0, 4.9, 7.0, 23.2, 25.6, 76.7, 135.6, 162.2, 32.6, 20.0, 6.4, 3.3] v2 = [2.6, 5.9, 9.0, 26.4, 28.7, 70.7, 175.6, 182.2, 48.7, 18.8, 6.0, 2.3] bar = Bar("Bar chart", "precipitation and evaporation one year") # 主標題、副標題 bar.add("precipitation", attr, v1, mark_line=["average"], mark_point=["max", "min"]) bar.add("evaporation", attr, v2, mark_line=["average"], mark_point=["max", "min"]) bar.render("name.html") # 渲染成HTML文件
attr:列表 ,名稱 ,橫向坐標方向
v1 / v2:列表, 數據,縱坐標方向
mark_point / mark_line:標記點、標記線。用於標記最大最小值,標記平均值的線,標記的形狀、顏色 、大小,自定義標記的點等。標記線可以是任何兩點連線
文中 mark_line=["average"]:標記平均值 , mark_point=["max", "min"]:標記最大值、最小值
render:渲染成文件
如果在A、B商家中的bar_add參數中添加is_stack:表示疊加效果,即商家A、商家B數據疊在一起展示
橫向柱形圖:is_convert=True,標識交換X軸和Y軸
效果:
x軸和y軸交換:
3.2、EffectScatter(帶有漣漪特效動畫的散點圖)
from pyecharts import EffectScatter v1 = [10, 20, 30, 40, 50, 60] # 橫坐標 v2 = [25, 20, 15, 10, 60, 33] #縱坐標 es = EffectScatter("動態散點圖示例") es.add("effectScatter", v1, v2) es.render() # 默認在當前路徑渲染成render.html文件
動態散點圖多圖形
from pyecharts import EffectScatter es = EffectScatter("動態散點圖各種圖形示例") es.add("", [10], [10], symbol_size=20, effect_scale=3.5, effect_period=3, symbol="pin") es.add("", [20], [20], symbol_size=12, effect_scale=4.5, effect_period=4,symbol="rect") es.add("", [30], [30], symbol_size=30, effect_scale=5.5, effect_period=5,symbol="roundRect") es.add("", [40], [40], symbol_size=10, effect_scale=6.5, effect_brushtype='fill',symbol="diamond") es.add("", [50], [50], symbol_size=16, effect_scale=5.5, effect_period=3,symbol="arrow") es.add("", [60], [60], symbol_size=6, effect_scale=2.5, effect_period=3,symbol="triangle") es.render()
3.3、Line折線圖
from pyecharts import Line attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"] v1 = [5, 20, 36, 10, 10, 100] v2 = [55, 60, 16, 20, 15, 80] line = Line("折線圖示例") line.add("商家A", attr, v1, mark_point=["average"]) line.add("商家B", attr, v2, is_smooth=True, mark_line=["max", "average"]) line.show_config() line.render()
3.4、Pie(餅圖)
from pyecharts import Pie attr = ["襯衫", "羊毛衫", "雪紡衫", "褲子", "高跟鞋", "襪子"] v1 = [11, 12, 13, 10, 10, 10] pie = Pie("餅圖示例") pie.add("", attr, v1, is_label_show=True) pie.show_config() pie.render()
3.5、WordCloud(詞雲圖)
from pyecharts import WordCloud name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break'] value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265] wordcloud = WordCloud(width=1300, height=620) wordcloud.add("", name, value, word_size_range=[20, 100]) wordcloud.show_config() wordcloud.render()
from pyecharts import WordCloud name = ['Sam S Club', 'Macys', 'Amy Schumer', 'Jurassic World', 'Charter Communications', 'Chick Fil A', 'Planet Fitness', 'Pitch Perfect', 'Express', 'Home', 'Johnny Depp', 'Lena Dunham', 'Lewis Hamilton', 'KXAN', 'Mary Ellen Mark', 'Farrah Abraham', 'Rita Ora', 'Serena Williams', 'NCAA baseball tournament', 'Point Break'] value = [10000, 6181, 4386, 4055, 2467, 2244, 1898, 1484, 1112, 965, 847, 582, 555, 550, 462, 366, 360, 282, 273, 265] wordcloud = WordCloud(width=1300, height=620) wordcloud.add("", name, value, word_size_range=[30, 100], shape='diamond') wordcloud.show_config() wordcloud.render()
** 數據分析
數據表:luqu.csv ,共100條數據
1、查詢分數相同的數量:
import pandas as pd import matplotlib.pyplot as plt f = pd.read_csv("luqu.csv",encoding='gbk') #導入數據 # print(f.head()) f['分數'].value_counts().plot(kind="barh",rot='0') # value_counts:數量,kind:統計數據類型,bar:柱狀圖,h表示橫向展示 , rot:label的角度 plt.show()
將plot的參數改動下:
f['分數'].value_counts().plot(kind="bar",rot='30')
發現x軸label角度變了,柱狀圖也變成縱向的了