แนะนำตัว
ในโพสต์นี้ ฉันจะแสดงวิธีดำเนินการวิเคราะห์ข้อมูลด้วยการกรองสไตล์ SQL ด้วย Pandas ข้อมูลของบริษัทส่วนใหญ่จัดเก็บไว้ในฐานข้อมูลที่ต้องใช้ SQL เพื่อเรียกค้นและจัดการข้อมูลดังกล่าว ตัวอย่างเช่น มีบริษัทต่างๆ เช่น Oracle, IBM, Microsoft ที่มีฐานข้อมูลของตนเองพร้อมการใช้ SQL ของตัวเอง
นักวิทยาศาสตร์ข้อมูลต้องจัดการกับ SQL ในบางช่วงของอาชีพ เนื่องจากข้อมูลไม่ได้ถูกจัดเก็บในไฟล์ CSV เสมอไป ฉันชอบใช้ Oracle เป็นการส่วนตัว เนื่องจากข้อมูลของบริษัทของฉันส่วนใหญ่จัดเก็บไว้ใน Oracle
สถานการณ์ – 1 สมมติว่าเราได้รับมอบหมายให้ค้นหาภาพยนตร์ทั้งหมดจากชุดข้อมูลภาพยนตร์ตามเงื่อนไขด้านล่าง
- ภาษาของภาพยนตร์ควรเป็นภาษาอังกฤษ (en) หรือสเปน (es)
- ความนิยมของภาพยนตร์ต้องอยู่ระหว่าง 500 ถึง 1,000
- ต้องเปิดสถานะภาพยนตร์
- จำนวนโหวตต้องมากกว่า 5000 สำหรับสถานการณ์ข้างต้น คำสั่ง SQL จะมีลักษณะดังนี้
SELECTFROM WHEREtitle AS movie_title,original_language AS movie_language,popularityAS movie_popularity,statusAS movie_status,vote_count AS movie_vote_count movies_dataoriginal_languageIN ('en', 'es')AND status=('Released')และความนิยมระหว่าง 500 ถึง 1000AND คะแนนโหวต> 5000;ก่อน>เมื่อคุณได้เห็น SQL สำหรับข้อกำหนดแล้ว มาทำทีละขั้นตอนโดยใช้แพนด้ากัน ฉันจะแสดงให้คุณเห็นสองวิธี
วิธีที่ 1:- การจัดทำดัชนีบูลีน
1. โหลดชุดข้อมูล movies_data ไปที่ DataFrame
นำเข้าแพนด้าเป็นภาพยนตร์ pd =pd.read_csv("https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv")กำหนดตัวแปรสำหรับแต่ละเงื่อนไข
languages =[ "en" , "es" ] condition_on_languages =ภาพยนตร์ ต้นฉบับ_ภาษา isin ( ภาษา )condition_on_status =ภาพยนตร์ status =="ปล่อยแล้ว"condition_on_popularity =ภาพยนตร์ ความนิยม ระหว่าง ( 500 , 1000 )condition_on_votecount =ภาพยนตร์ คะแนนโหวต> 50003. รวมเงื่อนไขทั้งหมด (บูลีนอาร์เรย์) เข้าด้วยกัน
final_conditions =( condition_on_languages &condition_on_status &condition_on_popularity &condition_on_votecount )columns =[ "title" , "original_language" , "status" , "popularity" , "vote_count" ]# รวมหนังทั้งหมดเข้าด้วยกัน loc [ final_conditions , คอลัมน์ ]
หัวเรื่อง | ต้นฉบับ_ภาษา | สถานะ | ความนิยม | vote_count |
---|---|---|---|---|
95 ดวงดาว | th | วางจำหน่ายแล้ว | 724.247784 | 10867 |
788เดดพูล | th | วางจำหน่ายแล้ว | 514.569956 | 10995 |
วิธีที่ 2:- .query() วิธี
เมธอด .query() คือ SQL ที่รูปแบบประโยคกรองข้อมูล เงื่อนไขสามารถส่งผ่านเป็นสตริงในเมธอดนี้ได้ อย่างไรก็ตาม ชื่อคอลัมน์ต้องไม่มีช่องว่าง
หากคุณมีช่องว่างในชื่อคอลัมน์ของคุณ ให้แทนที่ด้วยเครื่องหมายขีดล่างโดยใช้ฟังก์ชันแทนที่หลาม
จากประสบการณ์ของฉัน ฉันได้เห็นเมธอด query() เมื่อนำไปใช้กับ DataFrame ที่ใหญ่กว่านั้นเร็วกว่าวิธีก่อนหน้า
นำเข้าแพนด้าเป็นภาพยนตร์ pd =pd read_csv ( "https://raw.githubusercontent.com/sasankac/TestDataSet/master/movies_data.csv" )
4.สร้างสตริงการสืบค้นและรันเมธอด
โปรดทราบว่าวิธีการ .query ใช้ไม่ได้กับสตริงที่มีเครื่องหมายอัญประกาศสามตัวที่ครอบคลุมหลายบรรทัด
final_conditions =("original_language ใน ['en','es']""and status =='ปล่อย' ""และความนิยม> 500 ""และความนิยม <1000""และคะแนนโหวต> 5000") final_result =ภาพยนตร์ . แบบสอบถาม ( final_conditions )final_result
| งบประมาณ | id | ต้นฉบับ_ภาษา | original_title | ความนิยม | release_date | รายได้ | รันไทม์ | st |
---|---|---|---|---|---|---|---|---|---|
95 | 165000000 | 157336 | th | ดวงดาว | 724.247784 | 5/11/2014 | 675120017 | 169.0 | ปล่อย |
788 | 58000000 | 293660 | th | เดดพูล | 514.569956 | 9/02/2016 | 783112979 | 108.0 | ปล่อย |
ในการเขียนโค้ดของฉัน มีหลายค่าที่ต้องตรวจสอบในอนุประโยค "ใน" ของฉันมากกว่า ดังนั้นไวยากรณ์ข้างต้นจึงไม่เหมาะที่จะใช้งาน เป็นไปได้ที่จะอ้างอิงตัวแปร Python โดยใช้สัญลักษณ์ at (@)
คุณยังสามารถสร้างค่าโดยทางโปรแกรมเป็นรายการหลามและใช้กับ (@) ได้
movie_languages =[ 'en' , 'es' ]final_conditions =("original_language ใน @movie_languages ""and status =='Released' ""and popular> 500 ""and popular <1000""and vote_count> 5000" )final_result =ภาพยนตร์ แบบสอบถาม ( final_conditions )final_result
| งบประมาณ | id | ต้นฉบับ_ภาษา | original_title | ความนิยม | release_date | รายได้ | รันไทม์ | st |
---|---|---|---|---|---|---|---|---|---|
95 | 165000000 | 157336 | th | ดวงดาว | 724.247784 | 5/11/2014 | 675120017 | 169.0 | ปล่อย |
788 | 58000000 | 293660 | th | เดดพูล | 514.569956 | 9/02/2016 | 783112979 | 108.0 | ปล่อย |