เชี่ยวชาญแปลง Seaborn 1 แปลงในแต่ละครั้ง

Python Vizardry เป็นชุดบทความสั้นเกี่ยวกับไลบรารีการแสดงภาพต่างๆ สำหรับ Python โดยเราจะดูทีละ 1 พล็อต นี่เป็นการอ่านอย่างรวดเร็วเพื่อให้คุณเข้าใจสัญชาตญาณและโค้ด อย่าลังเลที่จะเก็บบทความเหล่านี้ไว้ใกล้ตัวเพื่อใช้เป็นสมุดบันทึกโกงสำหรับแปลงดังกล่าว

ซีบอร์น?

Seaborn เป็นไลบรารีการแสดงภาพข้อมูล Python ที่ใช้ Matplotlib Matplotlib มุ่งเน้นไปที่การจัดหาบล็อคการสร้างระดับต่ำสำหรับการสร้างแปลงเป็นหลัก Seaborn มอบอินเทอร์เฟซระดับสูงสำหรับการสร้างกราฟิกทางสถิติที่น่าสนใจและให้ข้อมูล แม้ว่า Matplotlib จะให้ตัวเลือกที่ยืดหยุ่นและปรับแต่งได้มากกว่า แต่ Seaborn มักจะใช้งานง่ายกว่า และสร้างตัวเลขที่สวยงามมากขึ้นโดยใช้โค้ดน้อยลง

คุณสมบัติ:

  • การสนับสนุนในตัวสำหรับการแสดงภาพแบบจำลองทางสถิติและความไม่แน่นอน
  • มีฟังก์ชันสำหรับการแสดงภาพชุดข้อมูลที่ซับซ้อน เช่น แผนภาพคู่ ซึ่งทำให้สำรวจความสัมพันธ์ได้ง่าย
  • ตัวเลือกจานสีขั้นสูง
  • รองรับการลงจุดในบริบทที่แตกต่างกัน (เช่น ใน Jupyter Notebook หรือบนหน้าเว็บ)

การติดตั้งและการนำเข้า Seaborn

#Installing Seaborn
pip install seaborn
#Importing Seaborn
import seaborn as sns
#Importing the library
import seaborn as sns

กำลังโหลดชุดข้อมูล

ชุดข้อมูล “mpg” เป็นชุดข้อมูลในตัวในห้องสมุด Seaborn ซึ่งมีข้อมูลเกี่ยวกับรถยนต์รุ่นต่างๆ และประสิทธิภาพการใช้เชื้อเพลิง (วัดเป็นไมล์ต่อแกลลอนหรือ mpg) ชุดข้อมูลยังมีข้อมูลเกี่ยวกับที่มาของรถ ปริมาตรกระบอกสูบ จำนวนกระบอกสูบ แรงม้า น้ำหนัก รุ่นปี และความเร่งของรถแต่ละคัน และแน่นอนว่าเป็นชื่อรถด้วย

cars = sns.load_dataset('mpg')

พล็อตกระจาย

โดยสัญชาตญาณ นี่เป็นรูปแบบการวางแผนที่ง่ายที่สุดในการทำความเข้าใจ เรามีพิกัดมากพอๆ กับที่เรามีแกน เราสามารถพล็อตทุกการสังเกตในรูปแบบของจุดบนระบบพิกัดคาร์ทีเซียน n มิติ

เป็นวิธีการสำรวจด้วยภาพว่าตัวแปรหนึ่งได้รับผลกระทบจากอีกตัวแปรหนึ่งอย่างไร หรือกล่าวอีกนัยหนึ่งคือ ความสัมพันธ์ระหว่างตัวแปรสองตัว

ตามแนวทางปฏิบัติมาตรฐาน ตัวแปรอิสระจะถูกพล็อตบนแกน x (แกนนอน) และตัวแปรตามจะถูกพล็อตบนแกน y (แกนแนวตั้ง) ทำให้ง่ายต่อการระบุสิ่งที่เกิดขึ้นกับตัวแปรตามด้วยวิธีนี้ คุณจะเห็นวิธีการ

กราฟผลลัพธ์จะแสดงว่ามีความสัมพันธ์เชิงบวก ลบ หรือไม่มีเลยระหว่างตัวแปรทั้งสอง

ซีบอร์น.scatterplot()

นี่คือพารามิเตอร์ที่เรามีเมื่อดำเนินการ scatterplot ของ Seaborn

seaborn.scatterplot(
  data=None, 
  *, 
  x=None, 
  y=None, 
  hue=None, 
  size=None, 
  style=None, 
  palette=None, 
  hue_order=None, 
  hue_norm=None, 
  sizes=None, 
  size_order=None, 
  size_norm=None, 
  markers=True, 
  style_order=None, 
  legend='auto', 
  ax=None, 
  **kwargs
)

มาเริ่มวางแผนกัน...

สำหรับแผนภาพแรกของเรา กราฟ x-y พื้นฐานของ "น้ำหนัก" และ "ประสิทธิภาพการใช้เชื้อเพลิง" ของรถควรจะเหมาะสม

sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg'
);

ตามหลักเหตุผลแล้ว เราเห็นความสัมพันธ์แบบผกผันระหว่างน้ำหนักและประสิทธิภาพการใช้เชื้อเพลิง

เรามามีอิทธิพลต่อลักษณะของพล็อตเรื่องนี้กัน เราสามารถเปลี่ยนเครื่องหมายได้โดยใช้พารามิเตอร์ marker คุณมีเครื่องหมาย 11 ประเภท ณ วันที่บทความนี้ ขณะที่เรากำลังดำเนินการอยู่ เรามากำหนดขนาดของเครื่องหมายโดยใช้พารามิเตอร์ s กันดีกว่า

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker='*', s=150
);

มาเปลี่ยนสีของมาร์กเกอร์โดยใช้รหัสฐานสิบหกที่กำหนดให้กับพารามิเตอร์ marker

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker='*', s=150, color='#FF5733'
);

เนื่องจากมีเครื่องหมายทับซ้อนกัน จึงเป็นความคิดที่ดีที่จะทำให้มีความทึบน้อยลง เราสามารถทำได้โดยใช้พารามิเตอร์ alpha ลองใช้ 0.5 alpha หรือความโปร่งใส 50%

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    marker=7, s=100, color='#581845', alpha=0.5
);

ที่นี่ สามารถใช้พารามิเตอร์ matplotlib ได้ ตามตัวอย่าง เราสามารถเพิ่ม edge_color ให้กับเครื่องหมายได้เช่นกัน

sns.scatterplot(
    data=cars, 
    x='weight', y='mpg',
    s=100, alpha=0.4, edgecolor='black'
);

มาเพิ่มสิ่งนี้กัน เราสามารถแก้ไขความหมายบางอย่างได้ เช่น hue, size และ style ดังนั้นเราจึงสามารถเพิ่มมิติเพิ่มเติมให้กับพล็อตของเรา โดยการกำหนดตัวแปรหมวดหมู่ให้กับพารามิเตอร์เหล่านี้

เพียงเพื่อไม่ให้เนื้อเรื่องดังเกินไป ฉันจะกรองรถยนต์ที่มี 4, 6 และ 8 สูบ นอกจากนี้ ให้เพิ่มตัวแปรหมวดหมู่อีกรายการหนึ่งที่ระบุว่ารถยนต์ที่มีอายุมากกว่าปี 1975 เป็นรถย้อนยุค

#Filtering to get 4,6,8 cylinder cars
cars = cars.loc[cars.cylinders.isin([4,6,8]), :]

#Labelling model_year
cars['retro'] = cars.model_year < 75

#Plot 
sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg',
    hue='origin',
    style='cylinders',
    size='retro'
);

สังเกตว่าเราสามารถเพิ่มข้อมูลจำนวนมากลงในโครงเรื่องของเราได้อย่างไรโดยไม่ต้องเขียนโค้ดมากเกินไป เราสามารถเห็นได้ว่าไม้กางเขนสอดคล้องกับรถรุ่นใหม่อย่างไร เมื่อเทียบกับจุดสำหรับรถรุ่นเก่า ขนาดของเครื่องหมายเหล่านี้บอกเราว่าจำนวนกระบอกสูบคือเครื่องยนต์ส่วนใด ในขณะที่สีบอกเราถึงประเทศต้นทาง นั่นเป็นการอัพเกรดเล็กน้อยจากที่เราวาดไว้ก่อนหน้านี้

เรามาดูจานสีที่ละเอียดกว่านี้กันดีกว่า

sns.scatterplot(
    data=cars,
    x='weight',
    y='mpg',
    hue='origin',
    style='retro',
    size='cylinders',
    palette='pastel'
);

เรามีตัวเลือกในการกำหนดลำดับของความหมายเหล่านี้โดยใช้พารามิเตอร์ hue_order, size_order และ style_order เรามาดูสิ่งนี้กัน

และในขณะที่เรากำลังดำเนินการอยู่ เรามาปรับแต่งโค้ดกันสักหน่อยเพื่อให้ข้อมูลและแกนถูกประกาศเป็นบรรทัดเดียว ตามด้วยซีแมนทิกส์ และพารามิเตอร์เพิ่มเติมใดๆ

sns.scatterplot(
    data=cars, x='weight', y='mpg',
    hue='origin', style='retro', size='cylinders',
    hue_order=['japan', 'europe', 'usa'],
    size_order=[8, 6, 4],
    style_order=[True, False],
    palette='magma'
);

มีความสุขในการวางแผน!

ข้อมูลอ้างอิงถึงเอกสาร seaborn.scatterplot อย่างเป็นทางการ