07 Kargin Project

image.png

image.png

լուսանկարի հղումը, Հեղինակ՝ չգիտեմ ով ա սարքել, բայց շատ շնորհակալ եմ իրան

Open In Colab (ToDo)

Song reference - ToDo

📌 Նկարագիր (ToDo)

📚 Ամբողջական նյութը

Էլ ինչ դատա վերլուծել եթե ոչ կարգին դատա։ ՄԵՄ-ի օգնությամբ (ToDo - անուններով նշել մարդկանց, նաև ՄԵՄ-ից դուրս) կա հավաքած տվյալներ որտեղ 600+ կարգինի տեքստերն են, ու որոշ metadata` վայր, լուսավորություն, դերասաններ, լեզուներ և այլն։

Էսօրվա դասին թեթև վերլուծում ենք էդ տվյալները ու մինի search սարքում։ Կրկնում ենք pandas-ով Excel կարդալը, նախնական տվյալների մաքրման քայլերը, plotlybarplot, histogram, density plot-երը, ու նայում ենք ոնց կարանք օգտագործենք ամենալավ անուններից մեկը ունեցող գրադարանը՝ fuzzywuzzy-ն տվյալ տեքստին մոտ տեքստ պարունակող կարգին գտնելու համար։

📺 Տեսանյութեր

🔗 Հղումներ

  • Կարգին Stremlit App
  • Կարգին տելեգրամ բոտ

📚 Նյութը

  • Կարգին Stremlit App
  • Կարգին տելեգրամ բոտ

Տվյալների ներմուծում

from pathlib import Path
import pandas as pd

XLSX_PATH = Path("assets", "kargin_internal.xlsx") # os.path.join("assets", "kargin.xlsx")
XLSX_PATH
WindowsPath('assets/kargin_internal.xlsx')
df1 = pd.read_excel(XLSX_PATH)
df2 = pd.read_excel(XLSX_PATH, sheet_name=1)
df1.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 779 entries, 0 to 778
Data columns (total 17 columns):
 #   Column                        Non-Null Count  Dtype 
---  ------                        --------------  ----- 
 0   Unnamed: 0                    164 non-null    object
 1   titles                        164 non-null    object
 2   links                         164 non-null    object
 3   Շատ տարածված արտահայտություն  120 non-null    object
 4   Տեքստ                         139 non-null    object
 5   Հիմնական դերասաններ           148 non-null    object
 6   հիմնական դերասանների քանակ    137 non-null    object
 7   Դերերի անուններ               151 non-null    object
 8   Վայր                          158 non-null    object
 9   Լուսավորվածություն            158 non-null    object
 10  Լեզուներ                      155 non-null    object
 11  Արված է                       779 non-null    bool  
 12  Unnamed: 12                   779 non-null    bool  
 13  Ստուգված է                    779 non-null    bool  
 14  Unnamed: 14                   11 non-null     object
 15  Unnamed: 15                   3 non-null      object
 16  Unnamed: 16                   2 non-null      object
dtypes: bool(3), object(14)
memory usage: 87.6+ KB
df2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 990 entries, 0 to 989
Data columns (total 30 columns):
 #   Column                        Non-Null Count  Dtype  
---  ------                        --------------  -----  
 0   Unnamed: 0                    506 non-null    object 
 1   titles                        532 non-null    object 
 2   links                         531 non-null    object 
 3   Շատ տարածված արտահայտություն  435 non-null    object 
 4   Տեքստ                         461 non-null    object 
 5   Հիմնական դերասաններ           458 non-null    object 
 6   հիմնական դերասանների քանակ    449 non-null    object 
 7   Դերերի անուններ               453 non-null    object 
 8   Unnamed: 8                    453 non-null    object 
 9   Լուսավորվածություն            459 non-null    object 
 10  Լեզուներ                      458 non-null    object 
 11  Արված է                       989 non-null    float64
 12  Ստուգված է                    990 non-null    bool   
 13  Unnamed: 13                   176 non-null    object 
 14  Unnamed: 14                   124 non-null    object 
 15  Unnamed: 15                   2 non-null      object 
 16  Unnamed: 16                   0 non-null      float64
 17  Unnamed: 17                   0 non-null      float64
 18  Unnamed: 18                   0 non-null      float64
 19  Unnamed: 19                   0 non-null      float64
 20  Unnamed: 20                   0 non-null      float64
 21  Unnamed: 21                   0 non-null      float64
 22  Unnamed: 22                   0 non-null      float64
 23  Unnamed: 23                   0 non-null      float64
 24  Unnamed: 24                   0 non-null      float64
 25  Unnamed: 25                   0 non-null      float64
 26  Unnamed: 26                   0 non-null      float64
 27  Unnamed: 27                   0 non-null      float64
 28  Unnamed: 28                   2 non-null      object 
 29  Unnamed: 29                   2 non-null      float64
dtypes: bool(1), float64(14), object(15)
memory usage: 225.4+ KB
cols = ['titles', 'links', 'Շատ տարածված արտահայտություն',
       'Տեքստ', 'Հիմնական դերասաններ', 'հիմնական դերասանների քանակ',
       'Դերերի անուններ', 'Վայր', 'Լուսավորվածություն', 'Լեզուներ', 'Արված է']

df1 = df1[cols]
df1
# df2 = df2[cols]
titles links Շատ տարածված արտահայտություն Տեքստ Հիմնական դերասաններ հիմնական դերասանների քանակ Դերերի անուններ Վայր Լուսավորվածություն Լեզուներ Արված է
0 Kargin Haghordum sketch 401 (Hayko Mko) https://www.youtube.com/watch?v=2311QdBFp4o&li... NaN Աայ; Գագ ջան այ տենց դանդաղ; Գագ ջան մի քիչ դա... Մկո, ոստիկան 1 Գագ Տուն լուսավոր հայերեն True
1 Kargin Haghordum sketch 402 (Hayko Mko) https://www.youtube.com/watch?v=4SBSBGc4dcc&li... սպասի ազիզ ջան հլը մի հաշվի էս էլի ես եմ Աաաախ; ուրեմն նաի ազիզ ջան հեսա էդ պատուհանից ... Մկո, փոքր երեխա 2 Ոչ մի Տուն լուսավոր հայերեն True
2 Kargin Haghordum sketch 403 (Hayko Mko) https://www.youtube.com/watch?v=pi2au8rx0XQ&li... NaN ահա վերջ գնաաց; էէհ; արա ես ինչ անձրև սկսեց սա... Մկո, Հայկո, Մկո 3 Ոչ մի Բնության գիրկ լուսավոր հետո մութ հայերեն True
3 Kargin Haghordum sketch 419 (Hayko Mko) https://www.youtube.com/watch?v=YxcS2fTHrII&li... Թու արա էլի մտքերով ընգա Չէ Վարսիկ ջան էսօր չգնացի ասի մնամ տանը մի քիչ... Հայկո, Մկո 2 Վաչիկ Տուն լուսավոր հայերեն True
4 Kargin Haghordum sketch 421 (Hayko Mko) https://www.youtube.com/watch?v=DvZ-qwJ9C0Y&li... Ընչի հըմար Հիմա ի՞նչ, միտինգ են անու՞մ; Ուզածները ի՞նչ ա;... Հայկո, Մկո 2 Ոչ մի Ավտոմեքենա լուսավոր հայերեն True
... ... ... ... ... ... ... ... ... ... ... ...
774 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN False
775 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN False
776 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN False
777 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN False
778 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN False

779 rows × 11 columns

df2.rename(columns={"Unnamed: 8": "Վայր"}, inplace=True)
df2 = df2[cols]
df = pd.concat([df1, df2], axis=0)
df.shape
(1769, 11)

Բացակայող արժեքներ

df.isna().sum() / len(df) * 100
titles                          60.655738
links                           60.712267
Շատ տարածված արտահայտություն    68.626343
Տեքստ                           66.082533
Հիմնական դերասաններ             65.743358
հիմնական դերասանների քանակ      66.873940
Դերերի անուններ                 65.856416
Վայր                            65.460712
Լուսավորվածություն              65.121538
Լեզուներ                        65.347654
Արված է                          0.056529
dtype: float64
df.tail()
titles links Շատ տարածված արտահայտություն Տեքստ Հիմնական դերասաններ հիմնական դերասանների քանակ Դերերի անուններ Վայր Լուսավորվածություն Լեզուներ Արված է
985 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
986 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
987 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
988 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
989 NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN 0.0
df = df[df.titles.notna()]
df.isna().sum() / len(df) * 100
titles                           0.000000
links                            0.143678
Շատ տարածված արտահայտություն    20.258621
Տեքստ                           13.793103
Հիմնական դերասաններ             12.931034
հիմնական դերասանների քանակ      15.804598
Դերերի անուններ                 13.218391
Վայր                            12.212644
Լուսավորվածություն              11.350575
Լեզուներ                        11.925287
Արված է                          0.143678
dtype: float64
df.rename(columns={
    "Շատ տարածված արտահայտություն": "text_common",
    "Տեքստ": "text",
    "Հիմնական դերասաններ": "main_actors",
    "հիմնական դերասանների քանակ": "main_actors_count",
    "Դերերի անուններ": "roles_names",
    "Վայր": "location",
    "Լուսավորվածություն": "lighting",
    "Լեզուներ": "languages",
    "Արված է": "done"
}, inplace=True)
df.to_csv(Path("assets", "kargin.csv"))

Կարգինները ըստ վայրի

import plotly.express as px
# Data Cleaning
df["location"] = df["location"].str.capitalize()
place_df = df.value_counts("location", normalize=True)

place_df.drop(index="Այլ(գրեք ավելացնենք)", inplace=True)

px.bar(place_df)
Unable to display output for mime type(s): application/vnd.plotly.v1+json

Դերասանների քանակ

df["main_actors_count"].dtype
dtype('O')
def fix_main_actor(x) -> int:
    try:
        return int(x)
    except Exception:
        return 0
df["main_actors_count_int"] = df["main_actors_count"].apply(fix_main_actor)#.value_counts() # masking
df["main_actors_count_int"].describe()
count    696.000000
mean       2.280172
std        1.488743
min        0.000000
25%        2.000000
50%        2.000000
75%        3.000000
max       13.000000
Name: main_actors_count_int, dtype: float64
df_only_2_locations = df[df["location"].isin(["Տուն", "Դուրս"])]
px.histogram(df_only_2_locations, "main_actors_count_int", color="languages", barmode="stack",
             facet_row="location")
Unable to display output for mime type(s): application/vnd.plotly.v1+json

Youtube-ից ինֆո

from pytubefix import YouTube 
def get_video_info(video_id):
    yt = YouTube(video_id)
    return {
        "title": yt.title,
        "views": yt.views,
        "length": yt.length,
        "author": yt.author,
        "published_at": yt.publish_date
    }
df_small = df.head()
df_small["youtube_info"] = df_small["links"].apply(get_video_info)
df_small["youtube_info"]
0    {'title': 'Kargin Haghordum sketch 401 (Hayko ...
1    {'title': 'Kargin Haghordum sketch 402 (Hayko ...
2    {'title': 'Kargin Haghordum sketch 403 (Hayko ...
3    {'title': 'Kargin Haghordum sketch 419 (Hayko ...
4    {'title': 'Kargin Haghordum sketch 421 (Hayko ...
Name: youtube_info, dtype: object

Density plot

lang_light = df.groupby(["lighting", "languages"]).size().reset_index()
lang_light.rename(columns={0:"count"}, inplace=True)
px.density_heatmap(lang_light, "lighting", "languages", "count")
Unable to display output for mime type(s): application/vnd.plotly.v1+json

🎲 25 (07)

Flag Counter