這種個性化可視化圖也太可愛了吧!
寫在前面
在這篇文章中, 云朵君想介紹一個很酷的python手繪樣式可視化包——可愛的圖表?cutecharts。Cutecharts?非常適合為圖表提供更個性化的觸感。
Cutecharts?與常規(guī)的?Matplotlib?和?Seaborn?庫完全不同,它可以查看手工制作的圖表,并在將鼠標懸停在圖表上時向我們顯示值。Matplotlib?圖表中沒有懸停效果,這是可愛圖表的一個優(yōu)勢。與?seaborn?相比,在可愛圖表中創(chuàng)建圖表的時間要長一些,但代碼數(shù)量仍然比標準?matplotlib?庫少。
該包可用于生成以下類型的圖表。目前,該庫支持五種不同的圖表——條形圖、餅圖、雷達圖、散點圖和折線圖。
繪圖準備
安裝cutecharts
這是個python第三方庫,要創(chuàng)建此圖表,你需要安裝cutecharts庫。具體安裝方法與其他庫一樣。
pip?install?cutecharts
導入庫
import?cutecharts.charts?as?ctc
import?pandas?as?pd
數(shù)據(jù)集
看看 TMBD 數(shù)據(jù)是什么樣子的?數(shù)據(jù)有 21 列。
df?=?pd.read_csv(r'tmdb-movies.csv')
df.head(2)

數(shù)據(jù)說明
TMBD 的數(shù)據(jù)取自?kaggle[1]。
Popularity流行度:?指定電影流行度的數(shù)字量 Budget預算:?電影制作的預算。 Revenue收入:?電影產(chǎn)生的全球收入。 Original Title原片名:?翻譯或改編前電影的片名。 Cast演員:?在電影中扮演角色的演員姓名 Homepage主頁:?指向電影主頁的鏈接。 Director導演:?導演電影的導演姓名 Title片名:?電影名稱。 Keywords關鍵字:?與電影相關的關鍵字或標簽。 Overview概述:?對電影的簡要描述。 Runtime運行時間:?以分鐘為單位的電影運行時間。 Genres類型:?電影的類型,劇情、動作、喜劇、驚悚等。 Production Company制作公司:?電影的制作公司。 Vote Count投票數(shù):?收到的票數(shù)。 Vote Average投票平均:?電影收到的平均評分。
日期時間
Release Date上映日期:?電影上映的日期。 Release Year發(fā)行年份:?電影發(fā)行的年份。
數(shù)據(jù)清洗
我們先清理數(shù)據(jù),然后我們會看到可愛的圖表。
將特征更改為正確的日期時間格式并將流行功能四舍五入到小數(shù)點后兩位,以獲得更多內(nèi)容。
df['release_date']?=?pd.to_datetime(df['release_date'])
df['popularity']?=?round(df['popularity'],?2)
刪除不必要的功能
df.drop(['imdb_id',?'homepage',?'budget_adj','revenue_adj'],
??????axis=1,?inplace=True)?
用missing替換特征nan值
df['tagline'].fillna('missing',inplace=True)
df['keywords'].fillna('missing',inplace=True)
df['production_companies'].fillna('missing',inplace=True)?
df['cast'].fillna('missing',inplace=True)
df['director'].fillna('missing',inplace=True)
df['genres'].fillna('missing',inplace=True)
df['overview'].fillna('missing',inplace=True)
從預算和收入中刪除等于 0 的值。
df.drop(df[(df['budget']==0)?&?(df['revenue']==0)].index,
????????inplace=True)
現(xiàn)在,數(shù)據(jù)是干凈的,我們現(xiàn)在可以進一步創(chuàng)建一些可愛的圖表。
cutecharts繪圖
cutecharts中使用的參數(shù)
分配你想要的圖表名稱,例如,你想要一個餅圖然后運行下面的代碼。
chart?=?ctc.Pie()
設置我們需要width, height在參數(shù)中添加的圖表的標題、寬度和高度。
chart?=?ctc.Pie('Title',?width='600px',?height='300px')
設置圖表選項,可以將使用set_options()函數(shù)。
chart.set_options()
設置x和y標簽的標題,我們將使用x_label,?y_label傳入set_options()函數(shù)示例如下。
chart.set_options(x_label='X?Labels',
??????????????????y_label='Y?Labels')
最后,我們將使用一個函數(shù)來顯示圖表render_notebook(),下面給出一個例子。
chart.render_notebook()
cutecharts繪圖
繪制餅圖
將要制作的圖表是甜甜圈圖表。我們將看到發(fā)行量最高的電影的前 5 年。
df_year?=?df['release_year'].value_counts(
).reset_index().sort_values(by='index',
????????????????????????????ascending=False)[:5].rename(columns={'index':'release_year',
?????????????????????????????????????????????????????????????????'release_year':'Count'})
chart?=?ctc.Pie('Top?5?years',?width='600px',?height='300px')
chart.set_options(labels=list(df_year['release_year']),?inner_radius=0)
chart.add_series(list(df_year['Count']))
chart.render_notebook()

繪制圓環(huán)圖
我們將要制作的圖表是甜甜圈圖表。我們將看到發(fā)行量最高的電影的前 5 年。
df_year?=?df['release_year'].value_counts(
).reset_index().sort_values(by='index',?
????????????????????????????ascending=False)[:5].rename(columns={'index':'release_year',
?????????????????????????????????????????????????????????????????'release_year':'Count'})
chart?=?ctc.Pie('Top?5?years',?width='600px',?height='300px')
chart.set_options(labels=list(df_year['release_year']),?inner_radius=0.8)
chart.add_series(list(df_year['Count']))
chart.render_notebook()

所有的特性都與我們在餅圖中使用的相同,只是inner_radius使用了一個額外的參數(shù);我們可以為甜甜圈圖的內(nèi)部半徑給出0到1之間的任何值。如果你看到默認的圖例將在左上角,你可以指定圖例的值,如?upLeft、upRight、downLeft、downRight。
下圖顯示了?upRight?和?downLeft?上的圖例。

繪制條形圖
該函數(shù)將拆分字符串并返回每個類型的計數(shù)。
def?count_genre(x):
data_plot?=?df[x].str.cat(sep?=?'|')
????data?=?pd.Series(data_plot.split('|'))
????info?=?data.value_counts(ascending=False)
????return?info
調(diào)用函數(shù)來計算每個類型的電影。
df_genre_movies?=?count_genre('genres')
df_genre_movies?=?pd.DataFrame(df_genre_movies).reset_index().rename(columns={'index':'Drama',?0:'Count'})
條形圖代碼
這里我們通過導入 faker 庫為不同的條使用顏色。
from?cutecharts.faker?import?Faker
chart?=?ctc.Bar('Top?Movie?Geners',?width='600px',?height='200px')
chart.set_options(labels=list(df_genre_movies['Drama'][:7]),
x_label='Drama',
y_label='Count',
colors=Faker.colors
)
chart.add_series('Geners',list(df_genre_movies['Count'][:7]))
chart.render_notebook()

這里我們在可以明確為條形設置不同顏色的地方添加了另一個參數(shù)顏色set_options()?。
chart?=?ctc.Bar('Top?Movie?Geners',?width='600px',?height='200px')
chart.set_options(labels=list(df_genre_movies['Drama'][:7]),
x_label='Drama',
y_label='Count',
colors=['#FFF1C9',?'#F7B7A3',?'#EA5F89',?'#9B3192',?'#57167E',?'#47B39C','#00529B'])
chart.add_series('Geners',list(df_genre_movies['Count'][:7]))
chart.render_notebook()

繪制折線圖
我們將計算多年來發(fā)行的電影數(shù)量,并僅繪制 20 年代的電影。
data?=?df.groupby('release_year').count()['id'].reset_index().tail(16)
制作折線圖以找出 20 年代以來電影的影響。
chart?=?ctc.Line("Impact?of?Movie?over?the?years?of?20's",?width='700px',?height='200px')
chart.set_options(labels=list(data['release_year']),
??????????????????x_label='Years',
??????????????????y_label='Count',
?)
chart.add_series('Years',list(data['id']))
chart.render_notebook()

多年來,電影發(fā)行量呈指數(shù)增長。
繪制散點圖
我們看看受歡迎程度與預算的關系,并找出預算是否大于電影的受歡迎程度。
chart?=?ctc.Scatter("Helps?to?gain?insights?like?if?movies?with?higher?budget?have?high?popularity",?width='700px',?height='200px')
chart.set_options(x_label='Popularity',
??????????????????y_label='Budget',
??????????????????dot_size=1,
??????????????????colors=['#47B39C']
?)
chart.add_series('Popularity?vs?Budget',?[(z[0],?z[1])?for?z?in?list(zip(df['popularity'],df['budget']))])
chart.render_notebook()

繪制雷達圖
雷達圖也稱為蜘蛛圖,主要用于顯示多變量值。對于雷達圖,我們將獲取咖啡消費的虛擬數(shù)據(jù),其中特征為天、本周和上周。
data?=?{'Day':?['Mon',?'Tue',?'Wed',?'Thu',?'Fri',?'Sat',?'Sun'],
????????'This?week':?[12,?10,?9,?9,?10,?3,?3],?
????????'Last?week':?[15,?12,?8,?9,?11,?4,?3]
???????}
df_coffee?=?pd.DataFrame(data,?columns?=?['Day',?'This?week',?'Last?week'])
我們看看本周和上周每天咖啡消費量的雷達圖。
chart?=?ctc.Radar('Cups?of?coffee?consumed?per?day')
chart.set_options(
????labels=list(df_coffee['Day']),?
????is_show_legend=True,
????legend_pos='upRight'?
????)
chart.add_series('This?Week',?list(df_coffee['This?week']))?
chart.add_series('Last?Week',?list(df_coffee['Last?week']))
chart.render_notebook()

寫在最后
看到這里的小伙伴,相信你基本掌握了該可愛圖庫的使用了。我們看到了用 python 制作的驚人的手寫可愛圖表。這個包的一個不足是它只提供 5 個圖表。但也是我們常用的一些圖標??梢詣邮衷囋嚹?。
數(shù)據(jù)資料
kaggle:?https://www.kaggle.com/kashishrastogi/eda-of-tmbd-dataset
END
各位伙伴們好,詹帥本帥搭建了一個個人博客和小程序,匯集各種干貨和資源,也方便大家閱讀,感興趣的小伙伴請移步小程序體驗一下哦?。g迎提建議)
推薦閱讀
牛逼!Python常用數(shù)據(jù)類型的基本操作(長文系列第①篇)
牛逼!Python的判斷、循環(huán)和各種表達式(長文系列第②篇)
