Commit 19646cd9 authored by Akerke Makhmut's avatar Akerke Makhmut

Initial commit

parents
Pipeline #7631 canceled with stages
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
# C extensions
*.so
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
# PyInstaller
# Usually these files are written by a python script from a template
# before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
*.py,cover
.hypothesis/
.pytest_cache/
# Translations
*.mo
*.pot
# Django stuff:
*.log
local_settings.py
db.sqlite3
db.sqlite3-journal
# Flask stuff:
instance/
.webassets-cache
# Scrapy stuff:
.scrapy
# Sphinx documentation
docs/_build/
# PyBuilder
target/
# Jupyter Notebook
.ipynb_checkpoints
# IPython
profile_default/
ipython_config.py
# pyenv
.python-version
# pipenv
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
# However, in case of collaboration, if having platform-specific dependencies or dependencies
# having no cross-platform support, pipenv may install dependencies that don't work, or not
# install all needed dependencies.
#Pipfile.lock
# PEP 582; used by e.g. github.com/David-OConnor/pyflow
__pypackages__/
# Celery stuff
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
# Pyre type checker
.pyre/
\ No newline at end of file
# Alem STM monthly statistics of complaint
Monthly statistics of complaint to evaluate the quality of STM models(stm-complaint-identifier).
Using library psycopg2 and pandas.
## Installation
Install all requirements using
`pip install -r requirements.txt`
Then run python script main.py
\ No newline at end of file
This diff is collapsed.
import psycopg2
import pandas as pd
def database_request(date_start, date_end):
"""
подключение к базе stm staging используя библиотеуку psycopg2
"""
conn = psycopg2.connect(
host="10.30.11.144",
port="5432",
database="stm",
user="postgres",
password="xjx6nKn4tCXmWMeC",
)
cur = conn.cursor()
"""
запрос для получения определенных колон с таблицы post и post_group
"""
query = """SELECT post.post_group_id, post.status, post.author_url, post.text,
post_group.characteristics FROM post_group
INNER JOIN post ON post_group.id = post.post_group_id
WHERE post.created_at > %s and post.created_at < %s """
cur.execute(query, (date_start, date_end))
"""
переформатирую полученный запрос в dataframe и возвращаю тот же dataframe
"""
sql_data = pd.DataFrame(cur.fetchall())
sql_data
sql_data.columns=[ x.name for x in cur.description ]
cur.close()
conn.close()
return sql_data
\ No newline at end of file
names_list = open("complainant_list.txt", "r").read().splitlines()
def is_kazakh_language(text: list) -> bool:
kaz_translit_words = """жагдай, кайырлы, деп, мен, ол, деген, менин, сол, керек,
болып, жане, жауап, жумыс, неге, жок, маган, емес, барып, ушин, шара, акша, сагат, жыл, жок, отыр, екен, бирак,
арыз, жайлы, шагым, емес, калай, куни, ауыр, ешкандай, жатыр, салеметсизбе, саламатсызба, салеметсиздерме,
саламатсыздарма, саламатсыз ба, салеметсиз бе, калай, кашан, бир, жылы, жумыс, гана, кызмет, сайын, дейн, шейн,
немесе, негизи, кайта, сиз, бир, еки, уш, алты, жети, сегиз, тогыз, жуз, мын, окиниш, окинишке, орай, сойлемеш,
жылы, шара, керек, бирак, кайырлы, болып, кайта, кашан, кызмет, жайлы, гана, орай, мен, сол, ушин, жане, неге,
таяк, жакта, журсын, бершы, кошеде, отыр, уйде, коріп, койып, мына, бармайсын, уйыхтайсын, кирсей"""
kaz_translit_words = set(kaz_translit_words.split(', '))
set_of_words = set(text)
count_of_translit_words = len(set_of_words.intersection(kaz_translit_words))
count_of_native_words, _ = _get_number_of_kz_words(text=text, threshold=0)
threshold_of_kz_words = 0.15 * len(set_of_words)
return threshold_of_kz_words < count_of_translit_words or count_of_native_words > threshold_of_kz_words
def _get_number_of_kz_words(text: list, threshold=0) -> tuple:
"""
detect words with kazakh symbols
Keywords arguments :
text -- input text
threshold -- the minimum number of kz symbols in word
return number of words with kazakh words
"""
kz_symbols = 'әіңғүұқөһ'
words_with_kz = [word for word in text if len(set(word).intersection(set(kz_symbols))) > threshold]
return len(words_with_kz), words_with_kz
\ No newline at end of file
from database import database_request
import pandas as pd
from identifier import names_list, is_kazakh_language
"""
будет две даты:
1. дата начало создание поста в базе
2. дата окончание создание поста в базе
например статистика за весь АВГУСТ
"""
date_start = '2021-08-01'
date_end = '2021-09-01'
"""
отправляем даты в функцию для получения данных с базы в виде dataframe
"""
df = database_request(date_start, date_end)
### 1 что нужно отобразить в интерфейсе
print("общее количество постов: ", len(df))
df.drop_duplicates(subset='post_group_id', inplace=True)
### 2 что нужно отобразить в интерфейсе количество уникальных постов полученные по post_group_id
print("уникальных постов:", len(df))
### 3 что нужно отобразить в интерфейсе количество неразмеченных постов
print("неразмеченных постов со статусом '-1':", len(df[df['status'] == -1]))
df['exist'] = df['author_url'].apply(lambda x : True if x.lower() in names_list else False)
### 4 что нужно отобразить в интерфейсе количество постов написанные ЛОМами
print("общее количество постов от ЛОМов", len(df[df['exist'] == True]))
### 5 что нужно отобразить в интерфейсе количество постов от ЛОМов которые были размечены
print("посты от ЛОМов без статуса '-1':", len(df[(df['exist'] == True) & (df['status'] != -1)]))
df = df[df['exist'] == False]
df['characteristics'] = df['characteristics'].astype('str')
df['lang'] = df['text'].apply(lambda x : is_kazakh_language(x))
### 6 что нужно отобразить в интерфейсе количество постов на русском языке
print("посты на русском языке:", len(df[df['lang'] == False]))
### 7 что нужно отобразить в интерфейсе количество НЕразмеченных постов на русском языке
print("количество постов на русском языке со статусом '-1'", len(df[(df['lang'] == False) & (df['status'] == -1)]))
### 8 что нужно отобразить в интерфейсе количество постов на казахском языке
print("посты на казахском языке:", len(df[df['lang'] == True]))
### 9 что нужно отобразить в интерфейсе количество НЕразмеченных постов на казахском языке
print("количество постов на казахском языке со статусом '-1'", len(df[(df['lang'] == True) & (df['status'] == -1)]))
df_ru = df[(df['lang'] == False) & (df['status'] != -1)]
df_kz = df[(df['lang'] == True) & (df['status'] != -1)]
### 10 что нужно отобразить в интерфейсе размеченные посты сгруппированные по характеристикам на русском языке
print("посты на русском по характеристике", "\n", df_ru.groupby("characteristics").count())
### 11 что нужно отобразить в интерфейсе размеченные посты сгруппированные по статусам на русском языке
print("посты на русском по статусу", "\n", df_ru.groupby("status").count())
### 12 что нужно отобразить в интерфейсе размеченные посты сгруппированные по характеристикам на казахском языке
print("посты на казахском по характеристике", "\n", df_kz.groupby("characteristics").count())
### 13 что нужно отобразить в интерфейсе размеченные посты сгруппированные по статусам на казахском языке
print("посты на казахском по статусу", "\n", df_kz.groupby("status").count())
\ No newline at end of file
psycopg2==2.8.6
pandas==0.25.3
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment