<SYSTEM_TASK:>
Given the following text description, write Python code to implement the functionality described below step by step
<END_TASK>
<USER_TASK:>
Description:
Step2:  2T_데이터 분석을 위한 SQL 실습 (1) - WHERE IN, LIKE, JOIN
film테이블에서 2006년이나 2007년에 출시되었으면서,
PG등급이거나, G등급의 영화제목을 모두 출력하시오
Step3:  pandas
Step5:  film 테이블에서 설명에 "Boring"이라는 텍스트가 포함되면서, 렌탈 비용이 0.99인
영화 제목, 설명, 렌탈 비용을 모두 출력하세요.
Step7:  rental_rate 에 unique한 값들은 어떤게 있었을까? 0.99, 1.99, 2.99...
Step10:  film테이블에서 등급으로 그룹을 묶어서, 각 등급별 갯수, 평균 렌탈 비용을 모두 출력하세요
<ASSISTANT_TASK:>
Python Code:
import pymysql
db = pymysql.connect(
    "db.fastcamp.us",
    "root",
    "dkstncks",
    "sakila",
    charset='utf8',
)
film_df = pd.read_sql("SELECT * FROM film;", db)
film_df.head(1)
SQL_QUERY = 
    SELECT *
    FROM film
    WHERE
        (release_year = 2006 OR release_year = 2007)
        AND (rating = "PG" OR rating = "G")
    ;
pd.read_sql(SQL_QUERY, db)
SQL_QUERY = 
    SELECT COUNT(*)
    FROM film
    WHERE
        release_year IN (2006, 2007)
        AND rating IN ("PG", "G")
    ;
pd.read_sql(SQL_QUERY, db)
Explanation: 2T_데이터 분석을 위한 SQL 실습 (1) - WHERE IN, LIKE, JOIN
film테이블에서 2006년이나 2007년에 출시되었으면서,
PG등급이거나, G등급의 영화제목을 모두 출력하시오
End of explanation
is_pg_or_g = film_df.rating.isin(["PG", "G"])
is_2006_or_2007 = film_df.release_year.isin([2006, 2007])
film_df[is_pg_or_g & is_2006_or_2007]
film_df[is_pg_or_g & is_2006_or_2007].count()
Explanation: pandas
End of explanation
film_df.head(1)
SQL_QUERY = 
    SELECT title, description, rental_rate
    FROM film
    WHERE
        description LIKE "%Boring%"
        AND rental_rate = 0.99
    ;    
pd.read_sql(SQL_QUERY, db)
is_099 = film_df.rental_rate == 0.99
is_boring = film_df.description.str.contains("Boring") 
film_df[is_099 & is_boring].count()
Explanation: film 테이블에서 설명에 "Boring"이라는 텍스트가 포함되면서, 렌탈 비용이 0.99인
영화 제목, 설명, 렌탈 비용을 모두 출력하세요.
End of explanation
film_df.rental_rate.unique()
SQL_QUERY = 
    SELECT
        DISTINCT rental_rate
    FROM film
    ORDER BY rental_rate
    ;
pd.read_sql(SQL_QUERY, db)
Explanation: rental_rate 에 unique한 값들은 어떤게 있었을까? 0.99, 1.99, 2.99...
End of explanation
SQL_QUERY = 
    SELECT rating, COUNT(*) "total_films", AVG(rental_rate) "average_rental_rate"  
    FROM film
    GROUP BY rating
    ORDER BY average_rental_rate
    ;
pd.read_sql(SQL_QUERY, db)
SQL_QUERY = 
    SELECT
        rating,
        COUNT(*) "total_films",
        AVG(rental_rate) "average_rental_rate"
    FROM film
    GROUP BY
        1
    ORDER BY 3
    ;
pd.read_sql(SQL_QUERY, db)
film_df.groupby("rating").agg({
        "film_id": {"total films": np.size},
        "rental_rate": {"average_rental_rate": np.mean},
    })
Explanation: film테이블에서 등급으로 그룹을 묶어서, 각 등급별 갯수, 평균 렌탈 비용을 모두 출력하세요
End of explanation
<END_TASK>